public void Verify() { const string target = "I am Attribute, Hear me roar! #rawr!"; var configuration = new ConfigurationContainer(); configuration.Type <SimpleSubject>() .Member(x => x.Message) .Attribute(x => x == target); var support = new SerializationSupport(configuration); var expected = new SimpleSubject { Message = "Hello World!", Number = 6776 }; var content = support.Assert(expected, @"<?xml version=""1.0"" encoding=""utf-8""?><AttributeSpecificationTests-SimpleSubject xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ContentModel.Members;assembly=ExtendedXmlSerializer.Tests""><Message>Hello World!</Message><Number>6776</Number></AttributeSpecificationTests-SimpleSubject>"); Assert.Equal(expected.Message, content.Message); Assert.Equal(expected.Number, content.Number); expected.Message = target; var attributes = support.Assert(expected, @"<?xml version=""1.0"" encoding=""utf-8""?><AttributeSpecificationTests-SimpleSubject Message=""I am Attribute, Hear me roar! #rawr!"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ContentModel.Members;assembly=ExtendedXmlSerializer.Tests""><Number>6776</Number></AttributeSpecificationTests-SimpleSubject>"); Assert.Equal(expected.Message, attributes.Message); Assert.Equal(expected.Number, attributes.Number); }
public void ComplexList() { var container = new ConfigurationContainer(); container.Type <TestClassReference>() .EnableReferences(x => x.Id); container.EnableDeferredReferences(); DoTest(new SerializationSupport(container)); }
public void ComplexList() { var container = new ConfigurationContainer(); container.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(container); var instance = new TestClassReferenceWithList { Parent = new TestClassReference { Id = 1 } }; var other = new TestClassReference { Id = 2, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent }; instance.All = new List <IReference> { new TestClassReference { Id = 3, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent }, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other }, other, instance.Parent }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassReferenceWithList xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><Parent xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""1"" /><All><Capacity>4</Capacity><TestClassReference Id=""3""><ObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /></TestClassReference><TestClassReference Id=""4""><ObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""2""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></ObjectA><ReferenceToObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""2"" /></TestClassReference><TestClassReference xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:entity=""2"" /><TestClassReference xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:entity=""1"" /></All></TestClassReferenceWithList>"); Assert.NotNull(actual.Parent); var list = actual.All.Cast <TestClassReference>() .ToList(); Assert.Same(actual.Parent, list[0] .ObjectA); Assert.Same(actual.Parent, list[0] .ReferenceToObjectA); Assert.Same(list[1] .ObjectA, list[1] .ReferenceToObjectA); Assert.Same(list[1] .ObjectA.To <TestClassReference>() .ObjectA, list[1] .ObjectA.To <TestClassReference>() .ReferenceToObjectA); Assert.Same(actual.Parent, list[1] .ObjectA.To <TestClassReference>() .ObjectA); Assert.Same(list[2], list[1] .ObjectA); Assert.Same(actual.Parent, list[3]); }
public void VerifyNoneRemovesConverter() { var container = new ConfigurationContainer(); var extension = container.Root.With <ConvertersExtension>(); extension.Converters.Count(x => x.IsSatisfiedBy(typeof(DateTime).GetTypeInfo())) .Should() .BeGreaterOrEqualTo(1); container.Type <DateTime>().Register().Converter().None(); extension.Converters.Count(x => x.IsSatisfiedBy(typeof(DateTime).GetTypeInfo())) .Should() .Be(0); }
public void Ignore() { var configuration = new ConfigurationContainer(); configuration.Type <Subject>() .Member(x => x.Property2) .Ignore(); var support = new SerializationSupport(configuration); var instance = new Subject { Property1 = "Hello World!", Property2 = 1000, Property3 = DateTime.Now }; var actual = support.Cycle(instance); Assert.NotEqual(instance.Property2, actual.Property2); }
public void Include() { var serializer = new ConfigurationContainer(); serializer.Type <Subject>().Member(x => x.Property2).Include(); var support = new SerializationSupport(serializer); var instance = new Subject { Property1 = "Hello World!", Property2 = 1000, Property3 = DateTime.Now }; var actual = support.Cycle(instance); Assert.NotEqual(instance.Property1, actual.Property1); Assert.Equal(instance.Property2, actual.Property2); Assert.NotEqual(instance.Property3, actual.Property3); }
public void VerifyAdditional() { var container = new Shared.Issue517.ContainerNameSpace.Container(); for (int i = 0; i < 1; i++) { container.Childrens.Add(new Shared.Issue517.ItemNameSpace.Item()); } IConfigurationContainer config = new ConfigurationContainer(); config.Type <Shared.Issue517.ContainerNameSpace.Container>().AddMigration(new EmptyMigration()); var serializer = config.Create().ForTesting(); serializer.Cycle(container).Should().BeEquivalentTo(container); }
public void List() { var container = new ConfigurationContainer(); container.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(container); var parent = new TestClassReference { Id = 1 }; var other = new TestClassReference { Id = 2, ObjectA = parent, ReferenceToObjectA = parent }; var instance = new List <IReference> { new TestClassReference { Id = 3, ObjectA = parent, ReferenceToObjectA = parent }, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other }, other, parent }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><List xmlns:ns1=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests"" xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:arguments=""ns1:IReference"" xmlns=""https://extendedxmlserializer.github.io/system""><Capacity>4</Capacity><ns1:TestClassReference Id=""3""><ObjectA exs:type=""ns1:TestClassReference"" Id=""1"" /><ReferenceToObjectA exs:type=""ns1:TestClassReference"" exs:entity=""1"" /></ns1:TestClassReference><ns1:TestClassReference Id=""4""><ObjectA exs:type=""ns1:TestClassReference"" Id=""2""><ObjectA exs:type=""ns1:TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""ns1:TestClassReference"" exs:entity=""1"" /></ObjectA><ReferenceToObjectA exs:type=""ns1:TestClassReference"" exs:entity=""2"" /></ns1:TestClassReference><ns1:TestClassReference exs:entity=""2"" /><ns1:TestClassReference exs:entity=""1"" /></List>"); Assert.Same(actual[0] .To <TestClassReference>() .ObjectA, actual[0] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(actual[1] .To <TestClassReference>() .ObjectA, actual[1] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(actual[2], actual[1] .To <TestClassReference>() .ObjectA); Assert.Same(actual[3], actual[0] .To <TestClassReference>() .ObjectA); }
public void GlobalOnlyConfiguredProperties() { var container = new ConfigurationContainer(); var type = container.Type <Subject>(); type.Member(x => x.Property2); type.Member(x => x.Property3); type.IncludeConfiguredMembers(); var support = new SerializationSupport(container); var instance = new Subject { Property1 = "Hello World!", Property2 = 1000, Property3 = DateTime.Now }; var actual = support.Cycle(instance); Assert.NotEqual(instance.Property1, actual.Property1); Assert.Equal(instance.Property2, actual.Property2); Assert.Equal(instance.Property3, actual.Property3); }
public void MemberInfoConfiguration() { var container = new ConfigurationContainer(); var type = container.Type <Subject>(); var memberInfo = typeof(Subject).GetProperty(nameof(Subject.Property1)); type.Member(memberInfo, c => c.EmitWhen(v => (string)v == "ABC")); memberInfo = typeof(Subject).GetProperty(nameof(Subject.Property2)); type.Member(memberInfo, c => c.EmitWhenInstance(subject => subject.Property2 == 3)); var support = new SerializationSupport(container); var instance = new Subject { Property1 = "AB", Property2 = 1000, Property3 = DateTime.Now }; var actual = support.Cycle(instance); Assert.NotEqual(instance.Property1, actual.Property1); Assert.NotEqual(instance.Property2, actual.Property2); Assert.Equal(instance.Property3, actual.Property3); }
public void SpecificChildInheritance() { var first = new ChildClass { Name = "Key" }; var instance = new Container { First = first, Second = first }; var container = new ConfigurationContainer(); container.Type <ChildClass>() .EnableReferences(x => x.Name); var support = new SerializationSupport(container); var actual = support.Cycle(instance); actual.First.Should() .NotBeNull() .And.BeOfType <ChildClass>() .And.BeSameAs(actual.Second); }
public void ConfigureNameForType() { var configuration = new ConfigurationContainer(); configuration.Type <SimpleTestSubject>().Name(Testclass); var names = configuration.Root.Find <TypeNamesExtension>() .Names; Assert.Equal(names[typeof(SimpleTestSubject).GetTypeInfo()], Testclass); Assert.False(names.ContainsKey(typeof(TestClassPrimitiveTypesNullable).GetTypeInfo())); var support = new SerializationSupport(configuration); var expected = new SimpleTestSubject { BasicProperty = "Hello World!" }; var actual = support.Assert(expected, @"<?xml version=""1.0"" encoding=""utf-8""?><UpdatedTestClassName xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.Configuration;assembly=ExtendedXmlSerializer.Tests""><BasicProperty>Hello World!</BasicProperty></UpdatedTestClassName>"); Assert.Equal(expected.BasicProperty, actual.BasicProperty); }
public void Verify() { var container = new ConfigurationContainer(); container.Type <Subject>() .AddMigration(new PropertyMigration("OldPropertyName", nameof(Subject.PropertyName))); var support = new SerializationSupport(container); var instance = new Subject { PropertyName = "Hello World!" }; support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><MigrationsExtensionTests-Subject xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:version=""1"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ExtensionModel.Xml;assembly=ExtendedXmlSerializer.Tests""><PropertyName>Hello World!</PropertyName></MigrationsExtensionTests-Subject>"); var data = @"<?xml version=""1.0"" encoding=""utf-8""?><MigrationsExtensionTests-Subject xmlns:exs=""https://extendedxmlserializer.github.io/v2"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ExtensionModel.Xml;assembly=ExtendedXmlSerializer.Tests""><OldPropertyName>Hello World from Old Property!</OldPropertyName></MigrationsExtensionTests-Subject>"; var migrated = support.Deserialize <Subject>(data); Assert.NotNull(migrated); Assert.Equal("Hello World from Old Property!", migrated.PropertyName); }
public void SimpleEntity() { var configuration = new ConfigurationContainer(); configuration.Type <Subject>() .Member(x => x.Id) .Identity(); var support = new SerializationSupport(configuration); var expected = new Subject { Id = Guid, PropertyName = "Primary Root" }; expected.Self = expected; var actual = support.Assert(expected, @"<?xml version=""1.0"" encoding=""utf-8""?><ReferencesExtensionTests-Subject Id=""6dbb618f-dbbd-4909-9644-a1d955f06249"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.ExtensionModel.References;assembly=ExtendedXmlSerializer.Tests""><Self xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:entity=""6dbb618f-dbbd-4909-9644-a1d955f06249"" /><PropertyName>Primary Root</PropertyName></ReferencesExtensionTests-Subject>"); Assert.NotNull(actual.Self); Assert.Same(actual, actual.Self); }
public void ComplexInstance() { var configuration = new ConfigurationContainer(); configuration.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(configuration); var instance = new TestClassReference { Id = 1, ObjectA = new TestClassReference { Id = 2 } }; instance.CyclicReference = instance; instance.ReferenceToObjectA = instance.ObjectA; instance.Lists = new List <IReference> { new TestClassReference { Id = 3 }, new TestClassReference { Id = 4 } }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassReference Id=""1"" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><CyclicReference xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /><ObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""2"" /><ReferenceToObjectA xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""2"" /><Lists><Capacity>4</Capacity><TestClassReference Id=""3"" /><TestClassReference Id=""4"" /></Lists></TestClassReference>"); Assert.NotNull(actual.ObjectA); Assert.Same(instance, instance.CyclicReference); Assert.Same(instance.ObjectA, instance.ReferenceToObjectA); Assert.Equal(3, instance.Lists.First() .Id); Assert.Equal(4, instance.Lists.Last() .Id); }
public void ConfigureEncryptDifferenetOrder() { var container = new ConfigurationContainer(); container.UseAutoFormatting(); Assert.Null(container.Root.Find <EncryptionExtension>()); container.Type <TestClassWithEncryptedData>() .Member(p => p.Password, x => x.Encrypt()) .Member(p => p.Salary) .Encrypt(); container.UseEncryptionAlgorithm(); var extension = container.Root.Find <EncryptionExtension>(); Assert.NotNull(extension); var type = container.GetTypeConfiguration(typeof(TestClassWithEncryptedData)); Assert.NotNull(type); var member = type.Member(nameof(TestClassWithEncryptedData.Salary)); var property = ((ISource <MemberInfo>)member).Get(); Assert.NotNull(property); Assert.Contains(property, extension.Registered); const int salary = 6776; var instance = new TestClassWithEncryptedData { Salary = salary }; var actual = new SerializationSupport(container).Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassWithEncryptedData Salary=""Njc3Ng=="" xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests"" />"); Assert.Equal(salary, actual.Salary); }
public void Dictionary() { var container = new ConfigurationContainer(); container.Type <TestClassReference>() .EnableReferences(x => x.Id); var support = new SerializationSupport(container); var instance = new TestClassReferenceWithDictionary { Parent = new TestClassReference { Id = 1, Name = "Hello World, this is a Name!" } }; var other = new TestClassReference { Id = 2, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent }; instance.All = new Dictionary <int, IReference> { { 3, new TestClassReference { Id = 3, ObjectA = instance.Parent, ReferenceToObjectA = instance.Parent } }, { 4, new TestClassReference { Id = 4, ObjectA = other, ReferenceToObjectA = other } }, { 2, other }, { 1, instance.Parent } }; var actual = support.Assert(instance, @"<?xml version=""1.0"" encoding=""utf-8""?><TestClassReferenceWithDictionary xmlns=""clr-namespace:ExtendedXmlSerializer.Tests.TestObject;assembly=ExtendedXmlSerializer.Tests""><Parent xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""1""><Name>Hello World, this is a Name!</Name></Parent><All><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>3</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""3""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></Value></Item><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>4</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" Id=""4""><ObjectA exs:type=""TestClassReference"" Id=""2""><ObjectA exs:type=""TestClassReference"" exs:entity=""1"" /><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""1"" /></ObjectA><ReferenceToObjectA exs:type=""TestClassReference"" exs:entity=""2"" /></Value></Item><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>2</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""2"" /></Item><Item xmlns=""https://extendedxmlserializer.github.io/system""><Key>1</Key><Value xmlns:exs=""https://extendedxmlserializer.github.io/v2"" exs:type=""TestClassReference"" exs:entity=""1"" /></Item></All></TestClassReferenceWithDictionary>"); Assert.NotNull(actual.Parent); var list = actual.All; Assert.Same(actual.Parent, list[3] .To <TestClassReference>() .ObjectA); Assert.Same(actual.Parent, list[3] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(list[4] .To <TestClassReference>() .ObjectA, list[4] .To <TestClassReference>() .ReferenceToObjectA); Assert.Same(list[4] .To <TestClassReference>() .ObjectA.To <TestClassReference>() .ObjectA, actual.Parent); Assert.Same(list[4] .To <TestClassReference>() .ObjectA, list[2]); Assert.Same(actual.Parent, list[1]); }
public void Examples() { new ConfigurationContainer().EnableDeferredReferences() .Type <IElement>().EnableReferences(p => p.Id) .Type <Section>().EnableReferences(p => p.Id) .Type <Building>().EnableReferences(p => p.Id) .Create(); new ConfigurationContainer().Type <Section>() .Name("person") .Member(p => p.IsSelected).Name("Selected").Identity().Order(2) .Member(p => p.IsEmpty).Name("Empty") .Create(); var serializer = new ConfigurationContainer() .Type <Person>() // Configuration of Person class .Member(p => p.Password) // First member .Name("P") .Encrypt() .Member(p => p.Name) // Second member .Name("T") .UseEncryptionAlgorithm(new CustomEncryption()) .Type <TestClass>() // Configuration of another class .CustomSerializer(new TestClassSerializer()) .Create(); new ConfigurationContainer() .Type <Person>() .Member(p => p.Name).Identity() .OnlyConfiguredProperties() .Create(); new ConfigurationContainer().Type <Person>() .AddMigration(element => {}) .OnlyConfiguredProperties() .Create(); new ConfigurationContainer().Type <Person>() .OnlyConfiguredProperties() .AddMigration(element => { }) .Create(); new ConfigurationContainer() .Type <Person>() .Member(p => p.Name).Identity() .OnlyConfiguredProperties() .Create(); new ConfigurationContainer() .Type <Person>() .OnlyConfiguredProperties() .Member(p => p.Name).Identity() .Create(); new ConfigurationContainer().Type <Person>() .CustomSerializer((writer, person) => {}, element => new Person()) .EnableReferences(p => p.Name); new ConfigurationContainer().Type <Person>() .EnableReferences(p => p.Name) .CustomSerializer((writer, person) => { }, element => new Person()); new ConfigurationContainer().Type <Person>() .CustomSerializer((writer, person) => { }, element => new Person()) .Member(p => p.Name).Identity(); new ConfigurationContainer().Type <Person>() .Member(p => p.Name).Identity() .CustomSerializer((writer, person) => { }, element => new Person()); new ConfigurationContainer().Type <Person>() .AddMigration(element => { }) .Member(p => p.Name).Identity(); new ConfigurationContainer().Type <Person>() .Member(p => p.Name) .Identity() .AddMigration(element => {}); var config = new ConfigurationContainer(); config.EnableDeferredReferences(); config.Type <Section>().Member(p => p.Id).Name("Identity"); config.Type <Section>().EnableReferences(p => p.Id); var exs = config.Create(); }