public void Should_Compute_Size_Of_Value_Type_Structure_With_Parametrized_Activator_Correctly()
        {
            var mapping = ObjectSerializationMapper.Create()
                          .FromType <ValueTypeParametrizedActivationTestClass>()
                          .PublicFields()
                          .ParametrizedActivation(ObjectActivationHint.Field("x", "X"),
                                                  ObjectActivationHint.Field("y", "Y"))
                          .Map();

            var serializationOps = ObjectSerializerCompiler.CompileSerializationOps(mapping).ToList().AsReadOnly();

            var context = ObjectSerializerInterpreter.InterpretObjectSerializationNullContext(
                typeof(ValueTypeParametrizedActivationTestClass),
                serializationOps,
                ObjectSerializerProgram.GetOpValueSerializerTypes(serializationOps).ToList().AsReadOnly()
                );

            var getSizeFromValueDelegate = ObjectSerializerInterpreter.InterpretDynamicGetSizeFromValueDelegate(
                context,
                typeof(ValueTypeParametrizedActivationTestClass),
                serializationOps
                );

            var testObject = new ValueTypeParametrizedActivationTestClass(0, 0);

            Assert.Equal(12, getSizeFromValueDelegate(context, testObject));
        }
Example #2
0
        public void Should_Deserialize_Objects_Containing_Value_Type_Fields_And_Properties_With_Parametrized_Constructor()
        {
            var mapping = ObjectSerializationMapper.Create()
                          .FromType <ValueTypePropertyAndFieldWithParametrizedConstructorTestClass>()
                          .PublicProperties()
                          .ParametrizedActivation(ObjectActivationHint.Field("x", "X"),
                                                  ObjectActivationHint.Field("y", "Y"),
                                                  ObjectActivationHint.Property("x2", "X2"),
                                                  ObjectActivationHint.Property("y2", "Y2"))
                          .Map();

            var deserializationOps = ObjectSerializerCompiler.CompileDeserializationOps(mapping).ToList().AsReadOnly();

            var context = ObjectSerializerInterpreter.InterpretObjectSerializationNullContext(
                typeof(ValueTypePropertyAndFieldWithParametrizedConstructorTestClass),
                deserializationOps,
                ObjectSerializerProgram.GetOpValueSerializerTypes(deserializationOps).ToList().AsReadOnly()
                );

            var deserializeDelegate = ObjectSerializerInterpreter.InterpretDynamicDeserializeDelegate(
                context,
                typeof(ValueTypePropertyAndFieldWithParametrizedConstructorTestClass),
                deserializationOps
                );

            var buffer = new byte[32];

            MemoryMapper.WriteInt(10, buffer, 0);
            MemoryMapper.WriteInt(20, buffer, sizeof(int));
            MemoryMapper.WriteInt(30, buffer, sizeof(int) * 2);
            MemoryMapper.WriteInt(40, buffer, sizeof(int) * 3);

            var results = (ValueTypePropertyAndFieldWithParametrizedConstructorTestClass)deserializeDelegate(context, buffer, 0);

            Assert.Equal(10, results.X);
            Assert.Equal(20, results.Y);
            Assert.Equal(30, results.X2);
            Assert.Equal(40, results.Y2);
        }