evergreen 0.1
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.
- data/README.rdoc +4 -0
- data/bin/evergreen +18 -0
- data/lib/evergreen.rb +44 -0
- data/lib/evergreen/cli.rb +23 -0
- data/lib/evergreen/evergreen.js +3 -0
- data/lib/evergreen/runner.rb +56 -0
- data/lib/evergreen/server.rb +31 -0
- data/lib/evergreen/spec.rb +60 -0
- data/lib/evergreen/version.rb +3 -0
- data/lib/evergreen/views/list.erb +6 -0
- data/lib/evergreen/views/spec.erb +37 -0
- data/lib/jasmine/MIT.LICENSE +20 -0
- data/lib/jasmine/README.markdown +489 -0
- data/lib/jasmine/Rakefile +146 -0
- data/lib/jasmine/cruise_config.rb +21 -0
- data/lib/jasmine/doc/files.html +460 -0
- data/lib/jasmine/doc/index.html +322 -0
- data/lib/jasmine/doc/symbols/_global_.html +918 -0
- data/lib/jasmine/doc/symbols/jasmine.Block.html +417 -0
- data/lib/jasmine/doc/symbols/jasmine.Clock.html +678 -0
- data/lib/jasmine/doc/symbols/jasmine.Env.html +1169 -0
- data/lib/jasmine/doc/symbols/jasmine.JsApiReporter.html +822 -0
- data/lib/jasmine/doc/symbols/jasmine.Matchers.html +1474 -0
- data/lib/jasmine/doc/symbols/jasmine.MultiReporter.html +394 -0
- data/lib/jasmine/doc/symbols/jasmine.NestedResults.html +710 -0
- data/lib/jasmine/doc/symbols/jasmine.Reporter.html +574 -0
- data/lib/jasmine/doc/symbols/jasmine.Runner.html +710 -0
- data/lib/jasmine/doc/symbols/jasmine.Spec.html +1253 -0
- data/lib/jasmine/doc/symbols/jasmine.Spy.html +855 -0
- data/lib/jasmine/doc/symbols/jasmine.Suite.html +705 -0
- data/lib/jasmine/doc/symbols/jasmine.html +1345 -0
- data/lib/jasmine/doc/symbols/jasmine.util.html +535 -0
- data/lib/jasmine/doc/symbols/src/lib_TrivialReporter.js.html +124 -0
- data/lib/jasmine/doc/symbols/src/src_Block.js.html +29 -0
- data/lib/jasmine/doc/symbols/src/src_Env.js.html +248 -0
- data/lib/jasmine/doc/symbols/src/src_JsApiReporter.js.html +111 -0
- data/lib/jasmine/doc/symbols/src/src_Matchers.js.html +344 -0
- data/lib/jasmine/doc/symbols/src/src_MultiReporter.js.html +36 -0
- data/lib/jasmine/doc/symbols/src/src_NestedResults.js.html +88 -0
- data/lib/jasmine/doc/symbols/src/src_PrettyPrinter.js.html +130 -0
- data/lib/jasmine/doc/symbols/src/src_Queue.js.html +102 -0
- data/lib/jasmine/doc/symbols/src/src_Reporter.js.html +35 -0
- data/lib/jasmine/doc/symbols/src/src_Reporters.js.html +51 -0
- data/lib/jasmine/doc/symbols/src/src_Runner.js.html +75 -0
- data/lib/jasmine/doc/symbols/src/src_Spec.js.html +214 -0
- data/lib/jasmine/doc/symbols/src/src_Suite.js.html +77 -0
- data/lib/jasmine/doc/symbols/src/src_WaitsBlock.js.html +21 -0
- data/lib/jasmine/doc/symbols/src/src_WaitsForBlock.js.html +45 -0
- data/lib/jasmine/doc/symbols/src/src_base.js.html +585 -0
- data/lib/jasmine/doc/symbols/src/src_mock-timeout.js.html +185 -0
- data/lib/jasmine/doc/symbols/src/src_util.js.html +75 -0
- data/lib/jasmine/example/example_runner.html +22 -0
- data/lib/jasmine/example/spec/example_suite.js +11 -0
- data/lib/jasmine/images/fail-16.png +0 -0
- data/lib/jasmine/images/fail.png +0 -0
- data/lib/jasmine/images/go-16.png +0 -0
- data/lib/jasmine/images/go.png +0 -0
- data/lib/jasmine/images/pending-16.png +0 -0
- data/lib/jasmine/images/pending.png +0 -0
- data/lib/jasmine/images/question-bk.png +0 -0
- data/lib/jasmine/images/questionbk-16.png +0 -0
- data/lib/jasmine/images/spinner.gif +0 -0
- data/lib/jasmine/lib/TrivialReporter.js +171 -0
- data/lib/jasmine/lib/consolex.js +28 -0
- data/lib/jasmine/lib/jasmine-0.10.4.js +2371 -0
- data/lib/jasmine/lib/jasmine.css +166 -0
- data/lib/jasmine/lib/json2.js +478 -0
- data/lib/jasmine/spec/jasmine_helper.rb +44 -0
- data/lib/jasmine/spec/jasmine_spec.rb +31 -0
- data/lib/jasmine/spec/runner.html +80 -0
- data/lib/jasmine/spec/saucelabs.yml +24 -0
- data/lib/jasmine/spec/suites/CustomMatchersSpec.js +112 -0
- data/lib/jasmine/spec/suites/EnvSpec.js +158 -0
- data/lib/jasmine/spec/suites/ExceptionsSpec.js +107 -0
- data/lib/jasmine/spec/suites/JsApiReporterSpec.js +96 -0
- data/lib/jasmine/spec/suites/MatchersSpec.js +709 -0
- data/lib/jasmine/spec/suites/MockClockSpec.js +34 -0
- data/lib/jasmine/spec/suites/MultiReporterSpec.js +30 -0
- data/lib/jasmine/spec/suites/NestedResultsSpec.js +54 -0
- data/lib/jasmine/spec/suites/PrettyPrintSpec.js +93 -0
- data/lib/jasmine/spec/suites/QueueSpec.js +23 -0
- data/lib/jasmine/spec/suites/ReporterSpec.js +60 -0
- data/lib/jasmine/spec/suites/RunnerSpec.js +267 -0
- data/lib/jasmine/spec/suites/SpecRunningSpec.js +1195 -0
- data/lib/jasmine/spec/suites/SpecSpec.js +110 -0
- data/lib/jasmine/spec/suites/SpySpec.js +201 -0
- data/lib/jasmine/spec/suites/SuiteSpec.js +120 -0
- data/lib/jasmine/spec/suites/TrivialReporterSpec.js +158 -0
- data/lib/jasmine/spec/suites/UtilSpec.js +40 -0
- data/lib/jasmine/spec/suites/WaitsForBlockSpec.js +88 -0
- data/lib/jasmine/src/Block.js +22 -0
- data/lib/jasmine/src/Env.js +263 -0
- data/lib/jasmine/src/JsApiReporter.js +104 -0
- data/lib/jasmine/src/Matchers.js +336 -0
- data/lib/jasmine/src/MultiReporter.js +28 -0
- data/lib/jasmine/src/NestedResults.js +80 -0
- data/lib/jasmine/src/PrettyPrinter.js +122 -0
- data/lib/jasmine/src/Queue.js +94 -0
- data/lib/jasmine/src/Reporter.js +27 -0
- data/lib/jasmine/src/Reporters.js +43 -0
- data/lib/jasmine/src/Runner.js +77 -0
- data/lib/jasmine/src/Spec.js +206 -0
- data/lib/jasmine/src/Suite.js +82 -0
- data/lib/jasmine/src/WaitsBlock.js +13 -0
- data/lib/jasmine/src/WaitsForBlock.js +37 -0
- data/lib/jasmine/src/base.js +586 -0
- data/lib/jasmine/src/mock-timeout.js +177 -0
- data/lib/jasmine/src/util.js +67 -0
- data/lib/jasmine/src/version.json +5 -0
- metadata +238 -0
@@ -0,0 +1,110 @@
|
|
1
|
+
describe('Spec', function () {
|
2
|
+
var env, suite;
|
3
|
+
beforeEach(function() {
|
4
|
+
env = new jasmine.Env();
|
5
|
+
env.updateInterval = 0;
|
6
|
+
suite = new jasmine.Suite(env, 'suite 1');
|
7
|
+
});
|
8
|
+
|
9
|
+
describe('initialization', function () {
|
10
|
+
|
11
|
+
it('should raise an error if an env is not passed', function () {
|
12
|
+
try {
|
13
|
+
new jasmine.Spec();
|
14
|
+
}
|
15
|
+
catch (e) {
|
16
|
+
expect(e.message).toEqual('jasmine.Env() required');
|
17
|
+
}
|
18
|
+
});
|
19
|
+
|
20
|
+
it('should raise an error if a suite is not passed', function () {
|
21
|
+
try {
|
22
|
+
new jasmine.Spec(env);
|
23
|
+
}
|
24
|
+
catch (e) {
|
25
|
+
expect(e.message).toEqual('jasmine.Suite() required');
|
26
|
+
}
|
27
|
+
});
|
28
|
+
|
29
|
+
it('should assign sequential ids for specs belonging to the same env', function () {
|
30
|
+
var spec1 = new jasmine.Spec(env, suite);
|
31
|
+
var spec2 = new jasmine.Spec(env, suite);
|
32
|
+
var spec3 = new jasmine.Spec(env, suite);
|
33
|
+
expect(spec1.id).toEqual(0);
|
34
|
+
expect(spec2.id).toEqual(1);
|
35
|
+
expect(spec3.id).toEqual(2);
|
36
|
+
});
|
37
|
+
|
38
|
+
});
|
39
|
+
|
40
|
+
it('getFullName returns suite & spec description', function () {
|
41
|
+
var spec = new jasmine.Spec(env, suite, 'spec 1');
|
42
|
+
expect(spec.getFullName()).toEqual('suite 1 spec 1.')
|
43
|
+
});
|
44
|
+
|
45
|
+
describe('results', function () {
|
46
|
+
var spec, results;
|
47
|
+
beforeEach(function () {
|
48
|
+
spec = new jasmine.Spec(env, suite);
|
49
|
+
results = spec.results();
|
50
|
+
expect(results.totalCount).toEqual(0);
|
51
|
+
spec.runs(function () {
|
52
|
+
this.expect(true).toEqual(true);
|
53
|
+
this.expect(true).toEqual(true);
|
54
|
+
});
|
55
|
+
});
|
56
|
+
|
57
|
+
|
58
|
+
it('results shows the total number of expectations for each spec after execution', function () {
|
59
|
+
expect(results.totalCount).toEqual(0);
|
60
|
+
spec.execute();
|
61
|
+
expect(results.totalCount).toEqual(2);
|
62
|
+
});
|
63
|
+
|
64
|
+
it('results shows the number of passed expectations for each spec after execution', function () {
|
65
|
+
expect(results.passedCount).toEqual(0);
|
66
|
+
spec.execute();
|
67
|
+
expect(results.passedCount).toEqual(2);
|
68
|
+
});
|
69
|
+
|
70
|
+
it('results shows the number of failed expectations for each spec after execution', function () {
|
71
|
+
spec.runs(function () {
|
72
|
+
this.expect(true).toEqual(false);
|
73
|
+
});
|
74
|
+
expect(results.failedCount).toEqual(0);
|
75
|
+
spec.execute();
|
76
|
+
expect(results.failedCount).toEqual(1);
|
77
|
+
});
|
78
|
+
|
79
|
+
describe('results.passed', function () {
|
80
|
+
it('is true if all spec expectations pass', function () {
|
81
|
+
spec.runs(function () {
|
82
|
+
this.expect(true).toEqual(true);
|
83
|
+
});
|
84
|
+
spec.execute();
|
85
|
+
expect(results.passed()).toEqual(true);
|
86
|
+
});
|
87
|
+
|
88
|
+
it('is false if one spec expectation fails', function () {
|
89
|
+
spec.runs(function () {
|
90
|
+
this.expect(true).toEqual(false);
|
91
|
+
});
|
92
|
+
spec.execute();
|
93
|
+
expect(results.passed()).toEqual(false);
|
94
|
+
});
|
95
|
+
|
96
|
+
it('a spec with no expectations will return true', function () {
|
97
|
+
var specWithoutExpectations = new jasmine.Spec(env, suite);
|
98
|
+
specWithoutExpectations.runs(function() {
|
99
|
+
|
100
|
+
});
|
101
|
+
specWithoutExpectations.execute();
|
102
|
+
expect(results.passed()).toEqual(true);
|
103
|
+
});
|
104
|
+
|
105
|
+
it('an unexecuted spec will return true', function () {
|
106
|
+
expect(results.passed()).toEqual(true);
|
107
|
+
});
|
108
|
+
});
|
109
|
+
});
|
110
|
+
});
|
@@ -0,0 +1,201 @@
|
|
1
|
+
describe('Spies', function () {
|
2
|
+
it('should replace the specified function with a spy object', function() {
|
3
|
+
var originalFunctionWasCalled = false;
|
4
|
+
var TestClass = {
|
5
|
+
someFunction: function() {
|
6
|
+
originalFunctionWasCalled = true;
|
7
|
+
}
|
8
|
+
};
|
9
|
+
this.spyOn(TestClass, 'someFunction');
|
10
|
+
|
11
|
+
expect(TestClass.someFunction.wasCalled).toEqual(false);
|
12
|
+
expect(TestClass.someFunction.callCount).toEqual(0);
|
13
|
+
TestClass.someFunction('foo');
|
14
|
+
expect(TestClass.someFunction.wasCalled).toEqual(true);
|
15
|
+
expect(TestClass.someFunction.callCount).toEqual(1);
|
16
|
+
expect(TestClass.someFunction.mostRecentCall.args).toEqual(['foo']);
|
17
|
+
expect(TestClass.someFunction.mostRecentCall.object).toEqual(TestClass);
|
18
|
+
expect(originalFunctionWasCalled).toEqual(false);
|
19
|
+
|
20
|
+
TestClass.someFunction('bar');
|
21
|
+
expect(TestClass.someFunction.callCount).toEqual(2);
|
22
|
+
expect(TestClass.someFunction.mostRecentCall.args).toEqual(['bar']);
|
23
|
+
});
|
24
|
+
|
25
|
+
it('should allow you to view args for a particular call', function() {
|
26
|
+
var originalFunctionWasCalled = false;
|
27
|
+
var TestClass = {
|
28
|
+
someFunction: function() {
|
29
|
+
originalFunctionWasCalled = true;
|
30
|
+
}
|
31
|
+
};
|
32
|
+
this.spyOn(TestClass, 'someFunction');
|
33
|
+
|
34
|
+
TestClass.someFunction('foo');
|
35
|
+
TestClass.someFunction('bar');
|
36
|
+
expect(TestClass.someFunction.calls[0].args).toEqual(['foo']);
|
37
|
+
expect(TestClass.someFunction.calls[1].args).toEqual(['bar']);
|
38
|
+
expect(TestClass.someFunction.mostRecentCall.args).toEqual(['bar']);
|
39
|
+
});
|
40
|
+
|
41
|
+
it('should be possible to call through to the original method, or return a specific result', function() {
|
42
|
+
var originalFunctionWasCalled = false;
|
43
|
+
var passedArgs;
|
44
|
+
var passedObj;
|
45
|
+
var TestClass = {
|
46
|
+
someFunction: function() {
|
47
|
+
originalFunctionWasCalled = true;
|
48
|
+
passedArgs = arguments;
|
49
|
+
passedObj = this;
|
50
|
+
return "return value from original function";
|
51
|
+
}
|
52
|
+
};
|
53
|
+
|
54
|
+
this.spyOn(TestClass, 'someFunction').andCallThrough();
|
55
|
+
var result = TestClass.someFunction('arg1', 'arg2');
|
56
|
+
expect(result).toEqual("return value from original function");
|
57
|
+
expect(originalFunctionWasCalled).toEqual(true);
|
58
|
+
expect(passedArgs).toEqual(['arg1', 'arg2']);
|
59
|
+
expect(passedObj).toEqual(TestClass);
|
60
|
+
expect(TestClass.someFunction.wasCalled).toEqual(true);
|
61
|
+
});
|
62
|
+
|
63
|
+
it('should be possible to return a specific value', function() {
|
64
|
+
var originalFunctionWasCalled = false;
|
65
|
+
var TestClass = {
|
66
|
+
someFunction: function() {
|
67
|
+
originalFunctionWasCalled = true;
|
68
|
+
return "return value from original function";
|
69
|
+
}
|
70
|
+
};
|
71
|
+
|
72
|
+
this.spyOn(TestClass, 'someFunction').andReturn("some value");
|
73
|
+
originalFunctionWasCalled = false;
|
74
|
+
var result = TestClass.someFunction('arg1', 'arg2');
|
75
|
+
expect(result).toEqual("some value");
|
76
|
+
expect(originalFunctionWasCalled).toEqual(false);
|
77
|
+
});
|
78
|
+
|
79
|
+
it('should be possible to throw a specific error', function() {
|
80
|
+
var originalFunctionWasCalled = false;
|
81
|
+
var TestClass = {
|
82
|
+
someFunction: function() {
|
83
|
+
originalFunctionWasCalled = true;
|
84
|
+
return "return value from original function";
|
85
|
+
}
|
86
|
+
};
|
87
|
+
|
88
|
+
this.spyOn(TestClass, 'someFunction').andThrow(new Error('fake error'));
|
89
|
+
var exception;
|
90
|
+
try {
|
91
|
+
TestClass.someFunction('arg1', 'arg2');
|
92
|
+
} catch (e) {
|
93
|
+
exception = e;
|
94
|
+
}
|
95
|
+
expect(exception.message).toEqual('fake error');
|
96
|
+
expect(originalFunctionWasCalled).toEqual(false);
|
97
|
+
});
|
98
|
+
|
99
|
+
it('should be possible to call a specified function', function() {
|
100
|
+
var originalFunctionWasCalled = false;
|
101
|
+
var fakeFunctionWasCalled = false;
|
102
|
+
var passedArgs;
|
103
|
+
var passedObj;
|
104
|
+
var TestClass = {
|
105
|
+
someFunction: function() {
|
106
|
+
originalFunctionWasCalled = true;
|
107
|
+
return "return value from original function";
|
108
|
+
}
|
109
|
+
};
|
110
|
+
|
111
|
+
this.spyOn(TestClass, 'someFunction').andCallFake(function() {
|
112
|
+
fakeFunctionWasCalled = true;
|
113
|
+
passedArgs = arguments;
|
114
|
+
passedObj = this;
|
115
|
+
return "return value from fake function";
|
116
|
+
});
|
117
|
+
|
118
|
+
var result = TestClass.someFunction('arg1', 'arg2');
|
119
|
+
expect(result).toEqual("return value from fake function");
|
120
|
+
expect(originalFunctionWasCalled).toEqual(false);
|
121
|
+
expect(fakeFunctionWasCalled).toEqual(true);
|
122
|
+
expect(passedArgs).toEqual(['arg1', 'arg2']);
|
123
|
+
expect(passedObj).toEqual(TestClass);
|
124
|
+
expect(TestClass.someFunction.wasCalled).toEqual(true);
|
125
|
+
});
|
126
|
+
|
127
|
+
it('is torn down when this.removeAllSpies is called', function() {
|
128
|
+
var originalFunctionWasCalled = false;
|
129
|
+
var TestClass = {
|
130
|
+
someFunction: function() {
|
131
|
+
originalFunctionWasCalled = true;
|
132
|
+
}
|
133
|
+
};
|
134
|
+
this.spyOn(TestClass, 'someFunction');
|
135
|
+
|
136
|
+
TestClass.someFunction('foo');
|
137
|
+
expect(originalFunctionWasCalled).toEqual(false);
|
138
|
+
|
139
|
+
this.removeAllSpies();
|
140
|
+
|
141
|
+
TestClass.someFunction('foo');
|
142
|
+
expect(originalFunctionWasCalled).toEqual(true);
|
143
|
+
});
|
144
|
+
|
145
|
+
it('calls removeAllSpies during spec finish', function() {
|
146
|
+
var test = new jasmine.Spec(new jasmine.Env(), {}, 'sample test');
|
147
|
+
|
148
|
+
this.spyOn(test, 'removeAllSpies');
|
149
|
+
|
150
|
+
test.finish();
|
151
|
+
|
152
|
+
expect(test.removeAllSpies).wasCalled();
|
153
|
+
});
|
154
|
+
|
155
|
+
it('throws an exception when some method is spied on twice', function() {
|
156
|
+
var TestClass = { someFunction: function() {
|
157
|
+
} };
|
158
|
+
this.spyOn(TestClass, 'someFunction');
|
159
|
+
var exception;
|
160
|
+
try {
|
161
|
+
this.spyOn(TestClass, 'someFunction');
|
162
|
+
} catch (e) {
|
163
|
+
exception = e;
|
164
|
+
}
|
165
|
+
expect(exception).toBeDefined();
|
166
|
+
});
|
167
|
+
|
168
|
+
it('should be able to reset a spy', function() {
|
169
|
+
var TestClass = { someFunction: function() {} };
|
170
|
+
this.spyOn(TestClass, 'someFunction');
|
171
|
+
|
172
|
+
expect(TestClass.someFunction).wasNotCalled();
|
173
|
+
TestClass.someFunction();
|
174
|
+
expect(TestClass.someFunction).wasCalled();
|
175
|
+
TestClass.someFunction.reset();
|
176
|
+
expect(TestClass.someFunction).wasNotCalled();
|
177
|
+
expect(TestClass.someFunction.callCount).toEqual(0);
|
178
|
+
});
|
179
|
+
|
180
|
+
describe("createSpyObj", function() {
|
181
|
+
it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() {
|
182
|
+
var spyObj = jasmine.createSpyObj('BaseName', ['method1', 'method2']);
|
183
|
+
expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)});
|
184
|
+
expect(spyObj.method1.identity).toEqual('BaseName.method1');
|
185
|
+
expect(spyObj.method2.identity).toEqual('BaseName.method2');
|
186
|
+
});
|
187
|
+
|
188
|
+
it("should throw if you do not pass an array argument", function() {
|
189
|
+
expect(function() {
|
190
|
+
jasmine.createSpyObj('BaseName');
|
191
|
+
}).toThrow('createSpyObj requires a non-empty array of method names to create spies for');
|
192
|
+
});
|
193
|
+
|
194
|
+
it("should throw if you pass an empty array argument", function() {
|
195
|
+
expect(function() {
|
196
|
+
jasmine.createSpyObj('BaseName');
|
197
|
+
}).toThrow('createSpyObj requires a non-empty array of method names to create spies for');
|
198
|
+
});
|
199
|
+
});
|
200
|
+
|
201
|
+
});
|
@@ -0,0 +1,120 @@
|
|
1
|
+
describe('Suite', function() {
|
2
|
+
var fakeTimer;
|
3
|
+
var env;
|
4
|
+
|
5
|
+
beforeEach(function() {
|
6
|
+
env = new jasmine.Env();
|
7
|
+
env.updateInterval = 0;
|
8
|
+
|
9
|
+
fakeTimer = new jasmine.FakeTimer();
|
10
|
+
env.setTimeout = fakeTimer.setTimeout;
|
11
|
+
env.clearTimeout = fakeTimer.clearTimeout;
|
12
|
+
env.setInterval = fakeTimer.setInterval;
|
13
|
+
env.clearInterval = fakeTimer.clearInterval;
|
14
|
+
});
|
15
|
+
|
16
|
+
describe('Specs', function () {
|
17
|
+
var suite;
|
18
|
+
|
19
|
+
beforeEach(function() {
|
20
|
+
suite = env.describe('Suite 1', function () {
|
21
|
+
env.it('Spec 1', function() {
|
22
|
+
this.runs(function () {
|
23
|
+
this.expect(true).toEqual(true);
|
24
|
+
});
|
25
|
+
});
|
26
|
+
env.it('Spec 2', function() {
|
27
|
+
this.runs(function () {
|
28
|
+
this.expect(true).toEqual(true);
|
29
|
+
});
|
30
|
+
});
|
31
|
+
env.describe('Suite 2', function () {
|
32
|
+
env.it('Spec 3', function() {
|
33
|
+
this.runs(function () {
|
34
|
+
this.expect(true).toEqual(true);
|
35
|
+
});
|
36
|
+
});
|
37
|
+
});
|
38
|
+
env.it('Spec 4', function() {
|
39
|
+
this.runs(function () {
|
40
|
+
this.expect(true).toEqual(true);
|
41
|
+
});
|
42
|
+
});
|
43
|
+
});
|
44
|
+
});
|
45
|
+
|
46
|
+
it('#specs should return all immediate children that are specs.', function () {
|
47
|
+
var suiteSpecs = suite.specs();
|
48
|
+
expect(suiteSpecs.length).toEqual(3);
|
49
|
+
expect(suiteSpecs[0].description).toEqual('Spec 1');
|
50
|
+
expect(suiteSpecs[1].description).toEqual('Spec 2');
|
51
|
+
expect(suiteSpecs[2].description).toEqual('Spec 4');
|
52
|
+
});
|
53
|
+
|
54
|
+
it("#suites should return all immediate children that are suites.", function() {
|
55
|
+
var nestedSuites = suite.suites();
|
56
|
+
expect(nestedSuites.length).toEqual(1);
|
57
|
+
expect(nestedSuites[0].description).toEqual('Suite 2');
|
58
|
+
});
|
59
|
+
|
60
|
+
it("#children should return all immediate children including suites and specs.", function() {
|
61
|
+
var children = suite.children();
|
62
|
+
expect(children.length).toEqual(4);
|
63
|
+
expect(children[0].description).toEqual('Spec 1');
|
64
|
+
expect(children[1].description).toEqual('Spec 2');
|
65
|
+
expect(children[2].description).toEqual('Suite 2');
|
66
|
+
expect(children[3].description).toEqual('Spec 4');
|
67
|
+
});
|
68
|
+
});
|
69
|
+
|
70
|
+
describe('SpecCount', function () {
|
71
|
+
|
72
|
+
it('should keep a count of the number of specs that are run', function() {
|
73
|
+
var suite = env.describe('one suite description', function () {
|
74
|
+
env.it('should be a test', function() {
|
75
|
+
this.runs(function () {
|
76
|
+
this.expect(true).toEqual(true);
|
77
|
+
});
|
78
|
+
});
|
79
|
+
env.it('should be another test', function() {
|
80
|
+
this.runs(function () {
|
81
|
+
this.expect(true).toEqual(true);
|
82
|
+
});
|
83
|
+
});
|
84
|
+
env.it('should be a third test', function() {
|
85
|
+
this.runs(function () {
|
86
|
+
this.expect(true).toEqual(true);
|
87
|
+
});
|
88
|
+
});
|
89
|
+
});
|
90
|
+
|
91
|
+
expect(suite.specs().length).toEqual(3);
|
92
|
+
});
|
93
|
+
|
94
|
+
it('specCount should be correct even with runs/waits blocks', function() {
|
95
|
+
var suite = env.describe('one suite description', function () {
|
96
|
+
env.it('should be a test', function() {
|
97
|
+
this.runs(function () {
|
98
|
+
this.expect(true).toEqual(true);
|
99
|
+
});
|
100
|
+
});
|
101
|
+
env.it('should be another test', function() {
|
102
|
+
this.runs(function () {
|
103
|
+
this.expect(true).toEqual(true);
|
104
|
+
});
|
105
|
+
this.waits(10);
|
106
|
+
this.runs(function () {
|
107
|
+
this.expect(true).toEqual(true);
|
108
|
+
});
|
109
|
+
});
|
110
|
+
env.it('should be a third test', function() {
|
111
|
+
this.runs(function () {
|
112
|
+
this.expect(true).toEqual(true);
|
113
|
+
});
|
114
|
+
});
|
115
|
+
});
|
116
|
+
|
117
|
+
expect(suite.specs().length).toEqual(3);
|
118
|
+
});
|
119
|
+
});
|
120
|
+
});
|
@@ -0,0 +1,158 @@
|
|
1
|
+
describe("TrivialReporter", function() {
|
2
|
+
var trivialReporter;
|
3
|
+
var body;
|
4
|
+
|
5
|
+
beforeEach(function() {
|
6
|
+
body = document.createElement("body");
|
7
|
+
});
|
8
|
+
|
9
|
+
function fakeSpec(name) {
|
10
|
+
return {
|
11
|
+
getFullName: function() {
|
12
|
+
return name;
|
13
|
+
}
|
14
|
+
};
|
15
|
+
}
|
16
|
+
|
17
|
+
function findElements(divs, withClass) {
|
18
|
+
var els = [];
|
19
|
+
for (var i = 0; i < divs.length; i++) {
|
20
|
+
if (divs[i].className == withClass) els.push(divs[i]);
|
21
|
+
}
|
22
|
+
return els;
|
23
|
+
}
|
24
|
+
|
25
|
+
function findElement(divs, withClass) {
|
26
|
+
var els = findElements(divs, withClass);
|
27
|
+
if (els.length > 0) return els[0];
|
28
|
+
throw new Error("couldn't find div with class " + withClass);
|
29
|
+
}
|
30
|
+
|
31
|
+
it("should run only specs beginning with spec parameter", function() {
|
32
|
+
var trivialReporter = new jasmine.TrivialReporter({ location: {search: "?spec=run%20this"} });
|
33
|
+
expect(trivialReporter.specFilter(fakeSpec("run this"))).toBeTruthy();
|
34
|
+
expect(trivialReporter.specFilter(fakeSpec("not the right spec"))).toBeFalsy();
|
35
|
+
expect(trivialReporter.specFilter(fakeSpec("not run this"))).toBeFalsy();
|
36
|
+
});
|
37
|
+
|
38
|
+
it("should display empty divs for every suite when the runner is starting", function() {
|
39
|
+
var trivialReporter = new jasmine.TrivialReporter({ body: body });
|
40
|
+
trivialReporter.reportRunnerStarting({
|
41
|
+
env: new jasmine.Env(),
|
42
|
+
suites: function() {
|
43
|
+
return [ new jasmine.Suite({}, "suite 1", null, null) ];
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
var divs = findElements(body.getElementsByTagName("div"), "suite");
|
48
|
+
expect(divs.length).toEqual(1);
|
49
|
+
expect(divs[0].innerHTML).toContain("suite 1");
|
50
|
+
});
|
51
|
+
|
52
|
+
describe('Matcher reporting', function () {
|
53
|
+
var getResultMessageDiv = function (body) {
|
54
|
+
var divs = body.getElementsByTagName("div");
|
55
|
+
for (var i = 0; i < divs.length; i++) {
|
56
|
+
if (divs[i].className.match(/resultMessage/)) {
|
57
|
+
return divs[i];
|
58
|
+
}
|
59
|
+
}
|
60
|
+
};
|
61
|
+
|
62
|
+
var runner, spec, fakeTimer;
|
63
|
+
beforeEach(function () {
|
64
|
+
var env = new jasmine.Env();
|
65
|
+
fakeTimer = new jasmine.FakeTimer();
|
66
|
+
env.setTimeout = fakeTimer.setTimeout;
|
67
|
+
env.clearTimeout = fakeTimer.clearTimeout;
|
68
|
+
env.setInterval = fakeTimer.setInterval;
|
69
|
+
env.clearInterval = fakeTimer.clearInterval;
|
70
|
+
runner = env.currentRunner();
|
71
|
+
var suite = new jasmine.Suite(env, 'some suite');
|
72
|
+
runner.add(suite);
|
73
|
+
spec = new jasmine.Spec(env, suite, 'some spec');
|
74
|
+
suite.add(spec);
|
75
|
+
var trivialReporter = new jasmine.TrivialReporter({ body: body, location: {search: "?"} });
|
76
|
+
env.addReporter(trivialReporter);
|
77
|
+
});
|
78
|
+
|
79
|
+
describe('toContain', function () {
|
80
|
+
it('should show actual and expected', function () {
|
81
|
+
spec.runs(function () {
|
82
|
+
this.expect('foo').toContain('bar');
|
83
|
+
});
|
84
|
+
runner.execute();
|
85
|
+
fakeTimer.tick(0);
|
86
|
+
|
87
|
+
var resultEl = getResultMessageDiv(body);
|
88
|
+
expect(resultEl.innerHTML).toMatch(/foo/);
|
89
|
+
expect(resultEl.innerHTML).toMatch(/bar/);
|
90
|
+
});
|
91
|
+
});
|
92
|
+
});
|
93
|
+
|
94
|
+
|
95
|
+
describe("failure messages (integration)", function () {
|
96
|
+
var spec, results, expectationResult;
|
97
|
+
|
98
|
+
beforeEach(function() {
|
99
|
+
results = {
|
100
|
+
passed: function() {
|
101
|
+
return false;
|
102
|
+
},
|
103
|
+
getItems: function() {
|
104
|
+
}};
|
105
|
+
|
106
|
+
spec = {
|
107
|
+
suite: {
|
108
|
+
getFullName: function() {
|
109
|
+
return "suite 1";
|
110
|
+
}
|
111
|
+
},
|
112
|
+
getFullName: function() {
|
113
|
+
return "foo";
|
114
|
+
},
|
115
|
+
results: function() {
|
116
|
+
return results;
|
117
|
+
}
|
118
|
+
};
|
119
|
+
|
120
|
+
trivialReporter = new jasmine.TrivialReporter({ body: body });
|
121
|
+
trivialReporter.reportRunnerStarting({
|
122
|
+
env: new jasmine.Env(),
|
123
|
+
suites: function() {
|
124
|
+
return [ new jasmine.Suite({}, "suite 1", null, null) ];
|
125
|
+
}
|
126
|
+
});
|
127
|
+
});
|
128
|
+
|
129
|
+
it("should add the failure message to the DOM (non-toEquals matchers)", function() {
|
130
|
+
expectationResult = new jasmine.ExpectationResult({
|
131
|
+
matcherName: "toBeNull", passed: false, message: "Expected 'a' to be null, but it was not"
|
132
|
+
});
|
133
|
+
|
134
|
+
spyOn(results, 'getItems').andReturn([expectationResult]);
|
135
|
+
|
136
|
+
trivialReporter.reportSpecResults(spec);
|
137
|
+
|
138
|
+
var divs = body.getElementsByTagName("div");
|
139
|
+
var errorDiv = findElement(divs, 'resultMessage fail');
|
140
|
+
expect(errorDiv.innerHTML).toEqual("Expected 'a' to be null, but it was not");
|
141
|
+
});
|
142
|
+
|
143
|
+
it("should add the failure message to the DOM (non-toEquals matchers) html escaping", function() {
|
144
|
+
expectationResult = new jasmine.ExpectationResult({
|
145
|
+
matcherName: "toBeNull", passed: false, message: "Expected '1 < 2' to <b>e null, & it was not"
|
146
|
+
});
|
147
|
+
|
148
|
+
spyOn(results, 'getItems').andReturn([expectationResult]);
|
149
|
+
|
150
|
+
trivialReporter.reportSpecResults(spec);
|
151
|
+
|
152
|
+
var divs = body.getElementsByTagName("div");
|
153
|
+
var errorDiv = findElement(divs, 'resultMessage fail');
|
154
|
+
expect(errorDiv.innerHTML).toEqual("Expected '1 < 2' to <b>e null, & it was not");
|
155
|
+
});
|
156
|
+
});
|
157
|
+
|
158
|
+
});
|