TestOptions.cs 2.9 KB

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