Completed
Push — GildedRose/js ( a01e2a )
by
unknown
05:41 queued 03:38
created

lib/jasmine-jquery-1.3.1/jasmine-jquery-1.3.1.js   D

Complexity

Total Complexity 67
Complexity/F 1.22

Size

Lines of Code 288
Function Count 55

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 0
c 0
b 0
f 0
nc 32
dl 0
loc 288
rs 4.3333
wmc 67
mnd 2
bc 67
fnc 55
bpm 1.2181
cpm 1.2181
noi 31

47 Functions

Rating   Name   Duplication   Size   Complexity  
B 0 25 1
A jQueryMatchers.toBeVisible 0 3 1
A jasmine-jquery-1.3.1.js ➔ bindMatcher 0 17 1
A jasmine-jquery-1.3.1.js ➔ preloadFixtures 0 3 1
A jQueryMatchers.toHaveClass 0 3 1
A jQueryMatchers.toHaveValue 0 3 1
A jasmine.JQuery 0 1 1
A jasmine.Fixtures.cleanUp 0 3 1
A jasmine-jquery-1.3.1.js ➔ afterEach 0 4 1
A jQueryMatchers.toBeSelected 0 3 1
A jQueryMatchers.toHandleWith 0 10 3
A jasmine.Fixtures.sandbox 0 4 1
A jasmine.getFixtures 0 3 1
A jasmine.Fixtures.proxyCallTo_ 0 3 1
A jasmine.Fixtures.getFixtureHtml_ 0 6 2
A jQueryMatchers.toBeChecked 0 3 1
A jasmine.Fixtures.read 0 10 2
A jQueryMatchers.toBeDisabled 0 3 1
A jQueryMatchers.toHaveText 0 7 3
A jasmine.JQuery.elementToString 0 3 1
A jQueryMatchers.toExist 0 3 1
A jasmine.Fixtures.set 0 4 1
A jasmine-jquery-1.3.1.js ➔ hasProperty 0 6 2
A jasmine-jquery-1.3.1.js ➔ beforeEach 0 14 1
A jQueryMatchers.toBe 0 3 1
A jasmine.Fixtures.load 0 4 1
A namespace.events.spyOn 0 7 1
A jQueryMatchers.toContain 0 3 1
A jQueryMatchers.toHaveData 0 3 1
A jasmine-jquery-1.3.1.js ➔ loadFixtures 0 3 1
A jasmine.Fixtures 0 5 1
A jQueryMatchers.toHaveAttr 0 3 1
A jasmine-jquery-1.3.1.js ➔ setFixtures 0 3 1
A namespace.events.cleanUp 0 4 1
A jasmine.Fixtures.loadFixtureIntoCache_ 0 16 2
A jQueryMatchers.toBeHidden 0 3 1
A jasmine.Fixtures.createContainer_ 0 10 2
A jQueryMatchers.toBeEmpty 0 3 1
A jasmine-jquery-1.3.1.js ➔ sandbox 0 3 1
A jQueryMatchers.toHandle 0 4 1
A namespace.events.wasTriggered 0 3 1
A jQueryMatchers.toHaveHtml 0 3 1
A jasmine.Fixtures.preload 0 3 1
A jQueryMatchers.toHaveId 0 3 1
A jasmine-jquery-1.3.1.js ➔ spyOnEvent 0 3 1
A jasmine.Fixtures.clearCache 0 3 1
A jasmine.JQuery.browserTagCaseIndependentHtml 0 3 1

How to fix   Complexity   

Complexity

Complex classes like lib/jasmine-jquery-1.3.1/jasmine-jquery-1.3.1.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
var readFixtures = function() {
2
  return jasmine.getFixtures().proxyCallTo_('read', arguments);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
3
};
4
5
var preloadFixtures = function() {
6
  jasmine.getFixtures().proxyCallTo_('preload', arguments);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
7
};
8
9
var loadFixtures = function() {
10
  jasmine.getFixtures().proxyCallTo_('load', arguments);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
11
};
12
13
var setFixtures = function(html) {
14
  jasmine.getFixtures().set(html);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
15
};
16
17
var sandbox = function(attributes) {
18
  return jasmine.getFixtures().sandbox(attributes);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
19
};
20
21
var spyOnEvent = function(selector, eventName) {
22
  jasmine.JQuery.events.spyOn(selector, eventName);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
23
}
24
25
jasmine.getFixtures = function() {
26
  return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures();
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
27
};
28
29
jasmine.Fixtures = function() {
30
  this.containerId = 'jasmine-fixtures';
31
  this.fixturesCache_ = {};
32
  this.fixturesPath = 'spec/javascripts/fixtures';
33
};
34
35
jasmine.Fixtures.prototype.set = function(html) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
36
  this.cleanUp();
