smparkes-jazrb 0.0.3

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 (41) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +41 -0
  3. data/bin/autojaz +4 -0
  4. data/bin/jazrb +11 -0
  5. data/doc/jasmine/files.html +292 -0
  6. data/doc/jasmine/index.html +322 -0
  7. data/doc/jasmine/symbols/_global_.html +918 -0
  8. data/doc/jasmine/symbols/jasmine.Block.html +349 -0
  9. data/doc/jasmine/symbols/jasmine.Env.html +517 -0
  10. data/doc/jasmine/symbols/jasmine.EnvjsReporter.html +326 -0
  11. data/doc/jasmine/symbols/jasmine.JsApiReporter.html +326 -0
  12. data/doc/jasmine/symbols/jasmine.Matchers.html +885 -0
  13. data/doc/jasmine/symbols/jasmine.MultiReporter.html +326 -0
  14. data/doc/jasmine/symbols/jasmine.NestedResults.html +710 -0
  15. data/doc/jasmine/symbols/jasmine.Reporter.html +326 -0
  16. data/doc/jasmine/symbols/jasmine.Runner.html +337 -0
  17. data/doc/jasmine/symbols/jasmine.Spec.html +406 -0
  18. data/doc/jasmine/symbols/jasmine.Spy.html +855 -0
  19. data/doc/jasmine/symbols/jasmine.Suite.html +355 -0
  20. data/doc/jasmine/symbols/jasmine.html +770 -0
  21. data/doc/jasmine/symbols/jasmine.util.html +326 -0
  22. data/doc/jasmine/symbols/src/lib_EnvjsReporter.js.html +149 -0
  23. data/doc/jasmine/symbols/src/lib_TrivialReporter.js.html +127 -0
  24. data/doc/jasmine/symbols/src/lib_consolex.js.html +35 -0
  25. data/doc/jasmine/symbols/src/lib_jasmine-0.10.0.js.html +2302 -0
  26. data/doc/jasmine/symbols/src/lib_jasmine-0.9.0.js.html +2212 -0
  27. data/doc/jasmine/symbols/src/lib_json2.js.html +486 -0
  28. data/lib/autotest/discover.rb +3 -0
  29. data/lib/autotest/jazrb.rb +55 -0
  30. data/lib/jazrb/intro.js +18 -0
  31. data/lib/jazrb/jasmine/EnvjsReporter.js +141 -0
  32. data/lib/jazrb/jasmine/TrivialReporter.js +119 -0
  33. data/lib/jazrb/jasmine/consolex.js +28 -0
  34. data/lib/jazrb/jasmine/jasmine-0.10.0.js +2294 -0
  35. data/lib/jazrb/jasmine/jasmine.js +2294 -0
  36. data/lib/jazrb/jasmine/json2.js +478 -0
  37. data/lib/jazrb/outro.js +3 -0
  38. data/lib/jazrb.rb +0 -0
  39. data/test/jazrb_test.rb +7 -0
  40. data/test/test_helper.rb +10 -0
  41. metadata +116 -0
