1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Edm.Serialization
{
using System.Collections.Generic;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Core.Metadata.Edm.Provider;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using Moq;
using Xunit;
public class EdmSerializationVisitorTests
{
[Fact]
public void EdmSerializationVisitor_writes_extended_annotations_for_entity_set()
{
var entityType = new EntityType("MyEntity", "Model", DataSpace.SSpace);
var entitySet = new EntitySet("Entities", null, "Entities", null, entityType);
entitySet.AddMetadataProperties(
CreateMetadataProperties(new[] { "http://tempuri.org:extended-property" }));
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
new EdmSerializationVisitor(writer, 3.0).VisitEdmEntitySet(entitySet);
}
var xml = XDocument.Parse(sb.ToString());
Assert.Equal(
"ytreporp-dednetxe:gro.irupmet//:ptth",
(string)xml.Root.Attribute("{http://tempuri.org}extended-property"));
}
[Fact]
public void EdmSerializationVisitor_does_not_write_incorrectly_named_extended_properties()
{
var incorrectNames =
new[]
{
"extended-property-without-namespace",
":extended-property-starts-with-colon",
"extended-property-ends-with-colon:"
};
var entityType = new EntityType("MyEntity", "Model", DataSpace.SSpace);
var entitySet = new EntitySet("Entities", null, "Entities", null, entityType);
entitySet.AddMetadataProperties(CreateMetadataProperties(incorrectNames));
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
new EdmSerializationVisitor(writer, 3.0).VisitEdmEntitySet(entitySet);
}
var xml = XDocument.Parse(sb.ToString());
Assert.False(xml.Root.Attributes().Any(a => incorrectNames.Contains(a.Name.LocalName)));
Assert.False(xml.Root.Attributes().Any(a => a.Name.Namespace != XNamespace.None));
}
private static List<MetadataProperty> CreateMetadataProperties(IEnumerable<string> names)
{
var edmString = EdmProviderManifest.Instance.GetPrimitiveType(PrimitiveTypeKind.String);
var metadataProperties = new List<MetadataProperty>();
foreach (var name in names)
{
metadataProperties.Add(
new MetadataProperty(
name,
TypeUsage.CreateDefaultTypeUsage(edmString),
new string(name.Reverse().ToArray())));
}
return metadataProperties;
}
[Fact]
public void EdmSerializationVisitor_writes_defining_query_for_entity_set()
{
var entityType = new EntityType("MyEntity", "Model", DataSpace.SSpace);
var entitySet = new EntitySet("Entities", null, "Entities", "Defining Query", entityType);
var sb = new StringBuilder();
using (var writer = XmlWriter.Create(sb))
{
new EdmSerializationVisitor(writer, 3.0).VisitEdmEntitySet(entitySet);
}
var xml = XDocument.Parse(sb.ToString());
Assert.Equal(
"Defining Query",
(string)xml.Root.Element("DefiningQuery"));
}
[Fact]
public void VisitEdmFunction_should_write_start_and_end_elements()
{
var schemaWriterMock = new Mock<EdmXmlSchemaWriter>();
var function = new EdmFunction();
new EdmSerializationVisitor(schemaWriterMock.Object).VisitEdmFunction(function);
schemaWriterMock.Verify(sw => sw.WriteFunctionElementHeader(function), Times.Once());
schemaWriterMock.Verify(sw => sw.WriteEndElement(), Times.Once());
}
[Fact]
public void VisitFunctionParameter_should_write_start_and_end_elements()
{
var schemaWriterMock = new Mock<EdmXmlSchemaWriter>();
var functionParameter = new FunctionParameter();
new EdmSerializationVisitor(schemaWriterMock.Object).VisitFunctionParameter(functionParameter);
schemaWriterMock.Verify(sw => sw.WriteFunctionParameterHeader(functionParameter), Times.Once());
schemaWriterMock.Verify(sw => sw.WriteEndElement(), Times.Once());
}
}
}
|