コード例 #1
0
        public void ConfigurationIsMutable()
        {
            var first = new V8Configuration();
            var second = first.AddScriptSearchPath("foo");

            Assert.Same(first, second);
        }
コード例 #2
0
        /// <summary>
        /// Constructs instance of adapter for Microsoft ClearScript.V8
        /// </summary>
        /// <param name="v8Config">Configuration settings of V8 JavaScript engine</param>
        public V8JsEngine(V8Configuration v8Config)
        {
            V8RuntimeConstraints constraints = new V8RuntimeConstraints
            {
                MaxNewSpaceSize   = v8Config.MaxNewSpaceSize,
                MaxOldSpaceSize   = v8Config.MaxOldSpaceSize,
                MaxExecutableSize = v8Config.MaxExecutableSize
            };

            V8ScriptEngineFlags flags = V8ScriptEngineFlags.None;

            if (v8Config.EnableDebugging && v8Config.DisableGlobalMembers)
            {
                flags = V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.DisableGlobalMembers;
            }
            else if (v8Config.EnableDebugging || v8Config.DisableGlobalMembers)
            {
                flags = v8Config.EnableDebugging ?
                        V8ScriptEngineFlags.EnableDebugging : V8ScriptEngineFlags.DisableGlobalMembers;
            }

            int debugPort = v8Config.DebugPort;

            try
            {
                _jsEngine = new V8ScriptEngine(constraints, flags, debugPort);
            }
            catch (Exception e)
            {
                throw new JsEngineLoadException(
                          string.Format(CoreStrings.Runtime_JsEngineNotLoaded,
                                        ENGINE_NAME, e.Message), ENGINE_NAME, ENGINE_VERSION, e);
            }
        }
コード例 #3
0
        public void ConfigurationHasEmptyScriptPathsWhenCreated()
        {
            var sut = new V8Configuration();

            var expected = new[] {""};
            Assert.Equal(expected, sut.ScriptSearchPaths);
        }
コード例 #4
0
        public void ConfigurationAddsScriptSearchPath()
        {
            var sut = new V8Configuration()
                .AddScriptSearchPath("foo");

            var expected = new[] {"foo"};

            Assert.Equal(expected, sut.ScriptSearchPaths);
        }
コード例 #5
0
        public void ConfigurationAddsMultipleScriptSearchPaths()
        {
            var sut = new V8Configuration()
                .AddScriptSearchPath("bar")
                .AddScriptSearchPath("baz");

            var expected = new[] { "bar", "baz" };

            Assert.Equal(expected, sut.ScriptSearchPaths);
        }
コード例 #6
0
        public void FileScriptLoaderLoadsFilesFromSearchPaths()
        {
            var configuration = new V8Configuration()
                .AddScriptSearchPath(Environment.CurrentDirectory + "\\Root");

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var result = sut.Load("scriptAtRoot.js");

            Assert.Equal("baz", result);
        }
コード例 #7
0
        public void FileScriptLoaderLoadsFiles(string script, string scriptText)
        {
            var configuration = new V8Configuration()
                .AddScriptSearchPath(Environment.CurrentDirectory);

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var result = sut.Load(script);

            Assert.Equal(scriptText, result);
        }
コード例 #8
0
        public void FileScriptLoaderLoadsFilesFromSearchPathsInOrder(string searchPaths, string expectedText)
        {
            var configuration = new V8Configuration();

            foreach (var path in searchPaths.Split(','))
            {
                configuration.AddScriptSearchPath(path);
            }

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var result = sut.Load("innerScript.js");

            Assert.Equal(expectedText, result);
        }
コード例 #9
0
        public void FileScriptLoaderThrowsWhenItFailsToLoadFile(string scriptName, string searchFolders, string pathsConsidered)
        {
            var paths = searchFolders.Split(',');
            var configuration = new V8Configuration();

            foreach (var path in paths)
            {
                configuration.AddScriptSearchPath(path);
            }

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var exception = Assert.Throws<ScriptLoadException>(() => sut.Load(scriptName));

            var expectedText = "Could not find script " + scriptName + ". Paths considered:\r\n" + 
                string.Join("\r\n", pathsConsidered.Split(',')
                .Select(x => Environment.CurrentDirectory + "\\" + x));

            Assert.Equal(expectedText, exception.Message);
        }
コード例 #10
0
        public void FileScriptLoaderHandlesLoadErrorsGracefully(string scriptToLoad)
        {
            var configuration = new V8Configuration()
                .AddScriptSearchPath("");

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var exception = Assert.Throws<ScriptLoadException>(() => sut.Load(scriptToLoad));

            Assert.Equal(exception.Message, "Could not load script " + scriptToLoad + ". Check inner exception for details.");
            Assert.IsType<ArgumentException>(exception.InnerException);
        }
コード例 #11
0
        public void LoaderHandlesUrlPaths()
        {
            var configuration = new V8Configuration()
                .AddScriptSearchPath("Root")
                .AddScriptSearchPath("Root\\Inner1");

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var actual = sut.Load("./Inner2/innerScript.js");

            Assert.Equal("qux", actual);
        }
コード例 #12
0
        public void FileScriptLoaderHandlesRelativeDirectories()
        {
            var configuration = new V8Configuration()
                .AddScriptSearchPath("Root")
                .AddScriptSearchPath("Root\\Inner1");

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var actual = sut.Load("Inner2\\innerScript.js");

            Assert.Equal("qux", actual);
        }
コード例 #13
0
        public void FileScriptLoaderHandlesTrailingSlashes()
        {
            var configuration = new V8Configuration()
                .AddScriptSearchPath("Root\\");

            var sut = new FileScriptLoader()
            {
                Configuration = configuration
            };

            var actual = sut.Load("scriptAtRoot.js");

            Assert.Equal("baz", actual);
        }