dienashorner 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +15 -0
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/lib/nashorn.rb +1 -1
- data/lib/nashorn/context.rb +8 -2
- data/lib/nashorn/execjs/runtime.rb +8 -6
- data/lib/nashorn/ext.rb +1 -19
- data/lib/nashorn/rhino/less.rb +49 -8
- data/lib/nashorn/ruby.rb +29 -0
- data/lib/nashorn/version.rb +2 -2
- data/spec/nashorn/ext_spec.rb +142 -0
- data/spec/nashorn/ruby_spec.rb +8 -0
- data/spec/nashorn/test_execjs.rb +23 -29
- data/spec/nashorn_spec.rb +8 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55418407ed597875c9e30b3c4e984cee94217f91
|
4
|
+
data.tar.gz: b0032e9cc1fc2cc6e4f44a33639335a87b22525e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31cd85e1027c9cf4a43336f853a9ee5e21cb806cc2475e7ae48d6592477ce1c45b651f8230760b538356d64ad95f162ad1417f025dc3ad582d20bca2bf6ba13b
|
7
|
+
data.tar.gz: f8dc1ce3afc7b7c40650b2f3f53b0b22e0f51c3f133b9ee97107bd6c0b1f2ead26e9e7aedb3a45bc671dcda6fb649a69a2bea1101891b1c9b0f52a1b86dbd81a
|
data/.travis.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
rvm:
|
2
|
+
- jruby-1.7.24
|
3
|
+
- jruby-9.0.5.0
|
4
|
+
jdk:
|
5
|
+
- oraclejdk8
|
6
|
+
|
7
|
+
script: "if [[ -v COMMAND ]]; then $COMMAND; else rake spec; fi"
|
8
|
+
|
9
|
+
env:
|
10
|
+
global:
|
11
|
+
- JAVA_OPTS="-Xmx512M"
|
12
|
+
matrix:
|
13
|
+
- COMMAND="ruby -Ilib spec/nashorn/test_execjs.rb"
|
14
|
+
- EMPTY='' # COMMAND="rake spec"
|
15
|
+
|
data/Gemfile
CHANGED
@@ -7,7 +7,7 @@ group :test do
|
|
7
7
|
#gem 'redjs', :git => 'git://github.com/cowboyd/redjs.git', :group => :test,
|
8
8
|
# :ref => "0d844f066666f967a78b20beb164c52d9ac3f5ca"
|
9
9
|
gem 'less', '~> 2.6.0', :require => false
|
10
|
-
gem 'execjs', '2.
|
10
|
+
gem 'execjs', '~> 2.7.0', :require => false
|
11
11
|
end
|
12
12
|
|
13
13
|
gem 'rake', :require => false, :group => :development
|
data/README.md
CHANGED
@@ -143,8 +143,8 @@ Far from being a drop-in replacement although there's `require 'nashorn/rhino'`.
|
|
143
143
|
|
144
144
|
### Less.rb
|
145
145
|
|
146
|
-
[Less.rb](https://github.com/cowboyd/less.rb) seems to be working
|
147
|
-
will
|
146
|
+
[Less.rb](https://github.com/cowboyd/less.rb) seems to be working (with hacks),
|
147
|
+
for now you will need to :`require 'nashorn/rhino/less'` before `require 'less'`.
|
148
148
|
|
149
149
|
|
150
150
|
### ExecJS
|
@@ -168,4 +168,4 @@ Copyright (c) 2016 Karol Bucek. Apache License v2 (see LICENSE for details).
|
|
168
168
|
|
169
169
|
[0]: http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html
|
170
170
|
[3]: https://github.com/rails/execjs
|
171
|
-
[4]: http://openjdk.java.net/projects/nashorn/
|
171
|
+
[4]: http://openjdk.java.net/projects/nashorn/
|
data/lib/nashorn.rb
CHANGED
@@ -18,7 +18,7 @@ module Nashorn
|
|
18
18
|
# Undefined = Java::JdkNashornInternalRuntime::Undefined rescue nil
|
19
19
|
end
|
20
20
|
|
21
|
-
def eval_js(source, options =
|
21
|
+
def eval_js(source, options = nil)
|
22
22
|
factory = JS::NashornScriptEngineFactory.new
|
23
23
|
factory.getScriptEngine.eval(source)
|
24
24
|
end
|
data/lib/nashorn/context.rb
CHANGED
@@ -85,6 +85,8 @@ module Nashorn
|
|
85
85
|
|
86
86
|
def factory; @native.getFactory end
|
87
87
|
|
88
|
+
attr_reader :scope
|
89
|
+
|
88
90
|
# Read a value from the global scope of this context
|
89
91
|
def [](key)
|
90
92
|
@scope[key]
|
@@ -96,19 +98,23 @@ module Nashorn
|
|
96
98
|
@scope[key] = val
|
97
99
|
end
|
98
100
|
|
101
|
+
# @private
|
102
|
+
FILENAME = javax.script.ScriptEngine.FILENAME
|
103
|
+
|
99
104
|
# Evaluate a String/IO of JavaScript in this context.
|
100
|
-
def eval(source,
|
105
|
+
def eval(source, filename = nil, line = nil)
|
101
106
|
open do
|
102
107
|
if IO === source || StringIO === source
|
103
108
|
source = IOReader.new(source)
|
104
109
|
else
|
105
110
|
source = source.to_s
|
106
111
|
end
|
112
|
+
@native.put(FILENAME, filename) if filename
|
107
113
|
Nashorn.to_rb @native.eval(source, @scope)
|
108
114
|
end
|
109
115
|
end
|
110
116
|
|
111
|
-
def evaluate(source); eval(source) end
|
117
|
+
def evaluate(source, filename = nil); eval(source, filename) end
|
112
118
|
|
113
119
|
# Read the contents of <tt>filename</tt> and evaluate it as JavaScript.
|
114
120
|
#
|
@@ -1,10 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'execjs/runtime'
|
2
3
|
|
3
4
|
module ExecJS
|
4
5
|
class NashornRuntime < Runtime
|
5
6
|
class Context < Runtime::Context
|
6
7
|
|
7
|
-
def initialize(
|
8
|
+
def initialize(_, source = nil, _ = nil)
|
8
9
|
source = encode(source) if source
|
9
10
|
@nashorn_context = ::Nashorn::Context.new
|
10
11
|
@nashorn_context.eval(source) if source
|
@@ -17,7 +18,7 @@ module ExecJS
|
|
17
18
|
eval "(function(){#{source}})()", options if /\S/ =~ source
|
18
19
|
end
|
19
20
|
|
20
|
-
def eval(source,
|
21
|
+
def eval(source, _ = nil) # options not used
|
21
22
|
source = encode(source)
|
22
23
|
unbox @nashorn_context.eval("(#{source})") if /\S/ =~ source
|
23
24
|
rescue Exception => e
|
@@ -25,10 +26,11 @@ module ExecJS
|
|
25
26
|
end
|
26
27
|
|
27
28
|
def call(prop, *args)
|
28
|
-
|
29
|
-
|
30
|
-
rescue Exception => e
|
31
|
-
|
29
|
+
# evaled = @nashorn_context.eval(prop)
|
30
|
+
# unbox evaled.call(*args)
|
31
|
+
#rescue Exception => e
|
32
|
+
# raise wrap_error(e)
|
33
|
+
eval "#{prop}.apply(this, #{::JSON.generate(args)})"
|
32
34
|
end
|
33
35
|
|
34
36
|
def unbox(value)
|
data/lib/nashorn/ext.rb
CHANGED
@@ -167,25 +167,7 @@ module Nashorn
|
|
167
167
|
|
168
168
|
# @private NOTE: duplicated from JSObject
|
169
169
|
def call(*args)
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
#if isFunction
|
174
|
-
# this = Nashorn.to_js args.shift
|
175
|
-
#
|
176
|
-
# puts "calling this = #{this.inspect} args = #{args.inspect}"
|
177
|
-
#
|
178
|
-
# result = __call__(this, Nashorn.args_to_js(args))
|
179
|
-
#else
|
180
|
-
|
181
|
-
#puts "calling args = #{args.inspect} Nashorn.args_to_js(args) #{Nashorn.args_to_js(args).inspect}"
|
182
|
-
|
183
|
-
result = __call__ nil, *Nashorn.args_to_js(args)
|
184
|
-
|
185
|
-
#puts "called result = #{result.inspect} #{result.class}"
|
186
|
-
|
187
|
-
Nashorn.to_rb result
|
188
|
-
#end
|
170
|
+
Nashorn.to_rb __call__ nil, *Nashorn.args_to_js(args) # this = nil
|
189
171
|
rescue JS::NashornException => e
|
190
172
|
raise Nashorn::JSError.new(e)
|
191
173
|
end
|
data/lib/nashorn/rhino/less.rb
CHANGED
@@ -61,24 +61,65 @@ module Less
|
|
61
61
|
private
|
62
62
|
|
63
63
|
def handle_js_error(e)
|
64
|
-
|
65
|
-
raise e # TODO NOT IMPLEMENTED
|
66
|
-
|
67
64
|
#if e.value && ( e.value['message'] || e.value['type'].is_a?(String) )
|
68
65
|
# raise Less::ParseError.new(e, e.value) # LessError
|
69
66
|
#end
|
70
|
-
|
71
|
-
|
72
|
-
|
67
|
+
raise Less::ParseError.new(e) if ::Nashorn::JSError.parse_error?(e.cause)
|
68
|
+
|
69
|
+
msg = e.value.to_s
|
70
|
+
raise Less::ParseError.new(msg) if msg.start_with?("missing opening `(`")
|
73
71
|
#if e.message && e.message[0, 12] == "Syntax Error"
|
74
72
|
# raise Less::ParseError.new(e)
|
75
|
-
#else
|
76
|
-
# raise Less::Error.new(e)
|
77
73
|
#end
|
74
|
+
raise Less::Error.new(e)
|
78
75
|
end
|
79
76
|
|
80
77
|
end
|
78
|
+
|
79
|
+
def self.to_js_hash(hash) # TODO this needs to be figured out
|
80
|
+
# we can not pass wrapped Ruby Hash objects down as they won't
|
81
|
+
# have a prototype (and thus no hasOwnProperty)
|
82
|
+
js_hash = Nashorn.eval_js '({})'
|
83
|
+
hash.each { |key, val| js_hash[key] = val }
|
84
|
+
js_hash
|
85
|
+
end
|
86
|
+
|
81
87
|
end
|
82
88
|
end
|
83
89
|
|
84
90
|
Less::JavaScript.context_wrapper = Less::JavaScript::NashornContext
|
91
|
+
|
92
|
+
require 'less'
|
93
|
+
|
94
|
+
Less::Parser.class_eval do
|
95
|
+
|
96
|
+
def initialize(options = {})
|
97
|
+
env = {}
|
98
|
+
Less.defaults.merge(options).each do |key, val|
|
99
|
+
env[key.to_s] =
|
100
|
+
case val
|
101
|
+
when Symbol, Pathname then val.to_s
|
102
|
+
when Array
|
103
|
+
val.map!(&:to_s) if key.to_sym == :paths # might contain Pathname-s
|
104
|
+
val # keep the original passed Array
|
105
|
+
else val # true/false/String/Method
|
106
|
+
end
|
107
|
+
end
|
108
|
+
###
|
109
|
+
env = Less::JavaScript.to_js_hash env
|
110
|
+
###
|
111
|
+
@parser = Less::JavaScript.exec { Less['Parser'].new(env) }
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
Less::Parser::Tree.class_eval do
|
117
|
+
|
118
|
+
def to_css(opts = {})
|
119
|
+
###
|
120
|
+
opts = Less::JavaScript.to_js_hash opts
|
121
|
+
###
|
122
|
+
Less::JavaScript.exec { @tree.toCSS(opts) }
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
data/lib/nashorn/ruby.rb
CHANGED
@@ -88,6 +88,11 @@ module Nashorn
|
|
88
88
|
|
89
89
|
private
|
90
90
|
|
91
|
+
# @private
|
92
|
+
NUMBER_CLASS = Java::JavaLang::Number.java_class
|
93
|
+
# @private
|
94
|
+
STRING_CLASS = Java::JavaLang::String.java_class
|
95
|
+
|
91
96
|
def convert(name)
|
92
97
|
if exclude?(name)
|
93
98
|
nil
|
@@ -130,6 +135,20 @@ module Nashorn
|
|
130
135
|
instance.class.equal? @unwrap
|
131
136
|
end
|
132
137
|
|
138
|
+
# @override
|
139
|
+
def isInstanceOf(clazz)
|
140
|
+
@unwrap.is_a?(clazz)
|
141
|
+
end
|
142
|
+
|
143
|
+
# @override
|
144
|
+
def getDefaultValue(hint)
|
145
|
+
if hint && NUMBER_CLASS.eql?(hint)
|
146
|
+
return hint.to_f if hint.respond_to?(:to_f)
|
147
|
+
return hint.to_i if hint.respond_to?(:to_i)
|
148
|
+
end
|
149
|
+
@unwrap.to_s
|
150
|
+
end
|
151
|
+
|
133
152
|
# @override
|
134
153
|
def isArray; @unwrap.is_a?(Array) end
|
135
154
|
|
@@ -193,6 +212,16 @@ module Nashorn
|
|
193
212
|
instance.class.equal? @unwrap
|
194
213
|
end
|
195
214
|
|
215
|
+
# @override
|
216
|
+
def isInstanceOf(clazz)
|
217
|
+
@unwrap.is_a?(clazz)
|
218
|
+
end
|
219
|
+
|
220
|
+
# @override
|
221
|
+
def getDefaultValue(hint)
|
222
|
+
@unwrap.to_s
|
223
|
+
end
|
224
|
+
|
196
225
|
# @override
|
197
226
|
def isArray; false end
|
198
227
|
|
data/lib/nashorn/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Nashorn
|
2
|
-
VERSION = '0.
|
3
|
-
end
|
2
|
+
VERSION = '0.3.0'
|
3
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module NashornHelpers
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def add_prototype_key(hash, recurse = false)
|
8
|
+
hash['prototype'] ||= {}
|
9
|
+
hash.keys.each do |key|
|
10
|
+
val = hash[key] unless key == 'prototype'
|
11
|
+
add_prototype_key(val, recurse) if val.is_a?(Hash)
|
12
|
+
end if recurse
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
shared_examples_for 'JSObject', :shared => true do
|
18
|
+
|
19
|
+
it "acts like a hash" do
|
20
|
+
@object['foo'] = 'bar'
|
21
|
+
@object['foo'].should == 'bar'
|
22
|
+
end
|
23
|
+
|
24
|
+
# it "might be converted to a hash with string keys" do
|
25
|
+
# @object[42] = '42'
|
26
|
+
# @object[:foo] = 'bar'
|
27
|
+
# expect = @object.respond_to?(:to_h_properties) ? @object.to_h_properties : {}
|
28
|
+
# @object.to_h.should == expect.merge('42' => '42', 'foo' => 'bar')
|
29
|
+
# end
|
30
|
+
|
31
|
+
it "yields properties with each" do
|
32
|
+
@object['1'] = 1
|
33
|
+
@object['3'] = 3
|
34
|
+
@object['2'] = 2
|
35
|
+
@object.each do |key, val|
|
36
|
+
case key
|
37
|
+
when '1' then val.should == 1
|
38
|
+
when '2' then val.should == 2
|
39
|
+
when '3' then val.should == 3
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "JS Array" do
|
47
|
+
|
48
|
+
before do
|
49
|
+
@object = Nashorn.eval_js '[ 1, 2, 3 ]'
|
50
|
+
end
|
51
|
+
|
52
|
+
it_should_behave_like 'JSObject'
|
53
|
+
|
54
|
+
it "converts toString" do
|
55
|
+
@object.to_s.should == '{"0"=>1, "1"=>2, "2"=>3}'
|
56
|
+
end
|
57
|
+
|
58
|
+
it "converts toString" do
|
59
|
+
@object.getDefaultValue(nil).should == '1,2,3'
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'routes rhino methods' do
|
63
|
+
@object.proto.should_not be nil
|
64
|
+
@object.class_name.should == 'Array'
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'raises on missing method' do
|
68
|
+
lambda { @object.aMissingMethod }.should raise_error(NoMethodError)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'puts JS property' do
|
72
|
+
@object.hasMember('foo').should == false
|
73
|
+
@object.foo = 'bar'
|
74
|
+
@object.hasMember('foo').should == true
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'gets JS property' do
|
78
|
+
@object.put('foo', 42)
|
79
|
+
@object.foo.should == 42
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "JS Object" do
|
85
|
+
|
86
|
+
before do
|
87
|
+
@object = Nashorn.eval_js 'Object.create({})'
|
88
|
+
end
|
89
|
+
|
90
|
+
it_should_behave_like 'JSObject'
|
91
|
+
|
92
|
+
it 'raises on missing method' do
|
93
|
+
lambda { @object.aMissingMethod }.should raise_error(NoMethodError)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'puts JS property' do
|
97
|
+
@object.hasMember('foo').should == false
|
98
|
+
@object.foo = 'bar'
|
99
|
+
@object.hasMember('foo').should == true
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'gets JS property' do
|
103
|
+
@object.put('foo', 42)
|
104
|
+
@object.foo.should == 42
|
105
|
+
end
|
106
|
+
|
107
|
+
# it 'is == to an empty Hash / Map' do
|
108
|
+
# ( @object == {} ).should be true
|
109
|
+
# ( @object == java.util.HashMap.new ).should be true
|
110
|
+
# end
|
111
|
+
#
|
112
|
+
# it 'is === to an empty Hash' do
|
113
|
+
# ( @object === {} ).should be true
|
114
|
+
# end
|
115
|
+
|
116
|
+
it 'is eql? to an empty Hash / Map' do
|
117
|
+
( @object.eql?( {} ) ).should be true
|
118
|
+
( @object.eql?( java.util.HashMap.new ) ).should be true
|
119
|
+
end
|
120
|
+
|
121
|
+
# it 'is eql? to another native object' do
|
122
|
+
# object = @context.newObject(scope)
|
123
|
+
# ( @object.eql?( object ) ).should be true
|
124
|
+
# ( object.eql?( @object ) ).should be true
|
125
|
+
# ( @object == object ).should be true
|
126
|
+
# ( object === @object ).should be true
|
127
|
+
# end
|
128
|
+
|
129
|
+
# it 'objects with same values are equal' do
|
130
|
+
# #object1 = @object; object1['foo'] = 'bar'; object1['answer'] = 42
|
131
|
+
# #object2 = Nashorn.eval_js '({ foo: "bar", answer: 42 })'
|
132
|
+
# Nashorn::Context.open do |js|
|
133
|
+
# object1 = js.eval '({})'
|
134
|
+
# object1['foo'] = 'bar'; object1['answer'] = 42
|
135
|
+
# object2 = js.eval '({ foo: "bar", answer: 42 })'
|
136
|
+
#
|
137
|
+
# ( object1 == object2 ).should be true
|
138
|
+
# ( object1.eql?( object2 ) ).should be true
|
139
|
+
# end
|
140
|
+
# end
|
141
|
+
|
142
|
+
end
|
data/spec/nashorn/ruby_spec.rb
CHANGED
@@ -127,6 +127,14 @@ describe Nashorn::Ruby::Object do
|
|
127
127
|
rb_object.keys.should_not include('writer')
|
128
128
|
end
|
129
129
|
|
130
|
+
it 'getDefaultValue returns to_s' do
|
131
|
+
rb_object = Nashorn::Ruby::Object.wrap object = UII.new
|
132
|
+
str = object.to_s # <UII:0x7b9a4292>
|
133
|
+
expect( rb_object.getDefaultValue(nil) ).to eql str
|
134
|
+
expect( rb_object.getDefaultValue(java.lang.Number.java_class) ).to eql str
|
135
|
+
expect( rb_object.getDefaultValue(java.lang.String.java_class) ).to eql str
|
136
|
+
end
|
137
|
+
|
130
138
|
it "is aliased to RubyObject" do
|
131
139
|
Nashorn::RubyObject.should be(Nashorn::Ruby::Object)
|
132
140
|
end
|
data/spec/nashorn/test_execjs.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
require
|
3
|
-
|
4
|
-
require
|
5
|
-
|
6
|
-
|
7
|
-
require
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "execjs/module"
|
4
|
+
require "json"
|
5
|
+
|
6
|
+
begin
|
7
|
+
require "execjs"
|
8
|
+
rescue ExecJS::RuntimeUnavailable => e
|
9
|
+
warn e
|
10
|
+
exit 2
|
11
|
+
end
|
8
12
|
|
9
13
|
if defined? Minitest::Test
|
10
14
|
Test = Minitest::Test
|
@@ -13,26 +17,10 @@ elsif defined? MiniTest::Unit::TestCase
|
|
13
17
|
end
|
14
18
|
|
15
19
|
class TestExecJS < Test
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# runtime = ExecJS::ExternalRuntime.new(command: "ruby")
|
21
|
-
# assert runtime.available?
|
22
|
-
# end
|
23
|
-
#
|
24
|
-
# def test_runtime_assignment
|
25
|
-
# original_runtime = ExecJS.runtime
|
26
|
-
# runtime = ExecJS::ExternalRuntime.new(command: "nonexistent")
|
27
|
-
# assert_raises(ExecJS::RuntimeUnavailable) { ExecJS.runtime = runtime }
|
28
|
-
# assert_equal original_runtime, ExecJS.runtime
|
29
|
-
#
|
30
|
-
# runtime = ExecJS::ExternalRuntime.new(command: "ruby")
|
31
|
-
# ExecJS.runtime = runtime
|
32
|
-
# assert_equal runtime, ExecJS.runtime
|
33
|
-
# ensure
|
34
|
-
# ExecJS.runtime = original_runtime
|
35
|
-
# end
|
20
|
+
|
21
|
+
def setup
|
22
|
+
super
|
23
|
+
end
|
36
24
|
|
37
25
|
def test_context_call
|
38
26
|
context = ExecJS.compile("id = function(v) { return v; }")
|
@@ -80,6 +68,9 @@ class TestExecJS < Test
|
|
80
68
|
end
|
81
69
|
|
82
70
|
define_method("test_compile_return_string_#{index}") do
|
71
|
+
|
72
|
+
puts "var a = #{input};"
|
73
|
+
|
83
74
|
context = ExecJS.compile("var a = #{input};")
|
84
75
|
assert_equal output, context.eval("a")
|
85
76
|
end
|
@@ -125,7 +116,6 @@ class TestExecJS < Test
|
|
125
116
|
end
|
126
117
|
|
127
118
|
define_method("test_strinigfy_value_#{index}") do
|
128
|
-
# context = ExecJS.compile("function json(obj) { return obj || JSON.stringify(obj); }")
|
129
119
|
context = ExecJS.compile("function json(obj) { return JSON.stringify(obj); }")
|
130
120
|
|
131
121
|
puts context.inspect; puts "value = #{value.inspect}"
|
@@ -270,6 +260,9 @@ class TestExecJS < Test
|
|
270
260
|
ExecJS.eval(")")
|
271
261
|
flunk
|
272
262
|
rescue ExecJS::RuntimeError => e
|
263
|
+
|
264
|
+
#puts "\n\nEVAL: " + e.inspect + "\n #{e.backtrace.join("\n ")}\n"
|
265
|
+
|
273
266
|
assert e
|
274
267
|
assert e.backtrace[0].include?("(execjs):1"), e.backtrace.join("\n")
|
275
268
|
end
|
@@ -332,7 +325,7 @@ class TestExecJS < Test
|
|
332
325
|
ExecJS.compile("throw 'hello'")
|
333
326
|
end
|
334
327
|
end
|
335
|
-
|
328
|
+
|
336
329
|
def test_babel
|
337
330
|
skip if ExecJS.runtime.is_a?(ExecJS::RubyRhinoRuntime)
|
338
331
|
|
@@ -370,5 +363,6 @@ class TestExecJS < Test
|
|
370
363
|
assert_equal "function foo(bar){return bar}",
|
371
364
|
context.call("uglify", "function foo(bar) {\n return bar;\n}")
|
372
365
|
end
|
373
|
-
|
366
|
+
|
374
367
|
end
|
368
|
+
|
data/spec/nashorn_spec.rb
CHANGED
@@ -7,6 +7,14 @@ describe Nashorn do
|
|
7
7
|
expect( Nashorn.eval_js 'true + 100' ).to eql 101
|
8
8
|
end
|
9
9
|
|
10
|
+
it 'getDefaultValue is used for toString' do
|
11
|
+
arr = Nashorn.eval('[ 1, 2 ]')
|
12
|
+
expect( arr ).to be_a Nashorn::JS::JSObject
|
13
|
+
expect( arr.getDefaultValue(nil) ).to eql '1,2'
|
14
|
+
expect( arr.getDefaultValue(java.lang.Number.java_class) ).to eql '1,2'
|
15
|
+
expect( arr.getDefaultValue(java.lang.String.java_class) ).to eql '1,2'
|
16
|
+
end
|
17
|
+
|
10
18
|
class NashornStub
|
11
19
|
include Nashorn
|
12
20
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dienashorner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karol Bucek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -49,6 +49,7 @@ extra_rdoc_files:
|
|
49
49
|
files:
|
50
50
|
- ".gitignore"
|
51
51
|
- ".rspec"
|
52
|
+
- ".travis.yml"
|
52
53
|
- Gemfile
|
53
54
|
- LICENSE
|
54
55
|
- README.md
|
@@ -70,6 +71,7 @@ files:
|
|
70
71
|
- lib/nashorn/version.rb
|
71
72
|
- spec/nashorn/access_spec.rb
|
72
73
|
- spec/nashorn/error_spec.rb
|
74
|
+
- spec/nashorn/ext_spec.rb
|
73
75
|
- spec/nashorn/integration/bar.js
|
74
76
|
- spec/nashorn/integration/foo.js
|
75
77
|
- spec/nashorn/integration/index.js
|