jazrb 0.1.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.
Files changed (184) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +134 -0
  3. data/bin/autojaz +4 -0
  4. data/bin/jazrb +230 -0
  5. data/doc/jasmine/files.html +460 -0
  6. data/doc/jasmine/index.html +322 -0
  7. data/doc/jasmine/symbols/_global_.html +1083 -0
  8. data/doc/jasmine/symbols/jasmine.Block.html +417 -0
  9. data/doc/jasmine/symbols/jasmine.Clock.html +678 -0
  10. data/doc/jasmine/symbols/jasmine.Env.html +1135 -0
  11. data/doc/jasmine/symbols/jasmine.EnvjsReporter.html +328 -0
  12. data/doc/jasmine/symbols/jasmine.JsApiReporter.html +822 -0
  13. data/doc/jasmine/symbols/jasmine.Matchers.html +1106 -0
  14. data/doc/jasmine/symbols/jasmine.MultiReporter.html +394 -0
  15. data/doc/jasmine/symbols/jasmine.NestedResults.html +710 -0
  16. data/doc/jasmine/symbols/jasmine.Reporter.html +574 -0
  17. data/doc/jasmine/symbols/jasmine.Runner.html +710 -0
  18. data/doc/jasmine/symbols/jasmine.Spec.html +1372 -0
  19. data/doc/jasmine/symbols/jasmine.Spy.html +855 -0
  20. data/doc/jasmine/symbols/jasmine.Suite.html +705 -0
  21. data/doc/jasmine/symbols/jasmine.XMLReporter.html +328 -0
  22. data/doc/jasmine/symbols/jasmine.html +1359 -0
  23. data/doc/jasmine/symbols/jasmine.util.html +535 -0
  24. data/doc/jasmine/symbols/src/lib_EnvjsReporter.js.html +149 -0
  25. data/doc/jasmine/symbols/src/lib_TrivialReporter.js.html +127 -0
  26. data/doc/jasmine/symbols/src/lib_XMLReporter.js.html +210 -0
  27. data/doc/jasmine/symbols/src/src_Block.js.html +35 -0
  28. data/doc/jasmine/symbols/src/src_Env.js.html +233 -0
  29. data/doc/jasmine/symbols/src/src_JsApiReporter.js.html +110 -0
  30. data/doc/jasmine/symbols/src/src_Matchers.js.html +399 -0
  31. data/doc/jasmine/symbols/src/src_MultiReporter.js.html +36 -0
  32. data/doc/jasmine/symbols/src/src_NestedResults.js.html +88 -0
  33. data/doc/jasmine/symbols/src/src_PrettyPrinter.js.html +128 -0
  34. data/doc/jasmine/symbols/src/src_Queue.js.html +119 -0
  35. data/doc/jasmine/symbols/src/src_Reporter.js.html +35 -0
  36. data/doc/jasmine/symbols/src/src_Reporters.js.html +51 -0
  37. data/doc/jasmine/symbols/src/src_Runner.js.html +75 -0
  38. data/doc/jasmine/symbols/src/src_Spec.js.html +228 -0
  39. data/doc/jasmine/symbols/src/src_Suite.js.html +77 -0
  40. data/doc/jasmine/symbols/src/src_WaitsBlock.js.html +21 -0
  41. data/doc/jasmine/symbols/src/src_WaitsForBlock.js.html +45 -0
  42. data/doc/jasmine/symbols/src/src_base.js.html +566 -0
  43. data/doc/jasmine/symbols/src/src_mock-timeout.js.html +185 -0
  44. data/doc/jasmine/symbols/src/src_util.js.html +75 -0
  45. data/lib/autotest/discover.rb +3 -0
  46. data/lib/autotest/jazrb.rb +55 -0
  47. data/lib/jazrb/intro.js +46 -0
  48. data/lib/jazrb/jasmine/EnvjsReporter.js +141 -0
  49. data/lib/jazrb/jasmine/TrivialReporter.js +155 -0
  50. data/lib/jazrb/jasmine/XMLReporter.js +241 -0
  51. data/lib/jazrb/jasmine/consolex.js +28 -0
  52. data/lib/jazrb/jasmine/jasmine-0.10.0.js +2526 -0
  53. data/lib/jazrb/jasmine/jasmine.js +2526 -0
  54. data/lib/jazrb/jasmine/json2.js +478 -0
  55. data/lib/jazrb/options.rb +26 -0
  56. data/lib/jazrb/outro.js +3 -0
  57. data/lib/jazrb/qintro.js +113 -0
  58. data/lib/jazrb/qoutro.js +3 -0
  59. data/lib/jazrb/qunit/qunit.css +17 -0
  60. data/lib/jazrb/qunit/qunit.js +1027 -0
  61. data/lib/jazrb.rb +0 -0
  62. data/spec/example/hello_world_spec.js +29 -0
  63. data/spec/example/nested/HelloWorldSpec.js +13 -0
  64. data/spec/example/nested/SpecHelper.js +1 -0
  65. data/spec/example/plain_spec.js +8 -0
  66. data/spec/example/spec_helper.js +1 -0
  67. data/spec/spec_helper.js +18 -0
  68. data/spec/spec_runner.js +143 -0
  69. data/test/jazrb_test.rb +7 -0
  70. data/test/test_helper.rb +10 -0
  71. data/vendor/jasmine/MIT.LICENSE +20 -0
  72. data/vendor/jasmine/README.markdown +479 -0
  73. data/vendor/jasmine/Rakefile +155 -0
  74. data/vendor/jasmine/contrib/ruby/jasmine_runner.rb +334 -0
  75. data/vendor/jasmine/contrib/ruby/jasmine_spec_builder.rb +153 -0
  76. data/vendor/jasmine/contrib/ruby/run.html +47 -0
  77. data/vendor/jasmine/contrib/ruby/spec/jasmine_runner_spec.rb +71 -0
  78. data/vendor/jasmine/doc/files.html +460 -0
  79. data/vendor/jasmine/doc/index.html +322 -0
  80. data/vendor/jasmine/doc/symbols/_global_.html +1083 -0
  81. data/vendor/jasmine/doc/symbols/jasmine.Block.html +417 -0
  82. data/vendor/jasmine/doc/symbols/jasmine.Clock.html +678 -0
  83. data/vendor/jasmine/doc/symbols/jasmine.Env.html +1135 -0
  84. data/vendor/jasmine/doc/symbols/jasmine.EnvjsReporter.html +328 -0
  85. data/vendor/jasmine/doc/symbols/jasmine.JsApiReporter.html +822 -0
  86. data/vendor/jasmine/doc/symbols/jasmine.Matchers.html +1106 -0
  87. data/vendor/jasmine/doc/symbols/jasmine.MultiReporter.html +394 -0
  88. data/vendor/jasmine/doc/symbols/jasmine.NestedResults.html +710 -0
  89. data/vendor/jasmine/doc/symbols/jasmine.Reporter.html +574 -0
  90. data/vendor/jasmine/doc/symbols/jasmine.Runner.html +710 -0
  91. data/vendor/jasmine/doc/symbols/jasmine.Spec.html +1372 -0
  92. data/vendor/jasmine/doc/symbols/jasmine.Spy.html +855 -0
  93. data/vendor/jasmine/doc/symbols/jasmine.Suite.html +705 -0
  94. data/vendor/jasmine/doc/symbols/jasmine.XMLReporter.html +328 -0
  95. data/vendor/jasmine/doc/symbols/jasmine.html +1359 -0
  96. data/vendor/jasmine/doc/symbols/jasmine.util.html +535 -0
  97. data/vendor/jasmine/doc/symbols/src/lib_EnvjsReporter.js.html +149 -0
  98. data/vendor/jasmine/doc/symbols/src/lib_TrivialReporter.js.html +127 -0
  99. data/vendor/jasmine/doc/symbols/src/lib_XMLReporter.js.html +210 -0
  100. data/vendor/jasmine/doc/symbols/src/src_Block.js.html +35 -0
  101. data/vendor/jasmine/doc/symbols/src/src_Env.js.html +233 -0
  102. data/vendor/jasmine/doc/symbols/src/src_JsApiReporter.js.html +110 -0
  103. data/vendor/jasmine/doc/symbols/src/src_Matchers.js.html +399 -0
  104. data/vendor/jasmine/doc/symbols/src/src_MultiReporter.js.html +36 -0
  105. data/vendor/jasmine/doc/symbols/src/src_NestedResults.js.html +88 -0
  106. data/vendor/jasmine/doc/symbols/src/src_PrettyPrinter.js.html +128 -0
  107. data/vendor/jasmine/doc/symbols/src/src_Queue.js.html +119 -0
  108. data/vendor/jasmine/doc/symbols/src/src_Reporter.js.html +35 -0
  109. data/vendor/jasmine/doc/symbols/src/src_Reporters.js.html +51 -0
  110. data/vendor/jasmine/doc/symbols/src/src_Runner.js.html +75 -0
  111. data/vendor/jasmine/doc/symbols/src/src_Spec.js.html +228 -0
  112. data/vendor/jasmine/doc/symbols/src/src_Suite.js.html +77 -0
  113. data/vendor/jasmine/doc/symbols/src/src_WaitsBlock.js.html +21 -0
  114. data/vendor/jasmine/doc/symbols/src/src_WaitsForBlock.js.html +45 -0
  115. data/vendor/jasmine/doc/symbols/src/src_base.js.html +566 -0
  116. data/vendor/jasmine/doc/symbols/src/src_mock-timeout.js.html +185 -0
  117. data/vendor/jasmine/doc/symbols/src/src_util.js.html +75 -0
  118. data/vendor/jasmine/examples/html/example_suite.html +27 -0
  119. data/vendor/jasmine/examples/html/spec/example_suite.js +11 -0
  120. data/vendor/jasmine/examples/ruby/Rakefile +33 -0
  121. data/vendor/jasmine/examples/ruby/spec/example/example_spec.js +11 -0
  122. data/vendor/jasmine/examples/ruby/spec/jasmine_helper.rb +41 -0
  123. data/vendor/jasmine/examples/ruby/spec/jasmine_spec.rb +31 -0
  124. data/vendor/jasmine/examples/ruby/spec/saucelabs.yml +24 -0
  125. data/vendor/jasmine/geminstaller.yml +23 -0
  126. data/vendor/jasmine/images/fail-16.png +0 -0
  127. data/vendor/jasmine/images/fail.png +0 -0
  128. data/vendor/jasmine/images/go-16.png +0 -0
  129. data/vendor/jasmine/images/go.png +0 -0
  130. data/vendor/jasmine/images/pending-16.png +0 -0
  131. data/vendor/jasmine/images/pending.png +0 -0
  132. data/vendor/jasmine/images/question-bk.png +0 -0
  133. data/vendor/jasmine/images/questionbk-16.png +0 -0
  134. data/vendor/jasmine/images/spinner.gif +0 -0
  135. data/vendor/jasmine/jasmine.watchr +70 -0
  136. data/vendor/jasmine/lib/EnvjsReporter.js +141 -0
  137. data/vendor/jasmine/lib/TrivialReporter.js +155 -0
  138. data/vendor/jasmine/lib/XMLReporter.js +241 -0
  139. data/vendor/jasmine/lib/consolex.js +28 -0
  140. data/vendor/jasmine/lib/jasmine-0.10.0.js +2526 -0
  141. data/vendor/jasmine/lib/jasmine.css +86 -0
  142. data/vendor/jasmine/lib/json2.js +478 -0
  143. data/vendor/jasmine/spec/jasmine_helper.rb +44 -0
  144. data/vendor/jasmine/spec/jasmine_spec.rb +31 -0
  145. data/vendor/jasmine/spec/runner.html +43 -0
  146. data/vendor/jasmine/spec/runner.js +78 -0
  147. data/vendor/jasmine/spec/saucelabs.yml +24 -0
  148. data/vendor/jasmine/spec/suites/EnvSpec.js +71 -0
  149. data/vendor/jasmine/spec/suites/ExceptionsSpec.js +107 -0
  150. data/vendor/jasmine/spec/suites/JsApiReporterSpec.js +82 -0
  151. data/vendor/jasmine/spec/suites/MatchersSpec.js +589 -0
  152. data/vendor/jasmine/spec/suites/MockClockSpec.js +34 -0
  153. data/vendor/jasmine/spec/suites/MultiReporterSpec.js +30 -0
  154. data/vendor/jasmine/spec/suites/NestedResultsSpec.js +54 -0
  155. data/vendor/jasmine/spec/suites/PrettyPrintSpec.js +93 -0
  156. data/vendor/jasmine/spec/suites/QueueSpec.js +23 -0
  157. data/vendor/jasmine/spec/suites/ReporterSpec.js +60 -0
  158. data/vendor/jasmine/spec/suites/RunnerSpec.js +258 -0
  159. data/vendor/jasmine/spec/suites/SpecRunningSpec.js +1117 -0
  160. data/vendor/jasmine/spec/suites/SpecSpec.js +110 -0
  161. data/vendor/jasmine/spec/suites/SpySpec.js +187 -0
  162. data/vendor/jasmine/spec/suites/SuiteSpec.js +101 -0
  163. data/vendor/jasmine/spec/suites/TrivialReporterSpec.js +140 -0
  164. data/vendor/jasmine/spec/suites/UtilSpec.js +23 -0
  165. data/vendor/jasmine/src/Block.js +34 -0
  166. data/vendor/jasmine/src/Env.js +236 -0
  167. data/vendor/jasmine/src/JsApiReporter.js +103 -0
  168. data/vendor/jasmine/src/Matchers.js +326 -0
  169. data/vendor/jasmine/src/MultiReporter.js +28 -0
  170. data/vendor/jasmine/src/NestedResults.js +99 -0
  171. data/vendor/jasmine/src/PrettyPrinter.js +122 -0
  172. data/vendor/jasmine/src/Queue.js +210 -0
  173. data/vendor/jasmine/src/Reporter.js +27 -0
  174. data/vendor/jasmine/src/Reporters.js +43 -0
  175. data/vendor/jasmine/src/Runner.js +68 -0
  176. data/vendor/jasmine/src/Spec.js +254 -0
  177. data/vendor/jasmine/src/Suite.js +70 -0
  178. data/vendor/jasmine/src/WaitsBlock.js +13 -0
  179. data/vendor/jasmine/src/WaitsForBlock.js +38 -0
  180. data/vendor/jasmine/src/base.js +604 -0
  181. data/vendor/jasmine/src/mock-timeout.js +177 -0
  182. data/vendor/jasmine/src/util.js +67 -0
  183. data/vendor/jasmine/src/version.json +5 -0
  184. metadata +279 -0
