TestOptions.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using PetaTest;
  6. using PetaJson;
  7. namespace TestCases
  8. {
  9. [TestFixture]
  10. public class TestOptions
  11. {
  12. [Test]
  13. public void TestWhitespace()
  14. {
  15. var o = new { x = 10, y = 20 };
  16. var json = Json.Format(o, JsonOptions.WriteWhitespace);
  17. Assert.Contains(json, "\n");
  18. Assert.Contains(json, "\t");
  19. Assert.Contains(json, ": ");
  20. json = Json.Format(o, JsonOptions.DontWriteWhitespace);
  21. Assert.DoesNotContain(json, "\n");
  22. Assert.DoesNotContain(json, "\t");
  23. Assert.DoesNotContain(json, ": ");
  24. }
  25. [Test]
  26. public void TestStrictComments()
  27. {
  28. var jsonWithCComment = "/* This is a comment*/ 23";
  29. var jsonWithCppComment = "// This is a comment\n 23";
  30. // Nonstrict parser allows it
  31. var val = Json.Parse<int>(jsonWithCComment, JsonOptions.NonStrictParser);
  32. Assert.AreEqual(val, 23);
  33. val = Json.Parse<int>(jsonWithCppComment, JsonOptions.NonStrictParser);
  34. Assert.AreEqual(val, 23);
  35. // Strict parser
  36. Assert.Throws<JsonParseException>(() => Json.Parse<int>(jsonWithCComment, JsonOptions.StrictParser));
  37. Assert.Throws<JsonParseException>(() => Json.Parse<int>(jsonWithCppComment, JsonOptions.StrictParser));
  38. }
  39. [Test]
  40. public void TestStrictTrailingCommas()
  41. {
  42. var arrayWithTrailingComma = "[1,2,]";
  43. var dictWithTrailingComma = "{\"a\":1,\"b\":2,}";
  44. // Nonstrict parser allows it
  45. var array = Json.Parse<int[]>(arrayWithTrailingComma, JsonOptions.NonStrictParser);
  46. Assert.AreEqual(array.Length, 2);
  47. var dict = Json.Parse<IDictionary<string, object>>(dictWithTrailingComma, JsonOptions.NonStrictParser);
  48. Assert.AreEqual(dict.Count, 2);
  49. // Strict parser
  50. Assert.Throws<JsonParseException>(() => Json.Parse<int>(arrayWithTrailingComma, JsonOptions.StrictParser));
  51. Assert.Throws<JsonParseException>(() => Json.Parse<int>(dictWithTrailingComma, JsonOptions.StrictParser));
  52. }
  53. [Test]
  54. public void TestStrictIdentifierKeys()
  55. {
  56. var data = "{a:1,b:2}";
  57. var dict = Json.Parse<IDictionary<string, object>>(data, JsonOptions.NonStrictParser);
  58. Assert.AreEqual(dict.Count, 2);
  59. Assert.Contains(dict.Keys, "a");
  60. Assert.Contains(dict.Keys, "b");
  61. Assert.Throws<JsonParseException>(() => Json.Parse<Dictionary<string, object>>(data, JsonOptions.StrictParser));
  62. }
  63. }
  64. }