Skip to content

Commit 5aa6f9a

Browse files
committed
Adds jasmine to the project
0 parents  commit 5aa6f9a

File tree

4 files changed

+2795
-0
lines changed

4 files changed

+2795
-0
lines changed

jasmine/MIT.LICENSE

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Copyright (c) 2008-2010 Pivotal Labs
2+
3+
Permission is hereby granted, free of charge, to any person obtaining
4+
a copy of this software and associated documentation files (the
5+
"Software"), to deal in the Software without restriction, including
6+
without limitation the rights to use, copy, modify, merge, publish,
7+
distribute, sublicense, and/or sell copies of the Software, and to
8+
permit persons to whom the Software is furnished to do so, subject to
9+
the following conditions:
10+
11+
The above copyright notice and this permission notice shall be
12+
included in all copies or substantial portions of the Software.
13+
14+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

jasmine/jasmine-html.js

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
jasmine.TrivialReporter = function(doc) {
2+
this.document = doc || document;
3+
this.suiteDivs = {};
4+
this.logRunningSpecs = false;
5+
};
6+
7+
jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
8+
var el = document.createElement(type);
9+
10+
for (var i = 2; i < arguments.length; i++) {
11+
var child = arguments[i];
12+
13+
if (typeof child === 'string') {
14+
el.appendChild(document.createTextNode(child));
15+
} else {
16+
if (child) { el.appendChild(child); }
17+
}
18+
}
19+
20+
for (var attr in attrs) {
21+
if (attr == "className") {
22+
el[attr] = attrs[attr];
23+
} else {
24+
el.setAttribute(attr, attrs[attr]);
25+
}
26+
}
27+
28+
return el;
29+
};
30+
31+
jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
32+
var showPassed, showSkipped;
33+
34+
this.outerDiv = this.createDom('div', { className: 'jasmine_reporter' },
35+
this.createDom('div', { className: 'banner' },
36+
this.createDom('div', { className: 'logo' },
37+
this.createDom('a', { href: 'http://pivotal.github.com/jasmine/', target: "_blank" }, "Jasmine"),
38+
this.createDom('span', { className: 'version' }, runner.env.versionString())),
39+
this.createDom('div', { className: 'options' },
40+
"Show ",
41+
showPassed = this.createDom('input', { id: "__jasmine_TrivialReporter_showPassed__", type: 'checkbox' }),
42+
this.createDom('label', { "for": "__jasmine_TrivialReporter_showPassed__" }, " passed "),
43+
showSkipped = this.createDom('input', { id: "__jasmine_TrivialReporter_showSkipped__", type: 'checkbox' }),
44+
this.createDom('label', { "for": "__jasmine_TrivialReporter_showSkipped__" }, " skipped")
45+
)
46+
),
47+
48+
this.runnerDiv = this.createDom('div', { className: 'runner running' },
49+
this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
50+
this.runnerMessageSpan = this.createDom('span', {}, "Running..."),
51+
this.finishedAtSpan = this.createDom('span', { className: 'finished-at' }, ""))
52+
);
53+
54+
this.document.body.appendChild(this.outerDiv);
55+
56+
var suites = runner.suites();
57+
for (var i = 0; i < suites.length; i++) {
58+
var suite = suites[i];
59+
var suiteDiv = this.createDom('div', { className: 'suite' },
60+
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
61+
this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
62+
this.suiteDivs[suite.id] = suiteDiv;
63+
var parentDiv = this.outerDiv;
64+
if (suite.parentSuite) {
65+
parentDiv = this.suiteDivs[suite.parentSuite.id];
66+
}
67+
parentDiv.appendChild(suiteDiv);
68+
}
69+
70+
this.startedAt = new Date();
71+
72+
var self = this;
73+
showPassed.onclick = function(evt) {
74+
if (showPassed.checked) {
75+
self.outerDiv.className += ' show-passed';
76+
} else {
77+
self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
78+
}
79+
};
80+
81+
showSkipped.onclick = function(evt) {
82+
if (showSkipped.checked) {
83+
self.outerDiv.className += ' show-skipped';
84+
} else {
85+
self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
86+
}
87+
};
88+
};
89+
90+
jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
91+
var results = runner.results();
92+
var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
93+
this.runnerDiv.setAttribute("class", className);
94+
//do it twice for IE
95+
this.runnerDiv.setAttribute("className", className);
96+
var specs = runner.specs();
97+
var specCount = 0;
98+
for (var i = 0; i < specs.length; i++) {
99+
if (this.specFilter(specs[i])) {
100+
specCount++;
101+
}
102+
}
103+
var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
104+
message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
105+
this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
106+
107+
this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
108+
};
109+
110+
jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
111+
var results = suite.results();
112+
var status = results.passed() ? 'passed' : 'failed';
113+
if (results.totalCount == 0) { // todo: change this to check results.skipped
114+
status = 'skipped';
115+
}
116+
this.suiteDivs[suite.id].className += " " + status;
117+
};
118+
119+
jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
120+
if (this.logRunningSpecs) {
121+
this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
122+
}
123+
};
124+
125+
jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
126+
var results = spec.results();
127+
var status = results.passed() ? 'passed' : 'failed';
128+
if (results.skipped) {
129+
status = 'skipped';
130+
}
131+
var specDiv = this.createDom('div', { className: 'spec ' + status },
132+
this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
133+
this.createDom('a', {
134+
className: 'description',
135+
href: '?spec=' + encodeURIComponent(spec.getFullName()),
136+
title: spec.getFullName()
137+
}, spec.description));
138+
139+
140+
var resultItems = results.getItems();
141+
var messagesDiv = this.createDom('div', { className: 'messages' });
142+
for (var i = 0; i < resultItems.length; i++) {
143+
var result = resultItems[i];
144+
145+
if (result.type == 'log') {
146+
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
147+
} else if (result.type == 'expect' && result.passed && !result.passed()) {
148+
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
149+
150+
if (result.trace.stack) {
151+
messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
152+
}
153+
}
154+
}
155+
156+
if (messagesDiv.childNodes.length > 0) {
157+
specDiv.appendChild(messagesDiv);
158+
}
159+
160+
this.suiteDivs[spec.suite.id].appendChild(specDiv);
161+
};
162+
163+
jasmine.TrivialReporter.prototype.log = function() {
164+
var console = jasmine.getGlobal().console;
165+
if (console && console.log) {
166+
if (console.log.apply) {
167+
console.log.apply(console, arguments);
168+
} else {
169+
console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
170+
}
171+
}
172+
};
173+
174+
jasmine.TrivialReporter.prototype.getLocation = function() {
175+
return this.document.location;
176+
};
177+
178+
jasmine.TrivialReporter.prototype.specFilter = function(spec) {
179+
var paramMap = {};
180+
var params = this.getLocation().search.substring(1).split('&');
181+
for (var i = 0; i < params.length; i++) {
182+
var p = params[i].split('=');
183+
paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
184+
}
185+
186+
if (!paramMap["spec"]) return true;
187+
return spec.getFullName().indexOf(paramMap["spec"]) == 0;
188+
};