37
  this.createContainer_(html);
38
};
39
40
jasmine.Fixtures.prototype.preload = function() {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
41
  this.read.apply(this, arguments);
42
};
43
44
jasmine.Fixtures.prototype.load = function() {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
45
  this.cleanUp();
46
  this.createContainer_(this.read.apply(this, arguments));
47
};
48
49
jasmine.Fixtures.prototype.read = function() {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
50
  var htmlChunks = [];
51
52
  var fixtureUrls = arguments;
53
  for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
54
    htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]));
55
  }
56
57
  return htmlChunks.join('');
58
};
59
60
jasmine.Fixtures.prototype.clearCache = function() {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
61
  this.fixturesCache_ = {};
62
};
63
64
jasmine.Fixtures.prototype.cleanUp = function() {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
65
  jQuery('#' + this.containerId).remove();
66
};
67
68
jasmine.Fixtures.prototype.sandbox = function(attributes) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
69
  var attributesToSet = attributes || {};
70
  return jQuery('<div id="sandbox" />').attr(attributesToSet);
71
};
72
73
jasmine.Fixtures.prototype.createContainer_ = function(html) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
74
  var container;
75
  if(html instanceof jQuery) {
76
    container = jQuery('<div id="' + this.containerId + '" />');
77
    container.html(html);
78
  } else {
79
    container = '<div id="' + this.containerId + '">' + html + '</div>'
80
  }
81
  jQuery('body').append(container);
82
};
83
84
jasmine.Fixtures.prototype.getFixtureHtml_ = function(url) {  
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
85
  if (typeof this.fixturesCache_[url] == 'undefined') {
86
    this.loadFixtureIntoCache_(url);
87
  }
88
  return this.fixturesCache_[url];
89
};
90
91
jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function(relativeUrl) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
92
  var self = this;
93
  var url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl;
94
  jQuery.ajax({
95
    async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
96
    cache: false,
97
    dataType: 'html',
98
    url: url,
99
    success: function(data) {
100
      self.fixturesCache_[relativeUrl] = data;
101
    },
102
    error: function(jqXHR, status, errorThrown) {
103
        throw Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')');
104
    }
105
  });
106
};
107
108
jasmine.Fixtures.prototype.proxyCallTo_ = function(methodName, passedArguments) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
109
  return this[methodName].apply(this, passedArguments);
110
};
111
112
113
jasmine.JQuery = function() {};
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
114
115
jasmine.JQuery.browserTagCaseIndependentHtml = function(html) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
116
  return jQuery('<div/>').append(html).html();
