qedproject 0.4.2 → 0.5.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 (46) hide show
  1. data/bin/qedproject +5 -4
  2. data/lib/qedproject/libraries/ember.rb +1 -19
  3. data/lib/qedproject/libraries/jquery.rb +1 -1
  4. data/lib/qedproject/libraries/jquerymobile.rb +2 -2
  5. data/lib/qedproject/libraries/knockout.rb +1 -1
  6. data/lib/qedproject/project.rb +15 -2
  7. data/lib/qedproject/version.rb +1 -1
  8. data/templates/Gemfile +8 -0
  9. data/templates/assets.yml +1 -0
  10. data/templates/suite.html +3 -3
  11. data/vendor/backbone/VERSION +1 -1
  12. data/vendor/backbone/backbone-min.js +37 -33
  13. data/vendor/backbone/underscore-min.js +1 -32
  14. data/vendor/ember/VERSION +1 -0
  15. data/vendor/ember/ember-1.0.0-rc.1.js +26839 -0
  16. data/vendor/ember/handlebars-1.0.0-rc.3.js +2201 -0
  17. data/vendor/jasmine-jquery/jasmine-jquery.js +389 -144
  18. data/vendor/jasmine/lib/{jasmine-1.2.0 → jasmine-1.3.1}/jasmine-html.js +77 -12
  19. data/vendor/jasmine/lib/{jasmine-1.2.0 → jasmine-1.3.1}/jasmine.css +1 -0
  20. data/vendor/jasmine/lib/{jasmine-1.2.0 → jasmine-1.3.1}/jasmine.js +107 -36
  21. data/vendor/jquery/VERSION +1 -1
  22. data/vendor/jquery/jquery-1.9.1.min.js +5 -0
  23. data/vendor/jquerymobile/icons-18-black.png +0 -0
  24. data/vendor/jquerymobile/icons-18-white.png +0 -0
  25. data/vendor/jquerymobile/icons-36-black.png +0 -0
  26. data/vendor/jquerymobile/icons-36-white.png +0 -0
  27. data/vendor/jquerymobile/{jquery.mobile-1.2.0.css → jquery.mobile-1.3.0.css} +1399 -374
  28. data/vendor/jquerymobile/{jquery.mobile-1.2.0.js → jquery.mobile-1.3.0.js} +7201 -5271
  29. data/vendor/jquerymobile/templates/index.html +43 -44
  30. data/vendor/knockout/VERSION +1 -1
  31. data/vendor/knockout/knockout-2.2.1.js +85 -0
  32. data/vendor/mustache/VERSION +1 -1
  33. data/vendor/mustache/mustache.js +572 -286
  34. metadata +261 -240
  35. data/vendor/ember/app.js +0 -7
  36. data/vendor/ember/apple-touch-icon-114x114-precomposed.png +0 -0
  37. data/vendor/ember/apple-touch-icon-57x57-precomposed.png +0 -0
  38. data/vendor/ember/apple-touch-icon-72x72-precomposed.png +0 -0
  39. data/vendor/ember/apple-touch-icon-precomposed.png +0 -0
  40. data/vendor/ember/apple-touch-icon.png +0 -0
  41. data/vendor/ember/ember-0.9.js +0 -14745
  42. data/vendor/ember/favicon.ico +0 -0
  43. data/vendor/ember/style.css +0 -141
  44. data/vendor/ember/templates/index.html +0 -57
  45. data/vendor/jquery/jquery-1.8.2.min.js +0 -2
  46. data/vendor/knockout/knockout-2.0.0.js +0 -97
@@ -1,306 +1,551 @@
1
1
  var readFixtures = function() {
2
- return jasmine.getFixtures().proxyCallTo_('read', arguments);
3
- };
2
+ return jasmine.getFixtures().proxyCallTo_('read', arguments)
3
+ }
4
4
 
5
5
  var preloadFixtures = function() {
6
- jasmine.getFixtures().proxyCallTo_('preload', arguments);
7
- };
6
+ jasmine.getFixtures().proxyCallTo_('preload', arguments)
7
+ }
8
8
 