jasmine/jasmine.css

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
body {
2+
font-family: "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
3+
}
4+
5+
6+
.jasmine_reporter a:visited, .jasmine_reporter a {
7+
color: #303;
8+
}
9+
10+
.jasmine_reporter a:hover, .jasmine_reporter a:active {
11+
color: blue;
12+
}
13+
14+
.run_spec {
15+
float:right;
16+
padding-right: 5px;
17+
font-size: .8em;
18+
text-decoration: none;
19+
}
20+
21+
.jasmine_reporter {
22+
margin: 0 5px;
23+
}
24+
25+
.banner {
26+
color: #303;
27+
background-color: #fef;
28+
padding: 5px;
29+
}
30+
31+
.logo {
32+
float: left;
33+
font-size: 1.1em;
34+
padding-left: 5px;
35+
}
36+
37+
.logo .version {
38+
font-size: .6em;
39+
padding-left: 1em;
40+
}
41+
42+
.runner.running {
43+
background-color: yellow;
44+
}
45+
46+
47+
.options {
48+
text-align: right;
49+
font-size: .8em;
50+
}
51+
52+
53+
54+
55+
.suite {
56+
border: 1px outset gray;
57+
margin: 5px 0;
58+
padding-left: 1em;
59+
}
60+
61+
.suite .suite {
62+
margin: 5px;
63+
}
64+
65+
.suite.passed {
66+
background-color: #dfd;
67+
}
68+
69+
.suite.failed {
70+
background-color: #fdd;
71+
}
72+
73+
.spec {
74+
margin: 5px;
75+
padding-left: 1em;
76+
clear: both;
77+
}
78+
79+
.spec.failed, .spec.passed, .spec.skipped {
80+
padding-bottom: 5px;
81+
border: 1px solid gray;
82+
}
83+
84+
.spec.failed {
85+
background-color: #fbb;
86+
border-color: red;
87+
}
88+
89+
.spec.passed {
90+
background-color: #bfb;
91+
border-color: green;
92+
}
93+
94+
.spec.skipped {
95+
background-color: #bbb;
96+
}
97+
98+
.messages {
99+
border-left: 1px dashed gray;
100+
padding-left: 1em;
101+
padding-right: 1em;
102+
}
103+
104+
.passed {
105+
background-color: #cfc;
106+
display: none;
107+
}
108+
109+
.failed {
110+
background-color: #fbb;
111+
}
112+
113+
.skipped {
114+
color: #777;
115+
background-color: #eee;
116+
display: none;
117+
}
118+
119+
120+
/*.resultMessage {*/
121+
/*white-space: pre;*/
122+
/*}*/
123+
124+
.resultMessage span.result {
125+
display: block;
126+
line-height: 2em;
127+
color: black;
128+
}
129+
130+
.resultMessage .mismatch {
131+
color: black;
132+
}
133+
134+
.stackTrace {
135+
white-space: pre;
136+
font-size: .8em;
137+
margin-left: 10px;
138+
max-height: 5em;
139+
overflow: auto;
140+
border: 1px inset red;
141+
padding: 1em;
142+
background: #eef;
143+
}
144+
145+
.finished-at {
146+
padding-left: 1em;
147+
font-size: .6em;
148+
}
149+
150+
.show-passed .passed,
151+
.show-skipped .skipped {
152+
display: block;
153+
}
154+
155+
156+
#jasmine_content {
157+
position:fixed;
158+
right: 100%;
159+
}
160+
161+
.runner {
162+
border: 1px solid gray;
163+
display: block;
164+
margin: 5px 0;
165+
padding: 2px 0 2px 10px;
166+
}

0 commit comments

Comments
 (0)