jasmine-reporters 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+