9
9
  var loadFixtures = function() {
10
- jasmine.getFixtures().proxyCallTo_('load', arguments);
11
- };
10
+ jasmine.getFixtures().proxyCallTo_('load', arguments)
11
+ }
12
+
13
+ var appendLoadFixtures = function() {
14
+ jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
15
+ }
12
16
 
13
17
  var setFixtures = function(html) {
14
- jasmine.getFixtures().set(html);
15
- };
18
+ jasmine.getFixtures().proxyCallTo_('set', arguments)
19
+ }
20
+
21
+ var appendSetFixtures = function() {
22
+ jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
23
+ }
16
24
 
17
25
  var sandbox = function(attributes) {
18
- return jasmine.getFixtures().sandbox(attributes);
19
- };
26
+ return jasmine.getFixtures().sandbox(attributes)
27
+ }
20
28
 
21
29
  var spyOnEvent = function(selector, eventName) {
22
- jasmine.JQuery.events.spyOn(selector, eventName);
23
- };
30
+ return jasmine.JQuery.events.spyOn(selector, eventName)
31
+ }
32
+
33
+ var preloadStyleFixtures = function() {
34
+ jasmine.getStyleFixtures().proxyCallTo_('preload', arguments)
35
+ }
36
+
37
+ var loadStyleFixtures = function() {
38
+ jasmine.getStyleFixtures().proxyCallTo_('load', arguments)
39
+ }
40
+
41
+ var appendLoadStyleFixtures = function() {
42
+ jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments)
43
+ }
44
+
45
+ var setStyleFixtures = function(html) {
46
+ jasmine.getStyleFixtures().proxyCallTo_('set', arguments)
47
+ }
48
+
49
+ var appendSetStyleFixtures = function(html) {
50
+ jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments)
51
+ }
52
+
53
+ var loadJSONFixtures = function() {
54
+ return jasmine.getJSONFixtures().proxyCallTo_('load', arguments)
55
+ }
56
+
57
+ var getJSONFixture = function(url) {
58
+ return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url]
59
+ }
60
+
61
+ jasmine.spiedEventsKey = function (selector, eventName) {
62
+ return [$(selector).selector, eventName].toString()
63
+ }
24
64
 
25
65
  jasmine.getFixtures = function() {
26
- return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures();
27
- };
66
+ return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
67
+ }
68
+
69
+ jasmine.getStyleFixtures = function() {
70
+ return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures()
71
+ }
28
72
 
29
73
  jasmine.Fixtures = function() {
30
- this.containerId = 'jasmine-fixtures';
31
- this.fixturesCache_ = {};
32
- this.fixturesPath = 'spec/javascripts/fixtures';
33
- };
74
+ this.containerId = 'jasmine-fixtures'
75
+ this.fixturesCache_ = {}
76
+ this.fixturesPath = 'spec/javascripts/fixtures'
77
+ }
34
78
 
35
79
  jasmine.Fixtures.prototype.set = function(html) {
36
- this.cleanUp();
37
- this.createContainer_(html);
38
- };
80
+ this.cleanUp()
81
+ this.createContainer_(html)
82
+ }
83
+
84
+ jasmine.Fixtures.prototype.appendSet= function(html) {
85
+ this.addToContainer_(html)
86
+ }
39
87
 
40
88
  jasmine.Fixtures.prototype.preload = function() {
41
- this.read.apply(this, arguments);
42
- };
89
+ this.read.apply(this, arguments)
90
+ }
43
91
 
44
92
  jasmine.Fixtures.prototype.load = function() {
45
- this.cleanUp();
46
- this.createContainer_(this.read.apply(this, arguments));
47
- };
93
+ this.cleanUp()
94
+ this.createContainer_(this.read.apply(this, arguments))
95
+ }
96
+
97
+ jasmine.Fixtures.prototype.appendLoad = function() {
98
+ this.addToContainer_(this.read.apply(this, arguments))
99
+ }
48
100
 
