public void TestState_ShouldSerializeAndDeserializeBackCorrectly()
        {
            using var stream = new MemoryStream();
            var state      = new TestState();
            var innerState = new TestState.InnerState();

            state.TestProperty1          = "Test";
            state.TestProperty2          = 5;
            state.TestProperty3          = 0xff;
            state.PropertyTest1          = 0xabcd;
            state.PropertyTest2          = 1.23;
            state.ArrayTestProperty      = new DirtyArray <uint>(3);
            state.ArrayTestProperty[0]   = 3;
            state.ArrayTestProperty[1]   = 2;
            state.ArrayTestProperty[2]   = 1;
            state.MapTestProperty        = new DirtyMap <float, TestState.InnerState>();
            innerState.InnerTestProperty = 5000ul;
            state.MapTestProperty.Add(3.5f, innerState);

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;
            var resultingState = StateSerializer.Deserialize <TestState>(stream);

            Assert.IsTrue(state.Equals(resultingState), "Deserialized state does not match previously serialized state.");
        }
        public void Serialize_Exception_PreservesValues()
        {
            // Arrange
            ArgumentException exception;

            try
            {
                ThrowArgumentNullException();
                throw new InvalidOperationException();
            }
            catch (ArgumentNullException ex)
            {
                exception = ex;
            }
            var exceptionObject = SerializedException.FromException(exception);
            var stateSerializer = new StateSerializer();

            stateSerializer.Serialize("Foo", exceptionObject);
            stateSerializer.Dispose();
            var stateDeserializer = new StateDeserializer(stateSerializer.GetState());

            // Act
            var result = stateDeserializer.Deserialize <SerializedException>("Foo");

            // Assert
            Assert.Equal(exception.Message, result.Message);
            Assert.Equal(exception.StackTrace, result.StackTrace);
            Assert.Equal(typeof(ArgumentNullException), result.ExceptionType);
            Assert.Equal(exception.ParamName, result.AdditionalProperties["ParamName"]);
        }
        public void InvalidTestState_InvalidPropertyName_ShouldThrowExceptionOnSerialization()
        {
            using var stream = new MemoryStream();
            var state = new InvalidTestState_InvalidPropertyName();

            Assert.ThrowsException <ExceptionFreeserf>(() => StateSerializer.Serialize(stream, state, true, true),
                                                       "Invalid state does not throw exception on serialization.");
        }
