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.
- data/bin/qedproject +5 -4
- data/lib/qedproject/libraries/ember.rb +1 -19
- data/lib/qedproject/libraries/jquery.rb +1 -1
- data/lib/qedproject/libraries/jquerymobile.rb +2 -2
- data/lib/qedproject/libraries/knockout.rb +1 -1
- data/lib/qedproject/project.rb +15 -2
- data/lib/qedproject/version.rb +1 -1
- data/templates/Gemfile +8 -0
- data/templates/assets.yml +1 -0
- data/templates/suite.html +3 -3
- data/vendor/backbone/VERSION +1 -1
- data/vendor/backbone/backbone-min.js +37 -33
- data/vendor/backbone/underscore-min.js +1 -32
- data/vendor/ember/VERSION +1 -0
- data/vendor/ember/ember-1.0.0-rc.1.js +26839 -0
- data/vendor/ember/handlebars-1.0.0-rc.3.js +2201 -0
- data/vendor/jasmine-jquery/jasmine-jquery.js +389 -144
- data/vendor/jasmine/lib/{jasmine-1.2.0 → jasmine-1.3.1}/jasmine-html.js +77 -12
- data/vendor/jasmine/lib/{jasmine-1.2.0 → jasmine-1.3.1}/jasmine.css +1 -0
- data/vendor/jasmine/lib/{jasmine-1.2.0 → jasmine-1.3.1}/jasmine.js +107 -36
- data/vendor/jquery/VERSION +1 -1
- data/vendor/jquery/jquery-1.9.1.min.js +5 -0
- data/vendor/jquerymobile/icons-18-black.png +0 -0
- data/vendor/jquerymobile/icons-18-white.png +0 -0
- data/vendor/jquerymobile/icons-36-black.png +0 -0
- data/vendor/jquerymobile/icons-36-white.png +0 -0
- data/vendor/jquerymobile/{jquery.mobile-1.2.0.css → jquery.mobile-1.3.0.css} +1399 -374
- data/vendor/jquerymobile/{jquery.mobile-1.2.0.js → jquery.mobile-1.3.0.js} +7201 -5271
- data/vendor/jquerymobile/templates/index.html +43 -44
- data/vendor/knockout/VERSION +1 -1
- data/vendor/knockout/knockout-2.2.1.js +85 -0
- data/vendor/mustache/VERSION +1 -1
- data/vendor/mustache/mustache.js +572 -286
- metadata +261 -240
- data/vendor/ember/app.js +0 -7
- data/vendor/ember/apple-touch-icon-114x114-precomposed.png +0 -0
- data/vendor/ember/apple-touch-icon-57x57-precomposed.png +0 -0
- data/vendor/ember/apple-touch-icon-72x72-precomposed.png +0 -0
- data/vendor/ember/apple-touch-icon-precomposed.png +0 -0
- data/vendor/ember/apple-touch-icon.png +0 -0
- data/vendor/ember/ember-0.9.js +0 -14745
- data/vendor/ember/favicon.ico +0 -0
- data/vendor/ember/style.css +0 -141
- data/vendor/ember/templates/index.html +0 -57
- data/vendor/jquery/jquery-1.8.2.min.js +0 -2
- 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
|
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
|
-
|
66
|
-
}
|
117
|
+
$('#' + this.containerId).remove()
|
118
|
+
}
|
67
119
|
|
68
120
|
jasmine.Fixtures.prototype.sandbox = function(attributes) {
|
69
|
-
var attributesToSet = attributes || {}
|
70
|
-
return
|
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
|
76
|
-
container =
|
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
|
-
|
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]
|
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.
|
93
|
-
var request =
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
108
|
-
}
|
279
|
+
return $('<div/>').append(html).html()
|
280
|
+
}
|
109
281
|
|
110
282
|
jasmine.JQuery.elementToString = function(element) {
|
111
|
-
|
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
|
-
|
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[
|
126
|
-
}
|
127
|
-
|
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[
|
316
|
+
return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)])
|
133
317
|
},
|
134
318
|
|
135
319
|
wasPrevented: function(selector, eventName) {
|
136
|
-
|
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
|
-
}
|
329
|
+
}(jasmine.JQuery)
|
145
330
|
|
146
|
-
|
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.
|
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 &&
|
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()
|
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).
|
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
|
-
|
222
|
-
|
423
|
+
toBeFocused: function(selector) {
|
424
|
+
return this.actual[0] === this.actual[0].ownerDocument.activeElement
|
223
425
|
},
|
224
426
|
|
225
|
-
|
226
|
-
|
227
|
-
var events = this.actual.
|
228
|
-
|
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.
|
234
|
-
var i;
|
235
|
-
|
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
|
-
|
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
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
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(
|
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.
|
306
|
-
|
548
|
+
jasmine.getFixtures().cleanUp()
|
549
|
+
jasmine.getStyleFixtures().cleanUp()
|
550
|
+
jasmine.JQuery.events.cleanUp()
|
551
|
+
})
|