49
101
  jasmine.Fixtures.prototype.read = function() {
50
- var htmlChunks = [];
102
+ var htmlChunks = []
51
103
 
52
- var fixtureUrls = arguments;
104
+ var fixtureUrls = arguments
53
105
  for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
54
- htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]));
106
+ htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
55
107
  }
56
108
 
57
- return htmlChunks.join('');
58
- };
109
+ return htmlChunks.join('')
110
+ }
59
111
 
60
112
  jasmine.Fixtures.prototype.clearCache = function() {
61
- this.fixturesCache_ = {};
62
- };
113
+ this.fixturesCache_ = {}
114
+ }
63
115
 
64
116
  jasmine.Fixtures.prototype.cleanUp = function() {
65
- jQuery('#' + this.containerId).remove();
66
- };
117
+ $('#' + this.containerId).remove()
118
+ }
67
119
 
68
120
  jasmine.Fixtures.prototype.sandbox = function(attributes) {
69
- var attributesToSet = attributes || {};
70
- return jQuery('<div id="sandbox" />').attr(attributesToSet);
71
- };
121
+ var attributesToSet = attributes || {}
122
+ return $('<div id="sandbox" />').attr(attributesToSet)
123
+ }
72
124
 
73
125
  jasmine.Fixtures.prototype.createContainer_ = function(html) {
74
- var container;
75
- if(html instanceof jQuery) {
76
- container = jQuery('<div id="' + this.containerId + '" />');
77
- container.html(html);
126
+ var container
127
+ if(html instanceof $) {
128
+ container = $('<div id="' + this.containerId + '" />')
129
+ container.html(html)
78
130
  } else {
79
131
  container = '<div id="' + this.containerId + '">' + html + '</div>'
80
132
  }
81
- jQuery('body').append(container);
82
- };
133
+ $(document.body).append(container)
134
+ }
135
+
136
+ jasmine.Fixtures.prototype.addToContainer_ = function(html){
137
+ var container = $(document.body).find('#'+this.containerId).append(html)
138
+ if(!container.length){
139
+ this.createContainer_(html)
140
+ }
141
+ }
83
142
 
84
143
  jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {
85
- if (typeof this.fixturesCache_[url] == 'undefined') {
86
- this.loadFixtureIntoCache_(url);
144
+ if (typeof this.fixturesCache_[url] === 'undefined') {
145
+ this.loadFixtureIntoCache_(url)
87
146
  }
88
- return this.fixturesCache_[url];
89
- };
147
+ return this.fixturesCache_[url]
148
+ }
90
149
 
91
150
  jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
92
- var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl;
93
- var request = new XMLHttpRequest();
94
- request.open("GET", url + "?" + new Date().getTime(), false);
95
- request.send(null);
96
- this.fixturesCache_[relativeUrl] = request.responseText;
97
- };
151
+ var url = this.makeFixtureUrl_(relativeUrl)
152
+ var request = $.ajax({
153
+ type: "GET",
154
+ url: url + "?" + new Date().getTime(),
155
+ async: false
156
+ })
157
+ this.fixturesCache_[relativeUrl] = request.responseText
158
+ }
159
+
160
+ jasmine.Fixtures.prototype.makeFixtureUrl_ = function(relativeUrl){
161
+ return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
162
+ }
98
163
 
99
164
  jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
