Skip to content

Commit 8a867ce

Browse files
committed
1 parent 68217d4 commit 8a867ce

File tree

13 files changed

+498
-15
lines changed

13 files changed

+498
-15
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
build/
22
angularjs.netrc
33
jstd.log
4+
.DS_Store

jsTestDriver-jquery.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
server: http://localhost:9876
22

33
load:
4-
- lib/jasmine/jasmine-1.0.1.js
4+
- lib/jasmine-1.0.1/jasmine.js
55
- lib/jasmine-jstd-adapter/JasmineAdapter.js
66
- lib/jquery/jquery-1.4.2.js
77
- test/jquery_alias.js

jsTestDriver.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
server: http://localhost:9876
22

33
load:
4-
- lib/jasmine/jasmine-1.0.1.js
4+
- lib/jasmine-1.0.1/jasmine.js
55
- lib/jasmine-jstd-adapter/JasmineAdapter.js
66
- lib/jquery/jquery-1.4.2.js
77
- test/jquery_remove.js

lib/jasmine-1.0.1/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.

lib/jasmine-1.0.1/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+
};

0 commit comments

Comments
 (0)