Browse Source

Removed ProxyInstance ToString override so calls the property 'toString' (#1250)

Omega TMM 3 years ago
parent
commit
bf6ec4596d

+ 0 - 11
Jint.Tests/Runtime/FunctionTests.cs

@@ -18,17 +18,6 @@ namespace Jint.Tests.Runtime
             Assert.Equal("a, 1, a, {\"0\":\"a\",\"1\":1,\"2\":\"a\"}", e.Evaluate("testFunc.bind('anything')('a', 1, 'a');").AsString());
         }
 
-        [Fact]
-        public void ProxyCanBeRevokedWithoutContext()
-        {
-            new Engine()
-                .Execute(@"
-                    var revocable = Proxy.revocable({}, {});
-                    var revoke = revocable.revoke;
-                    revoke.call(null);
-                ");
-        }
-
         [Fact]
         public void ArrowFunctionShouldBeExtensible()
         {

+ 40 - 0
Jint.Tests/Runtime/ProxyTests.cs

@@ -0,0 +1,40 @@
+namespace Jint.Tests.Runtime
+{
+    public class ProxyTests
+    {
+        [Fact]
+        public void ProxyCanBeRevokedWithoutContext()
+        {
+            new Engine()
+                .Execute(@"
+                    var revocable = Proxy.revocable({}, {});
+                    var revoke = revocable.revoke;
+                    revoke.call(null);
+                ");
+        }
+
+        [Fact]
+        public void ProxyToStringUseTarget()
+        {
+            var engine = new Engine().Execute(@"
+                const targetWithToString = {toString: () => 'target'}
+            ");
+            Assert.Equal("target", engine.Evaluate("new Proxy(targetWithToString, {}).toString()").AsString());
+            Assert.Equal("target", engine.Evaluate("`${new Proxy(targetWithToString, {})}`").AsString());
+        }
+
+        [Fact]
+        public void ProxyToStringUseHandler()
+        {
+            var engine = new Engine().Execute(@"
+                const handler = { get: (target, prop, receiver) => prop === 'toString' ? () => 'handler' : Reflect.get(target, prop, receiver) }
+                const targetWithToString = {toString: () => 'target'}
+            ");
+
+            Assert.Equal("handler", engine.Evaluate("new Proxy({}, handler).toString()").AsString());
+            Assert.Equal("handler", engine.Evaluate("new Proxy(targetWithToString, handler).toString()").AsString());
+            Assert.Equal("handler", engine.Evaluate("`${new Proxy({}, handler)}`").AsString());
+            Assert.Equal("handler", engine.Evaluate("`${new Proxy(targetWithToString, handler)}`").AsString());
+        }
+    }
+}

+ 1 - 1
Jint/Native/Proxy/ProxyInstance.cs

@@ -598,6 +598,6 @@ namespace Jint.Native.Proxy
             }
         }
 
-        public override string ToString() => "function () { [native code] }";
+        public override string ToString() => IsCallable ? "function () { [native code] }" : base.ToString();
     }
 }