boojs 0.0.29 → 0.0.30
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.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/lib/boojs/version.rb +1 -1
- data/lib/boojs.rb +32 -2
- data/spec/persist_spec.rb +74 -0
- data/spec/sample_spec.rb +51 -51
- 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: 8afbb0e166580c67fdc4952b918827224e90a09e
|
4
|
+
data.tar.gz: 0e358c78333c5630542df9a918200f6ab188be6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5899ff5185e76d0a1130172f2b0453994faa4c2201bdaf46ed9798c60bf9c7cf713ffa0fdf668715d91d1d4262842d053f1ba1dd936a03a6202c683e39c17e20
|
7
|
+
data.tar.gz: e18edf2f45f15c15d079894c0598e290c4f376827432b855972487bc2d76300b4722cc9ceab16e2c6c273fee651300278923e4bb3caf30c6c2111fdc1d284a69
|
data/README.md
CHANGED
@@ -64,10 +64,18 @@ Verify that a file contains no javascript runtime initialization errors
|
|
64
64
|
0
|
65
65
|
```
|
66
66
|
|
67
|
+
|
67
68
|
#### NOTES
|
68
69
|
* Calling `booPing()` will immediately return `"pong"` to `stdout`. You may use this to know when boo has started up fully.
|
69
70
|
* `console.error(msg)` will output to `$stderr`. `console.log(msg)` will output to `$stdout`.
|
70
71
|
|
72
|
+
#### Local Storage Persistance
|
73
|
+
Every restart of boojs will cause `localStorage` to be reset. There is a bug where multiple instances of `boojs` will all *share* the same
|
74
|
+
instance of `localStorage`, so if you open multiple copies of boojs, you are guaranteed to delete `localStorage` of all boojs instances.
|
75
|
+
You may restart the boojs intsance without deleting local storage via sending `$__RESTART__` directly to `stdin` of the boojs instance as
|
76
|
+
it's own line. You may then wait for the reply `$__RESTART_OK__`. At this point, boojs will have restarted with a fresh instance except
|
77
|
+
that `localStorage` will still be intact.
|
78
|
+
|
71
79
|
## Requirements
|
72
80
|
|
73
81
|
- Ruby 2.1 or Higher
|
data/lib/boojs/version.rb
CHANGED
data/lib/boojs.rb
CHANGED
@@ -33,6 +33,7 @@ module BooJS
|
|
33
33
|
|
34
34
|
begin
|
35
35
|
#Do we have a syntax error?
|
36
|
+
#Open a pipe and check if syntax_error
|
36
37
|
@syntax_error = false
|
37
38
|
Timeout.timeout(8) do
|
38
39
|
Open3.popen3 "#{$phantomjs_path} #{path}" do |_, out, err, _|
|
@@ -69,10 +70,16 @@ module BooJS
|
|
69
70
|
return 1
|
70
71
|
end
|
71
72
|
|
73
|
+
#Restart request
|
74
|
+
class PipeRestart < Exception
|
75
|
+
end
|
76
|
+
|
72
77
|
#Optionally, accept code to inject and a command to run
|
73
78
|
#If the command is nil, this is not executed as a oneshot
|
74
79
|
def self.pipe(str=nil, cmd=nil, will_timeout=false, output_phantomjs_pid=false)
|
75
80
|
js = %{
|
81
|
+
//Clear localStorage
|
82
|
+
|
76
83
|
var system = require('system');
|
77
84
|
function __spec_ping(str) {
|
78
85
|
system.stdout.writeLine("pong"+str)
|
@@ -121,20 +128,34 @@ module BooJS
|
|
121
128
|
|
122
129
|
@input_sender_r, @input_sender_w = IO.pipe
|
123
130
|
|
131
|
+
#Set to true on restarts, for knowing whether to output $__RESTART_OK__ when the restart finishes
|
132
|
+
pipe_restart = false
|
124
133
|
#Phantom JS Process
|
125
134
|
begin
|
126
135
|
p = IO.popen("#{$phantomjs_path} #{tmp.path}")
|
127
136
|
|
137
|
+
#If it's not a pipe restart, then clear local storage
|
138
|
+
unless pipe_restart
|
139
|
+
@input_sender_w.puts "localStorage.clear();"
|
140
|
+
end
|
141
|
+
|
128
142
|
#We are going to do a loop back (ready to rcv) to wait for the JS to respond before outputing the spec PID
|
129
143
|
#So that in the specs, we have a reliable way of testing the process execution as ending this process
|
130
144
|
#before the child process ends, will termiante the spawned process (PhantomJS) by default but not if it's
|
131
145
|
#kept alive for a while (which we handle via sending it an INT in the ensure)
|
132
|
-
if output_phantomjs_pid
|
146
|
+
if output_phantomjs_pid and not pipe_restart #Dont re-emit the PID on pipe restarts
|
133
147
|
@input_sender_w.puts "booPing();"
|
134
148
|
res = p.readline
|
135
149
|
puts p.pid
|
136
150
|
end
|
137
151
|
|
152
|
+
#Tell stdout that we did restart
|
153
|
+
if pipe_restart
|
154
|
+
pipe_restart = false
|
155
|
+
puts "$__RESTART_OK__"
|
156
|
+
$stdout.flush
|
157
|
+
end
|
158
|
+
|
138
159
|
loop do
|
139
160
|
rr, _ = select([p, STDIN]); e = rr[0]
|
140
161
|
#PhantomJS has written something
|
@@ -152,9 +173,18 @@ module BooJS
|
|
152
173
|
|
153
174
|
#User has written to this program
|
154
175
|
if e == STDIN
|
155
|
-
|
176
|
+
res = e.readline
|
177
|
+
if res == "$__RESTART__\n"
|
178
|
+
pipe_restart = true
|
179
|
+
raise PipeRestart
|
180
|
+
else
|
181
|
+
@input_sender_w.puts res
|
182
|
+
end
|
156
183
|
end
|
157
184
|
end
|
185
|
+
rescue PipeRestart
|
186
|
+
Process.kill :INT, p.pid
|
187
|
+
retry
|
158
188
|
ensure
|
159
189
|
Process.kill :INT, p.pid
|
160
190
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'open3'
|
2
|
+
Dir.chdir File.join(File.dirname(__FILE__), '../')
|
3
|
+
require './spec/helpers'
|
4
|
+
|
5
|
+
RSpec.describe "Persist" do
|
6
|
+
$stdout.sync = true
|
7
|
+
it "Does accept the restart command" do
|
8
|
+
Open3.popen3 "ruby -Ilib ./bin/boojs" do |i, o, e, t|
|
9
|
+
begin
|
10
|
+
i.puts "$__RESTART__"
|
11
|
+
res = o.readline
|
12
|
+
expect(res).to eq("$__RESTART_OK__\n")
|
13
|
+
ensure
|
14
|
+
begin
|
15
|
+
Process.kill :INT, t[:pid]
|
16
|
+
rescue Errno::ESRCH
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "Does NOT persist during new process" do
|
23
|
+
#Try once
|
24
|
+
Open3.popen3 "ruby -Ilib ./bin/boojs" do |i, o, e, t|
|
25
|
+
begin
|
26
|
+
i.puts "localStorage.setItem('foo', 'bar');"
|
27
|
+
i.puts "console.log(localStorage.getItem('foo'))"
|
28
|
+
res = o.readline
|
29
|
+
expect(res).to eq("bar\n")
|
30
|
+
ensure
|
31
|
+
begin
|
32
|
+
Process.kill :INT, t[:pid]
|
33
|
+
rescue Errno::ESRCH
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#Try again
|
39
|
+
Open3.popen3 "ruby -Ilib ./bin/boojs" do |i, o, e, t|
|
40
|
+
begin
|
41
|
+
i.puts "console.log(localStorage.getItem('foo'))"
|
42
|
+
res = o.readline
|
43
|
+
expect(res).to eq("null\n")
|
44
|
+
ensure
|
45
|
+
begin
|
46
|
+
Process.kill :INT, t[:pid]
|
47
|
+
rescue Errno::ESRCH
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
it "Does persist during restarts" do
|
55
|
+
Open3.popen3 "ruby -Ilib ./bin/boojs" do |i, o, e, t|
|
56
|
+
begin
|
57
|
+
i.puts "localStorage.setItem('foo', 'bar');"
|
58
|
+
i.puts "$__RESTART__"
|
59
|
+
res = o.readline
|
60
|
+
expect(res).to eq("$__RESTART_OK__\n")
|
61
|
+
|
62
|
+
i.puts "console.log(localStorage.getItem('foo'))"
|
63
|
+
res = o.readline
|
64
|
+
expect(res).to eq("bar\n")
|
65
|
+
ensure
|
66
|
+
begin
|
67
|
+
Process.kill :INT, t[:pid]
|
68
|
+
rescue Errno::ESRCH
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
data/spec/sample_spec.rb
CHANGED
@@ -4,64 +4,64 @@ require './spec/helpers'
|
|
4
4
|
|
5
5
|
#Files that are reported as bugged end up here for testing.
|
6
6
|
RSpec.describe "Live Culture" do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
it "Can run jquery_ajax.js and output success" do
|
8
|
+
begin
|
9
|
+
@web = Webbing.get("/", 4545) do |info|
|
10
|
+
{"hello" => "world"}
|
11
|
+
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
begin
|
14
|
+
Timeout.timeout(8) do
|
15
|
+
IO.popen "ruby -Ilib ./bin/boojs ./spec/samples/jquery_ajax.js", "r" do |p|
|
16
|
+
begin
|
17
|
+
@res = p.readline.strip
|
18
|
+
ensure
|
19
|
+
Process.kill 9, p.pid
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
rescue
|
24
|
+
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
expect(@res).to eq("success")
|
27
|
+
ensure
|
28
|
+
Process.kill(:KILL, @web.pid)
|
29
|
+
end
|
30
|
+
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
32
|
+
it "Will output to stderr on syntax error" do
|
33
|
+
begin
|
34
|
+
begin
|
35
|
+
Timeout.timeout(8) do
|
36
|
+
IO.popen "ruby -Ilib ./bin/boojs ./spec/samples/syntax_problem.js", "r" do |p|
|
37
|
+
begin
|
38
|
+
@res = p.readline.strip
|
39
|
+
ensure
|
40
|
+
Process.kill 9, p.pid
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
rescue
|
45
|
+
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
expect(@res).to eq(nil)
|
48
|
+
ensure
|
49
|
+
end
|
50
|
+
end
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
it "Will output '3' when running inputting set_a_stdin.js via stdin" do
|
53
|
+
stim = File.open("./spec/samples/set_a_stdin.js")
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
IO.popen "ruby -Ilib ./bin/boojs", "r+" do |p|
|
56
|
+
loop do
|
57
|
+
break if stim.eof
|
58
|
+
p.puts stim.gets
|
59
|
+
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
res = p.readline.strip
|
62
|
+
expect(res).to eq("3")
|
63
|
+
end
|
64
|
+
end
|
65
65
|
|
66
66
|
$stdout.sync = true
|
67
67
|
it "can run another_syntax_problem.js with the correct formatting for error" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: boojs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -144,6 +144,7 @@ files:
|
|
144
144
|
- spec/cli_spec.rb
|
145
145
|
- spec/functions_spec.rb
|
146
146
|
- spec/helpers.rb
|
147
|
+
- spec/persist_spec.rb
|
147
148
|
- spec/ping_spec.rb
|
148
149
|
- spec/sample_spec.rb
|
149
150
|
- spec/samples/another_syntax_problem.js
|
@@ -182,6 +183,7 @@ test_files:
|
|
182
183
|
- spec/cli_spec.rb
|
183
184
|
- spec/functions_spec.rb
|
184
185
|
- spec/helpers.rb
|
186
|
+
- spec/persist_spec.rb
|
185
187
|
- spec/ping_spec.rb
|
186
188
|
- spec/sample_spec.rb
|
187
189
|
- spec/samples/another_syntax_problem.js
|