100
- return this[methodName].apply(this, passedArguments);
101
- };
165
+ return this[methodName].apply(this, passedArguments)
166
+ }
167
+
168
+
169
+ jasmine.StyleFixtures = function() {
170
+ this.fixturesCache_ = {}
171
+ this.fixturesNodes_ = []
172
+ this.fixturesPath = 'spec/javascripts/fixtures'
173
+ }
174
+
175
+ jasmine.StyleFixtures.prototype.set = function(css) {
176
+ this.cleanUp()
177
+ this.createStyle_(css)
178
+ }
179
+
180
+ jasmine.StyleFixtures.prototype.appendSet = function(css) {
181
+ this.createStyle_(css)
182
+ }
183
+
184
+ jasmine.StyleFixtures.prototype.preload = function() {
185
+ this.read_.apply(this, arguments)
186
+ }
187
+
188
+ jasmine.StyleFixtures.prototype.load = function() {
189
+ this.cleanUp()
190
+ this.createStyle_(this.read_.apply(this, arguments))
191
+ }
192
+
193
+ jasmine.StyleFixtures.prototype.appendLoad = function() {
194
+ this.createStyle_(this.read_.apply(this, arguments))
195
+ }
196
+
197
+ jasmine.StyleFixtures.prototype.cleanUp = function() {
198
+ while(this.fixturesNodes_.length) {
199
+ this.fixturesNodes_.pop().remove()
200
+ }
201
+ }
202
+
203
+ jasmine.StyleFixtures.prototype.createStyle_ = function(html) {
204
+ var styleText = $('<div></div>').html(html).text(),
205
+ style = $('<style>' + styleText + '</style>')
206
+
207
+ this.fixturesNodes_.push(style)
208
+
209
+ $('head').append(style)
210
+ }
211
+
212
+ jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache
213
+
214
+ jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read
215
+
216
+ jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_
217
+
218
+ jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_
219
+
220
+ jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_
221
+
222
+ jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_
223
+
224
+ jasmine.getJSONFixtures = function() {
225
+ return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures()
226
+ }
227
+
228
+ jasmine.JSONFixtures = function() {
229
+ this.fixturesCache_ = {}
230
+ this.fixturesPath = 'spec/javascripts/fixtures/json'
231
+ }
232
+
233
+ jasmine.JSONFixtures.prototype.load = function() {
234
+ this.read.apply(this, arguments)
235
+ return this.fixturesCache_
236
+ }
237
+
238
+ jasmine.JSONFixtures.prototype.read = function() {
239
+ var fixtureUrls = arguments
240
+ for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
241
+ this.getFixtureData_(fixtureUrls[urlIndex])
242
+ }
243
+ return this.fixturesCache_
244
+ }
245
+
246
+ jasmine.JSONFixtures.prototype.clearCache = function() {
247
+ this.fixturesCache_ = {}
248
+ }
249
+
250
+ jasmine.JSONFixtures.prototype.getFixtureData_ = function(url) {
251
+ this.loadFixtureIntoCache_(url)
252
+ return this.fixturesCache_[url]
253
+ }
254
+
255
+ jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
256
+ var self = this
257
+ var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
258
+ $.ajax({
259
+ async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
260
+ cache: false,
261
+ dataType: 'json',
262
+ url: url,
263
+ success: function(data) {
264
+ self.fixturesCache_[relativeUrl] = data
265
+ },
266
+ fail: function(jqXHR, status, errorThrown) {
267
+ throw Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
268
+ }
269
+ })
270
+ }
102
271
 
272
+ jasmine.JSONFixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
273
+ return this[methodName].apply(this, passedArguments)
274
+ }
103
275
 
104
- jasmine.JQuery = function() {};
276
+ jasmine.JQuery = function() {}
105
277
 
106
278
  jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
107
- return jQuery('<div/>').append(html).html();
108
- };
279
+ return $('<div/>').append(html).html()
280
+ }
109
281
 
110
282
  jasmine.JQuery.elementToString = function(element) {
111
- return jQuery('<div />').append($(element).clone()).html();
112
- };
283
+ var domEl = $(element).get(0)
284
+ if (domEl == undefined || domEl.cloneNode)
285
+ return $('<div />').append($(element).clone()).html()
286
+ else
287
+ return element.toString()
288
+ }
113
289
 
114
- jasmine.JQuery.matchersClass = {};
290
+ jasmine.JQuery.matchersClass = {}
115
291
 