Exemple #4
0
 void IXmlSerializable.WriteXml(XmlWriter writer)
 {
     for (int i = 0; i < States.Count; i++)
     {
         writer.WriteComment($" State {i} ");
         StateSerializer.Serialize(writer, States[i]);
     }
 }
        public void EmptyState_ShouldSerializeAndDeserializeBackCorrectly()
        {
            using var stream = new MemoryStream();
            var state = new TestState();

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;
            var resultingState = StateSerializer.Deserialize <TestState>(stream);

            Assert.IsTrue(state.Equals(resultingState), "Deserialized state does not match previously serialized state.");
        }
        public void InvalidTestState_UnsupportedArrayElementType_ShouldThrowExceptionOnSerialization()
        {
            using var stream = new MemoryStream();
            var state = new InvalidTestState_UnsupportedArrayElementType();

            state.Property2 = new DirtyArray <InvalidDirtyArray>();

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;

            Assert.ThrowsException <ExceptionFreeserf>(() => StateSerializer.Deserialize <InvalidTestState_UnsupportedArrayElementType>(stream),
                                                       "Invalid state does not throw exception on deserialization.");
        }
        public void ManipulatedSerializedStateHeader_ShouldThrowException()
        {
            using var stream = new MemoryStream();
            var state = new TestState();

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;
            stream.Write(new byte[1] {
                0
            }, 0, 1);                              // overwrite 'F' with 0

            Assert.ThrowsException <ExceptionFreeserf>(() => StateSerializer.Deserialize <TestState>(stream),
                                                       "Manipulated serialized state header does not throw exception on deserialization.");
        }
        public void EmptyState_ShouldDeserializeNullValuesAsEmptyValues()
        {
            using var stream = new MemoryStream();
            var state = new TestState();

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;
            var resultingState = StateSerializer.Deserialize <TestState>(stream);

            Assert.IsTrue(
                state.TestProperty1 == null && resultingState.TestProperty1 == "" &&
                state.ArrayTestProperty == null && resultingState.ArrayTestProperty != null && resultingState.ArrayTestProperty.Length == 0 &&
                state.MapTestProperty == null && resultingState.MapTestProperty != null && resultingState.MapTestProperty.Count == 0,
                "Deserialized state does not convert null values to empty values.");
        }
        public void Serialize_Value_Ok(object value)
        {
            // Arrange
            var stateSerializer = new StateSerializer();

            stateSerializer.Serialize("foo", value);
            stateSerializer.Dispose();
            var stateDeserializer = new StateDeserializer(stateSerializer.GetState());

            // Act
            var result = stateDeserializer.Deserialize("foo", value.GetType());

            // Assert
            Assert.Equal(value, result);
        }
        public void FlagState_SerializeAndDeserialize_ShouldNotThrowException()
        {
            using var stream = new MemoryStream();
            var state = new FlagState();

            try
            {
                StateSerializer.Serialize(stream, state, true, true);
                stream.Position = 0;
                StateSerializer.Deserialize <FlagState>(stream);
            }
            catch (Exception ex)
            {
                Assert.Fail($"Exception of type ({ex.GetType().Name}) thrown: {ex.Message}");
            }
        }
        public void Serialize_Object_PreservesData()
        {
            // Arrange
            var stateSerializer  = new StateSerializer();
            var serializedObject = new SerializedObject(new CustomData("Foo"));

            stateSerializer.Serialize("Foo", serializedObject);
            stateSerializer.Dispose();
            var stateDeserializer = new StateDeserializer(stateSerializer.GetState());

            // Act
            var result = stateDeserializer.Deserialize <SerializedObject>("Foo");

            // Assert
            Assert.Equal("Foo", result.Values["Value"]);
        }
        public void TestState_IgnoreAttribute_ShouldNotBeSerialized()
        {
            using var stream = new MemoryStream();
            var state = new TestState_IgnoreAttribute();

            state.Serialized    = 100;
            state.NotSerialized = 100;

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;
            var resultingState = StateSerializer.Deserialize <TestState_IgnoreAttribute>(stream);

            Assert.IsTrue(state.Serialized == resultingState.Serialized,
                          "Public field in DataClass without Ignore attribute is not serialized.");
            Assert.IsTrue(resultingState.NotSerialized == 0,
                          "Public field in DataClass with Ignore attribute is serialized.");
        }
        public void TestState_DataAttribute_ShouldBeSerialized()
        {
            using var stream = new MemoryStream();
            var state = new TestState_DataAttribute();

            state.Serialized    = 100;
            state.NotSerialized = 100;

            StateSerializer.Serialize(stream, state, true, true);
            stream.Position = 0;
            var resultingState = new TestState_DataAttribute();

            StateSerializer.Deserialize(resultingState, stream);

            Assert.IsTrue(state.Serialized == resultingState.Serialized,
                          "Public field with Data attribute is not serialized.");
            Assert.IsTrue(resultingState.NotSerialized == 0,
                          "Public field without Data attribute is serialized.");
        }
Exemple #14
0
        public byte[] NextFrame()
        {
            if (_level == null)
            {
                throw new NotSupportedException("Level not ready");
            }
            if (_level.Mode == LevelMode.Uninit)
            {
                throw new InvalidOperationException("Level is not initialized");
            }
            if (_level.Mode != LevelMode.Running)
            {
                throw new InvalidOperationException("Level is finished");
            }

            LevelState state = _level.NextState();

            return(_serializer.Serialize(state));
        }
Exemple #15
0
 public string Serialize()
 {
     return(StateSerializer.Serialize(this));
 }