TestsGeneral.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using PetaTest;
  6. using PetaJson;
  7. using System.Reflection;
  8. namespace TestCases
  9. {
  10. [TestFixture]
  11. [Obfuscation(Exclude = true, ApplyToMembers = true)]
  12. public class TestsGeneral
  13. {
  14. [Test]
  15. public void Format_Null()
  16. {
  17. Assert.AreEqual(Json.Format(null), "null");
  18. }
  19. [Test]
  20. public void Format_Boolean()
  21. {
  22. Assert.AreEqual(Json.Format(true), "true");
  23. Assert.AreEqual(Json.Format(false), "false");
  24. }
  25. [Test]
  26. public void Format_String()
  27. {
  28. Assert.AreEqual(Json.Format("Hello World"), "\"Hello World\"");
  29. Assert.AreEqual(Json.Format(" \" \\ / \b \f \n \r \t \0 \u1234"), "\" \\\" \\\\ \\/ \\b \\f \\n \\r \\t \\u0000 \u1234\"");
  30. }
  31. [Test]
  32. public void Format_Numbers()
  33. {
  34. Assert.AreEqual(Json.Format(123), "123");
  35. Assert.AreEqual(Json.Format(-123), "-123");
  36. Assert.AreEqual(Json.Format(123.0), "123");
  37. Assert.AreEqual(Json.Format(123.4), "123.4");
  38. Assert.AreEqual(Json.Format(-123.4), "-123.4");
  39. Assert.AreEqual(Json.Format(-123.45E-67), "-1.2345E-65");
  40. Assert.AreEqual(Json.Format(123U), "123");
  41. Assert.AreEqual(Json.Format(0xFF), "255");
  42. Assert.AreEqual(Json.Format(0xFFU), "255");
  43. Assert.AreEqual(Json.Format(0xFFFFFFFFFFFFFFFFL), "18446744073709551615");
  44. }
  45. [Test]
  46. public void Format_Empty_Array()
  47. {
  48. Assert.AreEqual(Json.Format(new int[] { }), "[]");
  49. }
  50. [Test]
  51. public void Format_Simple_Array()
  52. {
  53. Assert.AreEqual(Json.Format(new int[] { 1, 2, 3 }), "[\n\t1,\n\t2,\n\t3\n]");
  54. }
  55. [Test]
  56. public void Format_Empty_Dictionary()
  57. {
  58. Assert.AreEqual(Json.Format(new Dictionary<int, int>() { }), "{}");
  59. }
  60. [Test]
  61. public void Format_Simple_Dictionary()
  62. {
  63. var result = Json.Format(new Dictionary<string, int>() { {"Apples", 1}, {"Pears", 2} , {"Bananas", 3 } });
  64. Assert.AreEqual(result, "{\n\t\"Apples\": 1,\n\t\"Pears\": 2,\n\t\"Bananas\": 3\n}");
  65. }
  66. [Test]
  67. public void Format_Date()
  68. {
  69. Assert.AreEqual(Json.Format(new DateTime(2011, 1, 1, 0, 0, 0, DateTimeKind.Utc)), "1293840000000");
  70. }
  71. [Test]
  72. public void Format_Poco()
  73. {
  74. var result = Json.Format(new { Apples=1, Pears=2, Bananas=3});
  75. Assert.AreEqual(result, "{\n\t\"apples\": 1,\n\t\"pears\": 2,\n\t\"bananas\": 3\n}");
  76. }
  77. [Test]
  78. public void Parse_Null()
  79. {
  80. Assert.IsNull(Json.Parse<object>("null"));
  81. }
  82. [Test]
  83. public void Parse_Boolean()
  84. {
  85. Assert.IsTrue(Json.Parse<bool>("true"));
  86. Assert.IsFalse(Json.Parse<bool>("false"));
  87. }
  88. [Test]
  89. public void Parse_String()
  90. {
  91. var s = Json.Parse<string>("\"Hello\\r\\n\\t\\u0000 World\"");
  92. Assert.AreEqual((string)s, "Hello\r\n\t\0 World");
  93. }
  94. [Test]
  95. public void Parse_Numbers()
  96. {
  97. Assert.AreEqual(Json.Parse<int>("0"), 0);
  98. Assert.AreEqual(Json.Parse<int>("123"), 123);
  99. Assert.AreEqual(Json.Parse<double>("123.45"), 123.45);
  100. Assert.AreEqual(Json.Parse<double>("123e45"), 123e45);
  101. Assert.AreEqual(Json.Parse<double>("123.0e45"), 123.0e45);
  102. Assert.AreEqual(Json.Parse<double>("123e+45"), 123e45);
  103. Assert.AreEqual(Json.Parse<double>("123.0e+45"), 123.0e45);
  104. Assert.AreEqual(Json.Parse<double>("123e-45"), 123e-45);
  105. Assert.AreEqual(Json.Parse<double>("123.0e-45"), 123.0e-45);
  106. Assert.AreEqual(Json.Parse<double>("123E45"), 123E45);
  107. Assert.AreEqual(Json.Parse<double>("-123e45"), -123e45);
  108. }
  109. [Test]
  110. public void Parse_Empty_Array()
  111. {
  112. var d = Json.Parse<object[]>("[]");
  113. Assert.AllItemsAreEqual(d as object[], new object[] { });
  114. }
  115. [Test]
  116. public void Parse_simple_Array()
  117. {
  118. var d = Json.Parse<int[]>("[1,2,3]");
  119. Assert.AllItemsAreEqual(d, new int[] { 1, 2, 3} );
  120. }
  121. [Test]
  122. public void Parse_Date()
  123. {
  124. var d1 = new DateTime(2011, 1, 1, 10, 10, 10, DateTimeKind.Utc);
  125. var d2 = Json.Parse<DateTime>(Json.Format(d1));
  126. Assert.AreEqual(d1, d2);
  127. }
  128. [Test]
  129. public void DynamicTest()
  130. {
  131. var d = Json.Parse<IDictionary<string, object>>("{\"apples\":1, \"pears\":2, \"bananas\":3}") ;
  132. Assert.AreEquivalent(d.Keys, new string[] { "apples", "pears", "bananas" });
  133. Assert.AreEquivalent(d.Values, new object[] { 1UL, 2UL, 3UL });
  134. }
  135. [Test]
  136. public void Invalid_Numbers()
  137. {
  138. Assert.Throws<JsonParseException>(() => Json.Parse<object>("123ee0"));
  139. Assert.Throws<JsonParseException>(() => Json.Parse<object>("+123"));
  140. Assert.Throws<JsonParseException>(() => Json.Parse<object>("--123"));
  141. Assert.Throws<JsonParseException>(() => Json.Parse<object>("--123..0"));
  142. Assert.Throws<JsonParseException>(() => Json.Parse<object>("--123ex"));
  143. Assert.Throws<JsonParseException>(() => Json.Parse<object>("123x"));
  144. Assert.Throws<JsonParseException>(() => Json.Parse<object>("0x123"));
  145. }
  146. [Test]
  147. public void Invalid_Trailing_Characters()
  148. {
  149. Assert.Throws<JsonParseException>(()=> Json.Parse<object>("\"Hello\" , 123"));
  150. }
  151. [Test]
  152. public void Invalid_Identifier()
  153. {
  154. Assert.Throws<JsonParseException>(() => Json.Parse<object>("identifier"));
  155. }
  156. [Test]
  157. public void Invalid_Character()
  158. {
  159. Assert.Throws<JsonParseException>(() => Json.Parse<object>("~"));
  160. }
  161. [Test]
  162. public void Invalid_StringEscape()
  163. {
  164. Assert.Throws<JsonParseException>(() => Json.Parse<object>("\"\\q\""));
  165. }
  166. [Test]
  167. public void ErrorLocation()
  168. {
  169. var strJson="{\r\n \r\n \n\r \r \n \t \"key:\": zzz";
  170. try
  171. {
  172. Json.Parse<object>(strJson);
  173. }
  174. catch (JsonParseException x)
  175. {
  176. Assert.AreEqual(x.Position.Line, 5);
  177. Assert.AreEqual(x.Position.Offset, 13);
  178. }
  179. }
  180. }
  181. }