boojs 0.0.25 → 0.0.26
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 +26 -11
- data/lib/boojs/version.rb +1 -1
- data/lib/boojs.rb +1 -0
- data/spec/functions_spec.rb +34 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db230cbf699816c58332b402c9323cc8a2247dbd
|
4
|
+
data.tar.gz: 832c8f6043bfc99893297a9d321d1d8ff27337f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad5ca9aad30b0632ea9aed44e8ed5dfb09bbde16b570af4f08c0adecfe3389ea9b5355ace6a19aeb87061806f838b6a5149d647f81a44bfb2555c2e9ac9d1f48
|
7
|
+
data.tar.gz: ffcedb596fc53da6bf9d3a96e3a685226dd715d08cea17e93912efef2c89517705124328680a245c7e136f545019ceb83c898460628f28053a6314caa5ff69fa
|
data/README.md
CHANGED
@@ -15,14 +15,14 @@
|
|
15
15
|
**BooJS** was purpose built for our continuous integration infrastructure at [Fittr®](http://www.fittr.com).
|
16
16
|
|
17
17
|
# Setup
|
18
|
-
```
|
18
|
+
```js
|
19
19
|
#Setup
|
20
20
|
gem install boojs
|
21
21
|
```
|
22
22
|
|
23
23
|
# Usage
|
24
24
|
#### SYNOPSIS
|
25
|
-
```
|
25
|
+
```js
|
26
26
|
boojs [-e statement] [-t timeout] [-v file] [file]
|
27
27
|
```
|
28
28
|
|
@@ -34,27 +34,31 @@ The following options are available:
|
|
34
34
|
|
35
35
|
#### EXAMPLES
|
36
36
|
Open a javascript pipe that reads from stdin, writes via console.log to stdout, prints exceptions via stderr, and exits with a return code of 1 if there are errors.
|
37
|
-
```
|
37
|
+
```js
|
38
38
|
(sh)>boojs
|
39
|
+
console.log("Hello world!"); //Output to $stdout
|
40
|
+
console.error("Goodbye cruel world!"); //Output to $stderr
|
39
41
|
```
|
40
42
|
|
41
43
|
Same as `boojs` but read the javascript file before reading from stdin. (i.e. preload a javascript file into your environment)
|
42
|
-
```
|
43
|
-
(sh)>boojs
|
44
|
+
```js
|
45
|
+
(sh)>boojs jquery.js
|
46
|
+
$("body").html("<h1>Hello</h1>");
|
47
|
+
console.log($("body").html())
|
44
48
|
```
|
45
49
|
|
46
50
|
Execute a javascript statement, and then immediately exit. Exceptions will return 1.
|
47
|
-
```
|
51
|
+
```js
|
48
52
|
(sh)>boojs -e "console.log(document);"
|
49
53
|
```
|
50
54
|
|
51
55
|
Execute a javascript statement, and then wait 4 seconds before exiting. Exceptions will return 1 and end execution early.
|
52
|
-
```
|
56
|
+
```js
|
53
57
|
(sh)>boojs -e "console.log(document);" -t 4
|
54
58
|
```
|
55
59
|
|
56
60
|
Verify that a file contains no javascript runtime initialization errors
|
57
|
-
```
|
61
|
+
```js
|
58
62
|
(sh)>boojs -v code.js
|
59
63
|
(sh)>echo $?
|
60
64
|
0
|
@@ -62,7 +66,7 @@ Verify that a file contains no javascript runtime initialization errors
|
|
62
66
|
|
63
67
|
#### NOTES
|
64
68
|
* Calling `booPing()` will immediately return `"pong"` to `stdout`. You may use this to know when boo has started up fully.
|
65
|
-
* `console.error(msg)` will output to stderr
|
69
|
+
* `console.error(msg)` will output to `$stderr`. `console.log(msg)` will output to `$stdout`.
|
66
70
|
|
67
71
|
## Requirements
|
68
72
|
|
@@ -76,7 +80,7 @@ Verify that a file contains no javascript runtime initialization errors
|
|
76
80
|
|
77
81
|
---
|
78
82
|
|
79
|
-
## FAQ
|
83
|
+
## FAQ & Rants
|
80
84
|
|
81
85
|
### Wait, isn't this just NodeJS?
|
82
86
|
No, they are for different things. BooJS gives you the full DOM, you can call `document` in BooJS and import arbitrary browser javascript libraries.
|
@@ -86,13 +90,24 @@ There are a myriad issues with the *PhantomJS repl*; most notably, the *PhantomJ
|
|
86
90
|
* Outputs special format characters even when not attached to a `tty`
|
87
91
|
* Does not have well defined behavior which makes it a nightmare to integrate with
|
88
92
|
* **Has no support for asynchronous stdin**
|
93
|
+
* Does not output `console.error` to `stderr`
|
89
94
|
* Changes what it considers a newline based on the attached terminal (A QT quirk)
|
90
95
|
* Is not a unix tool in any sense
|
91
96
|
|
92
97
|
I don't think any of this is the `PhantomJS`'s team fault; it's just not their focus or target.
|
93
98
|
|
94
|
-
###
|
99
|
+
### Why would I use BooJS over my browser console?
|
100
|
+
You wouldn't, if you preferred that. *BooJS* was designed for continuous integration environments and has evolved into fun for shell scripting (i.e. `netcatesque`) and even dynamic website page analysis. Some users also prefer CLI over GUI.
|
101
|
+
|
102
|
+
### ...Capistrano?
|
103
|
+
Capistrano is great for integration tests for behaviors; many users prefer to use both `BooJS` for the javascript layer and then `Capistrano` for behavioral testing, especially with frameworks like `cucumber`. `BooJS` is faster to boot and and more determinant than `Capistrano` while `Capistrano` is able to verify behavior across browsers and visuals. They go well togeather.
|
104
|
+
|
105
|
+
### Why Ruby?
|
106
|
+
Ruby has many shortcomings; Nonetheless, ruby is an excellent language for writing tools in. Ruby has a culture of testing, a mature gem database that contains many *js* parsers, increadible syntax that includes N-embeddable strings within strings without ugly escape sequences, and good support for `POSIX` interfaces.
|
95
107
|
|
108
|
+
Did you know that *WebKit* uses *Ruby* to pre-compile it's **Javascript** bytecode interpreter *LLInt*? https://trac.webkit.org/browser/releases/Apple/Safari%206.0.2/JavaScriptCore/offlineasm
|
109
|
+
|
110
|
+
### When should I use boojs?
|
96
111
|
When you need to test javascript code that needs to run in a browser but don't necessarily need to test the UI components.
|
97
112
|
|
98
113
|
### What's Fittr?
|
data/lib/boojs/version.rb
CHANGED
data/lib/boojs.rb
CHANGED
data/spec/functions_spec.rb
CHANGED
@@ -37,6 +37,40 @@ RSpec.describe "JS Functions" do
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
it "console.log writes to stdout" do
|
41
|
+
@err = StringIO.new
|
42
|
+
@out = StringIO.new
|
43
|
+
|
44
|
+
pipe = Open3.popen3("ruby -Ilib ./bin/boojs") do |i, o, e, t|
|
45
|
+
begin
|
46
|
+
Timeout::timeout(5) do
|
47
|
+
i.puts "console.log('hello world')"
|
48
|
+
loop do
|
49
|
+
res = select [o, e], []
|
50
|
+
|
51
|
+
if res[0].include? e
|
52
|
+
@err.write e.readline
|
53
|
+
end
|
54
|
+
|
55
|
+
if res[0].include? o
|
56
|
+
@out.write o.readline
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
rescue Timeout::Error
|
61
|
+
rescue EOFError
|
62
|
+
ensure
|
63
|
+
begin
|
64
|
+
Process.kill(:KILL, t[:pid])
|
65
|
+
rescue Errno::ESRCH
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
expect(@out.string.strip).to eq("hello world")
|
70
|
+
expect(@err.string.strip).to eq("")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
40
74
|
it "booPing writes 'pong' to stdout" do
|
41
75
|
@out = StringIO.new
|
42
76
|
|