public void ByteArraysCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("Byte Array Data", typeof(byte[]));

            baseTable.Rows.Add(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
            baseTable.Rows.Add(new byte[] { byte.MaxValue, byte.MinValue });
            baseTable.Rows.Add(new byte[] { 55, 42, 12, 89, 77, 66, 127 });
            baseTable.Rows.Add(new byte[] { 22, 21, 23, 20, 19, 18, 17, 16 });
            baseTable.Rows.Add(new byte[0]);
            baseTable.Rows.Add(new byte[6]);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void AllDataTypesAtOnce()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("String Data", typeof(string));
            baseTable.Columns.Add("Int Data", typeof(int));
            baseTable.Columns.Add("Byte Array Data", typeof(byte[]));
            baseTable.Columns.Add("Date Time", typeof(byte[]));

            baseTable.Rows.Add("Code 1", 1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
            baseTable.Rows.Add("Code 2", 2, new byte[] { 100, 100, 60, 70, 90 });
            baseTable.Rows.Add("Code 3", 3, new byte[] { 55, 42, 12, 89, 77, 66, 127 });
            baseTable.Rows.Add("Code 4", 4, new byte[] { 22, 21, 23, 20, 19, 18, 17, 16 });

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void BoolCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("Boolean Data", typeof(bool));

            baseTable.Rows.Add(true);
            baseTable.Rows.Add(false);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void StringCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("String Data", typeof(string));

            baseTable.Rows.Add("This is a string");
            baseTable.Rows.Add(String.Empty);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void NullCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject("null", typeof(DataTable), converter);

            Assert.IsNull(deserializedTable);
        }
        public void Int64CanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("Int64 Data", typeof(long));

            baseTable.Rows.Add(100001);
            baseTable.Rows.Add(0);
            baseTable.Rows.Add(long.MaxValue);
            baseTable.Rows.Add(long.MinValue);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void FloatCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("Float Data", typeof(float));

            baseTable.Rows.Add(100001.333333);
            baseTable.Rows.Add(0);
            baseTable.Rows.Add(float.MinValue);
            baseTable.Rows.Add(float.MaxValue);
            baseTable.Rows.Add(float.Epsilon);
            baseTable.Rows.Add(float.NegativeInfinity);
            baseTable.Rows.Add(float.PositiveInfinity);
            baseTable.Rows.Add(float.NaN);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void EmptyTableCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("String Data", typeof(string));
            baseTable.Columns.Add("Int Data", typeof(int));
            baseTable.Columns.Add("Byte Array Data", typeof(byte[]));
            baseTable.Columns.Add("Date Time", typeof(byte[]));

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void DecimalCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("Decimal Data", typeof(Decimal));

            baseTable.Rows.Add(133.899999m);
            baseTable.Rows.Add(0m);
            baseTable.Rows.Add(Decimal.MinValue);
            baseTable.Rows.Add(Decimal.MaxValue);
            baseTable.Rows.Add(Decimal.MinusOne);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }
        public void DateTimeCanBeDeserialized()
        {
            var converter = new CompactDataTableConverter();

            var baseTable = new DataTable();

            baseTable.Columns.Add("Date Time Data", typeof(DateTime));

            baseTable.Rows.Add(new DateTime(2013, 10, 15, 10, 30, 16, 133));
            baseTable.Rows.Add(DateTime.MinValue);
            baseTable.Rows.Add(DateTime.MaxValue);
            baseTable.Rows.Add(DBNull.Value);

            string serializedTable = JsonConvert.SerializeObject(baseTable, converter);

            Trace.WriteLine(serializedTable);

            var deserializedTable = (DataTable)JsonConvert.DeserializeObject(serializedTable, typeof(DataTable), converter);

            AssertColumnsHaveSameDefinition(baseTable, deserializedTable);

            AssertRowsHaveSameData(baseTable, deserializedTable);
        }