SpanStringTokenizerTests.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using Avalonia.Utilities;
  3. using Xunit;
  4. namespace Avalonia.Base.UnitTests.Utilities
  5. {
  6. public class SpanStringTokenizerTests
  7. {
  8. // Explicit delegate because C# generics do not allow ref structs.
  9. private delegate void TokenizerAction(SpanStringTokenizer tokenizer);
  10. private static TException AssertThrows<TException>(SpanStringTokenizer tokenizer, TokenizerAction action)
  11. where TException : Exception
  12. {
  13. try
  14. {
  15. action(tokenizer);
  16. }
  17. catch (Exception ex)
  18. {
  19. if (ex.GetType() == typeof(TException))
  20. return (TException)ex;
  21. throw Xunit.Sdk.ThrowsException.ForIncorrectExceptionType(typeof(TException), ex);
  22. }
  23. throw Xunit.Sdk.ThrowsException.ForNoException(typeof(TException));
  24. }
  25. [Fact]
  26. public void ReadInt32_Reads_Values()
  27. {
  28. var target = new SpanStringTokenizer("123,456");
  29. Assert.Equal(123, target.ReadInt32());
  30. Assert.Equal(456, target.ReadInt32());
  31. AssertThrows<FormatException>(target, t => t.ReadInt32());
  32. }
  33. [Fact]
  34. public void ReadDouble_Reads_Values()
  35. {
  36. var target = new SpanStringTokenizer("12.3,45.6");
  37. Assert.Equal(12.3, target.ReadDouble());
  38. Assert.Equal(45.6, target.ReadDouble());
  39. AssertThrows<FormatException>(target, t => t.ReadDouble());
  40. }
  41. [Fact]
  42. public void TryReadInt32_Reads_Values()
  43. {
  44. var target = new SpanStringTokenizer("123,456");
  45. Assert.True(target.TryReadInt32(out var value));
  46. Assert.Equal(123, value);
  47. Assert.True(target.TryReadInt32(out value));
  48. Assert.Equal(456, value);
  49. Assert.False(target.TryReadInt32(out value));
  50. }
  51. [Fact]
  52. public void TryReadInt32_Doesnt_Throw()
  53. {
  54. var target = new SpanStringTokenizer("abc");
  55. Assert.False(target.TryReadInt32(out var value));
  56. }
  57. [Fact]
  58. public void TryReadDouble_Reads_Values()
  59. {
  60. var target = new SpanStringTokenizer("12.3,45.6");
  61. Assert.True(target.TryReadDouble(out var value));
  62. Assert.Equal(12.3, value);
  63. Assert.True(target.TryReadDouble(out value));
  64. Assert.Equal(45.6, value);
  65. Assert.False(target.TryReadDouble(out value));
  66. }
  67. [Fact]
  68. public void TryReadDouble_Doesnt_Throw()
  69. {
  70. var target = new SpanStringTokenizer("abc");
  71. Assert.False(target.TryReadDouble(out var value));
  72. }
  73. [Fact]
  74. public void ReadSpan_And_ReadString_Reads_Same()
  75. {
  76. var target1 = new SpanStringTokenizer("abc,def");
  77. var target2 = new SpanStringTokenizer("abc,def");
  78. Assert.Equal(target1.ReadString(), target2.ReadSpan().ToString());
  79. Assert.True(target1.ReadSpan().SequenceEqual(target2.ReadString()));
  80. }
  81. }
  82. }