Skip to content

Commit

Permalink
better test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
sveisvei committed Jan 14, 2014
1 parent c496edc commit 50c985b
Show file tree
Hide file tree
Showing 8 changed files with 259 additions and 61 deletions.
1 change: 1 addition & 0 deletions lib/helpers.js
Expand Up @@ -14,6 +14,7 @@ function collect(base){
if (typeof spec[key] === 'string') {
res = spec[key];
} else {
// default to validator root dirname
res = path.join(base, key + '.js');
}
return res;
Expand Down
10 changes: 4 additions & 6 deletions lib/phantom/getSource.js
Expand Up @@ -6,11 +6,9 @@ module.exports = function getSource(error) {
error = e;
}
}
if (error) {
if (!error.stackArray){
throw error;
}
return error.stackArray[error.stackArray.length-1];
if (!error.stackArray){
throw error;
}
return '';
return error.stackArray[error.stackArray.length-1];

};
5 changes: 1 addition & 4 deletions lib/phantom/wrap.js
Expand Up @@ -13,10 +13,7 @@ function wrapEvaluate(_opt) {
} catch (err) {
catched = err;
}
if (catched) {
var res = catched.stackArray ? catched.stackArray[catched.stackArray.length - 1] : catched;
return res;
}
return catched.stackArray ? catched.stackArray[catched.stackArray.length - 1] : catched;
}

var name = opt.name;
Expand Down
26 changes: 14 additions & 12 deletions lib/validate.js
Expand Up @@ -26,18 +26,19 @@ function createReportHelper(result) {
var found = [];
res.data.trace = res.data.trace.filter(function (entry) {
var key = entry.file + entry.sourceURL + entry.line;
if (found.indexOf(key) > -1) {
return false;
}

entry.file = path.basename(entry.sourceURL).replace(/\?.*$/, '');
if (entry.file.length > 25) {
entry.file = entry.file.substring(0, 25);
}
found.push(key);
if (found.indexOf(key) === -1) {

return true;
found.push(key);

entry.file = path.basename(entry.sourceURL).replace(/\?.*$/, '');
if (entry.file.length > 25) {
entry.file = entry.file.substring(0, 25);
}
return true;
}

return false;
});
}
}
Expand All @@ -58,7 +59,7 @@ function isNotObject(o){

function deepFreeze(o) {
var prop, propKey;
if (typeof prop !== 'object'){
if (typeof o !== 'object'){
return o;
}
Object.freeze(o);
Expand Down Expand Up @@ -154,7 +155,7 @@ function validate(harvested, options, callback) {
}

if (!mod || !mod.validate) {
return done();
return done(new Error('Missing validation module'));
}

var filtered = filterDataByDependencies(harvested, mod.dependencies, fileName);
Expand All @@ -170,5 +171,6 @@ function validate(harvested, options, callback) {
module.exports = {
validate: validate,
filterDataByDependencies: filterDataByDependencies,
createReportHelper: createReportHelper
createReportHelper: createReportHelper,
deepFreeze: deepFreeze
};
38 changes: 38 additions & 0 deletions test/phantom/getSource.test.js
@@ -0,0 +1,38 @@
var referee = require('referee');
var assert = referee.assert;
var refute = referee.refute;

var getSource = require('../../lib/phantom/getSource.js');

function PhantomError() {
Error.apply(this, arguments);
}
PhantomError.prototype = new Error();
PhantomError.prototype.constructor = PhantomError;
PhantomError.prototype.name = 'PhantomError';

describe('getSource', function () {

it('it should throw an error and catch it to fetch linenumber', function(){

assert.exception(function(){
getSource();
});

assert.exception(function(){
var error = new Error('Testing');
getSource(error);
});

var phantomError = new PhantomError('customPhantomError');

Object.defineProperty(phantomError, 'stackArray', {
get: function(){ return [1, 2, 3]; }
});

var result = getSource(phantomError);

assert.equals(result, 3);

});
});
49 changes: 47 additions & 2 deletions test/phantom/wrap.test.js
Expand Up @@ -13,7 +13,11 @@ describe('Wrap', function(){
calls++;
}

global.window = {'top': {}, 'target': call};
function call2(){
calls++;
}

global.window = {'top': {}, 'target': call, 'target2': {'sub1': call2}};

var key = wrap.wrapEvaluate({
name: ['target']
Expand All @@ -30,7 +34,15 @@ describe('Wrap', function(){
global.window.target('huzzla');
assert.equals(calls, 2);

assert.equals(calls, global.window.top[key].length);

key = wrap.wrapEvaluate({
name: ['target2', 'sub1']
});
assert(key);

global.window.target2.sub1('huzzla');
refute.equals(global.window.target2.sub1, call2);
assert.equals(calls, 3);

global.window = null;
});
Expand Down Expand Up @@ -89,4 +101,37 @@ describe('Wrap', function(){
});


it('createWrap should run evaluate on the page object', function(done){

var evalCalls = 0;
var page = {
switchToMainFrame: function(){},
switchToFrame: function(){},
evaluate: function(fn, key){
evalCalls++;
if (evalCalls === 1){
return key.name;
}
if (evalCalls === 2){
setTimeout(done, 0);
return fn(key);
}
}
};

global.window = {
top: {dummy: 1}
};

var wrapper = wrap.createWrap(page);
var fn = wrapper('dummy', function(){});
assert.equals(evalCalls, 1, 'should call evaluate');

var result = fn('dummy');

assert.equals(result, global.window.top.dummy);

global.window = null;
});

});
47 changes: 13 additions & 34 deletions test/rule/errors.test.js
Expand Up @@ -4,49 +4,28 @@ var refute = buster.refute;

var hook = require('../../lib/rule/hook/errors.js');

/*

describe('Errors hook', function () {

it('should inject error probe in gardr frame', function () {
var calls = 0;
var _window = {
'top': {
__errors: []
},
'onerror': function () {
calls++;
}
};
it('should report error', function (done) {

var message = 'msg';
var trace = [{line: 1, file: 2, 'function': 3}];
var api = {
'switchToIframe': function () {
calls++;
},
'evaluate': function (fn) {
global.window = _window;
calls++;
fn();
global.window = null;
setPush: function(key, entry){
assert(key, 'errors');
assert.equals(entry.message, message);
assert.equals(entry.trace[0].sourceURL, trace[0].file);
done();
}
};

hook.onNavigationRequested('invalid', null, null, null, api);
assert.equals(calls, 0);
var url = 'http://valid.no/page.html?param=param#GARDR_' + Math.random();
hook.onNavigationRequested(url, null, null, null, api);
assert.equals(calls, 2);
_window.onerror('some error', 'url', 'lineNumber');
assert.equals(calls, 3);
assert.equals(_window.top.__errors.length, 1);
var result = hook.onError(message, trace, api);
assert(result, 'hook should return true');
});

});
*/

var validator = require('../../lib/rule/validator/errors.js');
describe('Errors validator', function () {

Expand Down

0 comments on commit 50c985b

Please sign in to comment.