Browse Source

Should allow invoke a function value with a null argument (#465)

Yue Yin 7 years ago
parent
commit
ff0c6bb603
2 changed files with 31 additions and 14 deletions
  1. 17 5
      Jint.Tests/Runtime/EngineTests.cs
  2. 14 9
      Jint/Native/JsValue.cs

+ 17 - 5
Jint.Tests/Runtime/EngineTests.cs

@@ -867,6 +867,18 @@ namespace Jint.Tests.Runtime
             Assert.Equal(3, add.Invoke(1, 2));
         }
 
+        [Fact]
+        public void ShouldAllowInvokeAFunctionValueWithNullValueAsArgument()
+        {
+            RunTest(@"
+                function get(x) { return x; }
+            ");
+
+            var add = _engine.GetValue("get");
+            string str = null;
+            Assert.Equal(Native.JsValue.Null, add.Invoke(str));
+        }
+
 
         [Fact]
         public void ShouldNotInvokeNonFunctionValue()
@@ -1240,7 +1252,7 @@ namespace Jint.Tests.Runtime
         {
             var content = GetEmbeddedFile("knockout-3.4.0.js");
 
-            var ex = Assert.Throws<ParserException>(() => _engine.Execute(content, new ParserOptions {Tolerant = false}));
+            var ex = Assert.Throws<ParserException>(() => _engine.Execute(content, new ParserOptions { Tolerant = false }));
             Assert.Contains("Duplicate __proto__ fields are not allowed in object literals", ex.Message);
         }
 
@@ -1248,7 +1260,7 @@ namespace Jint.Tests.Runtime
         public void ShouldExecuteKnockoutWithoutErrorWhenTolerant()
         {
             var content = GetEmbeddedFile("knockout-3.4.0.js");
-            _engine.Execute(content, new ParserOptions {Tolerant = true});
+            _engine.Execute(content, new ParserOptions { Tolerant = true });
         }
 
         [Fact]
@@ -2265,9 +2277,9 @@ namespace Jint.Tests.Runtime
 
         [Theory]
         [InlineData("throw {}", "undefined")]
-        [InlineData("throw {message:null}","null")]
-        [InlineData("throw {message:''}","")]
-        [InlineData("throw {message:2}","2")]
+        [InlineData("throw {message:null}", "null")]
+        [InlineData("throw {message:''}", "")]
+        [InlineData("throw {message:2}", "2")]
         public void ShouldAllowNonStringMessage(string source, string expected)
         {
             var engine = new Engine();

+ 14 - 9
Jint/Native/JsValue.cs

@@ -232,7 +232,7 @@ namespace Jint.Native
             {
                 JsValue Convert(Engine e, object v)
                 {
-                    var array = (System.Array) v;
+                    var array = (System.Array)v;
 
                     var jsArray = engine.Array.Construct(a.Length);
                     foreach (var item in array)
@@ -259,7 +259,7 @@ namespace Jint.Native
 
             if (value.GetType().IsEnum())
             {
-                return JsNumber.Create((int) value);
+                return JsNumber.Create((int)value);
             }
 
             // if no known type could be guessed, wrap it as an ObjectInstance
@@ -325,9 +325,9 @@ namespace Jint.Native
 
         public static bool operator ==(JsValue a, JsValue b)
         {
-            if ((object) a == null)
+            if ((object)a == null)
             {
-                if ((object) b == null)
+                if ((object)b == null)
                 {
                     return true;
                 }
@@ -335,7 +335,7 @@ namespace Jint.Native
                 return false;
             }
 
-            if ((object) b == null)
+            if ((object)b == null)
             {
                 return false;
             }
@@ -345,9 +345,9 @@ namespace Jint.Native
 
         public static bool operator !=(JsValue a, JsValue b)
         {
-            if ((object) a == null)
+            if ((object)a == null)
             {
-                if ((object) b == null)
+                if ((object)b == null)
                 {
                     return false;
                 }
@@ -355,7 +355,7 @@ namespace Jint.Native
                 return true;
             }
 
-            if ((object) b == null)
+            if ((object)b == null)
             {
                 return true;
             }
@@ -390,6 +390,11 @@ namespace Jint.Native
 
         public static implicit operator JsValue(string value)
         {
+            if (value == null)
+            {
+                return Null;
+            }
+                
             return JsString.Create(value);
         }
 
@@ -454,4 +459,4 @@ namespace Jint.Native
             }
         }
     }
-}
+}