117
};
118
119
jasmine.JQuery.elementToString = function(element) {
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
120
  return jQuery('<div />').append(element.clone()).html();
121
};
122
123
jasmine.JQuery.matchersClass = {};
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
124
125
(function(namespace) {
126
  var data = {
127
    spiedEvents: {},
128
    handlers:    []
129
  };
130
131
  namespace.events = {
132
    spyOn: function(selector, eventName) {
133
      var handler = function(e) {
134
        data.spiedEvents[[selector, eventName]] = e;
135
      };
136
      jQuery(selector).bind(eventName, handler);
137
      data.handlers.push(handler);
138
    },
139
140
    wasTriggered: function(selector, eventName) {
141
      return !!(data.spiedEvents[[selector, eventName]]);
142
    },
143
144
    cleanUp: function() {
145
      data.spiedEvents = {};
146
      data.handlers    = [];
147
    }
148
  }
149
})(jasmine.JQuery);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
150
151
(function(){
152
  var jQueryMatchers = {
153
    toHaveClass: function(className) {
154
      return this.actual.hasClass(className);
155
    },
156
157
    toBeVisible: function() {
158
      return this.actual.is(':visible');
159
    },
160
161
    toBeHidden: function() {
162
      return this.actual.is(':hidden');
163
    },
164
165
    toBeSelected: function() {
166
      return this.actual.is(':selected');
167
    },
168
169
    toBeChecked: function() {
170
      return this.actual.is(':checked');
171
    },
172
173
    toBeEmpty: function() {
174
      return this.actual.is(':empty');
175
    },
176
177
    toExist: function() {
178
      return this.actual.size() > 0;
179
    },
180
181
    toHaveAttr: function(attributeName, expectedAttributeValue) {
182
      return hasProperty(this.actual.attr(attributeName), expectedAttributeValue);
183
    },
184
185
    toHaveId: function(id) {
186
      return this.actual.attr('id') == id;
187
    },
188
189
    toHaveHtml: function(html) {
190
      return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
191
    },
192
193
    toHaveText: function(text) {
194
      if (text && jQuery.isFunction(text.test)) {
195
        return text.test(this.actual.text());
196
      } else {
197
        return this.actual.text() == text;
198
      }
199
    },
200
201
    toHaveValue: function(value) {
202
      return this.actual.val() == value;
203
    },
204
205
    toHaveData: function(key, expectedValue) {
206
      return hasProperty(this.actual.data(key), expectedValue);
207
    },
208
209
    toBe: function(selector) {
210
      return this.actual.is(selector);
211
    },
212
213
    toContain: function(selector) {
214
      return this.actual.find(selector).size() > 0;
215
    },
216
217
    toBeDisabled: function(selector){
0 ignored issues
show
Unused Code introduced by
The parameter selector is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
218
      return this.actual.is(':disabled');
219
    },
220
221
    // tests the existence of a specific event binding
222
    toHandle: function(eventName) {
223
      var events = this.actual.data("events");
224
      return events && events[eventName].length > 0;
225
    },
226
    
227
    // tests the existence of a specific event binding + handler
228
    toHandleWith: function(eventName, eventHandler) {
229
      var stack = this.actual.data("events")[eventName];
230
      var i;
231
      for (i = 0; i < stack.length; i++) {
232
        if (stack[i].handler == eventHandler) {
233
          return true;
234
        }
235
      }
236
      return false;
237
    }
238
  };
239
240
  var hasProperty = function(actualValue, expectedValue) {
241
    if (expectedValue === undefined) {
242
      return actualValue !== undefined;
243
    }
244
    return actualValue == expectedValue;
245
  };
246
247
  var bindMatcher = function(methodName) {
248
    var builtInMatcher = jasmine.Matchers.prototype[methodName];
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
249
250
    jasmine.JQuery.matchersClass[methodName] = function() {
251
      if (this.actual instanceof jQuery) {
252
        var result = jQueryMatchers[methodName].apply(this, arguments);
253
        this.actual = jasmine.JQuery.elementToString(this.actual);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
254
        return result;
255
      }
256
257
      if (builtInMatcher) {
258
        return builtInMatcher.apply(this, arguments);
259
      }
260
261
      return false;
262
    };
263
  };
264
265
  for(var methodName in jQueryMatchers) {
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
266
    bindMatcher(methodName);
267
  }
268
})();
269
270
beforeEach(function() {
271
  this.addMatchers(jasmine.JQuery.matchersClass);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
272
  this.addMatchers({
273
    toHaveBeenTriggeredOn: function(selector) {
274
      this.message = function() {
275
        return [
276
          "Expected event " + this.actual + " to have been triggered on" + selector,
277
          "Expected event " + this.actual + " not to have been triggered on" + selector
278
        ];
279
      };
280
      return jasmine.JQuery.events.wasTriggered(selector, this.actual);
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
281
    }
282
  })
283
});
284
285
afterEach(function() {
286
  jasmine.getFixtures().cleanUp();
0 ignored issues
show
Bug introduced by
The variable jasmine seems to be never declared. If this is a global, consider adding a /** global: jasmine */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
287
  jasmine.JQuery.events.cleanUp();
288
});
289