TestsEvents.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Topten.JsonKit;
  6. using System.Reflection;
  7. using Xunit;
  8. namespace TestCases
  9. {
  10. [Json]
  11. struct StructEvents : IJsonLoaded, IJsonLoading, IJsonLoadField, IJsonWriting, IJsonWritten
  12. {
  13. public int IntField;
  14. [JsonExclude] public bool loading;
  15. [JsonExclude] public bool loaded;
  16. [JsonExclude] public bool fieldLoaded;
  17. void IJsonLoaded.OnJsonLoaded(IJsonReader r)
  18. {
  19. loaded = true;
  20. }
  21. void IJsonLoading.OnJsonLoading(IJsonReader r)
  22. {
  23. loading = true;
  24. }
  25. bool IJsonLoadField.OnJsonField(IJsonReader r, string key)
  26. {
  27. fieldLoaded = true;
  28. return false;
  29. }
  30. void IJsonWriting.OnJsonWriting(IJsonWriter w)
  31. {
  32. w.WriteRaw("/* OnJsonWriting */");
  33. }
  34. void IJsonWritten.OnJsonWritten(IJsonWriter w)
  35. {
  36. w.WriteRaw("/* OnJsonWritten */");
  37. }
  38. }
  39. [Json]
  40. class ObjectEvents : IJsonLoaded, IJsonLoading, IJsonLoadField, IJsonWriting, IJsonWritten
  41. {
  42. public int IntField;
  43. [JsonExclude] public bool loading;
  44. [JsonExclude] public bool loaded;
  45. [JsonExclude] public bool fieldLoaded;
  46. void IJsonLoaded.OnJsonLoaded(IJsonReader r)
  47. {
  48. loaded = true;
  49. }
  50. void IJsonLoading.OnJsonLoading(IJsonReader r)
  51. {
  52. loading = true;
  53. }
  54. bool IJsonLoadField.OnJsonField(IJsonReader r, string key)
  55. {
  56. fieldLoaded = true;
  57. return false;
  58. }
  59. void IJsonWriting.OnJsonWriting(IJsonWriter w)
  60. {
  61. w.WriteRaw("/* OnJsonWriting */");
  62. }
  63. void IJsonWritten.OnJsonWritten(IJsonWriter w)
  64. {
  65. w.WriteRaw("/* OnJsonWritten */");
  66. }
  67. }
  68. [Obfuscation(Exclude = true, ApplyToMembers = true)]
  69. public class TestsEvents
  70. {
  71. [Fact]
  72. public void TestStructLoadEvents()
  73. {
  74. var o2 = Json.Parse<StructEvents>("{\"IntField\":23}");
  75. Assert.True(o2.loading);
  76. Assert.True(o2.loaded);
  77. Assert.True(o2.fieldLoaded);
  78. }
  79. [Fact]
  80. public void TestStructWriteEvents()
  81. {
  82. var o = new StructEvents();
  83. o.IntField = 23;
  84. var json = Json.Format(o);
  85. Assert.Contains("OnJsonWriting", json);
  86. Assert.Contains("OnJsonWritten", json);
  87. }
  88. [Fact]
  89. public void TestObjectLoadEvents()
  90. {
  91. var o2 = Json.Parse<ObjectEvents>("{\"IntField\":23}");
  92. Assert.True(o2.loading);
  93. Assert.True(o2.loaded);
  94. Assert.True(o2.fieldLoaded);
  95. }
  96. [Fact]
  97. public void TestObjectWriteEvents()
  98. {
  99. var o = new ObjectEvents();
  100. o.IntField = 23;
  101. var json = Json.Format(o);
  102. Assert.Contains("OnJsonWriting", json);
  103. Assert.Contains("OnJsonWritten", json);
  104. }
  105. }
  106. }