|
@@ -1,6 +1,7 @@
|
|
using Esprima;
|
|
using Esprima;
|
|
using Jint.Runtime;
|
|
using Jint.Runtime;
|
|
using System;
|
|
using System;
|
|
|
|
+using System.Collections.Generic;
|
|
using Xunit;
|
|
using Xunit;
|
|
|
|
|
|
namespace Jint.Tests.Runtime
|
|
namespace Jint.Tests.Runtime
|
|
@@ -82,5 +83,62 @@ var b = function(v) {
|
|
at b(7) @ main.js 8:1
|
|
at b(7) @ main.js 8:1
|
|
".Replace("\r\n", "\n"), stack.Replace("\r\n", "\n"));
|
|
".Replace("\r\n", "\n"), stack.Replace("\r\n", "\n"));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private class Folder
|
|
|
|
+ {
|
|
|
|
+ public Folder Parent { get; set; }
|
|
|
|
+ public string Name { get; set; }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [Fact]
|
|
|
|
+ public void CallStackBuildingShouldSkipResolvingFromEngine()
|
|
|
|
+ {
|
|
|
|
+ var engine = new Engine(o => o.LimitRecursion(200));
|
|
|
|
+ var recordedFolderTraversalOrder = new List<string>();
|
|
|
|
+ engine.SetValue("log", new Action<object>(o => recordedFolderTraversalOrder.Add(o.ToString())));
|
|
|
|
+
|
|
|
|
+ var folder = new Folder
|
|
|
|
+ {
|
|
|
|
+ Name = "SubFolder2",
|
|
|
|
+ Parent = new Folder
|
|
|
|
+ {
|
|
|
|
+ Name = "SubFolder1",
|
|
|
|
+ Parent = new Folder
|
|
|
|
+ {
|
|
|
|
+ Name = "Root", Parent = null,
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ engine.SetValue("folder", folder);
|
|
|
|
+
|
|
|
|
+ var javaScriptException = Assert.Throws<JavaScriptException>(() =>
|
|
|
|
+ engine.Execute(@"
|
|
|
|
+ var Test = {
|
|
|
|
+ recursive: function(folderInstance) {
|
|
|
|
+ // Enabling the guard here corrects the problem, but hides the hard fault
|
|
|
|
+ // if (folderInstance==null) return null;
|
|
|
|
+ log(folderInstance.Name);
|
|
|
|
+ if (folderInstance==null) return null;
|
|
|
|
+ return this.recursive(folderInstance.parent);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Test.recursive(folder);"
|
|
|
|
+ ));
|
|
|
|
+
|
|
|
|
+ Assert.Equal("folderInstance is null", javaScriptException.Message);
|
|
|
|
+ Assert.Equal(@" at recursive(folderInstance.parent) @ 31:8
|
|
|
|
+ at recursive(folderInstance.parent) @ 31:8
|
|
|
|
+ at recursive(folderInstance.parent) @ 31:8
|
|
|
|
+ at recursive(folder) @ 16:12
|
|
|
|
+", javaScriptException.CallStack);
|
|
|
|
+
|
|
|
|
+ var expected = new List<string>
|
|
|
|
+ {
|
|
|
|
+ "SubFolder2", "SubFolder1", "Root"
|
|
|
|
+ };
|
|
|
|
+ Assert.Equal(expected, recordedFolderTraversalOrder);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|