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.
@@ -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
+