jasmine-reporters 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +41 -0
- data/LICENSE +21 -0
- data/README.md +15 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/example/public/test.js +14 -0
- data/example/src/test.coffee +9 -0
- data/lib/jasmine-reporters/envjs/env.rhino.1.2.js +13989 -0
- data/lib/jasmine-reporters/jar/jline.jar +0 -0
- data/lib/jasmine-reporters/jar/js.jar +0 -0
- data/lib/jasmine-reporters/jasmine/jasmine-html.js +182 -0
- data/lib/jasmine-reporters/jasmine/jasmine.css +166 -0
- data/lib/jasmine-reporters/jasmine/jasmine.js +2421 -0
- data/lib/jasmine-reporters/reporters/jasmine.console_reporter.js +64 -0
- data/lib/jasmine-reporters/reporters/jasmine.junit_reporter.js +183 -0
- data/lib/jasmine-reporters/tasks/report.rake +81 -0
- metadata +161 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
(function() {
|
2
|
+
|
3
|
+
if (! jasmine) {
|
4
|
+
throw new Exception("jasmine library does not exist in global namespace!");
|
5
|
+
}
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Basic reporter that outputs spec results to the browser console.
|
9
|
+
* Useful if you need to test an html page and don't want the TrivialReporter
|
10
|
+
* markup mucking things up.
|
11
|
+
*
|
12
|
+
* Usage:
|
13
|
+
*
|
14
|
+
* jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
|
15
|
+
* jasmine.getEnv().execute();
|
16
|
+
*/
|
17
|
+
var ConsoleReporter = function() {
|
18
|
+
this.started = false;
|
19
|
+
this.finished = false;
|
20
|
+
};
|
21
|
+
|
22
|
+
ConsoleReporter.prototype = {
|
23
|
+
reportRunnerResults: function(runner) {
|
24
|
+
this.finished = true;
|
25
|
+
this.log("Runner Finished.");
|
26
|
+
},
|
27
|
+
|
28
|
+
reportRunnerStarting: function(runner) {
|
29
|
+
this.started = true;
|
30
|
+
this.log("Runner Started.");
|
31
|
+
},
|
32
|
+
|
33
|
+
reportSpecResults: function(spec) {
|
34
|
+
var resultText = "Failed.";
|
35
|
+
|
36
|
+
if (spec.results().passed()) {
|
37
|
+
resultText = "Passed.";
|
38
|
+
}
|
39
|
+
|
40
|
+
this.log(resultText);
|
41
|
+
},
|
42
|
+
|
43
|
+
reportSpecStarting: function(spec) {
|
44
|
+
this.log(spec.suite.description + ' : ' + spec.description + ' ... ');
|
45
|
+
},
|
46
|
+
|
47
|
+
reportSuiteResults: function(suite) {
|
48
|
+
var results = suite.results();
|
49
|
+
|
50
|
+
this.log(suite.description + ": " + results.passedCount + " of " + results.totalCount + " passed.");
|
51
|
+
},
|
52
|
+
|
53
|
+
log: function(str) {
|
54
|
+
var console = jasmine.getGlobal().console;
|
55
|
+
|
56
|
+
if (console && console.log) {
|
57
|
+
console.log(str);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
};
|
61
|
+
|
62
|
+
// export public
|
63
|
+
jasmine.ConsoleReporter = ConsoleReporter;
|
64
|
+
})();
|
@@ -0,0 +1,183 @@
|
|
1
|
+
(function() {
|
2
|
+
|
3
|
+
if (! jasmine) {
|
4
|
+
throw new Exception("jasmine library does not exist in global namespace!");
|
5
|
+
}
|
6
|
+
|
7
|
+
function elapsed(startTime, endTime) {
|
8
|
+
return (endTime - startTime)/1000;
|
9
|
+
}
|
10
|
+
|
11
|
+
function ISODateString(d) {
|
12
|
+
function pad(n) { return n < 10 ? '0'+n : n; }
|
13
|
+
|
14
|
+
return d.getFullYear() + '-'
|
15
|
+
+ pad(d.getMonth()+1) +'-'
|
16
|
+
+ pad(d.getDate()) + 'T'
|
17
|
+
+ pad(d.getHours()) + ':'
|
18
|
+
+ pad(d.getMinutes()) + ':'
|
19
|
+
+ pad(d.getSeconds());
|
20
|
+
}
|
21
|
+
|
22
|
+
function trim(str) {
|
23
|
+
return str.replace(/^\s+/, "" ).replace(/\s+$/, "" )
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Generates JUnit XML for the given spec run.
|
28
|
+
* Allows the test results to be used in java based CI
|
29
|
+
* systems like CruiseControl and Hudson.
|
30
|
+
*
|
31
|
+
* @param {string} savePath where to save the files
|
32
|
+
* @param {boolean} consolidate whether to save nested describes within the
|
33
|
+
* same file as their parent; default: true
|
34
|
+
* @param {boolean} useDotNotation whether to separate suite names with
|
35
|
+
* dots rather than spaces (ie "Class.init" not
|
36
|
+
* "Class init"); default: true
|
37
|
+
*/
|
38
|
+
var JUnitXmlReporter = function(savePath, consolidate, useDotNotation) {
|
39
|
+
this.savePath = savePath || '';
|
40
|
+
this.consolidate = consolidate === jasmine.undefined ? true : consolidate;
|
41
|
+
this.useDotNotation = useDotNotation === jasmine.undefined ? true : useDotNotation;
|
42
|
+
};
|
43
|
+
|
44
|
+
JUnitXmlReporter.prototype = {
|
45
|
+
reportRunnerStarting: function(runner) {
|
46
|
+
this.log("Runner Started.");
|
47
|
+
},
|
48
|
+
|
49
|
+
reportSpecStarting: function(spec) {
|
50
|
+
spec.startTime = new Date();
|
51
|
+
|
52
|
+
if (! spec.suite.startTime) {
|
53
|
+
spec.suite.startTime = spec.startTime;
|
54
|
+
}
|
55
|
+
|
56
|
+
this.log(spec.suite.description + ' : ' + spec.description + ' ... ');
|
57
|
+
},
|
58
|
+
|
59
|
+
reportSpecResults: function(spec) {
|
60
|
+
var results = spec.results();
|
61
|
+
spec.didFail = !results.passed();
|
62
|
+
spec.status = spec.didFail ? 'Failed.' : 'Passed.';
|
63
|
+
if (results.skipped) {
|
64
|
+
spec.status = 'Skipped.';
|
65
|
+
}
|
66
|
+
this.log(spec.status);
|
67
|
+
|
68
|
+
spec.duration = elapsed(spec.startTime, new Date());
|
69
|
+
spec.output = '<testcase classname="' + this.getFullName(spec.suite) +
|
70
|
+
'" name="' + spec.description + '" time="' + spec.duration + '">';
|
71
|
+
|
72
|
+
var failure = "";
|
73
|
+
var failures = 0;
|
74
|
+
var resultItems = results.getItems();
|
75
|
+
for (var i = 0; i < resultItems.length; i++) {
|
76
|
+
var result = resultItems[i];
|
77
|
+
|
78
|
+
if (result.type == 'expect' && result.passed && !result.passed()) {
|
79
|
+
failures += 1;
|
80
|
+
failure += (failures + ": " + result.message + " ");
|
81
|
+
}
|
82
|
+
}
|
83
|
+
if (failure) {
|
84
|
+
spec.output += "<failure>" + trim(failure) + "</failure>";
|
85
|
+
}
|
86
|
+
spec.output += "</testcase>";
|
87
|
+
},
|
88
|
+
|
89
|
+
reportSuiteResults: function(suite) {
|
90
|
+
var results = suite.results();
|
91
|
+
var specs = suite.specs();
|
92
|
+
var specOutput = "";
|
93
|
+
// for JUnit results, let's only include directly failed tests (not nested suites')
|
94
|
+
var failedCount = 0;
|
95
|
+
|
96
|
+
suite.status = results.passed() ? 'Passed.' : 'Failed.';
|
97
|
+
if (results.totalCount === 0) { // todo: change this to check results.skipped
|
98
|
+
suite.status = 'Skipped.';
|
99
|
+
}
|
100
|
+
|
101
|
+
// if a suite has no (active?) specs, reportSpecStarting is never called
|
102
|
+
// and thus the suite has no startTime -- account for that here
|
103
|
+
suite.startTime = suite.startTime || new Date();
|
104
|
+
suite.duration = elapsed(suite.startTime, new Date());
|
105
|
+
|
106
|
+
for (var i = 0; i < specs.length; i++) {
|
107
|
+
failedCount += specs[i].didFail ? 1 : 0;
|
108
|
+
specOutput += "\n " + specs[i].output;
|
109
|
+
}
|
110
|
+
suite.output = '\n<testsuite name="' + this.getFullName(suite) +
|
111
|
+
'" errors="0" tests="' + specs.length + '" failures="' + failedCount +
|
112
|
+
'" time="' + suite.duration + '" timestamp="' + ISODateString(suite.startTime) + '">';
|
113
|
+
suite.output += specOutput;
|
114
|
+
suite.output += "\n</testsuite>";
|
115
|
+
this.log(suite.description + ": " + results.passedCount + " of " + results.totalCount + " expectations passed.");
|
116
|
+
},
|
117
|
+
|
118
|
+
reportRunnerResults: function(runner) {
|
119
|
+
this.log("Runner Finished.");
|
120
|
+
var suites = runner.suites();
|
121
|
+
for (var i = 0; i < suites.length; i++) {
|
122
|
+
var suite = suites[i];
|
123
|
+
var fileName = 'TEST-' + this.getFullName(suite).replace(/\s/g, '') + '.xml';
|
124
|
+
var output = '<?xml version="1.0" encoding="UTF-8" ?>';
|
125
|
+
// if we are consolidating, only write out top-level suites
|
126
|
+
if (this.consolidate && suite.parentSuite) {
|
127
|
+
continue;
|
128
|
+
}
|
129
|
+
else if (this.consolidate) {
|
130
|
+
output += "\n<testsuites>";
|
131
|
+
output += this.getNestedOutput(suite);
|
132
|
+
output += "\n</testsuites>";
|
133
|
+
this.writeFile(this.savePath + fileName, output);
|
134
|
+
}
|
135
|
+
else {
|
136
|
+
output += suite.output;
|
137
|
+
this.writeFile(this.savePath + fileName, output);
|
138
|
+
}
|
139
|
+
}
|
140
|
+
},
|
141
|
+
|
142
|
+
getNestedOutput: function(suite) {
|
143
|
+
var output = suite.output;
|
144
|
+
for (var i = 0; i < suite.suites().length; i++) {
|
145
|
+
output += this.getNestedOutput(suite.suites()[i]);
|
146
|
+
}
|
147
|
+
return output;
|
148
|
+
},
|
149
|
+
|
150
|
+
writeFile: function(filename, text) {
|
151
|
+
try {
|
152
|
+
var out = new java.io.BufferedWriter(new java.io.FileWriter(filename));
|
153
|
+
out.write(text);
|
154
|
+
out.close();
|
155
|
+
} catch (e) {
|
156
|
+
}
|
157
|
+
},
|
158
|
+
|
159
|
+
getFullName: function(suite) {
|
160
|
+
if (this.useDotNotation) {
|
161
|
+
var fullName = suite.description;
|
162
|
+
for (var parentSuite = suite.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) {
|
163
|
+
fullName = parentSuite.description + '.' + fullName;
|
164
|
+
}
|
165
|
+
return fullName;
|
166
|
+
}
|
167
|
+
else {
|
168
|
+
return suite.getFullName();
|
169
|
+
}
|
170
|
+
},
|
171
|
+
|
172
|
+
log: function(str) {
|
173
|
+
var console = jasmine.getGlobal().console;
|
174
|
+
|
175
|
+
if (console && console.log) {
|
176
|
+
console.log(str);
|
177
|
+
}
|
178
|
+
}
|
179
|
+
};
|
180
|
+
|
181
|
+
// export public
|
182
|
+
jasmine.JUnitXmlReporter = JUnitXmlReporter;
|
183
|
+
})();
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'open3'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'filewatcher'
|
5
|
+
require 'asset_watcher/filewatcher_ext'
|
6
|
+
require 'asset_watcher'
|
7
|
+
|
8
|
+
namespace :jasmine do
|
9
|
+
desc "Watch .coffee and .haml file and compile when it changes"
|
10
|
+
task :report do
|
11
|
+
root_dir = File.expand_path '..', File.dirname(__FILE__)
|
12
|
+
#current_dir = File.expand_path '.'
|
13
|
+
tmp_dir = File.expand_path './tmp'
|
14
|
+
|
15
|
+
bootstrap_file = tmp_dir + '/bootstrap.js'
|
16
|
+
html_file = tmp_dir + '/reporter.html'
|
17
|
+
js_file = tmp_dir + '/tmp.js'
|
18
|
+
|
19
|
+
FileUtils.mkdir tmp_dir unless File.directory? tmp_dir
|
20
|
+
|
21
|
+
|
22
|
+
bootstrap =<<-BOOTSTRAP
|
23
|
+
load('#{root_dir + '/envjs/env.rhino.1.2.js'}');
|
24
|
+
Envjs.scriptTypes['text/javascript'] = true;
|
25
|
+
var specFile;
|
26
|
+
|
27
|
+
for (i = 0; i < arguments.length; i++) {
|
28
|
+
specFile = arguments[i];
|
29
|
+
console.log("Loading: " + specFile);
|
30
|
+
window.location = specFile
|
31
|
+
}
|
32
|
+
BOOTSTRAP
|
33
|
+
File.open(bootstrap_file, 'w') { |io| io.write bootstrap }
|
34
|
+
|
35
|
+
|
36
|
+
html =<<-HTML
|
37
|
+
<!DOCTYPE html>
|
38
|
+
<html lang="en">
|
39
|
+
<head>
|
40
|
+
<meta charset="utf-8" />
|
41
|
+
<title>Console Reporter Spec</title>
|
42
|
+
|
43
|
+
<link rel="stylesheet" href="#{root_dir + '/jasmine/jasmine.css'}" type="text/css" />
|
44
|
+
|
45
|
+
<script type="text/javascript" src="#{root_dir + '/jasmine/jasmine.js'}"></script>
|
46
|
+
<script type="text/javascript" src="#{root_dir + '/jasmine/jasmine-html.js'}"></script>
|
47
|
+
<script type="text/javascript" src="#{root_dir + '/reporters/jasmine.console_reporter.js'}"></script>
|
48
|
+
|
49
|
+
<script type="text/javascript" src="#{js_file}"></script>
|
50
|
+
</head>
|
51
|
+
<body>
|
52
|
+
<script type="text/javascript">
|
53
|
+
jasmine.getEnv().addReporter(new jasmine.ConsoleReporter());
|
54
|
+
jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
|
55
|
+
jasmine.getEnv().execute();
|
56
|
+
</script>
|
57
|
+
</body>
|
58
|
+
</html>
|
59
|
+
HTML
|
60
|
+
File.open(html_file, 'w') { |io| io.write html }
|
61
|
+
|
62
|
+
|
63
|
+
watcher = AssetWatcher.new
|
64
|
+
contents = {}
|
65
|
+
|
66
|
+
FileWatcher.new(watcher.target_files, "Watching files:").watch do |src_path|
|
67
|
+
watcher.compile src_path
|
68
|
+
|
69
|
+
# Integrate JavaScript files
|
70
|
+
dest_path = watcher.destination src_path
|
71
|
+
contents[dest_path] = File.open(dest_path, 'r') { |io| io.read }
|
72
|
+
File.open(js_file, 'w') { |io| io.write contents.values.join ';' }
|
73
|
+
|
74
|
+
# Execute Jasmine Test
|
75
|
+
jar_files = %w|js jline|.map { |file| root_dir + "/jar/#{file}.jar" }
|
76
|
+
command = "java -cp #{jar_files.join ':'} org.mozilla.javascript.tools.shell.Main -opt -1 #{bootstrap_file} #{html_file}"
|
77
|
+
stdin, stdout, stderr = *Open3.popen3(command)
|
78
|
+
stdout.each { |line| puts line }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jasmine-reporters
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 0.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- yamada996
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-31 00:00:00 +09:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 3
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
requirement: *id001
|
32
|
+
prerelease: false
|
33
|
+
name: asset_watcher
|
34
|
+
type: :runtime
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 3
|
42
|
+
segments:
|
43
|
+
- 2
|
44
|
+
- 3
|
45
|
+
- 0
|
46
|
+
version: 2.3.0
|
47
|
+
requirement: *id002
|
48
|
+
prerelease: false
|
49
|
+
name: rspec
|
50
|
+
type: :development
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 23
|
58
|
+
segments:
|
59
|
+
- 1
|
60
|
+
- 0
|
61
|
+
- 0
|
62
|
+
version: 1.0.0
|
63
|
+
requirement: *id003
|
64
|
+
prerelease: false
|
65
|
+
name: bundler
|
66
|
+
type: :development
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ~>
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 7
|
74
|
+
segments:
|
75
|
+
- 1
|
76
|
+
- 5
|
77
|
+
- 2
|
78
|
+
version: 1.5.2
|
79
|
+
requirement: *id004
|
80
|
+
prerelease: false
|
81
|
+
name: jeweler
|
82
|
+
type: :development
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
version: "0"
|
93
|
+
requirement: *id005
|
94
|
+
prerelease: false
|
95
|
+
name: rcov
|
96
|
+
type: :development
|
97
|
+
description: if target files change, execute test
|
98
|
+
email: t.yamada.996@gmail.com
|
99
|
+
executables: []
|
100
|
+
|
101
|
+
extensions: []
|
102
|
+
|
103
|
+
extra_rdoc_files:
|
104
|
+
- LICENSE
|
105
|
+
- README.md
|
106
|
+
files:
|
107
|
+
- .document
|
108
|
+
- .rspec
|
109
|
+
- Gemfile
|
110
|
+
- Gemfile.lock
|
111
|
+
- LICENSE
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- VERSION
|
115
|
+
- example/public/test.js
|
116
|
+
- example/src/test.coffee
|
117
|
+
- lib/jasmine-reporters/envjs/env.rhino.1.2.js
|
118
|
+
- lib/jasmine-reporters/jar/jline.jar
|
119
|
+
- lib/jasmine-reporters/jar/js.jar
|
120
|
+
- lib/jasmine-reporters/jasmine/jasmine-html.js
|
121
|
+
- lib/jasmine-reporters/jasmine/jasmine.css
|
122
|
+
- lib/jasmine-reporters/jasmine/jasmine.js
|
123
|
+
- lib/jasmine-reporters/reporters/jasmine.console_reporter.js
|
124
|
+
- lib/jasmine-reporters/reporters/jasmine.junit_reporter.js
|
125
|
+
- lib/jasmine-reporters/tasks/report.rake
|
126
|
+
has_rdoc: true
|
127
|
+
homepage: http://github.com/yamada996/jasmine-reporters
|
128
|
+
licenses:
|
129
|
+
- MIT
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
hash: 3
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
version: "0"
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
153
|
+
requirements: []
|
154
|
+
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 1.4.1
|
157
|
+
signing_key:
|
158
|
+
specification_version: 3
|
159
|
+
summary: Jasmine Console Reporter
|
160
|
+
test_files: []
|
161
|
+
|