116
- (function(namespace) {
292
+ !function(namespace) {
117
293
  var data = {
118
294
  spiedEvents: {},
119
295
  handlers: []
120
- };
296
+ }
121
297
 
122
298
  namespace.events = {
123
299
  spyOn: function(selector, eventName) {
124
300
  var handler = function(e) {
125
- data.spiedEvents[[selector, eventName]] = e;
126
- };
127
- jQuery(selector).bind(eventName, handler);
128
- data.handlers.push(handler);
301
+ data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = e
302
+ }
303
+ $(selector).bind(eventName, handler)
304
+ data.handlers.push(handler)
305
+ return {
306
+ selector: selector,
307
+ eventName: eventName,
308
+ handler: handler,
309
+ reset: function(){
310
+ delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
311
+ }
312
+ }
129
313
  },
130
314
 
131
315
  wasTriggered: function(selector, eventName) {
132
- return !!(data.spiedEvents[[selector, eventName]]);
316
+ return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)])
133
317
  },
134
318
 
135
319
  wasPrevented: function(selector, eventName) {
136
- return data.spiedEvents[[selector, eventName]].isDefaultPrevented();
320
+ var e;
321
+ return (e = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]) && e.isDefaultPrevented()
137
322
  },
138
323
 
139
324
  cleanUp: function() {
140
- data.spiedEvents = {};
141
- data.handlers = [];
325
+ data.spiedEvents = {}
326
+ data.handlers = []
142
327
  }
143
328
  }
144
- })(jasmine.JQuery);
329
+ }(jasmine.JQuery)
145
330
 
