DateTests.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. namespace Jint.Tests.Runtime;
  2. public class DateTests
  3. {
  4. private readonly Engine _engine;
  5. public DateTests()
  6. {
  7. _engine = new Engine()
  8. .SetValue("log", new Action<object>(Console.WriteLine))
  9. .SetValue("assert", new Action<bool>(Assert.True))
  10. .SetValue("equal", new Action<object, object>(Assert.Equal));
  11. }
  12. [Fact]
  13. public void NaNToString()
  14. {
  15. var value = _engine.Evaluate("new Date(NaN).toString();").AsString();
  16. Assert.Equal("Invalid Date", value);
  17. }
  18. [Fact]
  19. public void NaNToDateString()
  20. {
  21. var value = _engine.Evaluate("new Date(NaN).toDateString();").AsString();
  22. Assert.Equal("Invalid Date", value);
  23. }
  24. [Fact]
  25. public void NaNToTimeString()
  26. {
  27. var value = _engine.Evaluate("new Date(NaN).toTimeString();").AsString();
  28. Assert.Equal("Invalid Date", value);
  29. }
  30. [Fact]
  31. public void NaNToLocaleString()
  32. {
  33. var value = _engine.Evaluate("new Date(NaN).toLocaleString();").AsString();
  34. Assert.Equal("Invalid Date", value);
  35. }
  36. [Fact]
  37. public void NaNToLocaleDateString()
  38. {
  39. var value = _engine.Evaluate("new Date(NaN).toLocaleDateString();").AsString();
  40. Assert.Equal("Invalid Date", value);
  41. }
  42. [Fact]
  43. public void NaNToLocaleTimeString()
  44. {
  45. var value = _engine.Evaluate("new Date(NaN).toLocaleTimeString();").AsString();
  46. Assert.Equal("Invalid Date", value);
  47. }
  48. [Fact]
  49. public void ToJsonFromNaNObject()
  50. {
  51. var result = _engine.Evaluate("JSON.stringify({ date: new Date(NaN) });");
  52. Assert.Equal("{\"date\":null}", result.ToString());
  53. }
  54. [Fact]
  55. public void ValuePrecisionIsIntegral()
  56. {
  57. var number = _engine.Evaluate("new Date() / 1").AsNumber();
  58. Assert.Equal((long) number, number);
  59. var dateInstance = _engine.Realm.Intrinsics.Date.Construct(123.456d);
  60. Assert.Equal((long) dateInstance.DateValue, dateInstance.DateValue);
  61. }
  62. [Fact]
  63. public void ToStringFollowsJavaScriptFormat()
  64. {
  65. var engine = new Engine(
  66. conf =>
  67. {
  68. conf.LocalTimeZone(TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"));
  69. });
  70. Assert.Equal("Tue Feb 01 2022 00:00:00 GMT+0800 (China Standard Time)", engine.Evaluate("new Date(2022,1,1).toString()"));
  71. Assert.Equal("Tue Feb 01 2022 00:00:00 GMT+0800 (China Standard Time)", engine.Evaluate("new Date(2022,1,1)").ToString());
  72. }
  73. [Theory]
  74. [InlineData("Thu, 30 Jan 2020 08:00:00 PST", 1580400000000)]
  75. [InlineData("Thursday January 01 1970 00:00:25 UTC", 25000)]
  76. [InlineData("Wednesday 31 December 1969 18:01:26 MDT", 86000)]
  77. [InlineData("Wednesday 31 December 1969 19:00:08 EST", 8000)]
  78. [InlineData("Wednesday 31 December 1969 17:01:59 PDT", 119000)]
  79. [InlineData("December 31 1969 17:01:14 MST", 74000)]
  80. [InlineData("January 01 1970 01:46:06 +0145", 66000)]
  81. [InlineData("December 31 1969 17:00:50 PDT", 50000)]
  82. public void CanParseLocaleString(string input, long expected)
  83. {
  84. Assert.Equal(expected, _engine.Evaluate($"new Date('{input}') * 1").AsNumber());
  85. }
  86. }