jasmine-core 1.1.0.rc1

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 (39) hide show
  1. data/lib/jasmine-core.rb +17 -0
  2. data/lib/jasmine-core/example/SpecRunner.html +54 -0
  3. data/lib/jasmine-core/example/spec/PlayerSpec.js +58 -0
  4. data/lib/jasmine-core/example/spec/SpecHelper.js +9 -0
  5. data/lib/jasmine-core/example/src/Player.js +22 -0
  6. data/lib/jasmine-core/example/src/Song.js +7 -0
  7. data/lib/jasmine-core/jasmine-html.js +190 -0
  8. data/lib/jasmine-core/jasmine.css +166 -0
  9. data/lib/jasmine-core/jasmine.js +2476 -0
  10. data/lib/jasmine-core/json2.js +478 -0
  11. data/lib/jasmine-core/version.rb +8 -0
  12. data/spec/console/ConsoleReporterSpec.js +451 -0
  13. data/spec/core/BaseSpec.js +27 -0
  14. data/spec/core/CustomMatchersSpec.js +97 -0
  15. data/spec/core/EnvSpec.js +159 -0
  16. data/spec/core/ExceptionsSpec.js +149 -0
  17. data/spec/core/JsApiReporterSpec.js +103 -0
  18. data/spec/core/MatchersSpec.js +838 -0
  19. data/spec/core/MockClockSpec.js +38 -0
  20. data/spec/core/MultiReporterSpec.js +45 -0
  21. data/spec/core/NestedResultsSpec.js +54 -0
  22. data/spec/core/PrettyPrintSpec.js +87 -0
  23. data/spec/core/QueueSpec.js +23 -0
  24. data/spec/core/ReporterSpec.js +56 -0
  25. data/spec/core/RunnerSpec.js +267 -0
  26. data/spec/core/SpecRunningSpec.js +1258 -0
  27. data/spec/core/SpecSpec.js +124 -0
  28. data/spec/core/SpySpec.js +201 -0
  29. data/spec/core/SuiteSpec.js +120 -0
  30. data/spec/core/UtilSpec.js +39 -0
  31. data/spec/core/WaitsForBlockSpec.js +118 -0
  32. data/spec/html/MatchersHtmlSpec.js +38 -0
  33. data/spec/html/PrettyPrintHtmlSpec.js +8 -0
  34. data/spec/html/TrivialReporterSpec.js +239 -0
  35. data/spec/node_suite.js +127 -0
  36. data/spec/runner.html +79 -0
  37. data/spec/templates/runner.html.erb +49 -0
  38. data/spec/templates/script_tag.html.erb +1 -0
  39. metadata +164 -0
@@ -0,0 +1,124 @@
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
+ it('getFullName returns suite & spec description', function () {
40
+ var spec = new jasmine.Spec(env, suite, 'spec 1');
41
+ expect(spec.getFullName()).toEqual('suite 1 spec 1.');
42
+ });
43
+
44
+ describe('results', function () {
45
+ var spec, results;
46
+ beforeEach(function () {
47
+ spec = new jasmine.Spec(env, suite);
48
+ results = spec.results();
49
+ expect(results.totalCount).toEqual(0);
50
+ spec.runs(function () {
51
+ this.expect(true).toEqual(true);
52
+ this.expect(true).toEqual(true);
53
+ });
54
+ });
55
+
56
+
57
+ it('results shows the total number of expectations for each spec after execution', function () {
58
+ expect(results.totalCount).toEqual(0);
59
+ spec.execute();
60
+ expect(results.totalCount).toEqual(2);
61
+ });
62
+
63
+ it('results shows the number of passed expectations for each spec after execution', function () {
64
+ expect(results.passedCount).toEqual(0);
65
+ spec.execute();
66
+ expect(results.passedCount).toEqual(2);
67
+ });
68
+
69
+ it('results shows the number of failed expectations for each spec after execution', function () {
70
+ spec.runs(function () {
71
+ this.expect(true).toEqual(false);
72
+ });
73
+ expect(results.failedCount).toEqual(0);
74
+ spec.execute();
75
+ expect(results.failedCount).toEqual(1);
76
+ });
77
+
78
+ describe('results.passed', function () {
79
+ it('is true if all spec expectations pass', function () {
80
+ spec.runs(function () {
81
+ this.expect(true).toEqual(true);
82
+ });
83
+ spec.execute();
84
+ expect(results.passed()).toEqual(true);
85
+ });
86
+
87
+ it('is false if one spec expectation fails', function () {
88
+ spec.runs(function () {
89
+ this.expect(true).toEqual(false);
90
+ });
91
+ spec.execute();
92
+ expect(results.passed()).toEqual(false);
93
+ });
94
+
95
+ it('a spec with no expectations will return true', function () {
96
+ var specWithoutExpectations = new jasmine.Spec(env, suite);
97
+ specWithoutExpectations.runs(function() {
98
+
99
+ });
100
+ specWithoutExpectations.execute();
101
+ expect(results.passed()).toEqual(true);
102
+ });
103
+
104
+ it('an unexecuted spec will return true', function () {
105
+ expect(results.passed()).toEqual(true);
106
+ });
107
+ });
108
+
109
+ it("includes log messages, which may contain arbitary objects", function() {
110
+ spec.runs(function() {
111
+ this.log("here's some log message", {key: 'value'}, 123);
112
+ });
113
+ spec.execute();
114
+ var items = results.getItems();
115
+ expect(items).toEqual([
116
+ jasmine.any(jasmine.ExpectationResult),
117
+ jasmine.any(jasmine.ExpectationResult),
118
+ jasmine.any(jasmine.MessageResult)
119
+ ]);
120
+ var logResult = items[2];
121
+ expect(logResult.values).toEqual(["here's some log message", {key: 'value'}, 123]);
122
+ });
123
+ });
124
+ });
@@ -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).not.toHaveBeenCalled();
173
+ TestClass.someFunction();
174
+ expect(TestClass.someFunction).toHaveBeenCalled();
175
+ TestClass.someFunction.reset();
176
+ expect(TestClass.someFunction).not.toHaveBeenCalled();
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,39 @@
1
+ describe("jasmine.util", function() {
2
+ describe("extend", function () {
3
+ it("should add properies to a destination object ", function() {
4
+ var destination = {baz: 'baz'};
5
+ jasmine.util.extend(destination, {
6
+ foo: 'foo', bar: 'bar'
7
+ });
8
+ expect(destination).toEqual({foo: 'foo', bar: 'bar', baz: 'baz'});
9
+ });
10
+
11
+ it("should replace properies that already exist on a destination object", function() {
12
+ var destination = {foo: 'foo'};
13
+ jasmine.util.extend(destination, {
14
+ foo: 'bar'
15
+ });
16
+ expect(destination).toEqual({foo: 'bar'});
17
+ jasmine.util.extend(destination, {
18
+ foo: null
19
+ });
20
+ expect(destination).toEqual({foo: null});
21
+ });
22
+ });
23
+
24
+ describe("isArray_", function() {
25
+ it("should return true if the argument is an array", function() {
26
+ expect(jasmine.isArray_([])).toBe(true);
27
+ expect(jasmine.isArray_(['a'])).toBe(true);
28
+ });
29
+
30
+ it("should return false if the argument is not an array", function() {
31
+ expect(jasmine.isArray_(undefined)).toBe(false);
32
+ expect(jasmine.isArray_({})).toBe(false);
33
+ expect(jasmine.isArray_(function() {})).toBe(false);
34
+ expect(jasmine.isArray_('foo')).toBe(false);
35
+ expect(jasmine.isArray_(5)).toBe(false);
36
+ expect(jasmine.isArray_(null)).toBe(false);
37
+ });
38
+ });
39
+ });