gusto 1.0.0.beta14 → 1.0.0.beta15
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/assets/test_results.sass +11 -0
- data/lib/HtmlReport.coffee +19 -8
- data/lib/Spec.coffee +0 -1
- data/lib/Spec/DSL.coffee +8 -2
- data/lib/Spec/Matchers.coffee +36 -16
- data/lib/Spec/Test.coffee +2 -1
- data/lib/Spec/Util.coffee +5 -2
- data/lib/gusto.rb +17 -33
- data/lib/gusto/cli_renderer.rb +20 -1
- data/lib/gusto/server.rb +2 -2
- data/lib/gusto/server_spawner.rb +68 -0
- data/lib/gusto/version.rb +1 -1
- metadata +36 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e0f50ae2b7995069000f268d76a88a666b404f1
|
4
|
+
data.tar.gz: b31c91120be48f1ab3e772fae7509bb5eb85b032
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7844eb2a0330065e0b8046625aa7dbb533e1475537f6fd2201104d158100f39fd6aa5ab8d3fb2d4d09171ff912087935e4b915f92bd04700460599079df73867
|
7
|
+
data.tar.gz: d0566ae83ccd4f9ea6a41d0184ebba8382459c518140062c794c712b5038f98dc6d944f5dd80868820a66ceb0a575b5f640ddd8730a1cf5a94d2843bc5004ec5
|
data/assets/test_results.sass
CHANGED
@@ -31,6 +31,17 @@
|
|
31
31
|
white-space: nowrap
|
32
32
|
text-overflow: ellipsis
|
33
33
|
|
34
|
+
.test-results--full-error-message
|
35
|
+
padding: 10px
|
36
|
+
background: lighten($red, 47.5%)
|
37
|
+
color: #900
|
38
|
+
|
39
|
+
.test-results--stack-trace
|
40
|
+
font: 13px/1.6em Consolas, monaco, monospace
|
41
|
+
background: lighten($red, 50%)
|
42
|
+
padding: 10px
|
43
|
+
margin: 0
|
44
|
+
|
34
45
|
.test-results--test--failed
|
35
46
|
background: lighten($red, 45%)
|
36
47
|
|
data/lib/HtmlReport.coffee
CHANGED
@@ -41,16 +41,27 @@ class window.HtmlReport
|
|
41
41
|
html + '</ul>'
|
42
42
|
|
43
43
|
testResultsReport: (report) ->
|
44
|
-
"
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
html = "<li class=\"test-results--test test-results--test--#{@testResultsStatusClass report.status}\">"
|
45
|
+
html += "<div class=\"test-results--title\">#{report.title}</div>"
|
46
|
+
if report.error
|
47
|
+
html += @testResultsErrorReport(report)
|
48
|
+
if report.status == Spec.Report.Failed
|
49
|
+
html += @testResultsErrorDetails(report)
|
50
|
+
if report.subreports.length
|
51
|
+
html += @testResultsReports(report.subreports)
|
52
|
+
html += "</li>"
|
53
|
+
html
|
51
54
|
|
52
55
|
testResultsErrorReport: (report) ->
|
53
|
-
"<div class=\"test-results--error-message\">#{report.error}</div>"
|
56
|
+
"<div class=\"test-results--error-message\">#{Spec.Util.escape report.error}</div>"
|
57
|
+
|
58
|
+
testResultsErrorDetails: (report) ->
|
59
|
+
details = "<div class=\"test-results--error-details\">"
|
60
|
+
details += "<div class=\"test-results--full-error-message\">#{report.htmlMessage || Spec.Util.escape(report.error)}</div>"
|
61
|
+
if report.stack
|
62
|
+
details += "<pre class=\"test-results--stack-trace\">#{Spec.Util.escape report.stack}</pre>"
|
63
|
+
details += "</div>"
|
64
|
+
details
|
54
65
|
|
55
66
|
testResultsStatusClass: (status) ->
|
56
67
|
switch status
|
data/lib/Spec.coffee
CHANGED
data/lib/Spec/DSL.coffee
CHANGED
@@ -20,12 +20,18 @@ window.Spec.DSL = DSL =
|
|
20
20
|
# matcher function
|
21
21
|
to: (matcher) ->
|
22
22
|
match = matcher(object)
|
23
|
-
|
23
|
+
unless match.result
|
24
|
+
error = new Spec.ExpectationError("expected to #{match.text()}")
|
25
|
+
error.htmlMessage = match.html() if match.html
|
26
|
+
throw error
|
24
27
|
|
25
28
|
# Specifies that the object should receive a negative response
|
26
29
|
notTo: (matcher) ->
|
27
30
|
match = matcher(object)
|
28
|
-
|
31
|
+
if match.result
|
32
|
+
error = new Spec.ExpectationError("expected not to #{match.text()}")
|
33
|
+
error.htmlMessage = match.html() if match.html
|
34
|
+
throw error
|
29
35
|
|
30
36
|
# Sets up a stub on the given method, with a delayed expectation that this
|
31
37
|
# stub method be called
|
data/lib/Spec/Matchers.coffee
CHANGED
@@ -4,8 +4,9 @@ window.Spec.Matchers =
|
|
4
4
|
# Tests if matched value === expected value
|
5
5
|
be: (expected) ->
|
6
6
|
(value) ->
|
7
|
-
result:
|
8
|
-
|
7
|
+
result: value is expected
|
8
|
+
text: ->
|
9
|
+
"be #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}"
|
9
10
|
|
10
11
|
# Tests that value type matches specified class
|
11
12
|
beA: (klass) ->
|
@@ -20,8 +21,18 @@ window.Spec.Matchers =
|
|
20
21
|
# Tests if matched value == expected value
|
21
22
|
equal: (expected) ->
|
22
23
|
(value) ->
|
23
|
-
result:
|
24
|
-
|
24
|
+
result: String(value) == String(expected)
|
25
|
+
text: ->
|
26
|
+
"equal #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}"
|
27
|
+
html: ->
|
28
|
+
"<dl>
|
29
|
+
<dt>expected:</dt>
|
30
|
+
<dd>#{Spec.Util.inspectAndEscape expected}</dd>
|
31
|
+
<dt>actual:</dt>
|
32
|
+
<dd>#{Spec.Util.inspectAndEscape value}</dd>
|
33
|
+
<dt>diff:</dt>
|
34
|
+
<dd>#{$.trim diffString(String(value), String(expected))}</dd>
|
35
|
+
</dl>"
|
25
36
|
|
26
37
|
# All-purpose inclusion matcher
|
27
38
|
include: (expected) ->
|
@@ -30,8 +41,9 @@ window.Spec.Matchers =
|
|
30
41
|
match = true
|
31
42
|
for test in expected
|
32
43
|
match = false unless (value.indexOf && value.indexOf(test) >= 0) || value[test]?
|
33
|
-
result:
|
34
|
-
|
44
|
+
result: match
|
45
|
+
text: ->
|
46
|
+
"include #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}"
|
35
47
|
else if typeof expected == 'object'
|
36
48
|
(value) ->
|
37
49
|
missing = {}
|
@@ -41,8 +53,9 @@ window.Spec.Matchers =
|
|
41
53
|
unless value[test] isnt undefined && String(value[test]) == String(expected[test])
|
42
54
|
match = false
|
43
55
|
missing[test] = expected[test]
|
44
|
-
result:
|
45
|
-
|
56
|
+
result: match
|
57
|
+
text: ->
|
58
|
+
"include #{Spec.Util.inspect expected}, actual #{Spec.Util.inspect value}, missing #{Spec.Util.inspect missing}"
|
46
59
|
else
|
47
60
|
include([expected])
|
48
61
|
|
@@ -55,11 +68,15 @@ window.Spec.Matchers =
|
|
55
68
|
catch e
|
56
69
|
thrown = e.message
|
57
70
|
if thrown
|
58
|
-
result:
|
59
|
-
|
71
|
+
result: thrown == message
|
72
|
+
text: ->
|
73
|
+
"throw an error with message “#{String thrown}”, actual message “#{String message}”"
|
74
|
+
html: ->
|
75
|
+
"#{$.trim diffString(String(thrown), String(message))}"
|
60
76
|
else
|
61
|
-
result:
|
62
|
-
|
77
|
+
result: false
|
78
|
+
text: ->
|
79
|
+
"throw an error with message #{Spec.Util.inspect message}, no error thrown"
|
63
80
|
|
64
81
|
# Tests a value type using typeof, falling back to instanceof if type is an object
|
65
82
|
_haveType: (type, klass) ->
|
@@ -67,13 +84,16 @@ window.Spec.Matchers =
|
|
67
84
|
if typeof value is 'object'
|
68
85
|
@_beAnInstanceOf(klass)(value)
|
69
86
|
else
|
70
|
-
result:
|
71
|
-
|
87
|
+
result: typeof value is type
|
88
|
+
text: ->
|
89
|
+
"have type #{Spec.Util.inspect type}, actual #{Spec.Util.inspect(typeof value)}"
|
72
90
|
|
73
91
|
# Tests if matched value is an instance of class
|
74
92
|
_beAnInstanceOf: (klass) ->
|
75
93
|
(value) ->
|
76
|
-
result:
|
77
|
-
|
94
|
+
result: value instanceof klass
|
95
|
+
text: ->
|
96
|
+
"#{Spec.Util.inspect value} to be an instance of #{Spec.Util.inspect(klass.name || klass)}, actually #{Spec.Util.inspectClass value}"
|
78
97
|
|
98
|
+
window.Spec.Matchers.eq = window.Spec.Matchers.equal
|
79
99
|
window.Spec.Matchers.beAn = window.Spec.Matchers.beA
|
data/lib/Spec/Test.coffee
CHANGED
@@ -14,7 +14,8 @@ class window.Spec.Test
|
|
14
14
|
error.status || Spec.Report.Failed,
|
15
15
|
error.message
|
16
16
|
)
|
17
|
-
report.
|
17
|
+
report.stack = error.stack
|
18
|
+
report.htmlMessage = error.htmlMessage
|
18
19
|
finally
|
19
20
|
Spec.DelayedExpectation.reset()
|
20
21
|
Spec.MethodStub.reset()
|
data/lib/Spec/Util.coffee
CHANGED
@@ -64,10 +64,13 @@ window.Spec.Util =
|
|
64
64
|
# Access hasOwnProperty through Object.prototype to work around bug
|
65
65
|
# in IE6/7/8 when calling hasOwnProperty on a DOM element
|
66
66
|
if Object.prototype.hasOwnProperty.call(object, key)
|
67
|
-
properties.push
|
67
|
+
properties.push key + ': ' + Spec.Util.inspect(value)
|
68
68
|
"{#{properties.join ', '}}"
|
69
69
|
else
|
70
|
-
"“#{
|
70
|
+
"“#{object}”"
|
71
|
+
|
72
|
+
inspectAndEscape: (object) ->
|
73
|
+
@escape @inspect(object)
|
71
74
|
|
72
75
|
# Gets the class name of an object using JavaScript magic
|
73
76
|
inspectClass: (object) ->
|
data/lib/gusto.rb
CHANGED
@@ -11,6 +11,7 @@ require File.join(File.dirname(__FILE__), 'gusto', 'version')
|
|
11
11
|
module Gusto
|
12
12
|
autoload :Configuration, File.join(File.dirname(__FILE__), 'gusto', 'configuration')
|
13
13
|
autoload :Server, File.join(File.dirname(__FILE__), 'gusto', 'server')
|
14
|
+
autoload :ServerSpawner, File.join(File.dirname(__FILE__), 'gusto', 'server_spawner')
|
14
15
|
autoload :Sprockets, File.join(File.dirname(__FILE__), 'gusto', 'sprockets')
|
15
16
|
autoload :CliRenderer, File.join(File.dirname(__FILE__), 'gusto', 'cli_renderer')
|
16
17
|
|
@@ -26,48 +27,39 @@ module Gusto
|
|
26
27
|
File.expand_path "."
|
27
28
|
end
|
28
29
|
|
29
|
-
def root_url
|
30
|
-
"http://localhost:#{Configuration.port}/"
|
31
|
-
end
|
32
|
-
|
33
30
|
def server
|
34
31
|
trap_sigint
|
35
|
-
|
32
|
+
server_spawner.spawn
|
36
33
|
Process.waitall
|
37
34
|
end
|
38
35
|
|
39
36
|
def cli
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
server_spawner(quiet: true).spawn
|
38
|
+
result = run_suite?(server_spawner.port)
|
39
|
+
ensure
|
43
40
|
shut_down(result ? 0 : 1)
|
44
41
|
end
|
45
42
|
|
46
43
|
def autotest
|
47
44
|
trap_sigint
|
48
|
-
|
49
|
-
run_suite?
|
45
|
+
sever_spawner(quie: true).spawn
|
46
|
+
run_suite?(server_spawner.port)
|
50
47
|
watch_for_changes
|
51
48
|
Process.waitall
|
52
49
|
end
|
53
50
|
|
54
|
-
def
|
55
|
-
|
56
|
-
if options[:quiet]
|
57
|
-
$stdout.reopen "/dev/null", "w"
|
58
|
-
$stderr.reopen "/dev/null", "w"
|
59
|
-
end
|
60
|
-
$0 = 'gusto server'
|
61
|
-
Server.start
|
62
|
-
end
|
63
|
-
wait_for_server_at(root_url)
|
64
|
-
end
|
65
|
-
|
66
|
-
def run_suite?
|
67
|
-
json = `phantomjs #{Shellwords.escape HEADLESS_RUNNER_PATH} #{Configuration.port}`
|
51
|
+
def run_suite?(port)
|
52
|
+
json = `phantomjs #{Shellwords.escape HEADLESS_RUNNER_PATH} #{port}`
|
68
53
|
report = JSON.parse json
|
69
54
|
puts CliRenderer.new(report).render
|
70
55
|
report['status'] != 2
|
56
|
+
rescue => e
|
57
|
+
puts "Error running test suite: #{e.inspect}"
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
61
|
+
def server_spawner(quiet: false)
|
62
|
+
@server_spawner ||= ServerSpawner.new(port: Configuration.port, quiet: quiet)
|
71
63
|
end
|
72
64
|
|
73
65
|
def watch_for_changes
|
@@ -85,7 +77,7 @@ module Gusto
|
|
85
77
|
def shut_down(status=0)
|
86
78
|
@listener.stop if @listener
|
87
79
|
@browser.close if @browser
|
88
|
-
|
80
|
+
server_spawner.terminate
|
89
81
|
exit status
|
90
82
|
end
|
91
83
|
|
@@ -96,13 +88,5 @@ module Gusto
|
|
96
88
|
end
|
97
89
|
end
|
98
90
|
|
99
|
-
private
|
100
|
-
|
101
|
-
def wait_for_server_at(url)
|
102
|
-
Net::HTTP.get URI.parse(url)
|
103
|
-
rescue Errno::ECONNREFUSED
|
104
|
-
sleep 1
|
105
|
-
retry
|
106
|
-
end
|
107
91
|
end
|
108
92
|
end
|
data/lib/gusto/cli_renderer.rb
CHANGED
@@ -11,7 +11,7 @@ module Gusto
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def render
|
14
|
-
[body, footer].compact.reject(&:empty?).join("\n\n")
|
14
|
+
[body, stack_traces, footer].compact.reject(&:empty?).join("\n\n")
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
@@ -38,6 +38,25 @@ module Gusto
|
|
38
38
|
result_color report['status'], report['title']
|
39
39
|
end
|
40
40
|
|
41
|
+
def stack_traces
|
42
|
+
reports = failures_with_stack_traces(root_report['subreports'])
|
43
|
+
reports.each_with_index.map do |report, i|
|
44
|
+
result_color(report['status'], "#{i+1}. #{report['title']}") +
|
45
|
+
"\n\n" + report['stack']
|
46
|
+
end.join("\n\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def failures_with_stack_traces(reports)
|
50
|
+
collected = []
|
51
|
+
reports.each do |report|
|
52
|
+
collected << report if report['status'] == FAILED && report['stack']
|
53
|
+
if report['subreports']
|
54
|
+
collected += failures_with_stack_traces(report['subreports'])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
collected
|
58
|
+
end
|
59
|
+
|
41
60
|
def footer
|
42
61
|
result_color root_report['status'], "#{total} total, #{passed} passed, #{pending} pending, #{failed} failed"
|
43
62
|
end
|
data/lib/gusto/server.rb
CHANGED
@@ -10,8 +10,8 @@ require File.expand_path(File.dirname(__FILE__) + '/../gusto')
|
|
10
10
|
|
11
11
|
module Gusto
|
12
12
|
class Server < Sinatra::Application
|
13
|
-
def self.start
|
14
|
-
Rack::Handler.default.run rack_app, :Port =>
|
13
|
+
def self.start(host, port)
|
14
|
+
Rack::Handler.default.run rack_app, :Host => host, :Port => port
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.rack_app
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
module Gusto
|
5
|
+
class ServerSpawner
|
6
|
+
attr :port, :quiet
|
7
|
+
|
8
|
+
def initialize(options={})
|
9
|
+
@port = options[:port]
|
10
|
+
@quiet = options.fetch(:quiet, false)
|
11
|
+
end
|
12
|
+
|
13
|
+
def host
|
14
|
+
'127.0.0.1'
|
15
|
+
end
|
16
|
+
|
17
|
+
def spawn
|
18
|
+
choose_open_port
|
19
|
+
@server = Process.fork do
|
20
|
+
close_std_io if quiet
|
21
|
+
self.process_name = "gusto server on #{host}:#{port}"
|
22
|
+
start_server
|
23
|
+
end
|
24
|
+
wait_for_server_at root_url
|
25
|
+
end
|
26
|
+
|
27
|
+
def terminate
|
28
|
+
Process.kill 'TERM', @server if @server
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def choose_open_port
|
34
|
+
until port_open?(port)
|
35
|
+
puts "Port #{port} is busy, trying #{port + 1} instead"
|
36
|
+
@port += 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def close_std_io
|
41
|
+
$stdout.reopen "/dev/null", "w"
|
42
|
+
$stderr.reopen "/dev/null", "w"
|
43
|
+
end
|
44
|
+
|
45
|
+
def process_name=(name)
|
46
|
+
$0 = name
|
47
|
+
end
|
48
|
+
|
49
|
+
def start_server
|
50
|
+
Server.start host, port
|
51
|
+
end
|
52
|
+
|
53
|
+
def root_url
|
54
|
+
"http://#{host}:#{port}/"
|
55
|
+
end
|
56
|
+
|
57
|
+
def wait_for_server_at(url)
|
58
|
+
Net::HTTP.get URI.parse(url)
|
59
|
+
rescue Errno::ECONNREFUSED
|
60
|
+
sleep 1
|
61
|
+
retry
|
62
|
+
end
|
63
|
+
|
64
|
+
def port_open?(port)
|
65
|
+
!system("lsof -i:#{port}", out: '/dev/null')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/gusto/version.rb
CHANGED
metadata
CHANGED
@@ -1,125 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gusto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.beta15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Cohen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coffee-script
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sprockets
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: sprockets-helpers
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sinatra
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: sass
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: slim
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: listen
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: fosl
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
description: Gusto is Coffeescript behavioral testing framework, with a command line
|
@@ -154,6 +168,7 @@ files:
|
|
154
168
|
- lib/gusto/configuration.rb
|
155
169
|
- lib/gusto/runner.rb
|
156
170
|
- lib/gusto/server.rb
|
171
|
+
- lib/gusto/server_spawner.rb
|
157
172
|
- lib/gusto/sprockets.rb
|
158
173
|
- lib/gusto/version.rb
|
159
174
|
- phantom/headless_runner.js
|
@@ -172,17 +187,17 @@ require_paths:
|
|
172
187
|
- lib
|
173
188
|
required_ruby_version: !ruby/object:Gem::Requirement
|
174
189
|
requirements:
|
175
|
-
- -
|
190
|
+
- - ">="
|
176
191
|
- !ruby/object:Gem::Version
|
177
192
|
version: '0'
|
178
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
194
|
requirements:
|
180
|
-
- -
|
195
|
+
- - ">"
|
181
196
|
- !ruby/object:Gem::Version
|
182
197
|
version: 1.3.1
|
183
198
|
requirements: []
|
184
199
|
rubyforge_project:
|
185
|
-
rubygems_version: 2.2.
|
200
|
+
rubygems_version: 2.2.2
|
186
201
|
signing_key:
|
187
202
|
specification_version: 4
|
188
203
|
summary: Coffeescript testing framework
|