RuneJsonConverterTests.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System.Text;
  2. using Xunit;
  3. using System.Text.Json;
  4. namespace Terminal.Gui.ConfigurationTests;
  5. public class RunJsonConverterTests {
  6. [Theory]
  7. [InlineData ("a", "a")]
  8. [InlineData ("☑", "☑")]
  9. [InlineData ("\\u2611", "☑")]
  10. [InlineData ("U+2611", "☑")]
  11. [InlineData ("🍎", "🍎")]
  12. [InlineData ("U+1F34E", "🍎")]
  13. [InlineData ("\\U0001F34E", "🍎")]
  14. [InlineData ("\\ud83d \\udc69", "👩")]
  15. [InlineData ("\\ud83d\\udc69", "👩")]
  16. [InlineData ("U+d83d U+dc69", "👩")]
  17. [InlineData ("U+1F469", "👩")]
  18. [InlineData ("\\U0001F469", "👩")]
  19. [InlineData ("\\u0065\\u0301", "é")]
  20. public void RoundTripConversion_Positive (string rune, string expected)
  21. {
  22. // Arrange
  23. // Act
  24. var json = JsonSerializer.Serialize (rune, ConfigurationManager._serializerOptions);
  25. var deserialized = JsonSerializer.Deserialize<Rune> (json, ConfigurationManager._serializerOptions);
  26. // Assert
  27. Assert.Equal (expected, deserialized.ToString ());
  28. }
  29. [Theory]
  30. [InlineData ("aa")]
  31. [InlineData ("☑☑")]
  32. [InlineData ("\\x2611")]
  33. [InlineData ("Z+2611")]
  34. [InlineData ("🍎🍎")]
  35. [InlineData ("U+FFF1F34E")]
  36. [InlineData ("\\UFFF1F34E")]
  37. [InlineData ("\\ud83d")] // not printable "high surrogate"
  38. [InlineData ("\\udc3d")] // not printable "low surrogate"
  39. [InlineData ("\\ud83d \\u1c69")] // bad surrogate pair
  40. [InlineData ("\\ud83ddc69")]
  41. // Emoji - Family Unit:
  42. // Woman (U+1F469, 👩)
  43. // Zero Width Joiner (U+200D)
  44. // Woman (U+1F469, 👩)
  45. // Zero Width Joiner (U+200D)
  46. // Girl (U+1F467, 👧)
  47. // Zero Width Joiner (U+200D)
  48. // Girl (U+1F467, 👧)
  49. [InlineData ("U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467")]
  50. [InlineData ("\\U0001F469\\u200D\\U0001F469\\u200D\\U0001F467\\u200D\\U0001F467")]
  51. public void RoundTripConversion_Negative (string rune)
  52. {
  53. // Act
  54. var json = JsonSerializer.Serialize (rune, ConfigurationManager._serializerOptions);
  55. // Assert
  56. Assert.Throws<JsonException> (() => JsonSerializer.Deserialize<Rune> (json, ConfigurationManager._serializerOptions));
  57. }
  58. }