@@ -0,0 +1,3 @@
1
+ Autotest.add_discovery do
2
+ "jazrb" if File.directory?('spec') && ENV['JAZRB']
3
+ end
@@ -0,0 +1,55 @@
1
+ require 'autotest'
2
+
3
+ Autotest.add_hook :initialize do |at|
4
+ # at.clear_mappings
5
+ at.add_mapping(%r%^spec/(suites/)?.*Spec.js$%) { |filename, _|
6
+ filename
7
+ }
8
+ at.add_mapping(%r%^spec/(suites/)?.*_spec.js$%) { |filename, _|
9
+ filename
10
+ }
11
+ at.add_mapping(%r%^lib/(.*)\.js$%) { |_, m|
12
+ ["spec/#{m[1]}Spec.js", "spec/suites/#{m[1]}Spec.js"]
13
+ }
14
+ at.add_mapping(%r%^src/(.*)\.js$%) { |_, m|
15
+ ["spec/#{m[1]}Spec.js", "spec/suites/#{m[1]}Spec.js"]
16
+ }
17
+ at.add_mapping(%r%^lib/(.*)\.js$%) { |_, m|
18
+ ["spec/#{m[1]}_spec.js", "spec/suites/#{m[1]}_spec.js"]
19
+ }
20
+ at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.js$%) {
21
+ at.files_matching %r%^spec/.*Spec\.js$%
22
+ }
23
+ at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.js$%) {
24
+ at.files_matching %r%^spec/.*_spec\.js$%
25
+ }
26
+ end
27
+
28
+ class Autotest::Jazrb < Autotest
29
+
30
+ def initialize
31
+ super
32
+ self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n\n?(.*?(\n\n\(.*?)?)\n\n/m
33
+ self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
34
+ end
35
+
36
+ def consolidate_failures(failed)
37
+ filters = new_hash_of_arrays
38
+ failed.each do |spec, trace|
39
+ if trace =~ /\n(\.\/)?(.*_spec\.js):[\d]+:/
40
+ filters[$2] << spec
41
+ end
42
+ if trace =~ /\n(\.\/)?(.*Spec\.js):[\d]+:/
43
+ filters[$2] << spec
44
+ end
45
+ end
46
+ return filters
47
+ end
48
+
49
+ def make_test_cmd(files_to_test)
50
+ return '' if files_to_test.empty?
51
+ spec_program = "jazrb"
52
+ return "#{spec_program} #{files_to_test.keys.flatten.join(' ')}"
53
+ end
54
+
55
+ end
@@ -0,0 +1,18 @@
1
+ (function(){
2
+ var prefix = Ruby.ENV["JAZRB_JS_PATH"];
3
+ load(prefix + "/jasmine/jasmine.js");
4
+ load(prefix + "/jasmine/TrivialReporter.js");
5
+ load(prefix + "/jasmine/EnvjsReporter.js");
6
+ })();
7
+
8
+ (function () {
9
+ var jasmineEnv = jasmine.getEnv();
10
+ jasmineEnv.updateInterval = 1000;
11
+
12
+ var _EnvjsReporter = new jasmine.EnvjsReporter();
13
+ jasmineEnv.addReporter(_EnvjsReporter);
14
+
15
+ window.onload = function() {
16
+ jasmineEnv.execute();
17
+ };
18
+ })();
@@ -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,119 @@
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.reportRunnerStarting = function(runner) {
27
+ var suites = runner.suites();
28
+
29
+ this.runnerDiv = this.createDom('div', { className: 'runner running' },
30
+ this.createDom('a', { className: 'run_spec', href: '?' }, "run all"),
31
+ this.runnerMessageSpan = this.createDom('span', {}, "Running..."));
32
+ this.document.body.appendChild(this.runnerDiv);
33
+
34
+ for (var i = 0; i < suites.length; i++) {
35
+ var suite = suites[i];
36
+ var suiteDiv = this.createDom('div', { className: 'suite' },
37
+ this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
38
+ this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
39
+ this.suiteDivs[suite.getFullName()] = suiteDiv;
40
+ var parentDiv = this.document.body;
41
+ if (suite.parentSuite) {
42
+ parentDiv = this.suiteDivs[suite.parentSuite.getFullName()];
43
+ }
44
+ parentDiv.appendChild(suiteDiv);
45
+ }
46
+
47
+ this.startedAt = new Date();
48
+ };
49
+
50
+ jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
51
+ var results = runner.results();
52
+ var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
53
+ this.runnerDiv.setAttribute("class", className);
54
+ //do it twice for IE
55
+ this.runnerDiv.setAttribute("className", className);
56
+ var specs = runner.specs();
57
+ var specCount = 0;
58
+ for (var i = 0; i < specs.length; i++) {
59
+ if (this.specFilter(specs[i])) {
60
+ specCount++;
61
+ }
62
+ }
63
+ var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
64
+ message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
65
+ this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
66
+ };
67
+
68
+ jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
69
+ var results = suite.results();
70
+ var status = results.passed() ? 'passed' : 'failed';
71
+ if (results.totalCount == 0) { // todo: change this to check results.skipped
72
+ status = 'skipped';
73
+ }
74
+ this.suiteDivs[suite.getFullName()].className += " " + status;
75
+ };
76
+
77
+ jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
78
+ var results = spec.results();
79
+ var status = results.passed() ? 'passed' : 'failed';
80
+ if (results.skipped) {
81
+ status = 'skipped';
82
+ }
83
+ var specDiv = this.createDom('div', { className: 'spec ' + status },
84
+ this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
85
+ this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, spec.getFullName()));
86
+
87
+
88
+ var resultItems = results.getItems();
89
+ for (var i = 0; i < resultItems.length; i++) {
90
+ var result = resultItems[i];
91
+ if (result.passed && !result.passed()) {
92
+ var resultMessageDiv = this.createDom('div', {className: 'resultMessage fail'});
93
+ resultMessageDiv.innerHTML = result.message; // todo: lame; mend
94
+ specDiv.appendChild(resultMessageDiv);
95
+ specDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
96
+ }
97
+ }
98
+ this.suiteDivs[spec.suite.getFullName()].appendChild(specDiv);
99
+ };
100
+
101
+ jasmine.TrivialReporter.prototype.log = function() {
102
+ this.console && console.log.apply(console, arguments);
103
+ };
104
+
105
+ jasmine.TrivialReporter.prototype.getLocation = function() {
106
+ return this.document.location;
107
+ };
108
+
109
+ jasmine.TrivialReporter.prototype.specFilter = function(spec) {
110
+ var paramMap = {};
111
+ var params = this.getLocation().search.substring(1).split('&');
112
+ for (var i = 0; i < params.length; i++) {
113
+ var p = params[i].split('=');
114
+ paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
115
+ }
116
+
117
+ if (!paramMap["spec"]) return true;
118
+ return spec.getFullName().indexOf(paramMap["spec"]) == 0;
119
+ };
@@ -0,0 +1,28 @@
1
+ /** Console X
2
+ * http://github.com/deadlyicon/consolex.js
3
+ *
4
+ * By Jared Grippe <jared@jaredgrippe.com>
5
+ *
6
+ * Copyright (c) 2009 Jared Grippe
7
+ * Licensed under the MIT license.
8
+ *
9
+ * consolex avoids ever having to see javascript bugs in browsers that do not implement the entire
10
+ * firebug console suit
11
+ *
12
+ */
13
+ (function(window) {
14
+ window.console || (window.console = {});
15
+
16
+ var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
17
+ "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
18
+
19
+ function emptyFunction(){}
20
+
21
+ for (var i = 0; i < names.length; ++i){
22
+ window.console[names[i]] || (window.console[names[i]] = emptyFunction);
23
+ if (typeof window.console[names[i]] !== 'function')
24
+ window.console[names[i]] = (function(method) {
25
+ return function(){ return Function.prototype.apply.apply(method, [console,arguments]); };
26
+ })(window.console[names[i]]);
27
+ }
28
+ })(this);