diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..db2454c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,53 @@ +name: CI + +on: [push, pull_request] + +jobs: + ubuntu: + strategy: + fail-fast: false + matrix: + ruby: [ '3.0', '2.7', '2.6', '2.5', 'jruby', 'truffleruby' ] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Node + run: sudo apt-get install -y nodejs + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + - name: Update Rubygems + run: gem update --system + - name: Install bundler + run: gem install bundler -v '2.2.16' + - name: Install dependencies + run: bundle install + - name: Run test + run: rake + - name: Install gem + run: rake install + macos: + strategy: + fail-fast: false + matrix: + ruby: [ '3.0', '2.7', '2.6', '2.5' ] + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + - name: Update Rubygems + run: gem update --system + - name: Install bundler + run: gem install bundler -v '2.2.16' + - name: Install dependencies + run: bundle install + - name: Run test + run: rake + - name: Install gem + run: rake install diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3151394..0000000 --- a/.travis.yml +++ /dev/null @@ -1,87 +0,0 @@ -language: ruby -cache: bundler -sudo: false -# we need trust so correct gcc runs for mini_racer, latest v8 requires gcc 4.8+ - -before_install: - - if [ "$EXECJS_RUNTIME" == "V8" ]; then brew update; fi - - if [ "$EXECJS_RUNTIME" == "V8" ]; then brew install v8; fi - - if [ "$EXECJS_RUNTIME" == "Node" ]; then node --version; fi - - if [ "$EXECJS_RUNTIME" == "MiniRacer" ]; then gem install bundler -v 1.12.0; fi -script: bundle && bundle exec ruby test/test_execjs.rb - -matrix: - include: - - rvm: 2.0.0 - env: EXECJS_RUNTIME=Node - - rvm: 2.0.0 - env: EXECJS_RUNTIME=Duktape - - rvm: 2.0.0 - env: EXECJS_RUNTIME=MiniRacer - dist: trusty - sudo: true - - - rvm: 2.1.10 - env: EXECJS_RUNTIME=Node - - rvm: 2.1.10 - env: EXECJS_RUNTIME=Duktape - - rvm: 2.1.10 - env: EXECJS_RUNTIME=MiniRacer - dist: trusty - sudo: true - - - rvm: 2.2.7 - env: EXECJS_RUNTIME=Node - - rvm: 2.2.7 - env: EXECJS_RUNTIME=Duktape - - rvm: 2.2.7 - env: EXECJS_RUNTIME=MiniRacer - dist: trusty - sudo: true - - - rvm: 2.3.4 - env: EXECJS_RUNTIME=Node - - rvm: 2.3.4 - env: EXECJS_RUNTIME=Duktape - - rvm: 2.3.4 - env: EXECJS_RUNTIME=MiniRacer - dist: trusty - sudo: true - - - rvm: 2.4.1 - env: EXECJS_RUNTIME=Node - - rvm: 2.4.1 - env: EXECJS_RUNTIME=Duktape - - rvm: 2.4.1 - env: EXECJS_RUNTIME=MiniRacer - dist: trusty - sudo: true - - - rvm: ruby-head - env: EXECJS_RUNTIME=Node - - rvm: ruby-head - env: EXECJS_RUNTIME=Duktape - - rvm: ruby-head - env: EXECJS_RUNTIME=MiniRacer - dist: trusty - sudo: true - - - rvm: jruby-19mode - env: EXECJS_RUNTIME=Node - - rvm: jruby-19mode - env: EXECJS_RUNTIME=RubyRhino - - - os: osx - env: EXECJS_RUNTIME=JavaScriptCore - - os: osx - env: EXECJS_RUNTIME=Node - - os: osx - env: EXECJS_RUNTIME=Duktape - - os: osx - env: EXECJS_RUNTIME=V8 - - os: osx - env: EXECJS_RUNTIME=MiniRacer - osx_image: xcode7.3 - allow_failures: - - rvm: ruby-head - fast_finish: true diff --git a/lib/execjs/mini_racer_runtime.rb b/lib/execjs/mini_racer_runtime.rb index b8a3bca..9b66bbf 100644 --- a/lib/execjs/mini_racer_runtime.rb +++ b/lib/execjs/mini_racer_runtime.rb @@ -6,6 +6,7 @@ class Context < Runtime::Context def initialize(runtime, source = "", options={}) source = encode(source) @context = ::MiniRacer::Context.new + @context.eval("delete this.console"); translate do @context.eval(source) end diff --git a/lib/execjs/runtimes.rb b/lib/execjs/runtimes.rb index 9804257..19d9d96 100644 --- a/lib/execjs/runtimes.rb +++ b/lib/execjs/runtimes.rb @@ -24,7 +24,10 @@ module Runtimes JavaScriptCore = ExternalRuntime.new( name: "JavaScriptCore", - command: "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", + command: [ + "/System/Library/Frameworks/JavaScriptCore.framework/Versions/Current/Helpers/jsc", + "/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", + ], runner_path: ExecJS.root + "/support/jsc_runner.js" ) diff --git a/lib/execjs/support/node_runner.js b/lib/execjs/support/node_runner.js index 2987d9f..dc1b677 100644 --- a/lib/execjs/support/node_runner.js +++ b/lib/execjs/support/node_runner.js @@ -28,4 +28,5 @@ this.process = __process__; print(JSON.stringify(['err', '' + err, err.stack])); } + __process__.exit(0); }); diff --git a/test/test_execjs.rb b/test/test_execjs.rb index 81804a1..1ff9319 100644 --- a/test/test_execjs.rb +++ b/test/test_execjs.rb @@ -104,21 +104,21 @@ def test_context_call_missing_function '"\\\\"' => "\\" }.each_with_index do |(input, output), index| define_method("test_exec_string_#{index}") do - assert_equal output, ExecJS.exec("return #{input}") + assert_output output, ExecJS.exec("return #{input}") end define_method("test_eval_string_#{index}") do - assert_equal output, ExecJS.eval(input) + assert_output output, ExecJS.eval(input) end define_method("test_compile_return_string_#{index}") do context = ExecJS.compile("var a = #{input};") - assert_equal output, context.eval("a") + assert_output output, context.eval("a") end define_method("test_compile_call_string_#{index}") do context = ExecJS.compile("function a() { return #{input}; }") - assert_equal output, context.call("a") + assert_output output, context.call("a") end end @@ -145,25 +145,25 @@ def test_context_call_missing_function json_value = JSON.generate(value, quirks_mode: true) define_method("test_json_value_#{index}") do - assert_equal value, JSON.parse(json_value, quirks_mode: true) + assert_output value, JSON.parse(json_value, quirks_mode: true) end define_method("test_exec_value_#{index}") do - assert_equal value, ExecJS.exec("return #{json_value}") + assert_output value, ExecJS.exec("return #{json_value}") end define_method("test_eval_value_#{index}") do - assert_equal value, ExecJS.eval("#{json_value}") + assert_output value, ExecJS.eval("#{json_value}") end define_method("test_strinigfy_value_#{index}") do context = ExecJS.compile("function json(obj) { return JSON.stringify(obj); }") - assert_equal json_value, context.call("json", value) + assert_output json_value, context.call("json", value) end define_method("test_call_value_#{index}") do context = ExecJS.compile("function id(obj) { return obj; }") - assert_equal value, context.call("id", value) + assert_output value, context.call("id", value) end end @@ -421,4 +421,14 @@ def test_uglify assert_equal "function foo(bar){return bar}", context.call("uglify", "function foo(bar) {\n return bar;\n}") end + + private + + def assert_output(expected, actual) + if expected.nil? + assert_nil actual + else + assert_equal expected, actual + end + end end