Skip to content

Commit 8327df0

Browse files
committed
Fix jQuery tests, linting errors
1 parent 3941ce8 commit 8327df0

File tree

5 files changed

+123
-106
lines changed

5 files changed

+123
-106
lines changed

Gruntfile.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ module.exports = function(grunt) {
2121
return path;
2222
});
2323

24+
// custom browserify transformer to re-write plugins to
25+
// self-register with Raven via addPlugin
26+
function AddPluginBrowserifyTransformer() {
27+
return function (file, options) {
28+
return through(function (buf, enc, next) {
29+
buf = buf.toString('utf8');
30+
if (/plugins/.test(file)) {
31+
buf += "\nRaven.addPlugin(module.exports);";
32+
}
33+
this.push(buf);
34+
next();
35+
});
36+
};
37+
}
38+
2439
// Taken from http://dzone.com/snippets/calculate-all-combinations
2540
var combine = function (a) {
2641
var fn = function (n, src, got, all) {
@@ -75,32 +90,17 @@ module.exports = function(grunt) {
7590
options: {
7691
browserifyOptions: {
7792
banner: grunt.file.read('template/_copyright.js'),
78-
standalone: 'Raven', // umd
93+
standalone: 'Raven' // umd
7994
}
8095
},
8196
core: {
8297
src: 'src/raven.js',
83-
dest: 'build/raven.js',
98+
dest: 'build/raven.js'
8499
},
85100
plugins: {
86101
files: pluginConcatFiles,
87102
transform: [
88-
[
89-
// custom transformer to re-write plugins to self-register
90-
// with Raven
91-
new function () {
92-
return function (file, options) {
93-
return through(function (buf, enc, next) {
94-
var buf = buf.toString('utf8');
95-
if (/plugins/.test(file)) {
96-
buf += "\nRaven.addPlugin(module.exports.install);";
97-
}
98-
this.push(buf);
99-
next();
100-
});
101-
}
102-
}
103-
]
103+
[ new AddPluginBrowserifyTransformer() ]
104104
]
105105
},
106106
test: {

plugins/angular.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use strict';
2+
13
/**
24
* Angular.js plugin
35
*

plugins/jquery.js

Lines changed: 83 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -3,106 +3,105 @@
33
*
44
* Patches event handler callbacks and ajax callbacks.
55
*/
6-
;(function(window) {
76
'use strict';
87

9-
if (window.Raven) Raven.addPlugin(function jQueryPlugin() {
10-
11-
var $ = window.jQuery;
12-
13-
// quit if jQuery isn't on the page
14-
if (!$) return;
15-
16-
var _oldEventAdd = $.event.add;
17-
$.event.add = function ravenEventAdd(elem, types, handler, data, selector) {
18-
var _handler;
19-
20-
if (handler && handler.handler) {
21-
_handler = handler.handler;
22-
handler.handler = Raven.wrap(handler.handler);
23-
} else {
24-
_handler = handler;
25-
handler = Raven.wrap(handler);
26-
}
27-
28-
// If the handler we are attaching doesn’t have the same guid as
29-
// the original, it will never be removed when someone tries to
30-
// unbind the original function later. Technically as a result of
31-
// this our guids are no longer globally unique, but whatever, that
32-
// never hurt anybody RIGHT?!
33-
if (_handler.guid) {
34-
handler.guid = _handler.guid;
35-
} else {
36-
handler.guid = _handler.guid = $.guid++;
37-
}
38-
39-
return _oldEventAdd.call(this, elem, types, handler, data, selector);
40-
};
8+
var Raven = require('../src/raven');
419

42-
var _oldReady = $.fn.ready;
43-
$.fn.ready = function ravenjQueryReadyWrapper(fn) {
44-
return _oldReady.call(this, Raven.wrap(fn));
45-
};
10+
function install(jQuery) {
11+
var $ = jQuery || window.jQuery;
4612

47-
var _oldAjax = $.ajax;
48-
$.ajax = function ravenAjaxWrapper(url, options) {
49-
var keys = ['complete', 'error', 'success'], key;
13+
// quit if jQuery isn't on the page
5014

51-
// Taken from https://github.com/jquery/jquery/blob/eee2eaf1d7a189d99106423a4206c224ebd5b848/src/ajax.js#L311-L318
52-
// If url is an object, simulate pre-1.5 signature
53-
if (typeof url === 'object') {
54-
options = url;
55-
url = undefined;
56-
}
15+
var _oldEventAdd = $.event.add;
16+
$.event.add = function ravenEventAdd(elem, types, handler, data, selector) {
17+
var _handler;
5718

58-
// Force options to be an object
59-
options = options || {};
19+
if (handler && handler.handler) {
20+
_handler = handler.handler;
21+
handler.handler = Raven.wrap(handler.handler);
22+
} else {
23+
_handler = handler;
24+
handler = Raven.wrap(handler);
25+
}
6026

61-
/*jshint -W084*/
62-
while (key = keys.pop()) {
63-
if ($.isFunction(options[key])) {
64-
options[key] = Raven.wrap(options[key]);
27+
// If the handler we are attaching doesn’t have the same guid as
28+
// the original, it will never be removed when someone tries to
29+
// unbind the original function later. Technically as a result of
30+
// this our guids are no longer globally unique, but whatever, that
31+
// never hurt anybody RIGHT?!
32+
if (_handler.guid) {
33+
handler.guid = _handler.guid;
34+
} else {
35+
handler.guid = _handler.guid = $.guid++;
6536
}
66-
}
67-
/*jshint +W084*/
68-
69-
try {
70-
var jqXHR = _oldAjax.call(this, url, options);
71-
// jqXHR.complete is not a regular deferred callback
72-
if ($.isFunction(jqXHR.complete))
73-
jqXHR.complete = Raven.wrap(jqXHR.complete);
74-
return jqXHR;
75-
} catch (e) {
76-
Raven.captureException(e);
77-
throw e;
78-
}
79-
};
8037

81-
var _oldDeferred = $.Deferred;
82-
$.Deferred = function ravenDeferredWrapper(func) {
83-
return !_oldDeferred ? null : _oldDeferred(function beforeStartWrapper(deferred) {
84-
var methods = ['resolve', 'reject', 'notify', 'resolveWith', 'rejectWith', 'notifyWith'], method;
38+
return _oldEventAdd.call(this, elem, types, handler, data, selector);
39+
};
40+
41+
var _oldReady = $.fn.ready;
42+
$.fn.ready = function ravenjQueryReadyWrapper(fn) {
43+
return _oldReady.call(this, Raven.wrap(fn));
44+
};
45+
46+
var _oldAjax = $.ajax;
47+
$.ajax = function ravenAjaxWrapper(url, options) {
48+
var keys = ['complete', 'error', 'success'], key;
8549

86-
// since jQuery 1.9, deferred[resolve | reject | notify] are calling internally
87-
// deferred[resolveWith | rejectWith | notifyWith] but we need to wrap them as well
88-
// to support all previous versions.
50+
// Taken from https://github.com/jquery/jquery/blob/eee2eaf1d7a189d99106423a4206c224ebd5b848/src/ajax.js#L311-L318
51+
// If url is an object, simulate pre-1.5 signature
52+
if (typeof url === 'object') {
53+
options = url;
54+
url = undefined;
55+
}
56+
57+
// Force options to be an object
58+
options = options || {};
8959

9060
/*jshint -W084*/
91-
while (method = methods.pop()) {
92-
if ($.isFunction(deferred[method])) {
93-
deferred[method] = Raven.wrap(deferred[method]);
61+
while (key = keys.pop()) {
62+
if ($.isFunction(options[key])) {
63+
options[key] = Raven.wrap(options[key]);
9464
}
9565
}
9666
/*jshint +W084*/
9767

98-
// Call given func if any
99-
if (func) {
100-
func.call(deferred, deferred);
68+
try {
69+
var jqXHR = _oldAjax.call(this, url, options);
70+
// jqXHR.complete is not a regular deferred callback
71+
if ($.isFunction(jqXHR.complete))
72+
jqXHR.complete = Raven.wrap(jqXHR.complete);
73+
return jqXHR;
74+
} catch (e) {
75+
Raven.captureException(e);
76+
throw e;
10177
}
102-
});
103-
};
78+
};
79+
80+
var _oldDeferred = $.Deferred;
81+
$.Deferred = function ravenDeferredWrapper(func) {
82+
return !_oldDeferred ? null : _oldDeferred(function beforeStartWrapper(deferred) {
83+
var methods = ['resolve', 'reject', 'notify', 'resolveWith', 'rejectWith', 'notifyWith'], method;
84+
85+
// since jQuery 1.9, deferred[resolve | reject | notify] are calling internally
86+
// deferred[resolveWith | rejectWith | notifyWith] but we need to wrap them as well
87+
// to support all previous versions.
88+
89+
/*jshint -W084*/
90+
while (method = methods.pop()) {
91+
if ($.isFunction(deferred[method])) {
92+
deferred[method] = Raven.wrap(deferred[method]);
93+
}
94+
}
95+
/*jshint +W084*/
10496

105-
// End of plugin factory
106-
});
97+
// Call given func if any
98+
if (func) {
99+
func.call(deferred, deferred);
100+
}
101+
});
102+
};
103+
}
107104

108-
}(typeof window !== 'undefined' ? window : this));
105+
module.exports = {
106+
install: install
107+
};

src/raven.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,11 @@ var Raven = {
313313
return Raven;
314314
},
315315

316-
addPlugin: function(plugin) {
316+
addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
317317
plugins.push(plugin);
318-
if (isRavenInstalled) plugin();
318+
if (isRavenInstalled) {
319+
plugin.install.apply(this, Array.prototype.slice.call(arguments, 1));
320+
}
319321
return Raven;
320322
},
321323

@@ -910,7 +912,7 @@ Raven._uuid4 = function() {
910912
return v.toString(16);
911913
});
912914
}
913-
}
915+
};
914916

915917
Raven._logDebug = function(level) {
916918
if (originalConsoleMethods[level] && Raven.debug) {
@@ -1010,6 +1012,7 @@ if (typeof TEST !== 'undefined' && TEST) {
10101012
ravenNotConfiguredError = undefined;
10111013
originalConsole = window.console || {};
10121014
originalConsoleMethods = {};
1015+
plugins = [];
10131016

10141017
for (var method in originalConsole) {
10151018
originalConsoleMethods[method] = originalConsole[method];

test/plugins/jquery.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
1+
'use strict';
2+
/*jshint mocha:true*/
3+
/*global assert:false, console:true*/
4+
15
// TODO(dcramer): need some kind of clean setup state and dynamic
26
// loading of the jquery plugin
37

8+
var Raven = require('../../src/raven');
9+
var RavenjQueryPlugin = require('../../plugins/jquery');
10+
var jQuery = require('jquery');
11+
412
describe('jQuery', function(){
13+
before(function () {
14+
Raven._test.setGlobalState({ isRavenInstalled: true });
15+
Raven.addPlugin(RavenjQueryPlugin, jQuery);
16+
});
17+
518
describe('.fn.ready', function(){
619
it('captures exceptions #integration', function(){
720
var err = new Error('foo');
@@ -72,7 +85,7 @@ describe('jQuery', function(){
7285
it('captures errors from ' + key + ' with context', function(key){
7386
return function(){
7487
assertErrorRecorded(function(){
75-
var dfd = $.Deferred();
88+
var dfd = jQuery.Deferred();
7689
dfd.promise()[key](function() {
7790
throw err;
7891
});

0 commit comments

Comments
 (0)