public void SecondaryTypes()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(SecondaryTypeClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new SecondaryTypeClass {
                Id = Guid.NewGuid()
            };

            var msg  = serializer.SerializeToMsg(obj1);
            var obj2 = (SecondaryTypeClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.Equal(obj1.Id, obj2.Id);
        }
        public void SimpleExample()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(SimpleExampleClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new SimpleExampleClass {
                Name = "Dennis", Age = 37
            };

            var msg  = serializer.SerializeToMsg(obj1);
            var obj2 = (SimpleExampleClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.Equal(obj1.Name, obj2.Name);
            Assert.Equal(obj1.Age, obj2.Age);
        }
        public void ListOfArrays()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(ListOfArraysClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new ListOfArraysClass();

            obj1.List = new List <string[]>();
            obj1.List.Add(new string[] { "Bob", "Mavis" });

            var msg  = serializer.SerializeToMsg(obj1);
            var obj2 = (ListOfArraysClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.NotSame(obj1.List[0], obj2.List[0]);
            Assert.Equal(obj1.List[0], obj2.List[0]);
        }
        public void ArrayOfSubObjects()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(ArrayOfObjectsClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new ArrayOfObjectsClass();

            obj1.Subs = new SimpleExampleClass[] { new SimpleExampleClass {
                                                       Name = "Bob", Age = 21
                                                   } };

            var msg  = serializer.SerializeToMsg(obj1);
            var obj2 = (ArrayOfObjectsClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.NotSame(obj1.Subs[0], obj2.Subs[0]);
            Assert.Equal(obj1.Subs[0].Name, obj2.Subs[0].Name);
        }
        public void StaticAndTransient()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(StaticTransientClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            StaticTransientClass.Static = 17;
            var obj1 = new StaticTransientClass {
                Transient = "Hello"
            };

            var msg = serializer.SerializeToMsg(obj1);

            StaticTransientClass.Static = 19;
            var obj2 = (StaticTransientClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.Equal(null, obj2.Transient);
            Assert.Equal(19, StaticTransientClass.Static);
        }
        public void RenamingFields()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(RenameFieldClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new RenameFieldClass {
                Name = "Albert", Age = 72
            };

            var msg = serializer.SerializeToMsg(obj1);

            Assert.Null(msg.GetString("Name"));
            Assert.Equal("Albert", msg.GetString("nom"));
            Assert.Equal(72, msg.GetInt("Age"));

            var obj2 = (RenameFieldClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.Equal(obj1.Name, obj2.Name);
            Assert.Equal(obj1.Age, obj2.Age);
        }
        public void PrimitiveLists()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(PrimitiveListClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new PrimitiveListClass();

            obj1.Names.Add("Fred");
            obj1.Names.Add("Sheila");

            var msg = serializer.SerializeToMsg(obj1);

            // Check the serialized format
            Assert.Equal(FudgeMsgFieldType.Instance, msg.GetByName("Names").Type);
            var listMsg = msg.GetMessage("Names");

            Assert.Equal("FudgeMsg[ => Fred,  => Sheila]", listMsg.ToString());

            var obj2 = (PrimitiveListClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.Equal(obj1.Names, obj2.Names);
        }
        public void Dictionaries()
        {
            Assert.True(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(DictionaryClass)));

            var serializer = new FudgeSerializer(context);      // We're relying on it auto-discovering the type surrogate

            var obj1 = new DictionaryClass();

            obj1.Map         = new Dictionary <string, SimpleExampleClass>();
            obj1.Map["Fred"] = new SimpleExampleClass {
                Name = "Fred", Age = 23
            };
            obj1.Map["Jemima"] = new SimpleExampleClass {
                Name = "Jemima", Age = 17
            };

            var msg  = serializer.SerializeToMsg(obj1);
            var obj2 = (DictionaryClass)serializer.Deserialize(msg);

            Assert.NotSame(obj1, obj2);
            Assert.NotSame(obj1.Map, obj2.Map);
            Assert.Equal(obj1.Map["Fred"], obj2.Map["Fred"]);
            Assert.Equal(obj1.Map["Jemima"], obj2.Map["Jemima"]);
        }
 public void UnhandleableCases()
 {
     Assert.False(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(NoDefaultConstructorClass)));
     Assert.False(PropertyBasedSerializationSurrogate.CanHandle(typeDataCache, FudgeFieldNameConvention.Identity, typeof(NoSetterClass)));
 }