execjs-xtrn 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test/shagi.rb ADDED
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+ class Shagi < Minitest::Test
3
+
4
+ Spawn=5
5
+ M=ExecJS::Xtrn
6
+
7
+ def say(code)
8
+ raise NotImplementedError, self.class.name
9
+ end
10
+
11
+ def assert_ok(result, code)
12
+ r=say code
13
+ refute r.key? 'err'
14
+ assert_equal r, {'ok'=>result}
15
+ end
16
+
17
+ def assert_err(code)
18
+ assert say(code)['err']
19
+ end
20
+
21
+ def shag_math
22
+ assert_ok 42, 'return 6*7'
23
+ assert_ok 3, 'return Math.round(Math.PI)'
24
+ end
25
+
26
+ Chars='Япония, 中华, Russia'
27
+ Codes=[1071, 1087, 1086, 1085, 1080, 1103, 44, 32, 20013, 21326, 44, 32, 82, 117, 115, 115, 105, 97]
28
+
29
+ def shag_intl
30
+ assert_ok Codes, <<-EOJ
31
+ var s='#{Chars}'
32
+ var r=[]
33
+ for(var i=0; i<s.length; i++) r.push(s.charCodeAt(i))
34
+ return r
35
+ EOJ
36
+
37
+ assert_ok Chars, <<-EOJ
38
+ var c=#{Codes}
39
+ var s=''
40
+ for(var i=0; i<c.length; i++) s+=String.fromCharCode(c[i])
41
+ return s
42
+ EOJ
43
+ end
44
+
45
+ def shag_error
46
+ assert_err '#' # Syntax
47
+ assert_err 'none' # Runtime
48
+ assert_err false # Argument
49
+ assert_err key: 2 # the same
50
+ end
51
+
52
+ def shag_null
53
+ assert_equal say(''), {}
54
+ assert_ok nil, 'return null'
55
+ end
56
+
57
+ def shag_vars
58
+ assert_err 'localVar'
59
+ say 'var localVar=1'
60
+ assert_err 'localVar'
61
+
62
+ assert_err 'globalVar'
63
+ say "globalVar=#{v=rand 1000}"
64
+ assert_ok v, 'return globalVar'
65
+ end
66
+
67
+ def shag_stats
68
+ @child.stats r={}
69
+ say '//'
70
+ assert_equal r[:n], 1
71
+ ri=@child.stats
72
+ rc=@child.class.stats
73
+ say ''
74
+ assert_equal r[:n], 2
75
+ assert_equal ri[:n]+1, @child.stats[:n]
76
+ assert_equal rc[:n]+1, @child.class.stats[:n]
77
+ [r, ri, rc].each{|rec| %w(i o t).each{|sym| assert rec[sym.to_sym]}}
78
+ assert_operator rc[:c], :>, 0
79
+ end
80
+
81
+ end
data/test/top.rb ADDED
@@ -0,0 +1,80 @@
1
+ require 'coffee-script'
2
+ require 'uglifier'
3
+ ExecJS::Xtrn.init
4
+
5
+ class TestTop < Minitest::Test
6
+
7
+ def test_exec
8
+ assert_equal 42, ExecJS.exec('return 6*7')
9
+ end
10
+
11
+ def test_eval
12
+ assert_equal 42, ExecJS.eval('6*7')
13
+ end
14
+
15
+ def test_compile
16
+ ctx=ExecJS.compile <<-EOJ
17
+ dec = function(i)
18
+ {
19
+ return i-1
20
+ }
21
+ EOJ
22
+ assert_equal 8, ctx.call('dec', 9)
23
+ end
24
+
25
+ def test_stats
26
+ ctx=ExecJS.compile <<-EOJ
27
+ summa = function(n)
28
+ {
29
+ var r=0
30
+ for(var i = 1; i<=n; i++)
31
+ {
32
+ r+=i
33
+ for(var t = ms() ; t>=ms(); );
34
+ }
35
+ return r
36
+ }
37
+ function ms()
38
+ {
39
+ return new Date().getTime()
40
+ }
41
+ EOJ
42
+ s=ctx.stats
43
+ %w(i o n t).each{|sym| assert s[sym.to_sym]}
44
+ ctx.exec ' '
45
+ assert_equal s, ctx.stats
46
+ assert_equal 5050, ctx.call('summa', 100)
47
+ assert_equal s[:n]+1, ctx.stats[:n]
48
+ %w(i o t).each{|sym| assert_operator s[sym.to_sym], :<, ctx.stats[sym.to_sym]}
49
+ end
50
+
51
+ def test_coffee
52
+ assert CoffeeScript.compile('->', header: true)[CoffeeScript.version]
53
+ assert CoffeeScript.compile('a b c', bare: true)['a(b(c))']
54
+ end
55
+
56
+ def test_uglify
57
+ u=Uglifier.new
58
+ assert u.compile('a( 1 + 2 * 3 )')['a(7)']
59
+ assert u.compile('b( 1 ? x : y )')['b(x)']
60
+ end
61
+
62
+ def test_switch
63
+ assert_equal 42, ExecJS.eval('7*6')
64
+ e=ExecJS::Xtrn.engine
65
+ ExecJS::Xtrn.engine=FakeEngine
66
+ assert_equal 1, ExecJS.exec('A')
67
+ assert_equal 2, ExecJS.eval('B')
68
+ assert_equal 4, ExecJS.compile.eval('C')
69
+ ExecJS::Xtrn.engine=e
70
+ assert_equal 42, ExecJS.eval('21*2')
71
+ end
72
+
73
+ end
74
+
75
+ class FakeEngine < ExecJS::Xtrn::Engine
76
+ def exec(s='')
77
+ @@n||=0
78
+ @@n+=1
79
+ end
80
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: execjs-xtrn
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Stas Ukolov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coffee-script
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: uglifier
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Drop-in replacement for ExecJS with persistent external runtime
84
+ email:
85
+ - ukoloff@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - .travis.yml
92
+ - Gemfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - execjs-xtrn.gemspec
97
+ - lib/execjs/node/index.js
98
+ - lib/execjs/node/package.json
99
+ - lib/execjs/wsh/json2.js
100
+ - lib/execjs/wsh/repl.js
101
+ - lib/execjs/xtrn.rb
102
+ - lib/execjs/xtrn/child.rb
103
+ - lib/execjs/xtrn/engine.rb
104
+ - lib/execjs/xtrn/init.rb
105
+ - lib/execjs/xtrn/node.rb
106
+ - lib/execjs/xtrn/nvm.rb
107
+ - lib/execjs/xtrn/version.rb
108
+ - lib/execjs/xtrn/wsh.rb
109
+ - test/child.rb
110
+ - test/engine.rb
111
+ - test/nvm.rb
112
+ - test/shagi.rb
113
+ - test/top.rb
114
+ - lib/execjs/node/node_modules/split/index.js
115
+ - lib/execjs/node/node_modules/through/index.js
116
+ homepage: https://github.com/ukoloff/execjs-xtrn
117
+ licenses:
118
+ - MIT
119
+ metadata: {}
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ requirements: []
135
+ rubyforge_project:
136
+ rubygems_version: 2.0.3
137
+ signing_key:
138
+ specification_version: 4
139
+ summary: 'Proof-of-concept: make ExecJS fast even without therubyracer'
140
+ test_files:
141
+ - test/child.rb
142
+ - test/engine.rb
143
+ - test/nvm.rb
144
+ - test/shagi.rb
145
+ - test/top.rb