teaspoon 0.7.8 → 0.7.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -5
- data/app/assets/javascripts/teaspoon-angular.js +19 -27
- data/app/assets/javascripts/teaspoon-jasmine.js +19 -27
- data/app/assets/javascripts/teaspoon-mocha.js +19 -28
- data/app/assets/javascripts/teaspoon-qunit.js +41 -15
- data/app/assets/javascripts/teaspoon/base/reporters/html/failure_view.coffee +1 -1
- data/app/assets/javascripts/teaspoon/base/reporters/html/spec_view.coffee +1 -1
- data/app/assets/javascripts/teaspoon/base/reporters/html/suite_view.coffee +1 -1
- data/app/assets/javascripts/teaspoon/base/teaspoon.coffee +12 -7
- data/app/assets/javascripts/teaspoon/qunit/reporters/html.coffee +1 -1
- data/app/assets/stylesheets/teaspoon.css +1 -1
- data/app/helpers/teaspoon/spec_helper.rb +2 -1
- data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.coffee +4 -0
- data/lib/generators/teaspoon/install/templates/jasmine/spec_helper.js +4 -0
- data/lib/generators/teaspoon/install/templates/mocha/spec_helper.coffee +6 -2
- data/lib/generators/teaspoon/install/templates/mocha/spec_helper.js +4 -0
- data/lib/generators/teaspoon/install/templates/qunit/test_helper.coffee +4 -0
- data/lib/generators/teaspoon/install/templates/qunit/test_helper.js +4 -0
- data/lib/teaspoon/configuration.rb +4 -3
- data/lib/teaspoon/coverage.rb +3 -2
- data/lib/teaspoon/drivers/phantomjs/runner.js +108 -0
- data/lib/teaspoon/drivers/phantomjs_driver.rb +25 -7
- data/lib/teaspoon/engine.rb +5 -0
- data/lib/teaspoon/environment.rb +2 -4
- data/lib/teaspoon/formatters/base_formatter.rb +9 -6
- data/lib/teaspoon/formatters/dot_formatter.rb +3 -2
- data/lib/teaspoon/formatters/pride_formatter.rb +48 -0
- data/lib/teaspoon/formatters/snowday_formatter.rb +20 -0
- data/lib/teaspoon/server.rb +9 -3
- data/lib/teaspoon/suite.rb +3 -3
- data/lib/teaspoon/version.rb +1 -1
- data/spec/dummy/config/initializers/teaspoon.rb +1 -1
- data/spec/javascripts/teaspoon/base/teaspoon_spec.coffee +4 -4
- data/spec/javascripts/teaspoon/other/erb_spec.js.coffee.erb +4 -0
- data/spec/javascripts/teaspoon/phantomjs/runner_spec.coffee +1 -1
- data/spec/teaspoon/configuration_spec.rb +2 -1
- data/spec/teaspoon/coverage_spec.rb +1 -1
- data/spec/teaspoon/drivers/phantomjs_driver_spec.rb +28 -14
- data/spec/teaspoon/environment_spec.rb +2 -3
- data/spec/teaspoon/formatters/base_formatter_spec.rb +3 -2
- data/spec/teaspoon/formatters/pride_formatter_spec.rb +0 -0
- data/spec/teaspoon/suite_spec.rb +5 -0
- data/vendor/assets/javascripts/support/bind-poly.js +23 -0
- metadata +10 -17
- data/lib/teaspoon/drivers/phantomjs/runner.coffee +0 -68
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'teaspoon/formatters/dot_formatter'
|
2
|
+
|
3
|
+
module Teaspoon
|
4
|
+
module Formatters
|
5
|
+
class PrideFormatter < DotFormatter
|
6
|
+
PI_3 = Math::PI / 3
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
@colors = (0...(6 * 7)).map { |n|
|
10
|
+
n *= 1.0 / 6
|
11
|
+
r = (3 * Math.sin(n ) + 3).to_i
|
12
|
+
g = (3 * Math.sin(n + 2 * PI_3) + 3).to_i
|
13
|
+
b = (3 * Math.sin(n + 4 * PI_3) + 3).to_i
|
14
|
+
36 * r + 6 * g + b + 16
|
15
|
+
}
|
16
|
+
@size = @colors.size
|
17
|
+
@index = 0
|
18
|
+
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def spec(result)
|
23
|
+
super(result, true)
|
24
|
+
if result.passing?
|
25
|
+
log_pride ".", next_color
|
26
|
+
elsif result.pending?
|
27
|
+
log "*", YELLOW
|
28
|
+
else
|
29
|
+
log "F", RED
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def next_color
|
36
|
+
c = @colors[@index % @size]
|
37
|
+
@index += 1
|
38
|
+
c
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def log_pride(str, color_code)
|
43
|
+
STDOUT.print("\e[38;5;#{color_code}m#{str}\e[0m")
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'teaspoon/formatters/dot_formatter'
|
2
|
+
|
3
|
+
module Teaspoon
|
4
|
+
module Formatters
|
5
|
+
class SnowdayFormatter < DotFormatter
|
6
|
+
|
7
|
+
def spec(result)
|
8
|
+
super(result, true)
|
9
|
+
if result.passing?
|
10
|
+
log "☃", GREEN
|
11
|
+
elsif result.pending?
|
12
|
+
log "☹", YELLOW
|
13
|
+
else
|
14
|
+
log "☠", RED
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/teaspoon/server.rb
CHANGED
@@ -7,7 +7,13 @@ module Teaspoon
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@port = find_available_port
|
10
|
-
|
10
|
+
if defined?(Thin)
|
11
|
+
if Teaspoon.configuration.suppress_log
|
12
|
+
Thin::Logging.silent = true
|
13
|
+
else
|
14
|
+
Thin::Logging.trace = false
|
15
|
+
end
|
16
|
+
end
|
11
17
|
end
|
12
18
|
|
13
19
|
def start
|
@@ -22,7 +28,7 @@ module Teaspoon
|
|
22
28
|
end
|
23
29
|
|
24
30
|
def wait_until_started
|
25
|
-
Timeout.timeout(Teaspoon.configuration.server_timeout) { @thread.join(0.1) until responsive? }
|
31
|
+
Timeout.timeout(Teaspoon.configuration.server_timeout.to_i) { @thread.join(0.1) until responsive? }
|
26
32
|
rescue Timeout::Error
|
27
33
|
raise "Server failed to start. You may need to increase the timeout configuration."
|
28
34
|
end
|
@@ -51,7 +57,7 @@ module Teaspoon
|
|
51
57
|
Port: port,
|
52
58
|
environment: "test",
|
53
59
|
AccessLog: [],
|
54
|
-
Logger:
|
60
|
+
Logger: Rails.logger,
|
55
61
|
server: Teaspoon.configuration.server
|
56
62
|
}
|
57
63
|
end
|
data/lib/teaspoon/suite.rb
CHANGED
@@ -66,8 +66,8 @@ module Teaspoon
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def link(params = {})
|
69
|
-
query = "
|
70
|
-
|
69
|
+
query = "/?#{params.to_query}" if params.present?
|
70
|
+
"#{Teaspoon.configuration.context}#{Teaspoon.configuration.mount_at}/#{name}#{query}"
|
71
71
|
end
|
72
72
|
|
73
73
|
def instrument_file?(file)
|
@@ -130,7 +130,7 @@ module Teaspoon
|
|
130
130
|
filename = filename.gsub(%r(^#{Regexp.escape(path)}[\/|\\]), "")
|
131
131
|
end
|
132
132
|
raise Teaspoon::AssetNotServable, "#{filename} is not within an asset path" if filename == original
|
133
|
-
filename.gsub(/(\.js\.coffee|\.coffee)$/, ".js")
|
133
|
+
filename.gsub('.erb', '').gsub(/(\.js\.coffee|\.coffee)$/, ".js")
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
data/lib/teaspoon/version.rb
CHANGED
@@ -4,7 +4,7 @@ Teaspoon.setup do |config|
|
|
4
4
|
config.asset_paths << Teaspoon::Engine.root.join('lib/teaspoon')
|
5
5
|
|
6
6
|
config.suite do |suite|
|
7
|
-
suite.matcher = "{spec/javascripts,spec/dummy/app/assets/javascripts/specs}/**/*_spec.{js,js.coffee,coffee}"
|
7
|
+
suite.matcher = "{spec/javascripts,spec/dummy/app/assets/javascripts/specs}/**/*_spec.{js,js.coffee,coffee,js.coffee.erb}"
|
8
8
|
suite.javascripts = ["teaspoon/jasmine"]
|
9
9
|
end
|
10
10
|
|
@@ -21,14 +21,14 @@ describe "Teaspoon", ->
|
|
21
21
|
|
22
22
|
beforeEach ->
|
23
23
|
Teaspoon.defer = false
|
24
|
+
spyOn(Teaspoon, 'reload')
|
25
|
+
@spy = spyOn(Teaspoon, "Runner")
|
24
26
|
|
25
27
|
it "allows defering (thus not instantiating the runner)", ->
|
26
28
|
Teaspoon.defer = true
|
27
|
-
spy = spyOn(Teaspoon, "Runner")
|
28
29
|
Teaspoon.execute()
|
29
|
-
expect(spy).wasNotCalled()
|
30
|
+
expect(@spy).wasNotCalled()
|
30
31
|
|
31
32
|
it "will execute if it should", ->
|
32
|
-
spy = spyOn(Teaspoon, "Runner")
|
33
33
|
Teaspoon.execute()
|
34
|
-
expect(spy).toHaveBeenCalled()
|
34
|
+
expect(@spy).toHaveBeenCalled()
|
@@ -5,7 +5,7 @@
|
|
5
5
|
window.phantom = {exit: ->}
|
6
6
|
window.require = (file) ->
|
7
7
|
switch file
|
8
|
-
when "system" then {args: ["runner.
|
8
|
+
when "system" then {args: ["runner.js", "http://host:port/path", "200"]}
|
9
9
|
when "webpage" then create: -> {
|
10
10
|
open: -> {}
|
11
11
|
evaluate: -> {}
|
@@ -51,6 +51,7 @@ describe Teaspoon::Configuration do
|
|
51
51
|
|
52
52
|
it "has the default configuration" do
|
53
53
|
expect(subject.mount_at).to eq("/teaspoon")
|
54
|
+
expect(subject.context).to eq(nil)
|
54
55
|
expect(subject.asset_paths).to include("spec/javascripts")
|
55
56
|
expect(subject.asset_paths).to include("spec/javascripts/stylesheets")
|
56
57
|
expect(subject.fixture_path).to eq("spec/javascripts/fixtures")
|
@@ -87,7 +88,7 @@ describe Teaspoon::Configuration::Suite do
|
|
87
88
|
|
88
89
|
it "has the default configuration" do
|
89
90
|
subject = Teaspoon::Configuration::Suite.new
|
90
|
-
expect(subject.matcher).to eq("{spec/javascripts,spec/dummy/app/assets/javascripts/specs}/**/*_spec.{js,js.coffee,coffee}")
|
91
|
+
expect(subject.matcher).to eq("{spec/javascripts,spec/dummy/app/assets/javascripts/specs}/**/*_spec.{js,js.coffee,coffee,js.coffee.erb}")
|
91
92
|
expect(subject.helper).to eq("spec_helper")
|
92
93
|
expect(subject.javascripts).to eq(["teaspoon/jasmine"])
|
93
94
|
expect(subject.stylesheets).to eq(["teaspoon"])
|
@@ -5,23 +5,37 @@ describe Teaspoon::Drivers::PhantomjsDriver do
|
|
5
5
|
|
6
6
|
describe "#run_specs" do
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
context "with phantomjs" do
|
9
|
+
|
10
|
+
before do
|
11
|
+
subject.stub(:run)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "instantiates the runner" do
|
15
|
+
runner = double(failure_count: nil)
|
16
|
+
Teaspoon::Runner.should_receive(:new).and_return(runner)
|
17
|
+
subject.run_specs(:default, "_url_")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "calls run and logs the results of each line using the formatter" do
|
21
|
+
args = [Teaspoon::Engine.root.join("lib/teaspoon/drivers/phantomjs/runner.js").to_s, "_url_"]
|
22
|
+
Teaspoon::Runner.any_instance.should_receive(:process).with("_line_")
|
23
|
+
@block = nil
|
24
|
+
subject.should_receive(:run).with(*args) { |&b| @block = b }
|
25
|
+
subject.run_specs(:default, "_url_")
|
26
|
+
@block.call("_line_")
|
27
|
+
end
|
11
28
|
|
12
|
-
it "instantiates the formatter" do
|
13
|
-
runner = double(failure_count: nil)
|
14
|
-
Teaspoon::Runner.should_receive(:new).and_return(runner)
|
15
|
-
subject.run_specs(:default, "_url_")
|
16
29
|
end
|
17
30
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
31
|
+
context "without phantomjs" do
|
32
|
+
|
33
|
+
it "tells you that it couldn't find phantomjs and exits" do
|
34
|
+
subject.should_receive(:which).and_return(nil)
|
35
|
+
STDOUT.should_receive(:print).with("Could not find PhantomJS. Install phantomjs or try the phantomjs gem.")
|
36
|
+
expect { subject.run_specs(:default, "_url_") }.to raise_error SystemExit
|
37
|
+
end
|
38
|
+
|
25
39
|
end
|
26
40
|
|
27
41
|
end
|
@@ -7,16 +7,15 @@ describe Teaspoon::Environment do
|
|
7
7
|
|
8
8
|
describe ".load" do
|
9
9
|
|
10
|
-
it "calls require_environment
|
11
|
-
subject.should_receive(:rails_loaded?).and_return(false)
|
10
|
+
it "calls require_environment" do
|
12
11
|
subject.should_receive(:require_environment)
|
13
12
|
subject.should_receive(:rails_loaded?).and_return(true)
|
14
13
|
Teaspoon::Environment.load
|
15
14
|
end
|
16
15
|
|
17
16
|
it "raises if Rails can't be found" do
|
18
|
-
subject.should_receive(:rails_loaded?).twice.and_return(false)
|
19
17
|
subject.should_receive(:require_environment)
|
18
|
+
subject.should_receive(:rails_loaded?).and_return(false)
|
20
19
|
expect{ Teaspoon::Environment.load }.to raise_error("Rails environment not found.")
|
21
20
|
end
|
22
21
|
|
@@ -22,7 +22,7 @@ describe Teaspoon::Formatters::BaseFormatter do
|
|
22
22
|
|
23
23
|
it "logs the coverage information" do
|
24
24
|
double = double(reports: nil)
|
25
|
-
Teaspoon::Coverage.should_receive(:new).with("_data_").and_return(double)
|
25
|
+
Teaspoon::Coverage.should_receive(:new).with("_data_", "default").and_return(double)
|
26
26
|
double.should_receive(:reports).and_return("_reports_")
|
27
27
|
STDOUT.should_receive(:print).with("_reports_")
|
28
28
|
subject.send(:log_coverage, "_data_")
|
@@ -35,7 +35,8 @@ describe Teaspoon::Formatters::BaseFormatter do
|
|
35
35
|
|
36
36
|
it "doesn't log when suppressing logs" do
|
37
37
|
subject.should_receive(:suppress_logs?).and_return(true)
|
38
|
-
Teaspoon::Coverage.
|
38
|
+
Teaspoon::Coverage.should_receive(:new).and_return(double(reports: nil))
|
39
|
+
STDOUT.should_not_receive(:print)
|
39
40
|
subject.send(:log_coverage, "_data_")
|
40
41
|
end
|
41
42
|
|
File without changes
|
data/spec/teaspoon/suite_spec.rb
CHANGED
@@ -151,6 +151,11 @@ describe Teaspoon::Suite do
|
|
151
151
|
expect(subject.link(file: ["file1", "file2"], grep: "foo")).to eql("/teaspoon/default/?file%5B%5D=file1&file%5B%5D=file2&grep=foo")
|
152
152
|
end
|
153
153
|
|
154
|
+
it "returns a link prefixed by app context if given" do
|
155
|
+
Teaspoon.configuration.stub(:context).and_return('/foo')
|
156
|
+
expect(subject.link).to eql("/foo/teaspoon/default")
|
157
|
+
end
|
158
|
+
|
154
159
|
end
|
155
160
|
|
156
161
|
describe "#instrument_file?" do
|
@@ -0,0 +1,23 @@
|
|
1
|
+
if (!Function.prototype.bind) {
|
2
|
+
Function.prototype.bind = function (oThis) {
|
3
|
+
if (typeof this !== "function") {
|
4
|
+
// closest thing possible to the ECMAScript 5 internal IsCallable function
|
5
|
+
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
6
|
+
}
|
7
|
+
|
8
|
+
var aArgs = Array.prototype.slice.call(arguments, 1),
|
9
|
+
fToBind = this,
|
10
|
+
fNOP = function () {},
|
11
|
+
fBound = function () {
|
12
|
+
return fToBind.apply(this instanceof fNOP && oThis
|
13
|
+
? this
|
14
|
+
: oThis,
|
15
|
+
aArgs.concat(Array.prototype.slice.call(arguments)));
|
16
|
+
};
|
17
|
+
|
18
|
+
fNOP.prototype = this.prototype;
|
19
|
+
fBound.prototype = new fNOP();
|
20
|
+
|
21
|
+
return fBound;
|
22
|
+
};
|
23
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teaspoon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jejacks0n
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|
@@ -32,20 +32,6 @@ dependencies:
|
|
32
32
|
- - <
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '5'
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: phantomjs
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 1.8.1.1
|
42
|
-
type: :runtime
|
43
|
-
prerelease: false
|
44
|
-
version_requirements: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - '>='
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 1.8.1.1
|
49
35
|
description: Run Javascript tests using Jasmine, Mocha or QUnit in the browser or
|
50
36
|
headlessly using PhantomJS or with Selenium Webdriver
|
51
37
|
email:
|
@@ -110,7 +96,7 @@ files:
|
|
110
96
|
- lib/teaspoon/console.rb
|
111
97
|
- lib/teaspoon/coverage.rb
|
112
98
|
- lib/teaspoon/drivers/base_driver.rb
|
113
|
-
- lib/teaspoon/drivers/phantomjs/runner.
|
99
|
+
- lib/teaspoon/drivers/phantomjs/runner.js
|
114
100
|
- lib/teaspoon/drivers/phantomjs_driver.rb
|
115
101
|
- lib/teaspoon/drivers/selenium_driver.rb
|
116
102
|
- lib/teaspoon/engine.rb
|
@@ -121,6 +107,8 @@ files:
|
|
121
107
|
- lib/teaspoon/formatters/clean_formatter.rb
|
122
108
|
- lib/teaspoon/formatters/dot_formatter.rb
|
123
109
|
- lib/teaspoon/formatters/junit_formatter.rb
|
110
|
+
- lib/teaspoon/formatters/pride_formatter.rb
|
111
|
+
- lib/teaspoon/formatters/snowday_formatter.rb
|
124
112
|
- lib/teaspoon/formatters/swayze_or_oprah_formatter.rb
|
125
113
|
- lib/teaspoon/formatters/tap_formatter.rb
|
126
114
|
- lib/teaspoon/formatters/tap_y_formatter.rb
|
@@ -141,6 +129,7 @@ files:
|
|
141
129
|
- vendor/assets/javascripts/mocha-1.10.1.MIT.LICENSE
|
142
130
|
- vendor/assets/javascripts/qunit-1.12.0.js
|
143
131
|
- vendor/assets/javascripts/qunit-1.12.0.MIT.LICENSE
|
132
|
+
- vendor/assets/javascripts/support/bind-poly.js
|
144
133
|
- vendor/assets/javascripts/support/chai.js
|
145
134
|
- vendor/assets/javascripts/support/chai.MIT.LICENSE
|
146
135
|
- vendor/assets/javascripts/support/expect.js
|
@@ -209,6 +198,7 @@ files:
|
|
209
198
|
- spec/javascripts/teaspoon/mocha/reporters/html_mspec.coffee
|
210
199
|
- spec/javascripts/teaspoon/mocha/runner_mspec.coffee
|
211
200
|
- spec/javascripts/teaspoon/mocha/spec_mspec.coffee
|
201
|
+
- spec/javascripts/teaspoon/other/erb_spec.js.coffee.erb
|
212
202
|
- spec/javascripts/teaspoon/phantomjs/runner_spec.coffee
|
213
203
|
- spec/javascripts/turbolinks_helper.coffee
|
214
204
|
- spec/spec_helper.rb
|
@@ -225,6 +215,7 @@ files:
|
|
225
215
|
- spec/teaspoon/formatters/base_formatter_spec.rb
|
226
216
|
- spec/teaspoon/formatters/dot_formatter_spec.rb
|
227
217
|
- spec/teaspoon/formatters/junit_formatter_spec.rb
|
218
|
+
- spec/teaspoon/formatters/pride_formatter_spec.rb
|
228
219
|
- spec/teaspoon/formatters/tap_formatter_spec.rb
|
229
220
|
- spec/teaspoon/formatters/tap_y_formatter_spec.rb
|
230
221
|
- spec/teaspoon/formatters/teamcity_formatter_spec.rb
|
@@ -323,6 +314,7 @@ test_files:
|
|
323
314
|
- spec/javascripts/teaspoon/mocha/reporters/html_mspec.coffee
|
324
315
|
- spec/javascripts/teaspoon/mocha/runner_mspec.coffee
|
325
316
|
- spec/javascripts/teaspoon/mocha/spec_mspec.coffee
|
317
|
+
- spec/javascripts/teaspoon/other/erb_spec.js.coffee.erb
|
326
318
|
- spec/javascripts/teaspoon/phantomjs/runner_spec.coffee
|
327
319
|
- spec/javascripts/turbolinks_helper.coffee
|
328
320
|
- spec/spec_helper.rb
|
@@ -339,6 +331,7 @@ test_files:
|
|
339
331
|
- spec/teaspoon/formatters/base_formatter_spec.rb
|
340
332
|
- spec/teaspoon/formatters/dot_formatter_spec.rb
|
341
333
|
- spec/teaspoon/formatters/junit_formatter_spec.rb
|
334
|
+
- spec/teaspoon/formatters/pride_formatter_spec.rb
|
342
335
|
- spec/teaspoon/formatters/tap_formatter_spec.rb
|
343
336
|
- spec/teaspoon/formatters/tap_y_formatter_spec.rb
|
344
337
|
- spec/teaspoon/formatters/teamcity_formatter_spec.rb
|
@@ -1,68 +0,0 @@
|
|
1
|
-
system = require "system"
|
2
|
-
webpage = require "webpage"
|
3
|
-
|
4
|
-
class @Runner
|
5
|
-
|
6
|
-
constructor: ->
|
7
|
-
@url = system.args[1]
|
8
|
-
@timeout = parseInt(system.args[2] || 180) * 1000 # todo: add configuration -- default timeout is 3 minutes
|
9
|
-
|
10
|
-
|
11
|
-
run: ->
|
12
|
-
@initPage()
|
13
|
-
@loadPage()
|
14
|
-
|
15
|
-
|
16
|
-
initPage: ->
|
17
|
-
@page = webpage.create()
|
18
|
-
@page.viewportSize = {width: 800, height: 800}
|
19
|
-
|
20
|
-
|
21
|
-
loadPage: ->
|
22
|
-
@page.open(@url)
|
23
|
-
@page[name] = method for name, method of @pageCallbacks()
|
24
|
-
|
25
|
-
|
26
|
-
waitForResults: =>
|
27
|
-
@fail("Timed out") if (new Date().getTime() - @start) >= @timeout
|
28
|
-
finished = @page.evaluate(-> window.Teaspoon && window.Teaspoon.finished)
|
29
|
-
if finished then @finish() else setTimeout(@waitForResults, 200)
|
30
|
-
|
31
|
-
|
32
|
-
fail: (msg = null, errno = 1) ->
|
33
|
-
console.log("Error: #{msg}") if msg
|
34
|
-
console.log(JSON.stringify(_teaspoon: true, type: "exception"))
|
35
|
-
phantom.exit(errno)
|
36
|
-
|
37
|
-
|
38
|
-
finish: ->
|
39
|
-
console.log(" ")
|
40
|
-
phantom.exit(0)
|
41
|
-
|
42
|
-
|
43
|
-
pageCallbacks: ->
|
44
|
-
onError: (message, trace) =>
|
45
|
-
console.log(JSON.stringify(_teaspoon: true, type: "error", message: message, trace: trace))
|
46
|
-
@errored = true
|
47
|
-
|
48
|
-
|
49
|
-
onConsoleMessage: (msg) =>
|
50
|
-
console.log(msg)
|
51
|
-
clearTimeout(@errorTimeout) if @errorTimeout
|
52
|
-
if @errored
|
53
|
-
@errorTimeout = setTimeout((=> @fail('Javascript error has cause a timeout.')), 1000)
|
54
|
-
@errored = false
|
55
|
-
|
56
|
-
|
57
|
-
onLoadFinished: (status) =>
|
58
|
-
return if @start
|
59
|
-
@start = new Date().getTime()
|
60
|
-
defined = @page.evaluate(-> window.Teaspoon)
|
61
|
-
unless status == "success" && defined
|
62
|
-
@fail("Failed to load: #{@url}")
|
63
|
-
return
|
64
|
-
|
65
|
-
@waitForResults()
|
66
|
-
|
67
|
-
|
68
|
-
new Runner().run()
|