146
- (function(){
331
+ !function(){
147
332
  var jQueryMatchers = {
148
333
  toHaveClass: function(className) {
149
- return this.actual.hasClass(className);
334
+ return this.actual.hasClass(className)
335
+ },
336
+
337
+ toHaveCss: function(css){
338
+ for (var prop in css){
339
+ if (this.actual.css(prop) !== css[prop]) return false
340
+ }
341
+ return true
150
342
  },
151
343
 
152
344
  toBeVisible: function() {
153
- return this.actual.is(':visible');
345
+ return this.actual.is(':visible')
154
346
  },
155
347
 
156
348
  toBeHidden: function() {
157
- return this.actual.is(':hidden');
349
+ return this.actual.is(':hidden')
158
350
  },
159
351
 
160
352
  toBeSelected: function() {
161
- return this.actual.is(':selected');
353
+ return this.actual.is(':selected')
162
354
  },
163
355
 
164
356
  toBeChecked: function() {
165
- return this.actual.is(':checked');
357
+ return this.actual.is(':checked')
166
358
  },
167
359
 
168
360
  toBeEmpty: function() {
169
- return this.actual.is(':empty');
361
+ return this.actual.is(':empty')
170
362
  },
171
363
 
172
364
  toExist: function() {
173
- return this.actual.size() > 0;
365
+ return $(document).find(this.actual).length
366
+ },
367
+
368
+ toHaveLength: function(length) {
369
+ return this.actual.length === length
174
370
  },
175
371
 
176
372
  toHaveAttr: function(attributeName, expectedAttributeValue) {
177
- return hasProperty(this.actual.attr(attributeName), expectedAttributeValue);
373
+ return hasProperty(this.actual.attr(attributeName), expectedAttributeValue)
178
374
  },
179
375
 
180
376
  toHaveProp: function(propertyName, expectedPropertyValue) {
181
- return hasProperty(this.actual.prop(propertyName), expectedPropertyValue);
377
+ return hasProperty(this.actual.prop(propertyName), expectedPropertyValue)
182
378
  },
183
379
 
184
380
  toHaveId: function(id) {
185
- return this.actual.attr('id') == id;
381
+ return this.actual.attr('id') == id
186
382
  },
187
383
 
188
384
  toHaveHtml: function(html) {
189
- return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html);
385
+ return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html)
386
+ },
387
+
388
+ toContainHtml: function(html){
389
+ var actualHtml = this.actual.html()
390
+ var expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html)
391
+ return (actualHtml.indexOf(expectedHtml) >= 0)
190
392
  },
191
393
 
192
394
  toHaveText: function(text) {
193
- var trimmedText = $.trim(this.actual.text());
194
- if (text && jQuery.isFunction(text.test)) {
195
- return text.test(trimmedText);
395
+ var trimmedText = $.trim(this.actual.text())
396
+ if (text && $.isFunction(text.test)) {
397
+ return text.test(trimmedText)
196
398
  } else {
197
- return trimmedText == text;
399
+ return trimmedText == text
198
400
  }
199
401
  },
200
402
 
201
403
  toHaveValue: function(value) {
202
- return this.actual.val() == value;
404
+ return this.actual.val() === value
203
405
  },
204
406
 
205
407
  toHaveData: function(key, expectedValue) {
206
- return hasProperty(this.actual.data(key), expectedValue);
408
+ return hasProperty(this.actual.data(key), expectedValue)
207
409
  },
208
410
 
209
411
  toBe: function(selector) {
210
- return this.actual.is(selector);
412
+ return this.actual.is(selector)
211
413
  },
212
414
 
213
415
  toContain: function(selector) {
214
- return this.actual.find(selector).size() > 0;
416
+ return this.actual.find(selector).length
215
417
  },
216
418
 
217
419
  toBeDisabled: function(selector){
218
- return this.actual.is(':disabled');
420
+ return this.actual.is(':disabled')
219
421
  },
220
422
 
221
- toBeFocused: function(selector) {
222
- return this.actual.is(':focus');
423
+ toBeFocused: function(selector) {
424
+ return this.actual[0] === this.actual[0].ownerDocument.activeElement
223
425
  },
224
426
 
225
- // tests the existence of a specific event binding
226
- toHandle: function(eventName) {
227
- var events = this.actual.data("events");
228
- return events && events[eventName].length > 0;
427
+ toHandle: function(event) {
428
+
429
+ var events = $._data(this.actual.get(0), "events")
430
+
431
+ if(!events || !event || typeof event !== "string") {
432
+ return false
433
+ }
434
+
435
+ var namespaces = event.split(".")
436
+ var eventType = namespaces.shift()
437
+ var sortedNamespaces = namespaces.slice(0).sort()
438
+ var namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)")
439
+
440
+ if(events[eventType] && namespaces.length) {
441
+ for(var i = 0; i < events[eventType].length; i++) {
442
+ var namespace = events[eventType][i].namespace
443
+ if(namespaceRegExp.test(namespace)) {
444
+ return true
445
+ }
446
+ }
447
+ } else {
448
+ return events[eventType] && events[eventType].length > 0
449
+ }
229
450
  },
230
451
 
231
452
  // tests the existence of a specific event binding + handler
232
453
  toHandleWith: function(eventName, eventHandler) {
233
- var stack = this.actual.data("events")[eventName];
234
- var i;
235
- for (i = 0; i < stack.length; i++) {
236
- if (stack[i].handler == eventHandler) {
237
- return true;
238
- }
454
+ var stack = $._data(this.actual.get(0), "events")[eventName]
455
+ for (var i = 0; i < stack.length; i++) {
456
+ if (stack[i].handler == eventHandler) return true
239
457
  }
240
- return false;
458
+ return false
241
459
  }
242
- };
460
+ }
243
461
 
244
462
  var hasProperty = function(actualValue, expectedValue) {
245
- if (expectedValue === undefined) {
246
- return actualValue !== undefined;
247
- }
248
- return actualValue == expectedValue;
249
- };
463
+ if (expectedValue === undefined) return actualValue !== undefined
464
+ return actualValue == expectedValue
465
+ }
250
466
 
251
467
  var bindMatcher = function(methodName) {
252
- var builtInMatcher = jasmine.Matchers.prototype[methodName];
468
+ var builtInMatcher = jasmine.Matchers.prototype[methodName]
253
469
 
254
470
  jasmine.JQuery.matchersClass[methodName] = function() {
255
471
  if (this.actual
256
- && (this.actual instanceof jQuery
257
- || jasmine.isDomNode(this.actual))) {
258
- this.actual = $(this.actual);
259
- var result = jQueryMatchers[methodName].apply(this, arguments);
260
- this.actual = jasmine.JQuery.elementToString(this.actual);
261
- return result;
262
- }
263
-
264
- if (builtInMatcher) {
265
- return builtInMatcher.apply(this, arguments);
266
- }
267
-
268
- return false;
269
- };
270
- };
472
+ && (this.actual instanceof $
473
+ || jasmine.isDomNode(this.actual))) {
474
+ this.actual = $(this.actual)
475
+ var result = jQueryMatchers[methodName].apply(this, arguments)
476
+ var element
477
+ if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML")
478
+ this.actual = jasmine.JQuery.elementToString(this.actual)
479
+ return result
480
+ }
481
+
482
+ if (builtInMatcher) {
483
+ return builtInMatcher.apply(this, arguments)
484
+ }
485
+
486
+ return false
487
+ }
488
+ }
271
489
 
