using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TweetDuck.Data.Serialization;

namespace UnitTests.Data{
    [TestClass]
    public class TestFileSerializer{
        private enum TestEnum{
            A, B, C, D, E
        }

        private class SerializationTestBasic : ISerializedObject{
            public bool TestBool { get; set; }
            public int TestInt { get; set; }
            public string TestString { get; set; }
            public string TestStringNull { get; set; }
            public TestEnum TestEnum { get; set; }

            bool ISerializedObject.OnReadUnknownProperty(string property, string value){
                return false;
            }
        }

        [TestMethod]
        public void TestBasicWriteRead(){
            FileSerializer<SerializationTestBasic> serializer = new FileSerializer<SerializationTestBasic>();
            
            SerializationTestBasic write = new SerializationTestBasic{
                TestBool = true,
                TestInt = -100,
                TestString = "abc"+Environment.NewLine+"def",
                TestStringNull = null,
                TestEnum = TestEnum.D
            };

            serializer.Write("serialized_basic", write);

            Assert.IsTrue(File.Exists("serialized_basic"));
            TestUtils.DeleteFileOnExit("serialized_basic");

            SerializationTestBasic read = new SerializationTestBasic();
            serializer.Read("serialized_basic", read);

            Assert.IsTrue(read.TestBool);
            Assert.AreEqual(-100, read.TestInt);
            Assert.AreEqual("abc"+Environment.NewLine+"def", read.TestString);
            Assert.IsNull(read.TestStringNull);
            Assert.AreEqual(TestEnum.D, read.TestEnum);
        }

        // TODO more complex tests
    }
}