using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Apolyton.FastJson.Data;
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 dt = DateTime.Now;
DateTime expected = dt.Add(TimeZone.CurrentTimeZone.GetUtcOffset(dt));
JsonPrimitive primitive = new JsonPrimitive(dt.ToString("yyyy-MM-dd HH:mm:ssZ"));
Assert.AreEqual(expected.Year, primitive.AsDateTime.Year);
Assert.AreEqual(expected.Month, primitive.AsDateTime.Month);
Assert.AreEqual(expected.Day, primitive.AsDateTime.Day);
Assert.AreEqual(expected.Hour, primitive.AsDateTime.Hour);
Assert.AreEqual(expected.Minute, primitive.AsDateTime.Minute);
Assert.AreEqual(expected.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);
}
}
}