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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cef218e8022c1570a522f1d4a1d7f7f8e2a367f
|
4
|
+
data.tar.gz: ca33470c138fad431468907cb7e8c0961cd6d739
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3d0cfcf706cf47bff2d7bb0b727159ba2e77dfa02dfaca7199ff68bae1583fd9d46ef331340c2cfc0fcefd9c3138892abdbf01990ff5db0e6cc45e266d5776a
|
7
|
+
data.tar.gz: ad850647cd5f11675c4bb3995326a4bb31eb40bc0b7e1f0b14d6438786f098272aee1858bafc65294a448bf6467d3b46763099123d21c9ea7eff55a218e55e12
|
data/README.md
CHANGED
@@ -53,8 +53,11 @@ Updating requires that you rename your `teabag.rb` initializer to `teaspoon.rb`,
|
|
53
53
|
|
54
54
|
Add it to your Gemfile. In most cases you'll want to restrict it to the `:development, :test` or `:asset` groups.
|
55
55
|
|
56
|
+
You should [install phantomjs](http://phantomjs.org/download.html). If phantomjs is found it will be used, otherwise you can use the gem as a fallback -- which might not be optimal.
|
57
|
+
|
56
58
|
```ruby
|
57
59
|
group :development, :test do
|
60
|
+
gem "phantomjs", ">= 1.8.1.1" # this is optional if you install phantomjs manually (as of teaspoon 0.7.9)
|
58
61
|
gem "teaspoon"
|
59
62
|
end
|
60
63
|
```
|
@@ -71,9 +74,6 @@ You can tell the generator which framework you want to use, if you want coffeesc
|
|
71
74
|
rails generate teaspoon:install --framework=mocha --coffee
|
72
75
|
```
|
73
76
|
|
74
|
-
You can optionally [install phantomjs](http://phantomjs.org/download.html). If phantomjs is found it will be used, otherwise the gem will be used as a fallback -- which might not be optimal.
|
75
|
-
|
76
|
-
|
77
77
|
## Usage
|
78
78
|
|
79
79
|
Teaspoon uses the Rails asset pipeline to serve files. This allows you to use `= require` in your test files, and allows you use things like HAML or RABL/JBuilder within your fixtures. You can run Teaspoon in three ways -- in the browser, via the rake task, and using the command line interface.
|
@@ -278,7 +278,7 @@ An example text report that's output to the console after the tests have complet
|
|
278
278
|
File | % Stmts |% Branches | % Funcs | % Lines |
|
279
279
|
--------------------+-----------+-----------+-----------+-----------+
|
280
280
|
phantomjs/ | 93.75 | 75 | 94.12 | 93.65 |
|
281
|
-
runner.
|
281
|
+
runner.js | 93.75 | 75 | 94.12 | 93.65 |
|
282
282
|
--------------------+-----------+-----------+-----------+-----------+
|
283
283
|
All files | 93.75 | 75 | 94.12 | 93.65 |
|
284
284
|
--------------------+-----------+-----------+-----------+-----------+
|
@@ -598,7 +598,16 @@ You can require these files in your spec helper by using:
|
|
598
598
|
|
599
599
|
## CI Support
|
600
600
|
|
601
|
-
Teaspoon works great on CI setups. If you're using TravisCI it just works, but if you're using something else all you should need is to ensure phantomjs is installed.
|
601
|
+
Teaspoon works great on CI setups. Add a line to execute Teaspoon (e.g. `bundle exec teaspoon`) in your CI config file. If you're using TravisCI or CircleCI it just works, but if you're using something else all you should need is to ensure phantomjs is installed.
|
602
|
+
|
603
|
+
You can add teaspoon to the default rake tasks by clearing out the defaults (this is sometimes not required), and then adding teaspoon in the chain where you want. So with rspec and cucumber, you get the rspec specs running first, then the javascript specs, and then cucumber (or whatever integration specs you have). This is what I do personally, and then I don't have to do any CI setup.
|
604
|
+
|
605
|
+
```ruby
|
606
|
+
Rake::Task['default'].prerequisites.clear
|
607
|
+
Rake::Task['default'].clear
|
608
|
+
|
609
|
+
task default: [:spec, :teaspoon, :cucumber]
|
610
|
+
```
|
602
611
|
|
603
612
|
If you want to generate reports that CI can use you can install istanbul for coverage reports -- and output the report using the cobertura format, which Hudson can read.
|
604
613
|
|
@@ -26217,14 +26217,21 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26217
26217
|
Teaspoon.messages = [];
|
26218
26218
|
|
26219
26219
|
Teaspoon.execute = function() {
|
26220
|
-
if (
|
26221
|
-
|
26220
|
+
if (Teaspoon.defer) {
|
26221
|
+
Teaspoon.defer = false;
|
26222
26222
|
return;
|
26223
26223
|
}
|
26224
|
-
|
26224
|
+
if (Teaspoon.started) {
|
26225
|
+
Teaspoon.reload();
|
26226
|
+
}
|
26227
|
+
Teaspoon.started = true;
|
26225
26228
|
return new Teaspoon.Runner();
|
26226
26229
|
};
|
26227
26230
|
|
26231
|
+
Teaspoon.reload = function() {
|
26232
|
+
return window.location.reload();
|
26233
|
+
};
|
26234
|
+
|
26228
26235
|
Teaspoon.onWindowLoad = function(method) {
|
26229
26236
|
var originalOnload;
|
26230
26237
|
originalOnload = window.onload;
|
@@ -26242,7 +26249,7 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26242
26249
|
all = [];
|
26243
26250
|
}
|
26244
26251
|
deps = [];
|
26245
|
-
if ((paths =
|
26252
|
+
if ((paths = Teaspoon.location.search.match(/[\?&]file(\[\])?=[^&\?]*/gi)) === null) {
|
26246
26253
|
return all;
|
26247
26254
|
}
|
26248
26255
|
for (_i = 0, _len = paths.length; _i < _len; _i++) {
|
@@ -26264,7 +26271,7 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26264
26271
|
|
26265
26272
|
Teaspoon.log = function() {
|
26266
26273
|
var e;
|
26267
|
-
|
26274
|
+
Teaspoon.messages.push(arguments[0]);
|
26268
26275
|
try {
|
26269
26276
|
return console.log.apply(console, arguments);
|
26270
26277
|
} catch (_error) {
|
@@ -26275,8 +26282,8 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26275
26282
|
|
26276
26283
|
Teaspoon.getMessages = function() {
|
26277
26284
|
var messages;
|
26278
|
-
messages =
|
26279
|
-
|
26285
|
+
messages = Teaspoon.messages;
|
26286
|
+
Teaspoon.messages = [];
|
26280
26287
|
return messages;
|
26281
26288
|
};
|
26282
26289
|
|
@@ -26613,7 +26620,8 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26613
26620
|
|
26614
26621
|
function HTML() {
|
26615
26622
|
this.toggleConfig = __bind(this.toggleConfig, this);
|
26616
|
-
this.reportRunnerResults = __bind(this.reportRunnerResults, this);
|
26623
|
+
this.reportRunnerResults = __bind(this.reportRunnerResults, this);
|
26624
|
+
this.start = new Teaspoon.Date().getTime();
|
26617
26625
|
this.config = {
|
26618
26626
|
"use-catch": true,
|
26619
26627
|
"build-full-report": false,
|
@@ -26638,7 +26646,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26638
26646
|
|
26639
26647
|
HTML.prototype.build = function() {
|
26640
26648
|
var _ref;
|
26641
|
-
|
26642
26649
|
this.buildLayout();
|
26643
26650
|
this.setText("env-info", this.envInfo());
|
26644
26651
|
this.setText("version", Teaspoon.version);
|
@@ -26656,7 +26663,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26656
26663
|
|
26657
26664
|
HTML.prototype.buildLayout = function() {
|
26658
26665
|
var el;
|
26659
|
-
|
26660
26666
|
el = this.createEl("div");
|
26661
26667
|
el.id = "teaspoon-interface";
|
26662
26668
|
el.innerHTML = Teaspoon.Reporters.HTML.template;
|
@@ -26665,7 +26671,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26665
26671
|
|
26666
26672
|
HTML.prototype.buildSuiteSelect = function() {
|
26667
26673
|
var options, suite, _i, _len, _ref;
|
26668
|
-
|
26669
26674
|
if (Teaspoon.suites.all.length === 1) {
|
26670
26675
|
return "";
|
26671
26676
|
}
|
@@ -26742,7 +26747,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26742
26747
|
|
26743
26748
|
HTML.prototype.updateStatus = function(spec) {
|
26744
26749
|
var elapsed, result, _ref, _ref1;
|
26745
|
-
|
26746
26750
|
spec = new Teaspoon.Spec(spec);
|
26747
26751
|
result = spec.result();
|
26748
26752
|
if (result.skipped || result.status === "pending") {
|
@@ -26771,7 +26775,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26771
26775
|
|
26772
26776
|
HTML.prototype.showConfiguration = function() {
|
26773
26777
|
var key, value, _ref, _results;
|
26774
|
-
|
26775
26778
|
_ref = this.config;
|
26776
26779
|
_results = [];
|
26777
26780
|
for (key in _ref) {
|
@@ -26787,7 +26790,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26787
26790
|
|
26788
26791
|
HTML.prototype.setFilters = function() {
|
26789
26792
|
var link;
|
26790
|
-
|
26791
26793
|
link = [Teaspoon.root, Teaspoon.suites.active].join('/');
|
26792
26794
|
if (Teaspoon.params["file"]) {
|
26793
26795
|
this.filters.push("by file: " + Teaspoon.params["file"] + " <a href='" + link + "'>remove</a>");
|
@@ -26799,7 +26801,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26799
26801
|
|
26800
26802
|
HTML.prototype.readConfig = function() {
|
26801
26803
|
var config;
|
26802
|
-
|
26803
26804
|
if (config = this.cookie("teaspoon")) {
|
26804
26805
|
return this.config = config;
|
26805
26806
|
}
|
@@ -26807,7 +26808,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26807
26808
|
|
26808
26809
|
HTML.prototype.toggleConfig = function(e) {
|
26809
26810
|
var button, name;
|
26810
|
-
|
26811
26811
|
button = e.target;
|
26812
26812
|
if (button.tagName.toLowerCase() !== "button") {
|
26813
26813
|
return;
|
@@ -26828,7 +26828,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26828
26828
|
|
26829
26829
|
HTML.prototype.cookie = function(name, value) {
|
26830
26830
|
var date, match;
|
26831
|
-
|
26832
26831
|
if (value == null) {
|
26833
26832
|
value = void 0;
|
26834
26833
|
}
|
@@ -26982,20 +26981,18 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
26982
26981
|
|
26983
26982
|
SpecView.prototype.build = function() {
|
26984
26983
|
var classes;
|
26985
|
-
|
26986
26984
|
classes = ["spec"];
|
26987
26985
|
if (this.spec.pending) {
|
26988
26986
|
classes.push("state-pending");
|
26989
26987
|
}
|
26990
26988
|
SpecView.__super__.build.call(this, classes.join(" "));
|
26991
|
-
this.el.innerHTML = "<a href=\"" + this.spec.link + "\">" + this.spec.description + "</a>";
|
26989
|
+
this.el.innerHTML = "<a href=\"" + this.spec.link + "\">" + (this.htmlSafe(this.spec.description)) + "</a>";
|
26992
26990
|
this.parentView = this.buildParent();
|
26993
26991
|
return this.parentView.append(this.el);
|
26994
26992
|
};
|
26995
26993
|
|
26996
26994
|
SpecView.prototype.buildParent = function() {
|
26997
26995
|
var parent, view;
|
26998
|
-
|
26999
26996
|
parent = this.spec.parent;
|
27000
26997
|
if (parent.viewId) {
|
27001
26998
|
return this.views.suites[parent.viewId];
|
@@ -27007,7 +27004,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
27007
27004
|
|
27008
27005
|
SpecView.prototype.buildErrors = function() {
|
27009
27006
|
var div, error, html, _i, _len, _ref;
|
27010
|
-
|
27011
27007
|
div = this.createEl("div");
|
27012
27008
|
html = "";
|
27013
27009
|
_ref = this.spec.errors();
|
@@ -27021,7 +27017,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
27021
27017
|
|
27022
27018
|
SpecView.prototype.updateState = function(state, elapsed) {
|
27023
27019
|
var classes, result, _base;
|
27024
|
-
|
27025
27020
|
result = this.spec.result();
|
27026
27021
|
classes = ["state-" + state];
|
27027
27022
|
if (elapsed > Teaspoon.slow) {
|
@@ -27056,9 +27051,8 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
27056
27051
|
|
27057
27052
|
FailureView.prototype.build = function() {
|
27058
27053
|
var error, html, _i, _len, _ref;
|
27059
|
-
|
27060
27054
|
FailureView.__super__.build.call(this, "spec");
|
27061
|
-
html = "<h1 class=\"teaspoon-clearfix\"><a href=\"" + this.spec.link + "\">" + this.spec.fullDescription + "</a></h1>";
|
27055
|
+
html = "<h1 class=\"teaspoon-clearfix\"><a href=\"" + this.spec.link + "\">" + (this.htmlSafe(this.spec.fullDescription)) + "</a></h1>";
|
27062
27056
|
_ref = this.spec.errors();
|
27063
27057
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
27064
27058
|
error = _ref[_i];
|
@@ -27095,14 +27089,13 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
27095
27089
|
|
27096
27090
|
SuiteView.prototype.build = function() {
|
27097
27091
|
SuiteView.__super__.build.call(this, "suite");
|
27098
|
-
this.el.innerHTML = "<h1><a href=\"" + this.suite.link + "\">" + this.suite.description + "</a></h1>";
|
27092
|
+
this.el.innerHTML = "<h1><a href=\"" + this.suite.link + "\">" + (this.htmlSafe(this.suite.description)) + "</a></h1>";
|
27099
27093
|
this.parentView = this.buildParent();
|
27100
27094
|
return this.parentView.append(this.el);
|
27101
27095
|
};
|
27102
27096
|
|
27103
27097
|
SuiteView.prototype.buildParent = function() {
|
27104
27098
|
var parent, view;
|
27105
|
-
|
27106
27099
|
parent = this.suite.parent;
|
27107
27100
|
if (!parent) {
|
27108
27101
|
return this.reporter;
|
@@ -27124,7 +27117,6 @@ angular.element(document).find('head').append('<style type="text/css">@charset "
|
|
27124
27117
|
|
27125
27118
|
SuiteView.prototype.updateState = function(state) {
|
27126
27119
|
var _base;
|
27127
|
-
|
27128
27120
|
if (this.state === "failed") {
|
27129
27121
|
return;
|
27130
27122
|
}
|
@@ -2623,14 +2623,21 @@ jasmine.version_= {
|
|
2623
2623
|
Teaspoon.messages = [];
|
2624
2624
|
|
2625
2625
|
Teaspoon.execute = function() {
|
2626
|
-
if (
|
2627
|
-
|
2626
|
+
if (Teaspoon.defer) {
|
2627
|
+
Teaspoon.defer = false;
|
2628
2628
|
return;
|
2629
2629
|
}
|
2630
|
-
|
2630
|
+
if (Teaspoon.started) {
|
2631
|
+
Teaspoon.reload();
|
2632
|
+
}
|
2633
|
+
Teaspoon.started = true;
|
2631
2634
|
return new Teaspoon.Runner();
|
2632
2635
|
};
|
2633
2636
|
|
2637
|
+
Teaspoon.reload = function() {
|
2638
|
+
return window.location.reload();
|
2639
|
+
};
|
2640
|
+
|
2634
2641
|
Teaspoon.onWindowLoad = function(method) {
|
2635
2642
|
var originalOnload;
|
2636
2643
|
originalOnload = window.onload;
|
@@ -2648,7 +2655,7 @@ jasmine.version_= {
|
|
2648
2655
|
all = [];
|
2649
2656
|
}
|
2650
2657
|
deps = [];
|
2651
|
-
if ((paths =
|
2658
|
+
if ((paths = Teaspoon.location.search.match(/[\?&]file(\[\])?=[^&\?]*/gi)) === null) {
|
2652
2659
|
return all;
|
2653
2660
|
}
|
2654
2661
|
for (_i = 0, _len = paths.length; _i < _len; _i++) {
|
@@ -2670,7 +2677,7 @@ jasmine.version_= {
|
|
2670
2677
|
|
2671
2678
|
Teaspoon.log = function() {
|
2672
2679
|
var e;
|
2673
|
-
|
2680
|
+
Teaspoon.messages.push(arguments[0]);
|
2674
2681
|
try {
|
2675
2682
|
return console.log.apply(console, arguments);
|
2676
2683
|
} catch (_error) {
|
@@ -2681,8 +2688,8 @@ jasmine.version_= {
|
|
2681
2688
|
|
2682
2689
|
Teaspoon.getMessages = function() {
|
2683
2690
|
var messages;
|
2684
|
-
messages =
|
2685
|
-
|
2691
|
+
messages = Teaspoon.messages;
|
2692
|
+
Teaspoon.messages = [];
|
2686
2693
|
return messages;
|
2687
2694
|
};
|
2688
2695
|
|
@@ -3019,7 +3026,8 @@ jasmine.version_= {
|
|
3019
3026
|
|
3020
3027
|
function HTML() {
|
3021
3028
|
this.toggleConfig = __bind(this.toggleConfig, this);
|
3022
|
-
this.reportRunnerResults = __bind(this.reportRunnerResults, this);
|
3029
|
+
this.reportRunnerResults = __bind(this.reportRunnerResults, this);
|
3030
|
+
this.start = new Teaspoon.Date().getTime();
|
3023
3031
|
this.config = {
|
3024
3032
|
"use-catch": true,
|
3025
3033
|
"build-full-report": false,
|
@@ -3044,7 +3052,6 @@ jasmine.version_= {
|
|
3044
3052
|
|
3045
3053
|
HTML.prototype.build = function() {
|
3046
3054
|
var _ref;
|
3047
|
-
|
3048
3055
|
this.buildLayout();
|
3049
3056
|
this.setText("env-info", this.envInfo());
|
3050
3057
|
this.setText("version", Teaspoon.version);
|
@@ -3062,7 +3069,6 @@ jasmine.version_= {
|
|
3062
3069
|
|
3063
3070
|
HTML.prototype.buildLayout = function() {
|
3064
3071
|
var el;
|
3065
|
-
|
3066
3072
|
el = this.createEl("div");
|
3067
3073
|
el.id = "teaspoon-interface";
|
3068
3074
|
el.innerHTML = Teaspoon.Reporters.HTML.template;
|
@@ -3071,7 +3077,6 @@ jasmine.version_= {
|
|
3071
3077
|
|
3072
3078
|
HTML.prototype.buildSuiteSelect = function() {
|
3073
3079
|
var options, suite, _i, _len, _ref;
|
3074
|
-
|
3075
3080
|
if (Teaspoon.suites.all.length === 1) {
|
3076
3081
|
return "";
|
3077
3082
|
}
|
@@ -3148,7 +3153,6 @@ jasmine.version_= {
|
|
3148
3153
|
|
3149
3154
|
HTML.prototype.updateStatus = function(spec) {
|
3150
3155
|
var elapsed, result, _ref, _ref1;
|
3151
|
-
|
3152
3156
|
spec = new Teaspoon.Spec(spec);
|
3153
3157
|
result = spec.result();
|
3154
3158
|
if (result.skipped || result.status === "pending") {
|
@@ -3177,7 +3181,6 @@ jasmine.version_= {
|
|
3177
3181
|
|
3178
3182
|
HTML.prototype.showConfiguration = function() {
|
3179
3183
|
var key, value, _ref, _results;
|
3180
|
-
|
3181
3184
|
_ref = this.config;
|
3182
3185
|
_results = [];
|
3183
3186
|
for (key in _ref) {
|
@@ -3193,7 +3196,6 @@ jasmine.version_= {
|
|
3193
3196
|
|
3194
3197
|
HTML.prototype.setFilters = function() {
|
3195
3198
|
var link;
|
3196
|
-
|
3197
3199
|
link = [Teaspoon.root, Teaspoon.suites.active].join('/');
|
3198
3200
|
if (Teaspoon.params["file"]) {
|
3199
3201
|
this.filters.push("by file: " + Teaspoon.params["file"] + " <a href='" + link + "'>remove</a>");
|
@@ -3205,7 +3207,6 @@ jasmine.version_= {
|
|
3205
3207
|
|
3206
3208
|
HTML.prototype.readConfig = function() {
|
3207
3209
|
var config;
|
3208
|
-
|
3209
3210
|
if (config = this.cookie("teaspoon")) {
|
3210
3211
|
return this.config = config;
|
3211
3212
|
}
|
@@ -3213,7 +3214,6 @@ jasmine.version_= {
|
|
3213
3214
|
|
3214
3215
|
HTML.prototype.toggleConfig = function(e) {
|
3215
3216
|
var button, name;
|
3216
|
-
|
3217
3217
|
button = e.target;
|
3218
3218
|
if (button.tagName.toLowerCase() !== "button") {
|
3219
3219
|
return;
|
@@ -3234,7 +3234,6 @@ jasmine.version_= {
|
|
3234
3234
|
|
3235
3235
|
HTML.prototype.cookie = function(name, value) {
|
3236
3236
|
var date, match;
|
3237
|
-
|
3238
3237
|
if (value == null) {
|
3239
3238
|
value = void 0;
|
3240
3239
|
}
|
@@ -3388,20 +3387,18 @@ jasmine.version_= {
|
|
3388
3387
|
|
3389
3388
|
SpecView.prototype.build = function() {
|
3390
3389
|
var classes;
|
3391
|
-
|
3392
3390
|
classes = ["spec"];
|
3393
3391
|
if (this.spec.pending) {
|
3394
3392
|
classes.push("state-pending");
|
3395
3393
|
}
|
3396
3394
|
SpecView.__super__.build.call(this, classes.join(" "));
|
3397
|
-
this.el.innerHTML = "<a href=\"" + this.spec.link + "\">" + this.spec.description + "</a>";
|
3395
|
+
this.el.innerHTML = "<a href=\"" + this.spec.link + "\">" + (this.htmlSafe(this.spec.description)) + "</a>";
|
3398
3396
|
this.parentView = this.buildParent();
|
3399
3397
|
return this.parentView.append(this.el);
|
3400
3398
|
};
|
3401
3399
|
|
3402
3400
|
SpecView.prototype.buildParent = function() {
|
3403
3401
|
var parent, view;
|
3404
|
-
|
3405
3402
|
parent = this.spec.parent;
|
3406
3403
|
if (parent.viewId) {
|
3407
3404
|
return this.views.suites[parent.viewId];
|
@@ -3413,7 +3410,6 @@ jasmine.version_= {
|
|
3413
3410
|
|
3414
3411
|
SpecView.prototype.buildErrors = function() {
|
3415
3412
|
var div, error, html, _i, _len, _ref;
|
3416
|
-
|
3417
3413
|
div = this.createEl("div");
|
3418
3414
|
html = "";
|
3419
3415
|
_ref = this.spec.errors();
|
@@ -3427,7 +3423,6 @@ jasmine.version_= {
|
|
3427
3423
|
|
3428
3424
|
SpecView.prototype.updateState = function(state, elapsed) {
|
3429
3425
|
var classes, result, _base;
|
3430
|
-
|
3431
3426
|
result = this.spec.result();
|
3432
3427
|
classes = ["state-" + state];
|
3433
3428
|
if (elapsed > Teaspoon.slow) {
|
@@ -3462,9 +3457,8 @@ jasmine.version_= {
|
|
3462
3457
|
|
3463
3458
|
FailureView.prototype.build = function() {
|
3464
3459
|
var error, html, _i, _len, _ref;
|
3465
|
-
|
3466
3460
|
FailureView.__super__.build.call(this, "spec");
|
3467
|
-
html = "<h1 class=\"teaspoon-clearfix\"><a href=\"" + this.spec.link + "\">" + this.spec.fullDescription + "</a></h1>";
|
3461
|
+
html = "<h1 class=\"teaspoon-clearfix\"><a href=\"" + this.spec.link + "\">" + (this.htmlSafe(this.spec.fullDescription)) + "</a></h1>";
|
3468
3462
|
_ref = this.spec.errors();
|
3469
3463
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
3470
3464
|
error = _ref[_i];
|
@@ -3501,14 +3495,13 @@ jasmine.version_= {
|
|
3501
3495
|
|
3502
3496
|
SuiteView.prototype.build = function() {
|
3503
3497
|
SuiteView.__super__.build.call(this, "suite");
|
3504
|
-
this.el.innerHTML = "<h1><a href=\"" + this.suite.link + "\">" + this.suite.description + "</a></h1>";
|
3498
|
+
this.el.innerHTML = "<h1><a href=\"" + this.suite.link + "\">" + (this.htmlSafe(this.suite.description)) + "</a></h1>";
|
3505
3499
|
this.parentView = this.buildParent();
|
3506
3500
|
return this.parentView.append(this.el);
|
3507
3501
|
};
|
3508
3502
|
|
3509
3503
|
SuiteView.prototype.buildParent = function() {
|
3510
3504
|
var parent, view;
|
3511
|
-
|
3512
3505
|
parent = this.suite.parent;
|
3513
3506
|
if (!parent) {
|
3514
3507
|
return this.reporter;
|
@@ -3530,7 +3523,6 @@ jasmine.version_= {
|
|
3530
3523
|
|
3531
3524
|
SuiteView.prototype.updateState = function(state) {
|
3532
3525
|
var _base;
|
3533
|
-
|
3534
3526
|
if (this.state === "failed") {
|
3535
3527
|
return;
|
3536
3528
|
}
|