evergreen 1.0.0.rc → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +10 -2
- data/config/routes.rb +1 -1
- data/lib/evergreen.rb +2 -6
- data/lib/evergreen/application.rb +38 -59
- data/lib/evergreen/cli.rb +2 -2
- data/lib/evergreen/runner.rb +6 -3
- data/lib/evergreen/server.rb +1 -5
- data/lib/evergreen/suite.rb +1 -13
- data/lib/evergreen/tasks.rb +1 -1
- data/lib/evergreen/version.rb +1 -1
- data/lib/jasmine/Contribute.markdown +44 -0
- data/lib/jasmine/Gemfile +4 -6
- data/lib/jasmine/MIT.LICENSE +1 -1
- data/lib/jasmine/README.markdown +17 -14
- data/lib/jasmine/Rakefile +21 -170
- data/lib/jasmine/Release.markdown +40 -0
- data/lib/jasmine/images/jasmine_favicon.png +0 -0
- data/lib/jasmine/jasmine-core.gemspec +22 -0
- data/lib/jasmine/jshint/jshint.js +5919 -0
- data/lib/jasmine/jshint/run.js +99 -0
- data/lib/jasmine/lib/jasmine-core.rb +36 -0
- data/lib/jasmine/lib/jasmine-core/example/SpecRunner.html +54 -0
- data/lib/jasmine/{example → lib/jasmine-core/example}/spec/PlayerSpec.js +0 -0
- data/lib/jasmine/{example → lib/jasmine-core/example}/spec/SpecHelper.js +3 -3
- data/lib/jasmine/{example → lib/jasmine-core/example}/src/Player.js +0 -0
- data/lib/jasmine/{example → lib/jasmine-core/example}/src/Song.js +0 -0
- data/lib/jasmine/lib/{jasmine-html.js → jasmine-core/jasmine-html.js} +6 -4
- data/lib/jasmine/lib/{jasmine.css → jasmine-core/jasmine.css} +0 -0
- data/lib/jasmine/lib/{jasmine.js → jasmine-core/jasmine.js} +103 -48
- data/lib/jasmine/lib/{json2.js → jasmine-core/json2.js} +0 -0
- data/lib/jasmine/lib/jasmine-core/version.rb +6 -0
- data/lib/jasmine/spec/console/ConsoleReporterSpec.js +451 -0
- data/lib/jasmine/spec/{suites → core}/BaseSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/CustomMatchersSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/EnvSpec.js +3 -2
- data/lib/jasmine/spec/{suites → core}/ExceptionsSpec.js +46 -4
- data/lib/jasmine/spec/{suites → core}/JsApiReporterSpec.js +1 -1
- data/lib/jasmine/spec/{suites → core}/MatchersSpec.js +87 -44
- data/lib/jasmine/spec/{suites → core}/MockClockSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/MultiReporterSpec.js +3 -3
- data/lib/jasmine/spec/{suites → core}/NestedResultsSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/PrettyPrintSpec.js +0 -6
- data/lib/jasmine/spec/{suites → core}/QueueSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/ReporterSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/RunnerSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/SpecRunningSpec.js +14 -9
- data/lib/jasmine/spec/{suites → core}/SpecSpec.js +1 -1
- data/lib/jasmine/spec/{suites → core}/SpySpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/SuiteSpec.js +0 -0
- data/lib/jasmine/spec/{suites → core}/UtilSpec.js +0 -1
- data/lib/jasmine/spec/{suites → core}/WaitsForBlockSpec.js +32 -1
- data/lib/jasmine/spec/html/MatchersHtmlSpec.js +38 -0
- data/lib/jasmine/spec/html/PrettyPrintHtmlSpec.js +8 -0
- data/lib/jasmine/spec/{suites → html}/TrivialReporterSpec.js +3 -2
- data/lib/jasmine/spec/node_suite.js +127 -0
- data/lib/jasmine/spec/runner.html +44 -45
- data/lib/jasmine/spec/templates/runner.html.erb +49 -0
- data/lib/jasmine/spec/templates/script_tag.html.erb +1 -0
- data/lib/jasmine/src/SourcesList.json +7 -0
- data/lib/jasmine/src/console/ConsoleReporter.js +177 -0
- data/lib/jasmine/src/{Block.js → core/Block.js} +1 -1
- data/lib/jasmine/src/{Env.js → core/Env.js} +13 -8
- data/lib/jasmine/src/{JsApiReporter.js → core/JsApiReporter.js} +0 -0
- data/lib/jasmine/src/{Matchers.js → core/Matchers.js} +24 -7
- data/lib/jasmine/src/{MultiReporter.js → core/MultiReporter.js} +0 -0
- data/lib/jasmine/src/{NestedResults.js → core/NestedResults.js} +0 -0
- data/lib/jasmine/src/{PrettyPrinter.js → core/PrettyPrinter.js} +2 -1
- data/lib/jasmine/src/{Queue.js → core/Queue.js} +0 -0
- data/lib/jasmine/src/{Reporter.js → core/Reporter.js} +0 -0
- data/lib/jasmine/src/{Runner.js → core/Runner.js} +1 -1
- data/lib/jasmine/src/{Spec.js → core/Spec.js} +2 -1
- data/lib/jasmine/src/{Suite.js → core/Suite.js} +1 -1
- data/lib/jasmine/src/{WaitsBlock.js → core/WaitsBlock.js} +3 -1
- data/lib/jasmine/src/{WaitsForBlock.js → core/WaitsForBlock.js} +4 -2
- data/lib/jasmine/src/{base.js → core/base.js} +52 -24
- data/lib/jasmine/src/{mock-timeout.js → core/mock-timeout.js} +0 -0
- data/lib/jasmine/src/{util.js → core/util.js} +1 -1
- data/lib/jasmine/src/html/TrivialReporter.js +6 -4
- data/lib/jasmine/src/templates/example_project_jasmine_tags.html.erb +3 -0
- data/lib/jasmine/src/templates/version.js.erb +6 -0
- data/lib/jasmine/src/templates/version.rb.erb +6 -0
- data/lib/jasmine/src/version.js +6 -0
- data/lib/jasmine/src/version.json +2 -2
- data/lib/jasmine/tasks/build_dist.rb +48 -0
- data/lib/jasmine/tasks/build_specs.rb +50 -0
- data/lib/jasmine/tasks/docs.rb +17 -0
- data/lib/jasmine/tasks/helpers.rb +50 -0
- data/lib/jasmine/tasks/pages.rb +13 -0
- data/lib/jasmine/tasks/spec.rb +37 -0
- data/lib/jasmine/tasks/standalone.rb +91 -0
- data/lib/jasmine/tasks/version.rb +5 -0
- data/lib/tasks/evergreen.rake +1 -1
- data/spec/evergreen_spec.rb +6 -7
- data/spec/runner_spec.rb +1 -1
- data/spec/spec_helper.rb +5 -8
- metadata +95 -77
- data/lib/jasmine/cruise_config.rb +0 -21
- data/lib/jasmine/example/SpecRunner.html +0 -27
- data/lib/jasmine/images/fail-16.png +0 -0
- data/lib/jasmine/images/fail.png +0 -0
- data/lib/jasmine/images/go-16.png +0 -0
- data/lib/jasmine/images/go.png +0 -0
- data/lib/jasmine/images/pending-16.png +0 -0
- data/lib/jasmine/images/pending.png +0 -0
- data/lib/jasmine/images/question-bk.png +0 -0
- data/lib/jasmine/images/questionbk-16.png +0 -0
- data/lib/jasmine/images/spinner.gif +0 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
describe("MatchersSpec - HTML Dependent", function () {
|
2
|
+
var env, spec;
|
3
|
+
|
4
|
+
beforeEach(function() {
|
5
|
+
env = new jasmine.Env();
|
6
|
+
env.updateInterval = 0;
|
7
|
+
|
8
|
+
var suite = env.describe("suite", function() {
|
9
|
+
spec = env.it("spec", function() {
|
10
|
+
});
|
11
|
+
});
|
12
|
+
spyOn(spec, 'addMatcherResult');
|
13
|
+
|
14
|
+
this.addMatchers({
|
15
|
+
toPass: function() {
|
16
|
+
return lastResult().passed();
|
17
|
+
},
|
18
|
+
toFail: function() {
|
19
|
+
return !lastResult().passed();
|
20
|
+
}
|
21
|
+
});
|
22
|
+
});
|
23
|
+
|
24
|
+
function match(value) {
|
25
|
+
return spec.expect(value);
|
26
|
+
}
|
27
|
+
|
28
|
+
function lastResult() {
|
29
|
+
return spec.addMatcherResult.mostRecentCall.args[0];
|
30
|
+
}
|
31
|
+
|
32
|
+
it("toEqual with DOM nodes", function() {
|
33
|
+
var nodeA = document.createElement('div');
|
34
|
+
var nodeB = document.createElement('div');
|
35
|
+
expect((match(nodeA).toEqual(nodeA))).toPass();
|
36
|
+
expect((match(nodeA).toEqual(nodeB))).toFail();
|
37
|
+
});
|
38
|
+
});
|
@@ -0,0 +1,8 @@
|
|
1
|
+
describe("jasmine.pp (HTML Dependent)", function () {
|
2
|
+
it("should stringify HTML nodes properly", function() {
|
3
|
+
var sampleNode = document.createElement('div');
|
4
|
+
sampleNode.innerHTML = 'foo<b>bar</b>';
|
5
|
+
expect(jasmine.pp(sampleNode)).toEqual("HTMLNode");
|
6
|
+
expect(jasmine.pp({foo: sampleNode})).toEqual("{ foo : HTMLNode }");
|
7
|
+
});
|
8
|
+
});
|
@@ -31,7 +31,9 @@ describe("TrivialReporter", function() {
|
|
31
31
|
|
32
32
|
function findElement(divs, withClass) {
|
33
33
|
var els = findElements(divs, withClass);
|
34
|
-
if (els.length > 0)
|
34
|
+
if (els.length > 0) {
|
35
|
+
return els[0];
|
36
|
+
}
|
35
37
|
throw new Error("couldn't find div with class " + withClass);
|
36
38
|
}
|
37
39
|
|
@@ -96,7 +98,6 @@ describe("TrivialReporter", function() {
|
|
96
98
|
});
|
97
99
|
});
|
98
100
|
|
99
|
-
|
100
101
|
describe("failure messages (integration)", function () {
|
101
102
|
var spec, results, expectationResult;
|
102
103
|
|
@@ -0,0 +1,127 @@
|
|
1
|
+
var fs = require('fs');
|
2
|
+
var sys = require('sys');
|
3
|
+
var path = require('path');
|
4
|
+
|
5
|
+
// yes, really keep this here to keep us honest, but only for jasmine's own runner! [xw]
|
6
|
+
// undefined = "diz be undefined yo";
|
7
|
+
|
8
|
+
|
9
|
+
var jasmineGlobals = require('../lib/jasmine-core/jasmine.js');
|
10
|
+
for (var k in jasmineGlobals) {
|
11
|
+
global[k] = jasmineGlobals[k];
|
12
|
+
}
|
13
|
+
require('../src/console/ConsoleReporter.js');
|
14
|
+
|
15
|
+
/*
|
16
|
+
Pulling in code from jasmine-node.
|
17
|
+
|
18
|
+
We can't just depend on jasmine-node because it has its own jasmine that it uses.
|
19
|
+
*/
|
20
|
+
|
21
|
+
global.window = {
|
22
|
+
setTimeout: setTimeout,
|
23
|
+
clearTimeout: clearTimeout,
|
24
|
+
setInterval: setInterval,
|
25
|
+
clearInterval: clearInterval
|
26
|
+
};
|
27
|
+
|
28
|
+
delete global.window;
|
29
|
+
|
30
|
+
function noop() {
|
31
|
+
}
|
32
|
+
|
33
|
+
jasmine.executeSpecs = function(specs, done, isVerbose, showColors) {
|
34
|
+
for (var i = 0, len = specs.length; i < len; ++i) {
|
35
|
+
var filename = specs[i];
|
36
|
+
require(filename.replace(/\.\w+$/, ""));
|
37
|
+
}
|
38
|
+
|
39
|
+
var jasmineEnv = jasmine.getEnv();
|
40
|
+
var consoleReporter = new jasmine.ConsoleReporter(sys.print, done, showColors);
|
41
|
+
|
42
|
+
jasmineEnv.addReporter(consoleReporter);
|
43
|
+
jasmineEnv.execute();
|
44
|
+
};
|
45
|
+
|
46
|
+
jasmine.getAllSpecFiles = function(dir, matcher) {
|
47
|
+
var specs = [];
|
48
|
+
|
49
|
+
if (fs.statSync(dir).isFile() && dir.match(matcher)) {
|
50
|
+
specs.push(dir);
|
51
|
+
} else {
|
52
|
+
var files = fs.readdirSync(dir);
|
53
|
+
for (var i = 0, len = files.length; i < len; ++i) {
|
54
|
+
var filename = dir + '/' + files[i];
|
55
|
+
if (fs.statSync(filename).isFile() && filename.match(matcher)) {
|
56
|
+
specs.push(filename);
|
57
|
+
} else if (fs.statSync(filename).isDirectory()) {
|
58
|
+
var subfiles = this.getAllSpecFiles(filename, matcher);
|
59
|
+
subfiles.forEach(function(result) {
|
60
|
+
specs.push(result);
|
61
|
+
});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
return specs;
|
67
|
+
};
|
68
|
+
|
69
|
+
function now() {
|
70
|
+
return new Date().getTime();
|
71
|
+
}
|
72
|
+
|
73
|
+
jasmine.asyncSpecWait = function() {
|
74
|
+
var wait = jasmine.asyncSpecWait;
|
75
|
+
wait.start = now();
|
76
|
+
wait.done = false;
|
77
|
+
(function innerWait() {
|
78
|
+
waits(10);
|
79
|
+
runs(function() {
|
80
|
+
if (wait.start + wait.timeout < now()) {
|
81
|
+
expect('timeout waiting for spec').toBeNull();
|
82
|
+
} else if (wait.done) {
|
83
|
+
wait.done = false;
|
84
|
+
} else {
|
85
|
+
innerWait();
|
86
|
+
}
|
87
|
+
});
|
88
|
+
})();
|
89
|
+
};
|
90
|
+
jasmine.asyncSpecWait.timeout = 4 * 1000;
|
91
|
+
jasmine.asyncSpecDone = function() {
|
92
|
+
jasmine.asyncSpecWait.done = true;
|
93
|
+
};
|
94
|
+
|
95
|
+
for (var key in jasmine) {
|
96
|
+
exports[key] = jasmine[key];
|
97
|
+
}
|
98
|
+
|
99
|
+
/*
|
100
|
+
End jasmine-node runner
|
101
|
+
*/
|
102
|
+
|
103
|
+
var isVerbose = false;
|
104
|
+
var showColors = true;
|
105
|
+
process.argv.forEach(function(arg) {
|
106
|
+
switch (arg) {
|
107
|
+
case '--color': showColors = true; break;
|
108
|
+
case '--noColor': showColors = false; break;
|
109
|
+
case '--verbose': isVerbose = true; break;
|
110
|
+
}
|
111
|
+
});
|
112
|
+
|
113
|
+
var specs = jasmine.getAllSpecFiles(__dirname, new RegExp(".js$"));
|
114
|
+
var domIndependentSpecs = [];
|
115
|
+
for (var i = 0; i < specs.length; i++) {
|
116
|
+
if (fs.readFileSync(specs[i], "utf8").indexOf("document.createElement") < 0) {
|
117
|
+
domIndependentSpecs.push(specs[i]);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
jasmine.executeSpecs(domIndependentSpecs, function(runner, log) {
|
122
|
+
if (runner.results().failedCount === 0) {
|
123
|
+
process.exit(0);
|
124
|
+
} else {
|
125
|
+
process.exit(1);
|
126
|
+
}
|
127
|
+
}, isVerbose, showColors);
|
@@ -2,56 +2,46 @@
|
|
2
2
|
"http://www.w3.org/TR/html4/loose.dtd">
|
3
3
|
<html>
|
4
4
|
<head>
|
5
|
-
<title>Jasmine
|
5
|
+
<title>Jasmine Spec Runner: Jasmine Core</title>
|
6
6
|
|
7
|
+
<link rel="shortcut icon" type="image/png" href="../images/jasmine_favicon.png">
|
8
|
+
|
9
|
+
<link href="../lib/jasmine-core/jasmine.css" rel="stylesheet"/>
|
10
|
+
<script type="text/javascript" src="../lib/jasmine-core/jasmine.js"></script>
|
7
11
|
<script type="text/javascript">
|
8
12
|
// yes, really keep this here to keep us honest, but only for jasmine's own runner! [xw]
|
9
13
|
undefined = "diz be undefined yo";
|
10
14
|
</script>
|
11
15
|
|
12
|
-
<script type="text/javascript" src="../src/base.js"></script>
|
13
|
-
<script type="text/javascript" src="../src/util.js"></script>
|
14
|
-
<script type="text/javascript" src="../src/Env.js"></script>
|
15
|
-
<script type="text/javascript" src="../src/Reporter.js"></script>
|
16
|
-
<script type="text/javascript" src="../src/Block.js"></script>
|
17
|
-
|
18
|
-
<script type="text/javascript" src="../src/JsApiReporter.js"></script>
|
19
|
-
<script type="text/javascript" src="../src/Matchers.js"></script>
|
20
|
-
<script type="text/javascript" src="../src/mock-timeout.js"></script>
|
21
|
-
<script type="text/javascript" src="../src/MultiReporter.js"></script>
|
22
|
-
<script type="text/javascript" src="../src/NestedResults.js"></script>
|
23
|
-
<script type="text/javascript" src="../src/PrettyPrinter.js"></script>
|
24
|
-
<script type="text/javascript" src="../src/Queue.js"></script>
|
25
|
-
<script type="text/javascript" src="../src/Runner.js"></script>
|
26
|
-
<script type="text/javascript" src="../src/Spec.js"></script>
|
27
|
-
<script type="text/javascript" src="../src/Suite.js"></script>
|
28
|
-
<script type="text/javascript" src="../src/WaitsBlock.js"></script>
|
29
|
-
<script type="text/javascript" src="../src/WaitsForBlock.js"></script>
|
30
|
-
|
31
|
-
<script type="text/javascript" src="../src/html/TrivialReporter.js"></script>
|
32
|
-
|
33
|
-
|
34
16
|
|
35
|
-
|
36
|
-
<script type="text/javascript" src="
|
37
|
-
<script type="text/javascript" src="
|
38
|
-
<script type="text/javascript" src="suites/ExceptionsSpec.js"></script>
|
39
|
-
<script type="text/javascript" src="suites/JsApiReporterSpec.js"></script>
|
40
|
-
<script type="text/javascript" src="suites/MatchersSpec.js"></script>
|
41
|
-
<script type="text/javascript" src="suites/MockClockSpec.js"></script>
|
42
|
-
<script type="text/javascript" src="suites/MultiReporterSpec.js"></script>
|
43
|
-
<script type="text/javascript" src="suites/NestedResultsSpec.js"></script>
|
44
|
-
<script type="text/javascript" src="suites/PrettyPrintSpec.js"></script>
|
45
|
-
<script type="text/javascript" src="suites/ReporterSpec.js"></script>
|
46
|
-
<script type="text/javascript" src="suites/RunnerSpec.js"></script>
|
47
|
-
<script type="text/javascript" src="suites/QueueSpec.js"></script>
|
48
|
-
<script type="text/javascript" src="suites/SpecSpec.js"></script>
|
49
|
-
<script type="text/javascript" src="suites/SpecRunningSpec.js"></script>
|
50
|
-
<script type="text/javascript" src="suites/SpySpec.js"></script>
|
51
|
-
<script type="text/javascript" src="suites/SuiteSpec.js"></script>
|
52
|
-
<script type="text/javascript" src="suites/TrivialReporterSpec.js"></script>
|
53
|
-
<script type="text/javascript" src="suites/WaitsForBlockSpec.js"></script>
|
17
|
+
<!-- include source files here... -->
|
18
|
+
<script type="text/javascript" src=".././src/html/TrivialReporter.js"></script>
|
19
|
+
<script type="text/javascript" src=".././src/console/ConsoleReporter.js"></script>
|
54
20
|
|
21
|
+
<!-- include spec files here... -->
|
22
|
+
<script type="text/javascript" src=".././spec/core/BaseSpec.js"></script>
|
23
|
+
<script type="text/javascript" src=".././spec/core/CustomMatchersSpec.js"></script>
|
24
|
+
<script type="text/javascript" src=".././spec/core/EnvSpec.js"></script>
|
25
|
+
<script type="text/javascript" src=".././spec/core/ExceptionsSpec.js"></script>
|
26
|
+
<script type="text/javascript" src=".././spec/core/JsApiReporterSpec.js"></script>
|
27
|
+
<script type="text/javascript" src=".././spec/core/MatchersSpec.js"></script>
|
28
|
+
<script type="text/javascript" src=".././spec/core/MockClockSpec.js"></script>
|
29
|
+
<script type="text/javascript" src=".././spec/core/MultiReporterSpec.js"></script>
|
30
|
+
<script type="text/javascript" src=".././spec/core/NestedResultsSpec.js"></script>
|
31
|
+
<script type="text/javascript" src=".././spec/core/PrettyPrintSpec.js"></script>
|
32
|
+
<script type="text/javascript" src=".././spec/core/QueueSpec.js"></script>
|
33
|
+
<script type="text/javascript" src=".././spec/core/ReporterSpec.js"></script>
|
34
|
+
<script type="text/javascript" src=".././spec/core/RunnerSpec.js"></script>
|
35
|
+
<script type="text/javascript" src=".././spec/core/SpecRunningSpec.js"></script>
|
36
|
+
<script type="text/javascript" src=".././spec/core/SpecSpec.js"></script>
|
37
|
+
<script type="text/javascript" src=".././spec/core/SpySpec.js"></script>
|
38
|
+
<script type="text/javascript" src=".././spec/core/SuiteSpec.js"></script>
|
39
|
+
<script type="text/javascript" src=".././spec/core/UtilSpec.js"></script>
|
40
|
+
<script type="text/javascript" src=".././spec/core/WaitsForBlockSpec.js"></script>
|
41
|
+
<script type="text/javascript" src=".././spec/html/MatchersHtmlSpec.js"></script>
|
42
|
+
<script type="text/javascript" src=".././spec/html/PrettyPrintHtmlSpec.js"></script>
|
43
|
+
<script type="text/javascript" src=".././spec/html/TrivialReporterSpec.js"></script>
|
44
|
+
<script type="text/javascript" src=".././spec/console/ConsoleReporterSpec.js"></script>
|
55
45
|
|
56
46
|
<script type="text/javascript">
|
57
47
|
(function() {
|
@@ -66,15 +56,24 @@
|
|
66
56
|
return trivialReporter.specFilter(spec);
|
67
57
|
};
|
68
58
|
|
59
|
+
var currentWindowOnload = window.onload;
|
60
|
+
|
69
61
|
window.onload = function() {
|
70
|
-
|
62
|
+
if (currentWindowOnload) {
|
63
|
+
currentWindowOnload();
|
64
|
+
}
|
65
|
+
execJasmine();
|
71
66
|
};
|
67
|
+
|
68
|
+
function execJasmine() {
|
69
|
+
jasmineEnv.execute();
|
70
|
+
}
|
71
|
+
|
72
72
|
})();
|
73
73
|
</script>
|
74
74
|
|
75
|
-
<link href="../src/html/jasmine.css" rel="stylesheet"/>
|
76
75
|
</head>
|
77
76
|
|
78
77
|
<body>
|
79
78
|
</body>
|
80
|
-
</html>
|
79
|
+
</html>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title><%= title %></title>
|
6
|
+
|
7
|
+
<%= favicon %>
|
8
|
+
<%= jasmine_tags %>
|
9
|
+
|
10
|
+
<!-- include source files here... -->
|
11
|
+
<%= source_tags %>
|
12
|
+
|
13
|
+
<!-- include spec files here... -->
|
14
|
+
<%= spec_file_tags %>
|
15
|
+
|
16
|
+
<script type="text/javascript">
|
17
|
+
(function() {
|
18
|
+
var jasmineEnv = jasmine.getEnv();
|
19
|
+
jasmineEnv.updateInterval = 1000;
|
20
|
+
|
21
|
+
var trivialReporter = new jasmine.TrivialReporter();
|
22
|
+
|
23
|
+
jasmineEnv.addReporter(trivialReporter);
|
24
|
+
|
25
|
+
jasmineEnv.specFilter = function(spec) {
|
26
|
+
return trivialReporter.specFilter(spec);
|
27
|
+
};
|
28
|
+
|
29
|
+
var currentWindowOnload = window.onload;
|
30
|
+
|
31
|
+
window.onload = function() {
|
32
|
+
if (currentWindowOnload) {
|
33
|
+
currentWindowOnload();
|
34
|
+
}
|
35
|
+
execJasmine();
|
36
|
+
};
|
37
|
+
|
38
|
+
function execJasmine() {
|
39
|
+
jasmineEnv.execute();
|
40
|
+
}
|
41
|
+
|
42
|
+
})();
|
43
|
+
</script>
|
44
|
+
|
45
|
+
</head>
|
46
|
+
|
47
|
+
<body>
|
48
|
+
</body>
|
49
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<script type="text/javascript" src="<%= file %>"></script>
|
@@ -0,0 +1,177 @@
|
|
1
|
+
jasmine.ConsoleReporter = function(print, doneCallback, showColors) {
|
2
|
+
//inspired by mhevery's jasmine-node reporter
|
3
|
+
//https://github.com/mhevery/jasmine-node
|
4
|
+
|
5
|
+
doneCallback = doneCallback || function() {};
|
6
|
+
|
7
|
+
var ansi = {
|
8
|
+
green: '\033[32m',
|
9
|
+
red: '\033[31m',
|
10
|
+
yellow: '\033[33m',
|
11
|
+
none: '\033[0m'
|
12
|
+
},
|
13
|
+
language = {
|
14
|
+
spec: "spec",
|
15
|
+
failure: "failure"
|
16
|
+
};
|
17
|
+
|
18
|
+
function coloredStr(color, str) {
|
19
|
+
return showColors ? (ansi[color] + str + ansi.none) : str;
|
20
|
+
}
|
21
|
+
|
22
|
+
function greenStr(str) {
|
23
|
+
return coloredStr("green", str);
|
24
|
+
}
|
25
|
+
|
26
|
+
function redStr(str) {
|
27
|
+
return coloredStr("red", str);
|
28
|
+
}
|
29
|
+
|
30
|
+
function yellowStr(str) {
|
31
|
+
return coloredStr("yellow", str);
|
32
|
+
}
|
33
|
+
|
34
|
+
function newline() {
|
35
|
+
print("\n");
|
36
|
+
}
|
37
|
+
|
38
|
+
function started() {
|
39
|
+
print("Started");
|
40
|
+
newline();
|
41
|
+
}
|
42
|
+
|
43
|
+
function greenDot() {
|
44
|
+
print(greenStr("."));
|
45
|
+
}
|
46
|
+
|
47
|
+
function redF() {
|
48
|
+
print(redStr("F"));
|
49
|
+
}
|
50
|
+
|
51
|
+
function yellowStar() {
|
52
|
+
print(yellowStr("*"));
|
53
|
+
}
|
54
|
+
|
55
|
+
function plural(str, count) {
|
56
|
+
return count == 1 ? str : str + "s";
|
57
|
+
}
|
58
|
+
|
59
|
+
function repeat(thing, times) {
|
60
|
+
var arr = [];
|
61
|
+
for (var i = 0; i < times; i++) {
|
62
|
+
arr.push(thing);
|
63
|
+
}
|
64
|
+
return arr;
|
65
|
+
}
|
66
|
+
|
67
|
+
function indent(str, spaces) {
|
68
|
+
var lines = (str || '').split("\n");
|
69
|
+
var newArr = [];
|
70
|
+
for (var i = 0; i < lines.length; i++) {
|
71
|
+
newArr.push(repeat(" ", spaces).join("") + lines[i]);
|
72
|
+
}
|
73
|
+
return newArr.join("\n");
|
74
|
+
}
|
75
|
+
|
76
|
+
function specFailureDetails(suiteDescription, specDescription, stackTraces) {
|
77
|
+
newline();
|
78
|
+
print(suiteDescription + " " + specDescription);
|
79
|
+
newline();
|
80
|
+
for (var i = 0; i < stackTraces.length; i++) {
|
81
|
+
print(indent(stackTraces[i], 2));
|
82
|
+
newline();
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
function finished(elapsed) {
|
87
|
+
newline();
|
88
|
+
print("Finished in " + elapsed / 1000 + " seconds");
|
89
|
+
}
|
90
|
+
|
91
|
+
function summary(colorF, specs, failed) {
|
92
|
+
newline();
|
93
|
+
print(colorF(specs + " " + plural(language.spec, specs) + ", " +
|
94
|
+
failed + " " + plural(language.failure, failed)));
|
95
|
+
newline();
|
96
|
+
newline();
|
97
|
+
}
|
98
|
+
|
99
|
+
function greenSummary(specs, failed) {
|
100
|
+
summary(greenStr, specs, failed);
|
101
|
+
}
|
102
|
+
|
103
|
+
function redSummary(specs, failed) {
|
104
|
+
summary(redStr, specs, failed);
|
105
|
+
}
|
106
|
+
|
107
|
+
function fullSuiteDescription(suite) {
|
108
|
+
var fullDescription = suite.description;
|
109
|
+
if (suite.parentSuite) fullDescription = fullSuiteDescription(suite.parentSuite) + " " + fullDescription;
|
110
|
+
return fullDescription;
|
111
|
+
}
|
112
|
+
|
113
|
+
this.now = function() {
|
114
|
+
return new Date().getTime();
|
115
|
+
};
|
116
|
+
|
117
|
+
this.reportRunnerStarting = function() {
|
118
|
+
this.runnerStartTime = this.now();
|
119
|
+
started();
|
120
|
+
};
|
121
|
+
|
122
|
+
this.reportSpecStarting = function() { /* do nothing */
|
123
|
+
};
|
124
|
+
|
125
|
+
this.reportSpecResults = function(spec) {
|
126
|
+
var results = spec.results();
|
127
|
+
if (results.skipped) {
|
128
|
+
yellowStar();
|
129
|
+
} else if (results.passed()) {
|
130
|
+
greenDot();
|
131
|
+
} else {
|
132
|
+
redF();
|
133
|
+
}
|
134
|
+
};
|
135
|
+
|
136
|
+
this.suiteResults = [];
|
137
|
+
|
138
|
+
this.reportSuiteResults = function(suite) {
|
139
|
+
var suiteResult = {
|
140
|
+
description: fullSuiteDescription(suite),
|
141
|
+
failedSpecResults: []
|
142
|
+
};
|
143
|
+
|
144
|
+
suite.results().items_.forEach(function(spec) {
|
145
|
+
if (spec.failedCount > 0 && spec.description) suiteResult.failedSpecResults.push(spec);
|
146
|
+
});
|
147
|
+
|
148
|
+
this.suiteResults.push(suiteResult);
|
149
|
+
};
|
150
|
+
|
151
|
+
function eachSpecFailure(suiteResults, callback) {
|
152
|
+
for (var i = 0; i < suiteResults.length; i++) {
|
153
|
+
var suiteResult = suiteResults[i];
|
154
|
+
for (var j = 0; j < suiteResult.failedSpecResults.length; j++) {
|
155
|
+
var failedSpecResult = suiteResult.failedSpecResults[j];
|
156
|
+
var stackTraces = [];
|
157
|
+
for (var k = 0; k < failedSpecResult.items_.length; k++) stackTraces.push(failedSpecResult.items_[k].trace.stack);
|
158
|
+
callback(suiteResult.description, failedSpecResult.description, stackTraces);
|
159
|
+
}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
this.reportRunnerResults = function(runner) {
|
164
|
+
newline();
|
165
|
+
|
166
|
+
eachSpecFailure(this.suiteResults, function(suiteDescription, specDescription, stackTraces) {
|
167
|
+
specFailureDetails(suiteDescription, specDescription, stackTraces);
|
168
|
+
});
|
169
|
+
|
170
|
+
finished(this.now() - this.runnerStartTime);
|
171
|
+
|
172
|
+
var results = runner.results();
|
173
|
+
var summaryFunction = results.failedCount === 0 ? greenSummary : redSummary;
|
174
|
+
summaryFunction(runner.specs().length, results.failedCount);
|
175
|
+
doneCallback(runner);
|
176
|
+
};
|
177
|
+
};
|