@@ -0,0 +1,24 @@
1
+ local:
2
+ application_framework: :selenium
3
+ #
4
+ # Possible Sauce Labs configurations as of 2009/11/19
5
+ # From: http://saucelabs.com/products/docs/sauce-ondemand/browsers
6
+ # os: "Windows 2003"
7
+ # browser: "iexplore"
8
+ # browser-version: "6.", "7.", "8."
9
+ # browser: "firefox"
10
+ # browser-version: "2.", "3.0", "3.5"
11
+ # browser: "safari"
12
+ # browser-version: "3.", "4."
13
+ # browser: "opera"
14
+ # browser-version: "9."
15
+ # browser: "googlechrome"
16
+ # browser-version: ""
17
+ # os: "Linux"
18
+ # browser: "firefox"
19
+ # browser-version: "3."
20
+ saucelabs:
21
+ application_framework: :external
22
+ selenium_server_address: "saucelabs.com"
23
+ selenium_browser_key: '{"username": "--YOUR-SAUCELABS-USERNAME--", "access-key": "--YOUR-SAUCELABS-ACCESS-KEY--", "os": "Linux", "browser": "firefox", "browser-version": "3."}'
24
+ application_port: "80"
@@ -0,0 +1,23 @@
1
+ ---
2
+ gems:
3
+ - name: rake
4
+ version: 0.8.7
5
+ - name: ragaskar-jsdoc_helper
6
+ version: 0.0.2.1
7
+ - name: json
8
+ version: 1.1.9
9
+ - name: pivotal-selenium-rc
10
+ version: 1.11.20090610
11
+ - name: rack
12
+ version: 1.0.0
13
+ - name: thin
14
+ version: 1.2.4
15
+ - name: eventmachine
16
+ version: 0.12.8
17
+ - name: rspec
18
+ version: 1.2.9
19
+ - name: selenium-client
20
+ version: 1.2.17
21
+ - name: saucelabs-adapter
22
+ version: 0.3.2
23
+ install_options: --source=http://gems.pivotallabs.com
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env watchr
2
+
3
+ begin; require 'watchr/event_handlers/em'; rescue LoadError; end
4
+ begin; require 'watchr/deps'; rescue LoadError; end
5
+
6
+ # p "reload"
7
+
8
+ watch( %r(.*), :modified, lambda { |md| File.directory? md[0] } ) do |md|
9
+ raise Watchr::Refresh
10
+ end
11
+
12
+ watch( %r(jasmine.watchr), :modified ) do |md|
13
+ raise Watchr::Refresh
14
+ end
15
+
16
+ map_to_test = lambda do |file, event|
17
+ case file
18
+ when %r(spec/(.*)([Ss]pec)\.js$)
19
+ # Run JS spec's using parallel HTML file if it exists
20
+ prefix = $~[1];
21
+ prefix.sub! %r(_$), ""
22
+ files = Dir[prefix+".*htm*"]
23
+ if html = files.detect { |f| f =~ %r(\.x?html?) }
24
+ event == :load ? nil : html
25
+ else
26
+ file
27
+ end
28
+ else; file
29
+ end
30
+ end
31
+
32
+ jazrb = lambda do |*args|
33
+ files = []
34
+ # boy, clean this up, but call/splat are subtle
35
+ if Array === args[0]
36
+ args = args[0][0]
37
+ files = args.map { |pair| map_to_test.call( pair[0][0], pair[1] ) }
38
+ files.compact!
39
+ files.uniq!
40
+ else
41
+ (file, event) = *args
42
+ file = map_to_test.call file, event
43
+ if file
44
+ files = [ file ]
45
+ end
46
+ end
47
+ if !files.empty?
48
+ deps = ""
49
+ begin deps = "--deps #{db_path}"; rescue; end
50
+ cmd = "jazrb #{deps} #{files.join(" ")}"
51
+ puts cmd
52
+ system cmd
53
+ # puts "exit status: #{$?.exitstatus}" if $?.exited? && $?.exitstatus != 0
54
+ if $?.signaled? && $?.termsig == 2
55
+ Process.kill 2, 0
56
+ end
57
+ end
58
+ end
59
+
60
+ watch( %r((^spec/.*[Ss]pec)\.js$), [ :load, :created, :modified ], nil, :batch => :js ) do |events|
61
+ jazrb.call events
62
+ end
63
+
64
+ Signal.trap('QUIT') do
65
+ EM.stop
66
+ end
67
+
68
+ # Local Variables:
69
+ # mode:ruby
70
+ # End:
@@ -0,0 +1,141 @@
1
+ /** JavaScript API reporter.
2
+ *
3
+ * @constructor
4
+ */
5
+ jasmine.EnvjsReporter = function() {
6
+ this.started = false;
7
+ this.finished = false;
8
+ this.suites_ = [];
9
+ this.results_ = {};
10
+ };
11
+
12
+ jasmine.EnvjsReporter.prototype.reportRunnerStarting = function(runner) {
13
+ this.started = true;
14
+ var suites = runner.suites();
15
+ for (var i = 0; i < suites.length; i++) {
16
+ var suite = suites[i];
17
+ this.suites_.push(this.summarize_(suite));
18
+ }
19
+ this.startedAt = new Date();
20
+ };
21
+
22
+ jasmine.EnvjsReporter.prototype.suites = function() {
23
+ return this.suites_;
24
+ };
25
+
26
+ jasmine.EnvjsReporter.prototype.summarize_ = function(suiteOrSpec) {
27
+ var isSuite = suiteOrSpec instanceof jasmine.Suite
28
+ var summary = {
29
+ id: suiteOrSpec.id,
30
+ name: suiteOrSpec.description,
31
+ type: isSuite ? 'suite' : 'spec',
32
+ children: []
33
+ };
34
+ if (isSuite) {
35
+ var specs = suiteOrSpec.specs();
36
+ for (var i = 0; i < specs.length; i++) {
37
+ summary.children.push(this.summarize_(specs[i]));
38
+ }
39
+ }
40
+ return summary;
41
+ };
42
+
43
+ jasmine.EnvjsReporter.prototype.results = function() {
44
+ return this.results_;
45
+ };
46
+
47
+ jasmine.EnvjsReporter.prototype.resultsForSpec = function(specId) {
48
+ return this.results_[specId];
49
+ };
50
+
51
+ //noinspection JSUnusedLocalSymbols
52
+ jasmine.EnvjsReporter.prototype.reportRunnerResults = function(runner) {
53
+ this.finished = true;
54
+ var results = runner.results();
55
+ var specs = runner.specs();
56
+ var specCount = specs.length;
57
+ print();
58
+ var count = 1;
59
+ var red = "\x1b[31m";
60
+ var normal = "\x1b[0m";
61
+ var green = "\x1b[32m";
62
+ for(var i in this.results_) {
63
+ var result = this.results_[i];
64
+ if( result.result == "failed" ) {
65
+ var messages = result.messages;
66
+ for(var j in messages) {
67
+ var expectation = messages[j];
68
+ if( !expectation.passed() ) {
69
+ print();
70
+ print(count++ + ")");
71
+ print(red+result.spec.description+normal);
72
+ var message;
73
+ message = expectation.message.replace(/(<br \/>)+/g, " ");
74
+ print(red+message+normal);
75
+ print_exception(expectation.trace);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ var message = "\nFinished in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
81
+ print(message);
82
+ message = "\n" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
83
+ if(results.failedCount > 0){
84
+ message = red + message;
85
+ } else {
86
+ message = green + message;
87
+ }
88
+ print(message+normal);
89
+ };
90
+
91
+ //noinspection JSUnusedLocalSymbols
92
+ jasmine.EnvjsReporter.prototype.reportSuiteResults = function(suite) {
93
+ };
94
+
95
+ //noinspection JSUnusedLocalSymbols
96
+ jasmine.EnvjsReporter.prototype.reportSpecResults = function(spec) {
97
+ puts(spec.results().failedCount > 0 ? "\x1b[31mF\x1b[0m" : "\x1b[32m.\x1b[0m");
98
+ this.results_[spec.id] = {
99
+ spec: spec,
100
+ messages: spec.results().getItems(),
101
+ result: spec.results().failedCount > 0 ? "failed" : "passed"
102
+ };
103
+ };
104
+
105
+ //noinspection JSUnusedLocalSymbols
106
+ jasmine.EnvjsReporter.prototype.log = function(str) {
107
+ // print(str);
108
+ };
109
+
110
+ jasmine.EnvjsReporter.prototype.resultsForSpecs = function(specIds){
111
+ var results = {};
112
+ for (var i = 0; i < specIds.length; i++) {
113
+ var specId = specIds[i];
114
+ results[specId] = this.summarizeResult_(this.results_[specId]);
115
+ }
116
+ return results;
117
+ };
118
+
119
+ jasmine.EnvjsReporter.prototype.summarizeResult_ = function(result){
120
+ var summaryMessages = [];
121
+ for (var messageIndex in result.messages) {
122
+ var resultMessage = result.messages[messageIndex];
123
+ summaryMessages.push({
124
+ text: resultMessage.text,
125
+ passed: resultMessage.passed ? resultMessage.passed() : true,
126
+ type: resultMessage.type,
127
+ message: resultMessage.message,
128
+ trace: {
129
+ stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : undefined
130
+ }
131
+ });
132
+ };
133
+
134
+ var summaryResult = {
135
+ result : result.result,
136
+ messages : summaryMessages
137
+ };
138
+
139
+ return summaryResult;
140
+ };
141
+
@@ -0,0 +1,155 @@
1
+ jasmine.TrivialReporter = function(doc) {
2
+ this.document = doc || document;
3
+ this.suiteDivs = {};
4
+ };
5
+
6
+ jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
7
+ var el = document.createElement(type);
8
+
9
+ for (var i = 2; i < arguments.length; i++) {
10
+ var child = arguments[i];
11
+
12
+ if (typeof child === 'string') {
13
+ el.appendChild(document.createTextNode(child));
14
+ } else {
15
+ if (child) { el.appendChild(child); }
16
+ }
17
+ }
18
+
19
+ for (var attr in attrs) {
20
+ el[attr] = attrs[attr];
21
+ }
22
+
23
+ return el;
24
+ };
25
+
26
+ jasmine.TrivialReporter.prototype._argString = function(s) {
27
+ // Maintain non-"spec" arguments
28
+ var undefined;
29
+
30
+ if(this.specs == undefined){
31
+ this.specs = "?";
32
+ var args = window.location.href;
33
+ args = args.split('?');
34
+ if(args.length>1){
35
+ args = args[1].split("&");
36
+ var map = {};
37
+ for(var i=0; i<args.length; i++){
38
+ var pair = args[i].split("=");
39
+ if (pair[0]!="spec"){
40
+ map[pair[0]] = pair[1];
41
+ }
42
+ }
43
+ for(var key in map){
44
+ if(this.specs!="?"){
45
+ this.specs = specs+"&";
46
+ }
47
+ this.specs = this.specs + key + "=" + map[key];
48
+ }
49
+ }
50
+ }
51
+
52
+ var spec = this.specs;
53
+
54
+ if(s) {
55
+ if(spec!="?"){
56
+ spec = spec + "&";
57
+ }
58
+ spec = spec + "spec=" + encodeURIComponent(s); //
59
+ }
60
+
61
+ return spec;
62
+ };
63
+
64
+ jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
65
+ var suites = runner.suites();
66
+
67
+ this.runnerDiv = this.createDom('div', { className: 'runner running' },
68
+ this.createDom('a', { className: 'run_spec', href: this._argString() }, "run all"),
69
+ this.runnerMessageSpan = this.createDom('span', {}, "Running..."));
70
+ this.document.body.appendChild(this.runnerDiv);
71
+
72
+ for (var i = 0; i < suites.length; i++) {
73
+ var suite = suites[i];
74
+ var suiteDiv = this.createDom('div', { className: 'suite' },
75
+ this.createDom('a', { className: 'run_spec', href: this._argString(suite.getFullName()) }, "run"),
76
+ this.createDom('a', { className: 'description', href: this._argString(suite.getFullName()) }, suite.description));
77
+ this.suiteDivs[suite.getFullName()] = suiteDiv;
78
+ var parentDiv = this.document.body;
79
+ if (suite.parentSuite) {
80
+ parentDiv = this.suiteDivs[suite.parentSuite.getFullName()];
81
+ }
82
+ parentDiv.appendChild(suiteDiv);
83
+ }
84
+
85
+ this.startedAt = new Date();
86
+ };
87
+
88
+ jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
89
+ var results = runner.results();
90
+ var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
91
+ this.runnerDiv.setAttribute("class", className);
92
+ //do it twice for IE
93
+ this.runnerDiv.setAttribute("className", className);
94
+ var specs = runner.specs();
95
+ var specCount = 0;
96
+ for (var i = 0; i < specs.length; i++) {
97
+ if (this.specFilter(specs[i])) {
98
+ specCount++;
99
+ }
100
+ }
101
+ var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
102
+ message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
103
+ this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: this._argString()}, message), this.runnerMessageSpan.firstChild);
104
+ };
105
+
106
+ jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
107
+ var results = suite.results();
108
+ var status = results.passed() ? 'passed' : 'failed';
109
+ if (results.totalCount == 0) { // todo: change this to check results.skipped
110
+ status = 'skipped';
111
+ }
112
+ this.suiteDivs[suite.getFullName()].className += " " + status;
113
+ };
114
+
115
+ jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
116
+ var results = spec.results();
117
+ var status = results.passed() ? 'passed' : 'failed';
118
+ if (results.skipped) {
119
+ status = 'skipped';
120
+ }
121
+ var specDiv = this.createDom('div', { className: 'spec ' + status },
122
+ this.createDom('a', { className: 'run_spec', href: this._argString(encodeURIComponent(spec.getFullName())) }, "run"),
123
+ this.createDom('a', { className: 'description', href: this._argString(encodeURIComponent(spec.getFullName())) }, spec.getFullName()));
124
+
125
+
126
+ var resultItems = results.getItems();
127
+ for (var i = 0; i < resultItems.length; i++) {
128
+ var result = resultItems[i];
129
+ if (result.passed && !result.passed()) {
130
+ specDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
131
+ specDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
132
+ }
133
+ }
134
+ this.suiteDivs[spec.suite.getFullName()].appendChild(specDiv);
135
+ };
136
+
137
+ jasmine.TrivialReporter.prototype.log = function() {
138
+ this.console && console.log.apply(console, arguments);
139
+ };
140
+
141
+ jasmine.TrivialReporter.prototype.getLocation = function() {
142
+ return this.document.location;
143
+ };
144
+
145
+ jasmine.TrivialReporter.prototype.specFilter = function(spec) {
146
+ var paramMap = {};
147
+ var params = this.getLocation().search.substring(1).split('&');
148
+ for (var i = 0; i < params.length; i++) {
149
+ var p = params[i].split('=');
150
+ paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
151
+ }
152
+
153
+ if (!paramMap["spec"]) return true;
154
+ return spec.getFullName().indexOf(decodeURIComponent(paramMap["spec"])) == 0;
155
+ };
@@ -0,0 +1,241 @@
1
+ (function(){
2
+
3
+ var APOS = "'"; QUOTE = '"';
4
+ var ESCAPED_QUOTE = { };
5
+ ESCAPED_QUOTE[QUOTE] = '&quot;';
6
+ ESCAPED_QUOTE[APOS] = '&apos;';
7
+
8
+ function formatAttributes(attributes) {
9
+ var att_value;
10
+ var apos_pos, quot_pos;
11
+ var use_quote, escape, quote_to_escape;
12
+ var att_str;
13
+ var re;
14
+ var result = '';
15
+
16
+ for (var att in attributes) {
17
+ att_value = attributes[att] || "";
18
+
19
+ att_value = att_value.replace(/&/g, "&amp;");
20
+ att_value = att_value.replace(/</g, "&lt;");
21
+ att_value = att_value.replace(/>/g, "&gt;");
22
+
23
+ // Find first quote marks if any
24
+ apos_pos = att_value.indexOf(APOS);
25
+ quot_pos = att_value.indexOf(QUOTE);
26
+
27
+ // Determine which quote type to use around
28
+ // the attribute value
29
+ if (apos_pos == -1 && quot_pos == -1) {
30
+ att_str = ' ' + att + "='" + att_value + "'";
31
+ result += att_str;
32
+ continue;
33
+ }
34
+
35
+ // Prefer the single quote unless forced to use double
36
+ if (quot_pos != -1 && quot_pos < apos_pos) {
37
+ use_quote = APOS;
38
+ }
39
+ else {
40
+ use_quote = QUOTE;
41
+ }
42
+
43
+ // Figure out which kind of quote to escape
44
+ // Use nice dictionary instead of yucky if-else nests
45
+ escape = ESCAPED_QUOTE[use_quote];
46
+
47
+ // Escape only the right kind of quote
48
+ re = new RegExp(use_quote,'g');
49
+ att_str = ' ' + att + '=' + use_quote +
50
+ att_value.replace(re, escape) + use_quote;
51
+ result += att_str;
52
+ }
53
+ return result;
54
+ };
55
+
56
+
57
+ /** JavaScript API reporter.
58
+ *
59
+ * @constructor
60
+ */
61
+ jasmine.XMLReporter = function() {
62
+ this.started = false;
63
+ this.finished = false;
64
+ this.suites_ = [];
65
+ this.results_ = {};
66
+ };
67
+
68
+ jasmine.XMLReporter.prototype.reportRunnerStarting = function(runner) {
69
+ this.started = true;
70
+ var suites = runner.suites();
71
+ for (var i = 0; i < suites.length; i++) {
72
+ var suite = suites[i];
73
+ this.suites_.push(this.summarize_(suite));
74
+ }
75
+ this.startedAt = new Date();
76
+ puts("<testsuites>")
77
+ };
78
+
79
+ jasmine.XMLReporter.prototype.suites = function() {
80
+ return this.suites_;
81
+ };
82
+
83
+ jasmine.XMLReporter.prototype.summarize_ = function(suiteOrSpec) {
84
+ var isSuite = suiteOrSpec instanceof jasmine.Suite;
85
+ var summary = {
86
+ id: suiteOrSpec.id,
87
+ name: suiteOrSpec.description,
88
+ type: isSuite ? 'suite' : 'spec',
89
+ children: []
90
+ };
91
+ if (isSuite) {
92
+ var specs = suiteOrSpec.specs();
93
+ for (var i = 0; i < specs.length; i++) {
94
+ summary.children.push(this.summarize_(specs[i]));
95
+ }
96
+ }
97
+ return summary;
98
+ };
99
+
100
+ jasmine.XMLReporter.prototype.results = function() {
101
+ return this.results_;
102
+ };
103
+
104
+ jasmine.XMLReporter.prototype.resultsForSpec = function(specId) {
105
+ return this.results_[specId];
106
+ };
107
+
108
+ //noinspection JSUnusedLocalSymbols
109
+ jasmine.XMLReporter.prototype.reportRunnerResults = function(runner) {
110
+ this.finished = true;
111
+ var results = runner.results();
112
+ var specs = runner.specs();
113
+ var specCount = specs.length;
114
+ if(jasmine.XMLReporter.current_spec){
115
+ puts(" </testsuite>");
116
+ }
117
+ // puts(" <tests>"+specCount+"</tests>");
118
+ // puts(" <errors>"+results.failedCount+"</errors>");
119
+ // puts(" <skipped>0</skipped>");
120
+ // puts(" <failures>0</failures>");
121
+ // puts(" <time>"+((new Date().getTime() - this.startedAt.getTime()) / 1000)+"</time>");
122
+ puts("</testsuites>");
123
+ };
124
+
125
+ //noinspection JSUnusedLocalSymbols
126
+ jasmine.XMLReporter.prototype.reportSuiteResults = function(suite) {
127
+ };
128
+
129
+ //noinspection JSUnusedLocalSymbols
130
+ jasmine.XMLReporter.prototype.reportSpecResults = function(spec) {
131
+ var suite = spec.suite;
132
+ if(jasmine.XMLReporter.current_spec){
133
+ puts(" </testsuite>");
134
+ }
135
+ var name = [ spec.description ];
136
+ while(suite){
137
+ name.unshift( suite.description );
138
+ suite = suite.parentSuite;
139
+ }
140
+ var attrs = {name:name.join(" : ")};
141
+ if(spec.pending) {
142
+ attrs.skipped = "true";
143
+ }
144
+ puts(" <testsuite"+formatAttributes(attrs) +">");
145
+ jasmine.XMLReporter.current_spec = spec;
146
+ this.results_[spec.id] = {
147
+ spec: spec,
148
+ messages: spec.results().getItems(),
149
+ result: spec.results().failedCount > 0 ? "failed" : "passed"
150
+ };
151
+ var results = spec.results().getItems();
152
+ for(var i in results) {
153
+ var result = results[i];
154
+ var attrs = {name:(1+parseInt(i))+ ": " + result.matcherName};
155
+ puts(" <testcase"+formatAttributes(attrs)+">");
156
+ if(!result.passed() && !attrs.skipped){
157
+ puts(" <failure"+formatAttributes({type:result.matcherName,
158
+ message:result.message})+">");
159
+ puts("<![CDATA[");
160
+ puts(get_exception_trace(result.trace));
161
+ puts("]]>");
162
+ puts(" </failure>");
163
+ }
164
+ puts(" </testcase>");
165
+ }
166
+ };
167
+
168
+ //noinspection JSUnusedLocalSymbols
169
+ jasmine.XMLReporter.prototype._reportSpecResults = function(spec) {
170
+ var suite = spec.suite;
171
+ if(jasmine.XMLReporter.current_suite != suite){
172
+ if(jasmine.XMLReporter.current_suite){
173
+ puts(" </testsuite>");
174
+ }
175
+ var name = [ spec.description ];
176
+ while(suite){
177
+ name.unshift( suite.description );
178
+ suite = suite.parentSuite;
179
+ }
180
+ puts(" <testsuite"+formatAttributes({name:name.join(" : ")}) +">");
181
+ jasmine.XMLReporter.current_suite = spec.suite;
182
+ }
183
+ this.results_[spec.id] = {
184
+ spec: spec,
185
+ messages: spec.results().getItems(),
186
+ result: spec.results().failedCount > 0 ? "failed" : "passed"
187
+ };
188
+ var results = spec.results().getItems();
189
+ for(var i in results) {
190
+ var result = results[i];
191
+ puts(" <testcase"+formatAttributes({name:(1+parseInt(i))+ ": " + result.matcherName})+">");
192
+ if(!result.passed()){
193
+ puts(" <failure"+formatAttributes({type:result.matcherName,
194
+ message:result.message})+">");
195
+ puts("<![CDATA[");
196
+ puts(get_exception_trace(result.trace));
197
+ puts("]]>");
198
+ puts(" </failure>");
199
+ }
200
+ puts(" </testcase>");
201
+ }
202
+ };
203
+
204
+ //noinspection JSUnusedLocalSymbols
205
+ jasmine.XMLReporter.prototype.log = function(str) {
206
+ // print(str);
207
+ };
208
+
209
+ jasmine.XMLReporter.prototype.resultsForSpecs = function(specIds){
210
+ var results = {};
211
+ for (var i = 0; i < specIds.length; i++) {
212
+ var specId = specIds[i];
213
+ results[specId] = this.summarizeResult_(this.results_[specId]);
214
+ }
215
+ return results;
216
+ };
217
+
218
+ jasmine.XMLReporter.prototype.summarizeResult_ = function(result){
219
+ var summaryMessages = [];
220
+ for (var messageIndex in result.messages) {
221
+ var resultMessage = result.messages[messageIndex];
222
+ summaryMessages.push({
223
+ text: resultMessage.text,
224
+ passed: resultMessage.passed ? resultMessage.passed() : true,
225
+ type: resultMessage.type,
226
+ message: resultMessage.message,
227
+ trace: {
228
+ stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : undefined
229
+ }
230
+ });
231
+ };
232
+
233
+ var summaryResult = {
234
+ result : result.result,
235
+ messages : summaryMessages
236
+ };
237
+
238
+ return summaryResult;
239
+ };
240
+
241
+ })();