teaspoon 0.7.8 → 0.7.9
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 +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
@@ -6,7 +6,7 @@ class Teaspoon.Reporters.HTML.FailureView extends Teaspoon.Reporters.BaseView
|
|
6
6
|
|
7
7
|
build: ->
|
8
8
|
super("spec")
|
9
|
-
html = """<h1 class="teaspoon-clearfix"><a href="#{@spec.link}">#{@spec.fullDescription}</a></h1>"""
|
9
|
+
html = """<h1 class="teaspoon-clearfix"><a href="#{@spec.link}">#{@htmlSafe(@spec.fullDescription)}</a></h1>"""
|
10
10
|
for error in @spec.errors()
|
11
11
|
html += """<div><strong>#{@htmlSafe(error.message)}</strong><br/>#{@htmlSafe(error.stack || "Stack trace unavailable")}</div>"""
|
12
12
|
@el.innerHTML = html
|
@@ -13,7 +13,7 @@ class Teaspoon.Reporters.HTML.SpecView extends Teaspoon.Reporters.BaseView
|
|
13
13
|
classes = ["spec"]
|
14
14
|
classes.push("state-pending") if @spec.pending
|
15
15
|
super(classes.join(" "))
|
16
|
-
@el.innerHTML = """<a href="#{@spec.link}">#{@spec.description}</a>"""
|
16
|
+
@el.innerHTML = """<a href="#{@spec.link}">#{@htmlSafe(@spec.description)}</a>"""
|
17
17
|
@parentView = @buildParent()
|
18
18
|
@parentView.append(@el)
|
19
19
|
|
@@ -12,7 +12,7 @@ class Teaspoon.Reporters.HTML.SuiteView extends Teaspoon.Reporters.BaseView
|
|
12
12
|
|
13
13
|
build: ->
|
14
14
|
super("suite")
|
15
|
-
@el.innerHTML = """<h1><a href="#{@suite.link}">#{@suite.description}</a></h1>"""
|
15
|
+
@el.innerHTML = """<h1><a href="#{@suite.link}">#{@htmlSafe(@suite.description)}</a></h1>"""
|
16
16
|
@parentView = @buildParent()
|
17
17
|
@parentView.append(@el)
|
18
18
|
|
@@ -16,13 +16,18 @@ class @Teaspoon
|
|
16
16
|
@messages: []
|
17
17
|
|
18
18
|
@execute: ->
|
19
|
-
if
|
20
|
-
|
19
|
+
if Teaspoon.defer
|
20
|
+
Teaspoon.defer = false
|
21
21
|
return
|
22
|
-
|
22
|
+
Teaspoon.reload() if Teaspoon.started
|
23
|
+
Teaspoon.started = true
|
23
24
|
new Teaspoon.Runner()
|
24
25
|
|
25
26
|
|
27
|
+
@reload: ->
|
28
|
+
window.location.reload()
|
29
|
+
|
30
|
+
|
26
31
|
@onWindowLoad: (method) ->
|
27
32
|
originalOnload = window.onload
|
28
33
|
window.onload = ->
|
@@ -32,7 +37,7 @@ class @Teaspoon
|
|
32
37
|
|
33
38
|
@resolveDependenciesFromParams: (all = []) ->
|
34
39
|
deps = []
|
35
|
-
return all if (paths =
|
40
|
+
return all if (paths = Teaspoon.location.search.match(/[\?&]file(\[\])?=[^&\?]*/gi)) == null
|
36
41
|
|
37
42
|
for path in paths
|
38
43
|
parts = decodeURIComponent(path.replace(/\+/g, " ")).match(/\/(.+)\.(js|js.coffee|coffee)$/i)
|
@@ -43,13 +48,13 @@ class @Teaspoon
|
|
43
48
|
|
44
49
|
|
45
50
|
@log: ->
|
46
|
-
|
51
|
+
Teaspoon.messages.push(arguments[0])
|
47
52
|
try console.log(arguments...)
|
48
53
|
catch e
|
49
54
|
throw new Error("Unable to use console.log for logging")
|
50
55
|
|
51
56
|
|
52
57
|
@getMessages: ->
|
53
|
-
messages =
|
54
|
-
|
58
|
+
messages = Teaspoon.messages
|
59
|
+
Teaspoon.messages = []
|
55
60
|
messages
|
@@ -65,7 +65,7 @@ class Teaspoon.Reporters.HTML.FailureView extends Teaspoon.Reporters.HTML.Failur
|
|
65
65
|
|
66
66
|
build: ->
|
67
67
|
super("spec")
|
68
|
-
html = """<h1 class="teaspoon-clearfix"><a href="#{@spec.link}">#{@spec.fullDescription}</a></h1>"""
|
68
|
+
html = """<h1 class="teaspoon-clearfix"><a href="#{@spec.link}">#{@htmlSafe(@spec.fullDescription)}</a></h1>"""
|
69
69
|
for error in @spec.errors()
|
70
70
|
html += """<div><strong>#{error.message}</strong><br/>#{@htmlSafe(error.stack || "Stack trace unavailable")}</div>"""
|
71
71
|
@el.innerHTML = html
|
@@ -30,6 +30,7 @@ module Teaspoon::SpecHelper
|
|
30
30
|
def asset_src(dep, instrument = false)
|
31
31
|
params = "?body=1"
|
32
32
|
params << "&instrument=1" if instrument && @suite && @suite.instrument_file?(dep.pathname.to_s)
|
33
|
-
|
33
|
+
|
34
|
+
"#{Teaspoon.configuration.context}#{Rails.application.config.assets.prefix}/#{dep.logical_path}#{params}"
|
34
35
|
end
|
35
36
|
end
|
@@ -3,6 +3,10 @@
|
|
3
3
|
# require support/sinon
|
4
4
|
# require support/your-support-file
|
5
5
|
#
|
6
|
+
# PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion. Use
|
7
|
+
# this polyfill to avoid the confusion.
|
8
|
+
#= require support/bind-poly
|
9
|
+
#
|
6
10
|
# Deferring execution
|
7
11
|
# If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
|
8
12
|
# after everything has been loaded. Simple example of a timeout:
|
@@ -3,6 +3,10 @@
|
|
3
3
|
// require support/sinon
|
4
4
|
// require support/your-support-file
|
5
5
|
//
|
6
|
+
// PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion. Use
|
7
|
+
// this polyfill to avoid the confusion.
|
8
|
+
//= require support/bind-poly
|
9
|
+
//
|
6
10
|
// Deferring execution
|
7
11
|
// If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
|
8
12
|
// after everything has been loaded. Simple example of a timeout:
|
@@ -4,6 +4,10 @@
|
|
4
4
|
# require support/chai
|
5
5
|
# require support/your-support-file
|
6
6
|
#
|
7
|
+
# PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion. Use
|
8
|
+
# this polyfill to avoid the confusion.
|
9
|
+
#= require support/bind-poly
|
10
|
+
#
|
7
11
|
# Deferring execution
|
8
12
|
# If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
|
9
13
|
# after everything has been loaded. Simple example of a timeout:
|
@@ -25,8 +29,8 @@
|
|
25
29
|
# For more information see: http://chaijs.com/guide/styles
|
26
30
|
# Examples:
|
27
31
|
#
|
28
|
-
# window.assert = chai.assert
|
29
|
-
# window.expect = chai.expect
|
32
|
+
# window.assert = chai.assert
|
33
|
+
# window.expect = chai.expect
|
30
34
|
# window.should = chai.should()
|
31
35
|
#
|
32
36
|
# For more information: http://github.com/modeset/teaspoon
|
@@ -4,6 +4,10 @@
|
|
4
4
|
// require support/chai
|
5
5
|
// require support/your-support-file
|
6
6
|
//
|
7
|
+
// PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion. Use
|
8
|
+
// this polyfill to avoid the confusion.
|
9
|
+
//= require support/bind-poly
|
10
|
+
//
|
7
11
|
// Deferring execution
|
8
12
|
// If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
|
9
13
|
// after everything has been loaded. Simple example of a timeout:
|
@@ -2,6 +2,10 @@
|
|
2
2
|
# require support/sinon
|
3
3
|
# require support/your-support-file
|
4
4
|
#
|
5
|
+
# PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion. Use
|
6
|
+
# this polyfill to avoid the confusion.
|
7
|
+
#= require support/bind-poly
|
8
|
+
#
|
5
9
|
# Deferring execution
|
6
10
|
# If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
|
7
11
|
# after everything has been loaded. Simple example of a timeout:
|
@@ -2,6 +2,10 @@
|
|
2
2
|
// require support/sinon
|
3
3
|
// require support/your-support-file
|
4
4
|
//
|
5
|
+
// PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion. Use
|
6
|
+
// this polyfill to avoid the confusion.
|
7
|
+
//= require support/bind-poly
|
8
|
+
//
|
5
9
|
// Deferring execution
|
6
10
|
// If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call Teaspoon.execute()
|
7
11
|
// after everything has been loaded. Simple example of a timeout:
|
@@ -4,9 +4,10 @@ module Teaspoon
|
|
4
4
|
class Configuration
|
5
5
|
include Singleton
|
6
6
|
|
7
|
-
cattr_accessor :mount_at, :root, :asset_paths, :fixture_path, :suites, :driver_cli_options
|
7
|
+
cattr_accessor :mount_at, :context, :root, :asset_paths, :fixture_path, :suites, :driver_cli_options
|
8
8
|
@@mount_at = "/teaspoon"
|
9
|
-
@@
|
9
|
+
@@context = nil # will default to Rails #relative_url_root
|
10
|
+
@@root = nil # will default to Rails.root
|
10
11
|
@@asset_paths = ["spec/javascripts", "spec/javascripts/stylesheets", "test/javascripts", "test/javascripts/stylesheets"]
|
11
12
|
@@fixture_path = "spec/javascripts/fixtures"
|
12
13
|
@@suites = {"default" => proc{}}
|
@@ -50,7 +51,7 @@ module Teaspoon
|
|
50
51
|
end
|
51
52
|
|
52
53
|
def use_require=(val) # todo: deprecated in version 0.7.4
|
53
|
-
puts "Deprecation Notice: use_require will be removed,
|
54
|
+
puts "Deprecation Notice: use_require will be removed, set config.boot_partial to 'require_js' instead."
|
54
55
|
self.boot_partial = 'require_js' if val
|
55
56
|
end
|
56
57
|
|
data/lib/teaspoon/coverage.rb
CHANGED
@@ -2,8 +2,9 @@ module Teaspoon
|
|
2
2
|
class Coverage
|
3
3
|
include Teaspoon::Utility
|
4
4
|
|
5
|
-
def initialize(data)
|
5
|
+
def initialize(data, suite_name)
|
6
6
|
@data = data
|
7
|
+
@suite_name = suite_name
|
7
8
|
end
|
8
9
|
|
9
10
|
def reports
|
@@ -23,7 +24,7 @@ module Teaspoon
|
|
23
24
|
private
|
24
25
|
|
25
26
|
def generate_report(input, format)
|
26
|
-
result = %x{#{executable} report #{format} #{input.shellescape} --dir #{Teaspoon.configuration.coverage_output_dir}}
|
27
|
+
result = %x{#{executable} report #{format} #{input.shellescape} --dir #{File.join(Teaspoon.configuration.coverage_output_dir, @suite_name)}}
|
27
28
|
raise "Could not generate coverage report for #{format}" unless $?.exitstatus == 0
|
28
29
|
result.gsub("Done", "").gsub("Using reporter [#{format}]", "").strip
|
29
30
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
(function() {
|
2
|
+
var system = require("system");
|
3
|
+
var webpage = require("webpage");
|
4
|
+
|
5
|
+
this.Runner = (function() {
|
6
|
+
|
7
|
+
function Runner() {
|
8
|
+
this.url = system.args[1];
|
9
|
+
this.timeout = parseInt(system.args[2] || 180) * 1000;
|
10
|
+
|
11
|
+
var _this = this;
|
12
|
+
this.waitForResults = function() { Runner.prototype.waitForResults.apply(_this, arguments) };
|
13
|
+
}
|
14
|
+
|
15
|
+
Runner.prototype.run = function() {
|
16
|
+
this.initPage();
|
17
|
+
this.loadPage();
|
18
|
+
};
|
19
|
+
|
20
|
+
Runner.prototype.initPage = function() {
|
21
|
+
this.page = webpage.create();
|
22
|
+
this.page.viewportSize = {
|
23
|
+
width: 800,
|
24
|
+
height: 800
|
25
|
+
};
|
26
|
+
};
|
27
|
+
|
28
|
+
Runner.prototype.loadPage = function() {
|
29
|
+
var method, name, _ref, _results;
|
30
|
+
this.page.open(this.url);
|
31
|
+
_ref = this.pageCallbacks();
|
32
|
+
_results = [];
|
33
|
+
for (name in _ref) {
|
34
|
+
method = _ref[name];
|
35
|
+
_results.push(this.page[name] = method);
|
36
|
+
}
|
37
|
+
return _results;
|
38
|
+
};
|
39
|
+
|
40
|
+
Runner.prototype.waitForResults = function() {
|
41
|
+
if ((new Date().getTime() - this.start) >= this.timeout) this.fail("Timed out");
|
42
|
+
var finished = this.page.evaluate(function() { return window.Teaspoon && window.Teaspoon.finished });
|
43
|
+
finished ? this.finish() : setTimeout(this.waitForResults, 200);
|
44
|
+
};
|
45
|
+
|
46
|
+
Runner.prototype.fail = function(msg, errno) {
|
47
|
+
if (msg == null) msg = null;
|
48
|
+
if (errno == null) errno = 1;
|
49
|
+
if (msg) console.log("Error: " + msg);
|
50
|
+
|
51
|
+
console.log(JSON.stringify({
|
52
|
+
_teaspoon: true,
|
53
|
+
type: "exception"
|
54
|
+
}));
|
55
|
+
phantom.exit(errno);
|
56
|
+
};
|
57
|
+
|
58
|
+
Runner.prototype.finish = function() {
|
59
|
+
console.log(" ");
|
60
|
+
phantom.exit(0);
|
61
|
+
};
|
62
|
+
|
63
|
+
Runner.prototype.pageCallbacks = function() {
|
64
|
+
var _this = this;
|
65
|
+
return {
|
66
|
+
onError: function(message, trace) {
|
67
|
+
console.log(JSON.stringify({
|
68
|
+
_teaspoon: true,
|
69
|
+
type: "error",
|
70
|
+
message: message,
|
71
|
+
trace: trace
|
72
|
+
}));
|
73
|
+
_this.errored = true;
|
74
|
+
},
|
75
|
+
|
76
|
+
onConsoleMessage: function(msg) {
|
77
|
+
console.log(msg);
|
78
|
+
if (_this.errorTimeout) clearTimeout(_this.errorTimeout);
|
79
|
+
if (_this.errored) {
|
80
|
+
_this.errorTimeout = setTimeout((function() {
|
81
|
+
return _this.fail('Javascript error has cause a timeout.');
|
82
|
+
}), 1000);
|
83
|
+
return _this.errored = false;
|
84
|
+
}
|
85
|
+
},
|
86
|
+
|
87
|
+
onLoadFinished: function(status) {
|
88
|
+
if (_this.start) return;
|
89
|
+
_this.start = new Date().getTime();
|
90
|
+
var defined = _this.page.evaluate(function() {
|
91
|
+
return window.Teaspoon;
|
92
|
+
});
|
93
|
+
if (!(status === "success" && defined)) {
|
94
|
+
_this.fail("Failed to load: " + _this.url);
|
95
|
+
return;
|
96
|
+
}
|
97
|
+
_this.waitForResults();
|
98
|
+
}
|
99
|
+
};
|
100
|
+
};
|
101
|
+
|
102
|
+
return Runner;
|
103
|
+
|
104
|
+
})();
|
105
|
+
|
106
|
+
new Runner().run();
|
107
|
+
|
108
|
+
}).call(this);
|
@@ -1,18 +1,20 @@
|
|
1
|
-
require "phantomjs"
|
2
1
|
require "teaspoon/runner"
|
3
2
|
require 'teaspoon/utility'
|
4
3
|
|
4
|
+
begin
|
5
|
+
require "phantomjs"
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
|
5
9
|
module Teaspoon
|
6
10
|
module Drivers
|
7
11
|
class PhantomjsDriver < BaseDriver
|
8
12
|
include Teaspoon::Utility
|
9
13
|
|
10
|
-
def run_specs(suite, url,
|
14
|
+
def run_specs(suite, url, cli_options = nil)
|
11
15
|
runner = Teaspoon::Runner.new(suite)
|
12
16
|
|
13
|
-
|
14
|
-
# Phantomjs.run takes the command-line args as an array, so if we need to pass in switches/flags, need to split on space
|
15
|
-
Phantomjs.run(*([driver_cli_options && driver_cli_options.split(" "), script, url].flatten.compact)) do |line|
|
17
|
+
run(*cli_arguments(url, cli_options)) do |line|
|
16
18
|
runner.process(line) if line && line.strip != ""
|
17
19
|
end
|
18
20
|
|
@@ -21,12 +23,28 @@ module Teaspoon
|
|
21
23
|
|
22
24
|
protected
|
23
25
|
|
26
|
+
def run(*args, &block)
|
27
|
+
IO.popen([executable, *args]) { |io|
|
28
|
+
io.each(&block)
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def cli_arguments(url, cli_options)
|
33
|
+
[cli_options.to_s.split(" "), script, url].flatten.compact
|
34
|
+
end
|
35
|
+
|
24
36
|
def executable
|
25
|
-
|
37
|
+
executable ||= which('phantomjs')
|
38
|
+
executable = Phantomjs.path if executable.blank? && defined?(::Phantomjs)
|
39
|
+
if executable.blank?
|
40
|
+
STDOUT.print("Could not find PhantomJS. Install phantomjs or try the phantomjs gem.")
|
41
|
+
exit(1)
|
42
|
+
end
|
43
|
+
executable
|
26
44
|
end
|
27
45
|
|
28
46
|
def script
|
29
|
-
File.expand_path("../phantomjs/runner.
|
47
|
+
File.expand_path("../phantomjs/runner.js", __FILE__)
|
30
48
|
end
|
31
49
|
end
|
32
50
|
end
|
data/lib/teaspoon/engine.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require File.expand_path(__FILE__, '../../../app/controllers/teaspoon/spec_controller')
|
2
|
+
|
1
3
|
module Teaspoon
|
2
4
|
class Engine < ::Rails::Engine
|
3
5
|
|
@@ -7,6 +9,9 @@ module Teaspoon
|
|
7
9
|
# default the root if it's not set
|
8
10
|
Teaspoon.configuration.root ||= app.root
|
9
11
|
|
12
|
+
# set proper root url
|
13
|
+
Teaspoon.configuration.context ||= app.config.relative_url_root
|
14
|
+
|
10
15
|
# append the asset paths from the configuration
|
11
16
|
Teaspoon.configuration.asset_paths.each do |path|
|
12
17
|
app.config.assets.paths << Teaspoon.configuration.root.join(path).to_s
|
data/lib/teaspoon/environment.rb
CHANGED
@@ -4,10 +4,8 @@ module Teaspoon
|
|
4
4
|
module Environment
|
5
5
|
|
6
6
|
def self.load(options = {})
|
7
|
-
|
8
|
-
|
9
|
-
raise "Rails environment not found." unless rails_loaded?
|
10
|
-
end
|
7
|
+
require_environment(options[:environment])
|
8
|
+
raise "Rails environment not found." unless rails_loaded?
|
11
9
|
|
12
10
|
require "teaspoon"
|
13
11
|
require "teaspoon/suite"
|
@@ -1,13 +1,15 @@
|
|
1
1
|
module Teaspoon
|
2
2
|
module Formatters
|
3
3
|
|
4
|
-
autoload :DotFormatter, 'teaspoon/formatters/dot_formatter'
|
5
4
|
autoload :CleanFormatter, 'teaspoon/formatters/clean_formatter'
|
6
|
-
autoload :
|
7
|
-
autoload :
|
5
|
+
autoload :DotFormatter, 'teaspoon/formatters/dot_formatter'
|
6
|
+
autoload :JunitFormatter, 'teaspoon/formatters/junit_formatter'
|
7
|
+
autoload :PrideFormatter, 'teaspoon/formatters/pride_formatter'
|
8
|
+
autoload :SnowdayFormatter, 'teaspoon/formatters/snowday_formatter'
|
8
9
|
autoload :SwayzeOrOprahFormatter, 'teaspoon/formatters/swayze_or_oprah_formatter'
|
10
|
+
autoload :TapFormatter, 'teaspoon/formatters/tap_formatter'
|
11
|
+
autoload :TapYFormatter, 'teaspoon/formatters/tap_y_formatter'
|
9
12
|
autoload :TeamcityFormatter, 'teaspoon/formatters/teamcity_formatter'
|
10
|
-
autoload :JunitFormatter, 'teaspoon/formatters/junit_formatter'
|
11
13
|
|
12
14
|
class BaseFormatter
|
13
15
|
|
@@ -52,8 +54,9 @@ module Teaspoon
|
|
52
54
|
private
|
53
55
|
|
54
56
|
def log_coverage(data)
|
55
|
-
return if data.blank?
|
56
|
-
|
57
|
+
return if data.blank?
|
58
|
+
report_output = Teaspoon::Coverage.new(data, @suite_name).reports
|
59
|
+
STDOUT.print(report_output) unless suppress_logs?
|
57
60
|
end
|
58
61
|
end
|
59
62
|
end
|