snapdragon 1.0.0 → 2.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/.ruby-version +1 -1
  4. data/ChangeLog.markdown +7 -2
  5. data/lib/jasmine/MIT.LICENSE +20 -0
  6. data/lib/jasmine/boot.js +181 -0
  7. data/lib/jasmine/console.js +160 -0
  8. data/lib/jasmine/jasmine-html.js +359 -0
  9. data/lib/jasmine/jasmine.css +55 -0
  10. data/lib/jasmine/jasmine.js +2402 -0
  11. data/lib/jasmine/jasmine_favicon.png +0 -0
  12. data/lib/jasmine_v1/MIT.LICENSE +20 -0
  13. data/lib/{jasmine/lib/jasmine-core → jasmine_v1}/jasmine-html.js +0 -0
  14. data/lib/{jasmine/lib/jasmine-core → jasmine_v1}/jasmine.css +0 -0
  15. data/lib/{jasmine/lib/jasmine-core → jasmine_v1}/jasmine.js +0 -0
  16. data/lib/snapdragon/command_line_parser.rb +7 -3
  17. data/lib/snapdragon/resources/SnapdragonConsoleReporter.js +129 -128
  18. data/lib/snapdragon/resources/SnapdragonConsoleReporter_v1.js +162 -0
  19. data/lib/snapdragon/resources/SnapdragonJUnitReporter.js +142 -131
  20. data/lib/snapdragon/resources/SnapdragonJUnitReporter_v1.js +158 -0
  21. data/lib/snapdragon/suite.rb +4 -0
  22. data/lib/snapdragon/version.rb +1 -1
  23. data/lib/snapdragon/views/run.erb +21 -44
  24. data/lib/snapdragon/views/run_v1.erb +60 -0
  25. data/lib/snapdragon/web_application.rb +11 -3
  26. data/snapdragon.gemspec +7 -7
  27. data/spec/lib/snapdragon/cli_application_spec.rb +20 -19
  28. data/spec/lib/snapdragon/command_line_parser_spec.rb +44 -20
  29. data/spec/lib/snapdragon/path_spec.rb +21 -20
  30. data/spec/lib/snapdragon/spec_directory_spec.rb +2 -1
  31. data/spec/lib/snapdragon/spec_file_spec.rb +2 -1
  32. data/spec/lib/snapdragon/suite_spec.rb +54 -44
  33. data/spec/spec_helper.rb +7 -0
  34. metadata +51 -48
  35. data/lib/jasmine/lib/jasmine-core/example/SpecRunner.html +0 -54
  36. data/lib/jasmine/lib/jasmine-core/example/spec/PlayerSpec.js +0 -58
  37. data/lib/jasmine/lib/jasmine-core/example/spec/SpecHelper.js +0 -9
  38. data/lib/jasmine/lib/jasmine-core/example/src/Player.js +0 -22
  39. data/lib/jasmine/lib/jasmine-core/example/src/Song.js +0 -7
  40. data/lib/jasmine/lib/jasmine-core/json2.js +0 -478
  41. data/lib/jasmine/lib/jasmine-core/version.rb +0 -6
  42. data/lib/snapdragon/resources/.gitkeep +0 -0
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2011 Pivotal Labs
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -6,9 +6,10 @@ module Snapdragon
6
6
  class CommandLineParser
7
7
  def self.parse(args)
8
8
  options = OpenStruct.new
9
- options.format = "console"
9
+ options.format = "console"
10
10
  options.color = true
11
11
  options.pattern = "spec/**/*_spec.js"
12
+ options.jasmine_ver = "2"
12
13
 
13
14
  opts = OptionParser.new do |opts|
14
15
  opts.banner = "Usage: snapdragon [options] [files or directories]"
@@ -21,12 +22,15 @@ module Snapdragon
21
22
  opts.on('-f', '--format [FORMAT]', "set output format") do |format|
22
23
  options.format = format
23
24
  end
24
- opts.on('-c', '--[no-]color', '--[no-]colour', 'Enable color in the output.') do |o|
25
- options.color = o
25
+ opts.on('-N', "--nocolor", '--nocolour', 'Enable color in the output.') do
26
+ options.color = false
26
27
  end