272
490
  for(var methodName in jQueryMatchers) {
273
- bindMatcher(methodName);
491
+ bindMatcher(methodName)
274
492
  }
275
- })();
493
+ }()
276
494
 
277
495
  beforeEach(function() {
278
- this.addMatchers(jasmine.JQuery.matchersClass);
496
+ this.addMatchers(jasmine.JQuery.matchersClass)
279
497
  this.addMatchers({
280
498
  toHaveBeenTriggeredOn: function(selector) {
281
499
  this.message = function() {
282
500
  return [
283
501
  "Expected event " + this.actual + " to have been triggered on " + selector,
284
502
  "Expected event " + this.actual + " not to have been triggered on " + selector
285
- ];
286
- };
287
- return jasmine.JQuery.events.wasTriggered($(selector), this.actual);
503
+ ]
504
+ }
505
+ return jasmine.JQuery.events.wasTriggered(selector, this.actual)
288
506
  }
289
- });
507
+ })
508
+ this.addMatchers({
509
+ toHaveBeenTriggered: function(){
510
+ var eventName = this.actual.eventName,
511
+ selector = this.actual.selector
512
+ this.message = function() {
513
+ return [
514
+ "Expected event " + eventName + " to have been triggered on " + selector,
515
+ "Expected event " + eventName + " not to have been triggered on " + selector
516
+ ]
517
+ }
518
+ return jasmine.JQuery.events.wasTriggered(selector, eventName)
519
+ }
520
+ })
290
521
  this.addMatchers({
291
522
  toHaveBeenPreventedOn: function(selector) {
292
523
  this.message = function() {
293
524
  return [
294
525
  "Expected event " + this.actual + " to have been prevented on " + selector,
295
526
  "Expected event " + this.actual + " not to have been prevented on " + selector
296
- ];
297
- };
298
- return jasmine.JQuery.events.wasPrevented(selector, this.actual);
527
+ ]
528
+ }
529
+ return jasmine.JQuery.events.wasPrevented(selector, this.actual)
530
+ }
531
+ })
532
+ this.addMatchers({
533
+ toHaveBeenPrevented: function() {
534
+ var eventName = this.actual.eventName,
535
+ selector = this.actual.selector
536
+ this.message = function() {
537
+ return [
538
+ "Expected event " + eventName + " to have been prevented on " + selector,
539
+ "Expected event " + eventName + " not to have been prevented on " + selector
540
+ ]
541
+ }
542
+ return jasmine.JQuery.events.wasPrevented(selector, eventName)
299
543
  }
300
- });
301
- });
544
+ })
545
+ })
302
546
 
303
547
  afterEach(function() {
304
- jasmine.getFixtures().cleanUp();
305
- jasmine.JQuery.events.cleanUp();
306
- });
548
+ jasmine.getFixtures().cleanUp()
549
+ jasmine.getStyleFixtures().cleanUp()
550
+ jasmine.JQuery.events.cleanUp()
551
+ })