Преглед изворни кода

Remove apparently-redundant `DateFlags` calculation in `JsDate` constructor (#2058)

* Add `DateFlags.DateTime{Min,Max}Value` tests

ref. https://github.com/sebastienros/jint/issues/2057

* Remove apparently-redundant `DateFlags` calculation

This constructor calls `engine.Realm.Intrinsics.Date.FromDateTime(value)`
i.e. `DateConstructor.FromDateTime` which already sets these flags correctly:

```csharp
internal DatePresentation FromDateTime(DateTime dt, bool negative = false)
{
    if (dt == DateTime.MinValue)
    {
        return DatePresentation.MinValue;
    }

    if (dt == DateTime.MaxValue)
    {
        return DatePresentation.MaxValue;
    }
```

Tests added confirm that this code appears redundant.

ref. https://github.com/sebastienros/jint/issues/2057
nil4 пре 5 месеци
родитељ
комит
d87a847e64
2 измењених фајлова са 26 додато и 8 уклоњено
  1. 26 0
      Jint.Tests/Runtime/DateTests.cs
  2. 0 8
      Jint/Native/JsDate.cs

+ 26 - 0
Jint.Tests/Runtime/DateTests.cs

@@ -1,3 +1,5 @@
+using Jint.Native;
+
 namespace Jint.Tests.Runtime;
 
 public class DateTests
@@ -140,4 +142,28 @@ public class DateTests
     {
         Assert.True(double.IsNaN(_engine.Evaluate("Date.parse('')").AsNumber()));
     }
+
+    [Fact]
+    public void DateTimeMinValueFlag()
+    {
+        var date = DateTime.MinValue;
+        var jsDate = new JsDate(_engine, date);
+        Assert.Equal(DateFlags.DateTimeMinValue, jsDate._dateValue.Flags);
+
+        date = date.AddMilliseconds(1);
+        jsDate = new JsDate(_engine, date);
+        Assert.Equal(DateFlags.None, jsDate._dateValue.Flags);
+    }
+    
+    [Fact]
+    public void DateTimeMaxValueFlag()
+    {
+        var date = DateTime.MaxValue;
+        var jsDate = new JsDate(_engine, date);
+        Assert.Equal(DateFlags.DateTimeMaxValue, jsDate._dateValue.Flags);
+
+        date = date.AddMilliseconds(-1);
+        jsDate = new JsDate(_engine, date);
+        Assert.Equal(DateFlags.None, jsDate._dateValue.Flags);
+    }
 }

+ 0 - 8
Jint/Native/JsDate.cs

@@ -20,14 +20,6 @@ public sealed class JsDate : ObjectInstance
 
     public JsDate(Engine engine, DateTime value) : this(engine, engine.Realm.Intrinsics.Date.FromDateTime(value))
     {
-        if (value == DateTime.MinValue)
-        {
-            _dateValue = _dateValue with { Flags = DateFlags.DateTimeMinValue };
-        }
-        else if (value == DateTime.MinValue)
-        {
-            _dateValue = _dateValue with { Flags = DateFlags.DateTimeMaxValue };
-        }
     }
 
     public JsDate(Engine engine, long dateValue) : this(engine, new DatePresentation(dateValue, DateFlags.None))