RuneJsonConverterTests.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System.Text;
  2. using System.Text.Json;
  3. namespace Terminal.Gui.ConfigurationTests;
  4. public class RuneJsonConverterTests
  5. {
  6. [Theory]
  7. [InlineData ("aa")]
  8. [InlineData ("☑☑")]
  9. [InlineData ("\\x2611")]
  10. [InlineData ("Z+2611")]
  11. [InlineData ("🍎🍎")]
  12. [InlineData ("U+FFF1F34E")]
  13. [InlineData ("\\UFFF1F34E")]
  14. [InlineData ("\\ud83d")] // not printable "high surrogate"
  15. [InlineData ("\\udc3d")] // not printable "low surrogate"
  16. [InlineData ("\\ud83d \\u1c69")] // bad surrogate pair
  17. [InlineData ("\\ud83ddc69")]
  18. // Emoji - Family Unit:
  19. // Woman (U+1F469, 👩)
  20. // Zero Width Joiner (U+200D)
  21. // Woman (U+1F469, 👩)
  22. // Zero Width Joiner (U+200D)
  23. // Girl (U+1F467, 👧)
  24. // Zero Width Joiner (U+200D)
  25. // Girl (U+1F467, 👧)
  26. [InlineData ("U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467")]
  27. [InlineData ("\\U0001F469\\u200D\\U0001F469\\u200D\\U0001F467\\u200D\\U0001F467")]
  28. public void RoundTripConversion_Negative (string rune)
  29. {
  30. // Act
  31. string json = JsonSerializer.Serialize (rune, ConfigurationManager.SerializerOptions);
  32. // Assert
  33. Assert.Throws<JsonException> (
  34. () => JsonSerializer.Deserialize<Rune> (
  35. json,
  36. ConfigurationManager.SerializerOptions
  37. )
  38. );
  39. }
  40. [Theory]
  41. [InlineData ("a", "a")]
  42. [InlineData ("☑", "☑")]
  43. [InlineData ("\\u2611", "☑")]
  44. [InlineData ("U+2611", "☑")]
  45. [InlineData ("🍎", "🍎")]
  46. [InlineData ("U+1F34E", "🍎")]
  47. [InlineData ("\\U0001F34E", "🍎")]
  48. [InlineData ("\\ud83d \\udc69", "👩")]
  49. [InlineData ("\\ud83d\\udc69", "👩")]
  50. [InlineData ("U+d83d U+dc69", "👩")]
  51. [InlineData ("U+1F469", "👩")]
  52. [InlineData ("\\U0001F469", "👩")]
  53. [InlineData ("\\u0065\\u0301", "é")]
  54. public void RoundTripConversion_Positive (string rune, string expected)
  55. {
  56. // Arrange
  57. // Act
  58. string json = JsonSerializer.Serialize (rune, ConfigurationManager.SerializerOptions);
  59. var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager.SerializerOptions);
  60. // Assert
  61. Assert.Equal (expected, deserialized.ToString ());
  62. }
  63. [Fact]
  64. public void Printable_Rune_Is_Serialized_As_Glyph ()
  65. {
  66. // Arrange
  67. // Act
  68. string json = JsonSerializer.Serialize ((Rune)'a', ConfigurationManager.SerializerOptions);
  69. // Assert
  70. Assert.Equal ("\"a\"", json);
  71. }
  72. [Fact]
  73. public void Non_Printable_Rune_Is_Serialized_As_u_Encoded_Value ()
  74. {
  75. // Arrange
  76. // Act
  77. string json = JsonSerializer.Serialize ((Rune)0x01, ConfigurationManager.SerializerOptions);
  78. // Assert
  79. Assert.Equal ("\"\\u0001\"", json);
  80. }
  81. [Fact]
  82. public void Json_With_Glyph_Works ()
  83. {
  84. // Arrange
  85. var json = "\"a\"";
  86. // Act
  87. var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager.SerializerOptions);
  88. // Assert
  89. Assert.Equal ("a", deserialized.ToString ());
  90. }
  91. [Fact]
  92. public void Json_With_u_Encoded_Works ()
  93. {
  94. // Arrange
  95. var json = "\"\\u0061\"";
  96. // Act
  97. var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager.SerializerOptions);
  98. // Assert
  99. Assert.Equal ("a", deserialized.ToString ());
  100. }
  101. [Fact]
  102. public void Json_With_U_Encoded_Works ()
  103. {
  104. // Arrange
  105. var json = "\"U+0061\"";
  106. // Act
  107. var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager.SerializerOptions);
  108. // Assert
  109. Assert.Equal ("a", deserialized.ToString ());
  110. }
  111. [Fact]
  112. public void Json_With_Decimal_Works ()
  113. {
  114. // Arrange
  115. var json = "97";
  116. // Act
  117. var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager.SerializerOptions);
  118. // Assert
  119. Assert.Equal ("a", deserialized.ToString ());
  120. }
  121. }