jasmine-reporters 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|