Example #1
0
        public void ContractCollection_XmlRoundTrip()
        {
            var before = new ContractCollection();

            before.GetOrAddReadContract(typeof(Person));
            before.GetOrAddWriteContract(typeof(Person));
            before.GetOrAddReadContract(typeof(Wrapper <Person>));
            before.GetOrAddReadContract(typeof(EnumAbc));
            before.GetOrAddWriteContract(typeof(EnumAbc));
            before.GetOrAddReadContract(typeof(Wrapper <EnumAbc>));
            before.GetOrAddReadContract(typeof(Union <int, string, Person, EnumAbcd>));
            before.GetOrAddWriteContract(typeof(Union <int, string, Person, EnumAbcd>));

            Assert.Equal(8, before.Contracts.OfType <ByRefContract>().Count());

            before.UpdateByRefIds();

            var xml = before.ToXml();

            const string expectedXml = @"<Contracts>
  <ComplexRead Id=""Contract1"">
    <Field Name=""age"" Contract=""Int32"" IsRequired=""true"" />
    <Field Name=""name"" Contract=""String"" IsRequired=""true"" />
  </ComplexRead>
  <ComplexWrite Id=""Contract2"">
    <Field Name=""Age"" Contract=""Int32"" />
    <Field Name=""Name"" Contract=""String"" />
  </ComplexWrite>
  <ComplexRead Id=""Contract3"">
    <Field Name=""value"" Contract=""#Contract1"" IsRequired=""true"" />
  </ComplexRead>
  <Enum Id=""Contract4"">
    <Member Name=""A"" />
    <Member Name=""B"" />
    <Member Name=""C"" />
  </Enum>
  <ComplexRead Id=""Contract5"">
    <Field Name=""value"" Contract=""#Contract4"" IsRequired=""true"" />
  </ComplexRead>
  <Enum Id=""Contract6"">
    <Member Name=""A"" />
    <Member Name=""B"" />
    <Member Name=""C"" />
    <Member Name=""D"" />
  </Enum>
  <UnionRead Id=""Contract7"">
    <Member Id=""Dasher.Tests.EnumAbcd"" Contract=""#Contract6"" />
    <Member Id=""Dasher.Tests.Person"" Contract=""#Contract1"" />
    <Member Id=""Int32"" Contract=""Int32"" />
    <Member Id=""String"" Contract=""String"" />
  </UnionRead>
  <UnionWrite Id=""Contract8"">
    <Member Id=""Dasher.Tests.EnumAbcd"" Contract=""#Contract6"" />
    <Member Id=""Dasher.Tests.Person"" Contract=""#Contract2"" />
    <Member Id=""Int32"" Contract=""Int32"" />
    <Member Id=""String"" Contract=""String"" />
  </UnionWrite>
</Contracts>";

            var actualXml = xml.ToString();

            _output.WriteLine(actualXml);

            Assert.Equal(expectedXml, actualXml, new SelectiveStringComparer());

            Assert.Equal(8, xml.Elements().Count());

            var after = ContractCollection.FromXml(xml);

            Assert.True(new HashSet <Contract>(before.Contracts).SetEquals(new HashSet <Contract>(after.Contracts)));

            Assert.Equal(before.Contracts.Count, after.Contracts.Count);

            foreach (var b in before.Contracts)
            {
                Assert.Equal(1, after.Contracts.Count(s => s.Equals(b)));
            }
            foreach (var a in after.Contracts)
            {
                Assert.Equal(1, before.Contracts.Count(s => s.Equals(a)));
            }
        }