27
28
  opts.on('-P', '--pattern PATTERN', 'Load files matching pattern (default: "spec/**/*_spec.js").') do |pattern|
28
29
  options.pattern = pattern
29
30
  end
31
+ opts.on('-J1', '--jasminev1', 'Use Jasmine v1.3.1 instead of the default v2.x.') do
32
+ options.jasmine_ver = "1"
33
+ end
30
34
  end
31
35
  opts.parse!(args)
32
36
  options
@@ -1,162 +1,163 @@
1
- jasmine.SnapdragonConsoleReporter = function(options) {
2
- var print = function(msg) { console.log(msg); },
3
- showColors = options.showColors,
4
- onComplete = options.onComplete || function() {},
5
- specCount,
6
- failureCount,
7
- passedCount,
8
- failedSpecs = [],
9
- pendingSpecs = [],
10
- pendingCount,
11
- startTimestamp,
12
- endTimestamp
13
- ansi = {
14
- green: '\033[32m',
15
- red: '\033[31m',
16
- yellow: '\033[33m',
17
- none: '\033[0m'
18
- };
19
-
20
- function printNewline() {
21
- print("");
1
+ function getJasmineRequireObj() {
2
+ if (typeof module !== "undefined" && module.exports) {
3
+ return exports;
4
+ } else {
5
+ window.jasmineRequire = window.jasmineRequire || {};
6
+ return window.jasmineRequire;
22
7
  }
8
+ }
23
9
 
24
- function colored(color, str) {
25
- return showColors ? (ansi[color] + str + ansi.none) : str;
26
- }
10
+ getJasmineRequireObj().console = function(jRequire, j$) {
11
+ j$.SnapdragonConsoleReporter = jRequire.SnapdragonConsoleReporter();
12
+ };
27
13
 
28
- function plural(str, count) {
29
- return count == 1 ? str : str + "s";
30
- }
14
+ getJasmineRequireObj().SnapdragonConsoleReporter = function() {
31
15
 
32
- function repeat(thing, times) {
33
- var arr = [];
34
- for (var i = 0; i < times; i++) {
35
- arr.push(thing);
36
- }
37
- return arr;
38
- }
16
+ var noopTimer = {
17
+ start: function(){},
18
+ elapsed: function(){ return 0; }
19
+ };
39
20
 
40
- function indent(str, spaces) {
41
- var lines = (str || '').split("\n");
42
- var newArr = [];
43
- for (var i = 0; i < lines.length; i++) {
44
- newArr.push(repeat(" ", spaces).join("") + lines[i]);
45
- }
46
- return newArr.join("\n");
47
- }
21
+ return function(options) {
22
+ var print = options.print || function(msg) {console.log(msg);},
23
+ showColors = options.showColors || false,
24
+ onComplete = options.onComplete || function() {},
25
+ timer = options.timer || new jasmine.Timer() || noopTimer,
26
+ specCount,
27
+ failureCount,
28
+ failedSpecs = [],
29
+ pendingCount,
30
+ pendingSpecs = [],
31
+ passedCount,
32
+ specStatus = [],
33
+ ansi = {
34
+ green: '\x1B[32m',
35
+ red: '\x1B[31m',
36
+ yellow: '\x1B[33m',
37
+ none: '\x1B[0m',
38
+ red_bold: '\x1B[31;1m'
39
+ };
40
+
41
+ this.jasmineStarted = function() {
42
+ specCount = 0;
43
+ failureCount = 0;
44
+ pendingCount = 0;
45
+ passedCount = 0;
46
+ print("Running specs...");
47
+ printNewline();
48
+ timer.start();
49
+ };
48
50
 
49
- function specFailureDetails(spec, failure_number) {
50
- print(indent(failure_number + ") " + spec.getFullName(), 2));
51
+ this.jasmineDone = function() {
52
+ print(specStatus.join(""));
51
53
 
52
- var resultItems = spec.results().getItems();
53
- for (var i = 0; i < resultItems.length; i++) {
54
- var result = resultItems[i];
55
- if (result.trace.stack) {
56
- print(indent(colored("red", trimStackTrace(result.trace.stack)), 6));
54
+ if (failedSpecs.length > 0) {
55
+ printNewline();
56
+ for (var i = 0; i < failedSpecs.length; i++) {
57
+ specFailureDetails(failedSpecs[i], i + 1);
58
+ }
59
+ }
60
+
61
+ printNewline();
62
+ var specCounts = specCount + " " + plural("spec", specCount) + ", " +
63
+ failureCount + " " + plural("failure", failureCount);
64
+
65
+ if (pendingCount) {
66
+ specCounts += ", " + pendingCount + " pending " + plural("spec", pendingCount);
67
+ }
68
+
69
+ if (failureCount > 0) {
70
+ print(colored("red", specCounts));
71
+ } else if (pendingCount > 0) {
72
+ print(colored("yellow", specCounts));
57
73
  } else {
58
- print(indent(colored("red", result.message), 6));
74
+ print(colored("green", specCounts));
59
75
  }
60
- }
61
- printNewline();
62
- }
63
76
 
64
- function specPendingDetails(spec) {
65
- print(indent(colored("yellow", spec.getFullName()), 2));
66
- printNewline();
67
- }
77
+ var seconds = timer.elapsed() / 1000;
78
+ print("Finished in " + seconds + " " + plural("second", seconds));
68
79
 
69
- function signalCapybaraTestsFinishedRunning() {
70
- var div = document.createElement('div');
71
- div.id = 'testscomplete';
72
- document.body.appendChild(div);
73
- }
80
+ printNewline();
74
81
 
75
- function trimStackTrace(stackTraceString) {
76
- return stackTraceString.replace(/\s*at\s*http:\/\/127.0.0.1:\d+\/jasmine-core\/jasmine\.js:\d+\s*/g, "");
77
- }
82
+ onComplete(failureCount === 0);
78
83
 
79
- // Jasmine Hooks
84
+ signalCapybaraTestsFinishedRunning();
85
+ };
80
86
 
81
- this.log = function() {
82
- };
87
+ this.specDone = function(result) {
88
+ specCount++;
83
89
 
84
- this.reportRunnerStarting = function() {
85
- startTimestamp = new Date().getTime();
86
- specCount = 0;
87
- failureCount = 0;
88
- passedCount = 0;
89
- pendingCount = 0;
90
- print("Running examples...");
91
- printNewline();
92
- };
90
+ if (result.status == "pending") {
91
+ pendingCount++;
92
+ pendingSpecs.push(result);
93
+ specStatus.push(colored("yellow", "*"));
94
+ return;
95
+ }
93
96
 
94
- this.reportSuiteResults = function(suite) {
95
- };
97
+ if (result.status == "passed") {
98
+ passedCount++;
99
+ specStatus.push(colored("green", "."));
100
+ return;
101
+ }
96
102
 
97
- this.reportSpecStarting = function() {
98
- };
103
+ if (result.status == "failed") {
104
+ failureCount++;
105
+ failedSpecs.push(result);
106
+ specStatus.push(colored("red", "F"));
107
+ }
108
+ };
99
109
 
100
- this.reportSpecResults = function(spec) {
101
- var results = spec.results();
110
+ return this;
102
111
 
103
- if (!results.skipped) { // not pending
104
- specCount++;
112
+ function printNewline() {
113
+ print("");
105
114
  }
106
115
 
107
- if (results.skipped) { // when you filter out tests with spec query param
108
- pendingCount++;
109
- pendingSpecs.push(spec);
110
- } else if (results.passed()) { // passed
111
- passedCount++;
112
- } else { // failed
113
- failureCount++;
114
- failedSpecs.push(spec);
116
+ function colored(color, str) {
117
+ return showColors ? (ansi[color] + str + ansi.none) : str;
118
+ }
119
+
120
+ function plural(str, count) {
121
+ return count == 1 ? str : str + "s";
115
122
  }
116
- };
117
123
 
118
- this.reportRunnerResults = function(options) {
119
- endTimestamp = new Date().getTime();
124
+ function repeat(thing, times) {
125
+ var arr = [];
126
+ for (var i = 0; i < times; i++) {
127
+ arr.push(thing);
128
+ }
129
+ return arr;
130
+ }
120
131
 
121
- // I have commented out the pending section below because v1.3.1 of
122
- // jasmine doesn't have a concept of pending. It has a concept of
123
- // skipped when you filter tests using the spec query param.
132
+ function indent(str, spaces) {
133
+ var lines = (str || '').split("\n");
134
+ var newArr = [];
135
+ for (var i = 0; i < lines.length; i++) {
136
+ newArr.push(repeat(" ", spaces).join("") + lines[i]);
137
+ }
138
+ return newArr.join("\n");
139
+ }
124
140
 
125
- // if (pendingCount > 0) {
126
- // print("Pending:");
127
- // }
141
+ function specFailureDetails(result, index) {
142
+ printNewline();
143
+ print(colored("red_bold", indent(index + ") " + result.fullName, 2)));
128
144
 
129
- // for (var i = 0; i < pendingSpecs.length; i++) {
130
- // specPendingDetails(pendingSpecs[i]);
131
- // }
145
+ for (var i = 0; i < result.failedExpectations.length; i++) {
146
+ var failedExpectation = result.failedExpectations[i];
147
+ print(indent(trimStackTrace(failedExpectation.stack), 6));
148
+ }
132
149
 
133
- if (failureCount > 0) {
134
- print("Failures:");
135
150
  printNewline();
136
151
  }
137
152
 
138
- for (var i = 0; i < failedSpecs.length; i++) {
139
- specFailureDetails(failedSpecs[i], i + 1);
153
+ function trimStackTrace(stackTraceString) {
154
+ return stackTraceString.replace(/\s*at\s(?:\w+\s)?\(?http:\/\/127.0.0.1:\d+\/jasmine\/(?:jasmine|boot)\.js:\d+\)?/g, "");
140
155
  }
141
156
 
142
- var specCounts = specCount + " " + plural("example", specCount) + ", " + failureCount + " " + plural("failure", failureCount);
143
-
144
- if (pendingCount) {
145
- specCounts += ", " + pendingCount + " skipped";
146
- }
147
-
148
- var seconds = (endTimestamp - startTimestamp) / 1000.0;
149
- print("Finished in " + seconds + " " + plural("second", seconds));
150
-
151
- if (failureCount > 0) { // have any failures
152
- print(colored("red", specCounts));
153
- // } else if (pendingCount > 0) {
154
- // print(colored("yellow", specCounts));
155
- } else {
156
- print(colored("green", specCounts));
157
+ function signalCapybaraTestsFinishedRunning() {
158
+ var div = document.createElement('div');
159
+ div.id = 'testscomplete';
160
+ document.body.appendChild(div);
157
161
  }
158
-
159
- onComplete();
160
- signalCapybaraTestsFinishedRunning();
161
- };
162
+ }
162
163
  };
@@ -0,0 +1,162 @@
1
+ jasmine.SnapdragonConsoleReporter = function(options) {
2
+ var print = function(msg) { console.log(msg); },
3
+ showColors = options.showColors,
4
+ onComplete = options.onComplete || function() {},
5
+ specCount,
6
+ failureCount,
7
+ passedCount,
8
+ failedSpecs = [],
9
+ pendingSpecs = [],
10
+ pendingCount,
11
+ startTimestamp,
12
+ endTimestamp
13
+ ansi = {
14
+ green: '\033[32m',
15
+ red: '\033[31m',
16
+ yellow: '\033[33m',
17
+ none: '\033[0m'
18
+ };
19
+
20
+ function printNewline() {
21
+ print("");
22
+ }
23
+
24
+ function colored(color, str) {
25
+ return showColors ? (ansi[color] + str + ansi.none) : str;
26
+ }
27
+
28
+ function plural(str, count) {
29
+ return count == 1 ? str : str + "s";
30
+ }
31
+
32
+ function repeat(thing, times) {
33
+ var arr = [];
34
+ for (var i = 0; i < times; i++) {
35
+ arr.push(thing);
36
+ }
37
+ return arr;
38
+ }
39
+
40
+ function indent(str, spaces) {
41
+ var lines = (str || '').split("\n");
42
+ var newArr = [];
43
+ for (var i = 0; i < lines.length; i++) {
44
+ newArr.push(repeat(" ", spaces).join("") + lines[i]);
45
+ }
46
+ return newArr.join("\n");
47
+ }
48
+
49
+ function specFailureDetails(spec, failure_number) {
50
+ print(indent(failure_number + ") " + spec.getFullName(), 2));
51
+
52
+ var resultItems = spec.results().getItems();
53
+ for (var i = 0; i < resultItems.length; i++) {
54
+ var result = resultItems[i];
55
+ if (result.trace.stack) {
56
+ print(indent(colored("red", trimStackTrace(result.trace.stack)), 6));
57
+ } else {
58
+ print(indent(colored("red", result.message), 6));
59
+ }
60
+ }
61
+ printNewline();
62
+ }
63
+
64
+ function specPendingDetails(spec) {
65
+ print(indent(colored("yellow", spec.getFullName()), 2));
66
+ printNewline();
67
+ }
68
+
69
+ function signalCapybaraTestsFinishedRunning() {
70
+ var div = document.createElement('div');
71
+ div.id = 'testscomplete';
72
+ document.body.appendChild(div);
73
+ }
74
+
75
+ function trimStackTrace(stackTraceString) {
76
+ return stackTraceString.replace(/\s*at\s*http:\/\/127.0.0.1:\d+\/jasmine_v1\/jasmine\.js:\d+\s*/g, "");
77
+ }
78
+
79
+ // Jasmine Hooks
80
+
81
+ this.log = function() {
82
+ };
83
+
84
+ this.reportRunnerStarting = function() {
85
+ startTimestamp = new Date().getTime();
86
+ specCount = 0;
87
+ failureCount = 0;
88
+ passedCount = 0;
89
+ pendingCount = 0;
90
+ print("Running examples...");
91
+ printNewline();
92
+ };
93
+
94
+ this.reportSuiteResults = function(suite) {
95
+ };
96
+
97
+ this.reportSpecStarting = function() {
98
+ };
99
+
100
+ this.reportSpecResults = function(spec) {
101
+ var results = spec.results();
102
+
103
+ if (!results.skipped) { // not pending
104
+ specCount++;
105
+ }
106
+
107
+ if (results.skipped) { // when you filter out tests with spec query param
108
+ pendingCount++;
109
+ pendingSpecs.push(spec);
110
+ } else if (results.passed()) { // passed
111
+ passedCount++;
112
+ } else { // failed
113
+ failureCount++;
114
+ failedSpecs.push(spec);
115
+ }
116
+ };
117
+
118
+ this.reportRunnerResults = function(options) {
119
+ endTimestamp = new Date().getTime();
120
+
121
+ // I have commented out the pending section below because v1.3.1 of
122
+ // jasmine doesn't have a concept of pending. It has a concept of
123
+ // skipped when you filter tests using the spec query param.
124
+
125
+ // if (pendingCount > 0) {
126
+ // print("Pending:");
127
+ // }
128
+
129
+ // for (var i = 0; i < pendingSpecs.length; i++) {
130
+ // specPendingDetails(pendingSpecs[i]);
131
+ // }
132
+
133
+ if (failureCount > 0) {
134
+ print("Failures:");
135
+ printNewline();
136
+ }
137
+
138
+ for (var i = 0; i < failedSpecs.length; i++) {
139
+ specFailureDetails(failedSpecs[i], i + 1);
140
+ }
141
+
142
+ var specCounts = specCount + " " + plural("example", specCount) + ", " + failureCount + " " + plural("failure", failureCount);
143
+
144
+ if (pendingCount) {
145
+ specCounts += ", " + pendingCount + " skipped";
146
+ }
147
+
148
+ var seconds = (endTimestamp - startTimestamp) / 1000.0;
149
+ print("Finished in " + seconds + " " + plural("second", seconds));
150
+
151
+ if (failureCount > 0) { // have any failures
152
+ print(colored("red", specCounts));
153
+ // } else if (pendingCount > 0) {
154
+ // print(colored("yellow", specCounts));
155
+ } else {
156
+ print(colored("green", specCounts));
157
+ }
158
+
159
+ onComplete();
160
+ signalCapybaraTestsFinishedRunning();
161
+ };
162
+ };