Click here to Skip to main content
15,883,901 members
Articles / Programming Languages / Markdown

APJSON

Rate me:
Please Sign up or sign in to vote.
4.67/5 (5 votes)
28 Aug 2013CPOL13 min read 41.6K   1.2K   34  
This is an alternative for "fastJSON"
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Apolyton.FastJson.Data;
using Apolyton.FastJson.Tests.Helpers.ParameterRelated;

namespace Apolyton.FastJson.Tests.Data
{
    [TestClass]
    public class JsonPrimitiveTests
    {
        [TestMethod]
        public void JsonPrimitive_Constructor_Object()
        {
            JsonPrimitive primitive = new JsonPrimitive("A");
        }

        [TestMethod]
        public void JsonPrimitive_Constructor_Default()
        {
            new JsonPrimitive();
        }

        [TestMethod]
        public void JsonPrimitive_Bool()
        {
            JsonPrimitive primitive = new JsonPrimitive(true);
            Assert.AreEqual(true, primitive.AsBool);
        }

        [TestMethod]
        public void JsonPrimitive_Bool_FromString()
        {
            JsonPrimitive primitive = new JsonPrimitive("true");
            Assert.AreEqual(true, primitive.AsBool);
        }

        [TestMethod]
        public void JsonPrimitive_String()
        {
            JsonPrimitive primitive = new JsonPrimitive("A");
            Assert.AreEqual("A", primitive.AsString);
        }

        [TestMethod]
        public void JsonPrimitive_Guid()
        {
            JsonPrimitive primitive = new JsonPrimitive("FA6E5DB1-93BB-4DFF-A630-101C8741C428");
            Assert.AreEqual(Guid.Parse("FA6E5DB1-93BB-4DFF-A630-101C8741C428"), primitive.AsGuid);
        }

        [TestMethod]
        public void JsonPrimitive_Int()
        {
            JsonPrimitive primitive = new JsonPrimitive("5");
            Assert.AreEqual(5, primitive.AsInteger);
        }

        [TestMethod]
        public void JsonPrimitive_ULong()
        {
            JsonPrimitive primitive = new JsonPrimitive("5");
            Assert.AreEqual((ulong)5, Convert.ChangeType(primitive, typeof(ulong)));
        }


        [TestMethod]
        public void JsonPrimitive_UInt()
        {
            JsonPrimitive primitive = new JsonPrimitive("5");
            Assert.AreEqual((uint)5, Convert.ChangeType(primitive, typeof(uint)));
        }


        [TestMethod]
        public void JsonPrimitive_UShort()
        {
            JsonPrimitive primitive = new JsonPrimitive("5");
            Assert.AreEqual((ushort)5, Convert.ChangeType(primitive, typeof(ushort)));
        }

        [TestMethod]
        public void JsonPrimitive_Double()
        {
            JsonPrimitive primitive = new JsonPrimitive("5");
            Assert.AreEqual(5, primitive.AsDouble);
        }

        [TestMethod]
        public void JsonPrimitive_Double_Fractioned()
        {
            JsonPrimitive primitive = new JsonPrimitive("5.23");
            Assert.AreEqual(5.23, primitive.AsDouble);
            // To do: is there a risk of region incompatibility?
        }

        [TestMethod]
        public void JsonPrimitive_Float()
        {
            JsonPrimitive primitive = new JsonPrimitive("5.23");
            Assert.AreEqual(5.23f, primitive.AsFloat);
        }

        [TestMethod]
        public void JsonPrimitive_DateTime()
        {
            DateTime dt = DateTime.Now;
            JsonPrimitive primitive = new JsonPrimitive(dt.ToString("yyyy-MM-dd HH:mm:ss"));

            Assert.AreEqual(dt.Year, primitive.AsDateTime.Year);
            Assert.AreEqual(dt.Month, primitive.AsDateTime.Month);
            Assert.AreEqual(dt.Day, primitive.AsDateTime.Day);
            Assert.AreEqual(dt.Hour, primitive.AsDateTime.Hour);
            Assert.AreEqual(dt.Minute, primitive.AsDateTime.Minute);
            Assert.AreEqual(dt.Second, primitive.AsDateTime.Second);
        }

        [TestMethod]
        public void JsonPrimitive_DateTime_Utc()
        {
            DateTime utcDate = DateTime.UtcNow;
            DateTime localDate = DateTime.Now;
            DateTime expectedDate = localDate.ToUniversalTime();
            JsonPrimitive primitive = new JsonPrimitive(utcDate.ToString("yyyy-MM-dd HH:mm:ssZ"));

            Assert.AreEqual(expectedDate.Year, primitive.AsDateTime.Year);
            Assert.AreEqual(expectedDate.Month, primitive.AsDateTime.Month);
            Assert.AreEqual(expectedDate.Day, primitive.AsDateTime.Day);
            Assert.AreEqual(expectedDate.Hour, primitive.AsDateTime.Hour);
            Assert.AreEqual(expectedDate.Minute, primitive.AsDateTime.Minute);
            Assert.AreEqual(expectedDate.Second, primitive.AsDateTime.Second);
        }

        [TestMethod]
        public void JsonPrimitive_TimeStamp()
        {
            TimeSpan ts = TimeSpan.FromSeconds(97);
            JsonPrimitive primitive = new JsonPrimitive(ts.ToString());
            Assert.AreEqual(ts, primitive.AsTimeSpan);
        }

        [TestMethod]
        public void JsonPrimitive_GuidString()
        {
            Guid guid = Guid.NewGuid();
            JsonPrimitive primitive = new JsonPrimitive(guid.ToString());
            Assert.AreEqual(guid, primitive.AsGuid);
        }

        [TestMethod]
        public void JsonPrimitive_FastGuidString()
        {
            Guid guid = Guid.NewGuid();
            byte[] bytes = guid.ToByteArray();
            JsonPrimitive primitive = new JsonPrimitive(Convert.ToBase64String(bytes, 0, bytes.Length, Base64FormattingOptions.None));
            Assert.AreEqual(guid, primitive.AsGuid);
        }

        /// <summary>
        /// Verifies that when the value of the custom type is null, 'null' is serialized.
        /// </summary>
        [TestMethod]
        public void JsonPrimitive_CustomType()
        {
            JsonParameters parameters = new JsonParameters();
            JsonPrimitive primitive = new JsonPrimitive(parameters.Registry, "ToTo");

            CustomTypeClass customTypeClass = new CustomTypeClass();

            parameters.RegisterCustomType(typeof(CustomTypeClass.CustomType), (obj) => { return null; }, (str) => 
            {
                if (str == "ToTo")
                {
                    return new CustomTypeClass();
                }

                return null; 
            });

            ((IConvertible)primitive).ToType(typeof(CustomTypeClass.CustomType), null);
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions