コード例 #1
0
 public void can_compile_script_million_times()
 {
     _loadModuleDelegate = name => IntPtr.Zero;
     for (var i = 0; i < 10000000; i++)
     {
         IntPtr prelude = Js1.CompilePrelude("return {};", "test.js", _loadModuleDelegate, _logDelegate);
         Js1.DisposeScript(prelude);
     }
 }
コード例 #2
0
        public void long_execution_of_non_v8_code_does_not_crash()
        {
            Assert.Throws <Js1Exception>(() => {
                _cancelCallbackFactory = (timeout, action) => ThreadPool.QueueUserWorkItem(state =>
                {
                    Console.WriteLine("Calling a callback in " + timeout + "ms");
                    Thread.Sleep(timeout);
                    action();
                });
                Action <string, object[]> logger = (m, _) => Console.WriteLine(m);


                Func <string, Tuple <string, string> > getModuleSource = name =>
                {
                    var fullScriptFileName = Path.GetFullPath(Path.Combine(_jsPath, name + ".js"));
                    var scriptSource       = File.ReadAllText(fullScriptFileName, Helper.UTF8NoBom);
                    return(Tuple.Create(scriptSource, fullScriptFileName));
                };


                var preludeSource = getModuleSource("1Prelude");
                var prelude       = new PreludeScript(preludeSource.Item1, preludeSource.Item2, getModuleSource, _cancelCallbackFactory, logger);
                try
                {
                    //var cancelToken = 123;
                    prelude.ScheduleTerminateExecution();
                    Thread.Sleep(500);
                    _commandHandlerRegisteredCallback = (name, handle) => { };
                    _reverseCommandHandlerDelegate    = (name, body) => { };
                    Js1.CompileQuery(
                        prelude.GetHandle(), "log(1);", "fn", _commandHandlerRegisteredCallback,
                        _reverseCommandHandlerDelegate);

                    prelude.CancelTerminateExecution();
                }
                catch
                {
                    prelude.Dispose(); // clean up unmanaged resources if failed to create
                    throw;
                }
            });
        }
コード例 #3
0
 private void Dispose(bool disposing)
 {
     if (_disposed)
     {
         return;
     }
     if (!disposing)
     {
         throw new Exception(
                   "CompiledScript finalizer has been called, but scripts cannot be disposed from other threads. Original script file name: "
                   + _fileName);
     }
     else
     {
         var scriptHandle = _script;
         _script = IntPtr.Zero;
         Js1.DisposeScript(scriptHandle);
     }
     _disposed = true;
 }
コード例 #4
0
        public static void CheckResult(IntPtr scriptHandle, bool disposeScriptOnException)
        {
            int?   errorCode    = null;
            string errorMessage = null;

            _reportErrorCallback =
                // NOTE: this local delegate must go to a field to keep references while ReportErrors is being executed
                (code, message) =>
            {
                //NOTE: do not throw exceptions directly in this handler
                // let the CPP code clean up
                errorCode    = code;
                errorMessage = message;
            };
            Js1.ReportErrors(scriptHandle, _reportErrorCallback);
            if (errorCode != null)
            {
                if (disposeScriptOnException)
                {
                    Js1.DisposeScript(scriptHandle);
                }
                throw new Js1Exception(errorCode.Value, errorMessage);
            }
        }
コード例 #5
0
        public void api_can_be_used()
        {
            var ver = Js1.ApiVersion();

            Console.WriteLine(ver);
        }