tikiwiki/packages/tiki-pkg-casperjs/jerome-breton/casperjs/tests/suites/utils.js

485 lines
20 KiB
JavaScript
Raw Permalink Normal View History

2023-11-20 21:52:04 +01:00
/*eslint strict:0, max-statements:0*/
var utils = require('utils'),
t = casper.test,
x = require('casper').selectXPath;
casper.test.begin('utils.betterTypeOf() tests', 10, function(test) {
var testCases = [
{subject: 1, expected: 'number'},
{subject: '1', expected: 'string'},
{subject: {}, expected: 'object'},
{subject: [], expected: 'array'},
{subject: undefined, expected: 'undefined'},
{subject: null, expected: 'null'},
{subject: function(){}, expected: 'function'},
{subject: window, expected: 'domwindow'},
{subject: new Date(), expected: 'date'},
{subject: new RegExp(), expected: 'regexp'}
];
testCases.forEach(function(testCase) {
test.assertEquals(utils.betterTypeOf(testCase.subject), testCase.expected,
utils.format('betterTypeOf() detects expected type "%s"', testCase.expected));
});
test.done();
});
casper.test.begin('utils.betterInstanceOf() tests', 13, function(test) {
/*global XMLDocument*/
// need two objects to test inheritance
function Cow(){} var daisy = new Cow();
function SuperCow(){} SuperCow.prototype = new Cow(); var superDaisy = new SuperCow();
var date = new Date(); var regex = new RegExp(); var xmlDoc = document.implementation.createDocument("<y>", "x", null);
var testCases = [
{subject: 1, fn: Number, expected: true},
{subject: '1', fn: String, expected: true},
{subject: {}, fn: Object, expected: true},
{subject: [], fn: Array, expected: true},
{subject: undefined, fn: Array, expected: false},
{subject: null, fn: Array, expected: false},
{subject: function(){}, fn: Function, expected: true},
{subject: date, fn: Date, expected: true},
{subject: regex, fn: RegExp, expected: true},
{subject: xmlDoc, fn: XMLDocument, expected: true},
{subject: daisy, fn: Cow, expected: true},
{subject: superDaisy, fn: SuperCow, expected: true},
{subject: superDaisy, fn: Cow, expected: true}
];
testCases.forEach(function(testCase) {
test.assertEquals(utils.betterInstanceOf(testCase.subject, testCase.fn), testCase.expected,
utils.format('betterInstanceOf() detects expected constructor "%s"', testCase.fn.name));
});
test.done();
});
casper.test.begin('utils.cleanUrl() tests', 11, function(test) {
var testCases = {
'http://google.com/': 'http://google.com/',
'http://google.com': 'http://google.com/',
'http://www.google.com/': 'http://www.google.com/',
'http://www.google.com/?plop=2': 'http://www.google.com/?plop=2',
'https://google.com/': 'https://google.com/',
'https://google.com': 'https://google.com/',
'https://www.google.com/': 'https://www.google.com/',
'https://www.google.com/?plop=2': 'https://www.google.com/?plop=2',
'https://www.google.com?plop=2': 'https://www.google.com/?plop=2',
'file:///Users/toto/toto.html': 'file:///Users/toto/toto.html',
'/100': '/100'
};
for (var testCase in testCases) {
test.assertEquals(utils.cleanUrl(testCase), testCases[testCase], 'cleanUrl() cleans an URL');
}
test.done();
});
casper.test.begin('utils.clone() tests', 2, function(test) {
var a = {a: 1, b: 2, c: [1, 2]};
test.assertEquals(utils.clone(a), a);
var b = [1, 2, 3, a];
test.assertEquals(utils.clone(b), b);
test.done();
});
if (utils.gteVersion(phantom.version, '1.9.0')) {
casper.test.begin('utils.computeModifier() tests', 7, function(test) {
var modifiers = require('webpage').create().event.modifier;
test.assertType(modifiers, "object");
test.assertEquals(utils.computeModifier("", modifiers), 0,
'computeModifier() computes a "none" modifier');
test.assertEquals(utils.computeModifier("alt", modifiers),
modifiers.alt,
'computeModifier() computes an "alt" modifier');
test.assertEquals(utils.computeModifier("ctrl+alt", modifiers),
modifiers.ctrl | modifiers.alt,
'computeModifier() computes a "ctrl+alt" modifier');
test.assertEquals(utils.computeModifier("ctrl+alt+shift", modifiers),
modifiers.ctrl | modifiers.alt | modifiers.shift,
'computeModifier() computes a "ctrl+alt+shift" modifier');
test.assertThrows(utils.computeModifier, ["chucknorris", modifiers],
'computeModifier() checks for a valid modifier');
test.assertThrows(utils.computeModifier, ["chuck+norris", modifiers],
'computeModifier() checks for a valid complex modifier');
test.done();
});
}
casper.test.begin('decodeUrl() tests', 4, function(test) {
/* global escape */
test.assertEquals(utils.decodeUrl('foo'), 'foo');
test.assertEquals(utils.decodeUrl('Forlì'), 'Forlì');
test.assertEquals(utils.decodeUrl(encodeURIComponent('Forlì')), 'Forlì');
test.assertEquals(utils.decodeUrl(escape('Forlì')), 'Forlì');
test.done();
});
casper.test.begin('equals() tests', 23, function(test) {
test.assert(utils.equals(null, null), 'equals() null equality');
test.assertNot(utils.equals(null, undefined), 'equals() null vs. undefined inequality');
test.assert(utils.equals("hi", "hi"), 'equals() string equality');
test.assertNot(utils.equals("hi", "ih"), 'equals() string inequality');
test.assert(utils.equals(5, 5), 'equals() number equality');
test.assertNot(utils.equals("5", 5), 'equals() number equality without implicit cast');
test.assert(utils.equals(5, 5.0), 'equals() number equality with cast');
test.assertNot(utils.equals(5, 10), 'equals() number inequality');
test.assert(utils.equals([], []), 'equals() empty array equality');
test.assert(utils.equals([1,2], [1,2]), 'equals() array equality');
test.assert(utils.equals([1,2,[1,2,function(){}]], [1,2,[1,2,function(){}]]),
'equals() complex array equality');
test.assertNot(utils.equals([1,2,[1,2,function(a){}]], [1,2,[1,2,function(b){}]]),
'equals() complex array inequality');
test.assertNot(utils.equals([1,2], [2,1]), 'equals() shuffled array inequality');
test.assertNot(utils.equals([1,2], [1,2,3]), 'equals() array length inequality');
test.assert(utils.equals({}, {}), 'equals() empty object equality');
test.assert(utils.equals({a:1,b:2}, {a:1,b:2}), 'equals() object length equality');
test.assert(utils.equals({a:1,b:2}, {b:2,a:1}), 'equals() shuffled object keys equality');
test.assertNot(utils.equals({a:1,b:2}, {a:1,b:3}), 'equals() object inequality');
test.assert(utils.equals({1:{name:"bob",age:28}, 2:{name:"john",age:26}},
{1:{name:"bob",age:28}, 2:{name:"john",age:26}}),
'equals() complex object equality');
test.assertNot(utils.equals({1:{name:"bob",age:28}, 2:{name:"john",age:26}},
{1:{name:"bob",age:28}, 2:{name:"john",age:27}}),
'equals() complex object inequality');
test.assert(utils.equals(function(x){return x;}, function(x){return x;}),
'equals() function equality');
test.assertNot(utils.equals(function(x){return x;}, function(y){return y+2;}),
'equals() function inequality');
test.assert(utils.equals([{a:1, b:2}, {c:3, d:4}], [{a:1, b:2}, {c:3, d:4}]),
'equals() arrays of objects');
test.done();
});
casper.test.begin('fileExt() tests', 6, function(test) {
var testCases = {
'foo.ext': 'ext',
'FOO.EXT': 'ext',
'a.ext': 'ext',
'.ext': 'ext',
'toto.': '',
' plop.ext ': 'ext'
};
for (var testCase in testCases) {
test.assertEquals(utils.fileExt(testCase), testCases[testCase],
'fileExt() extract file extension');
}
test.done();
});
casper.test.begin('fillBlanks() tests', 3, function(test) {
var testCases = {
'foo': 'foo ',
' foo bar ': ' foo bar ',
' foo bar ': ' foo bar '
};
for (var testCase in testCases) {
test.assertEquals(utils.fillBlanks(testCase, 10), testCases[testCase],
'fillBlanks() fills blanks');
}
test.done();
});
casper.test.begin('getPropertyPath() tests', 7, function(test) {
var testCases = [
{
input: utils.getPropertyPath({}, 'a.b.c'),
output: undefined
},
{
input: utils.getPropertyPath([1, 2, 3], 'a.b.c'),
output: undefined
},
{
input: utils.getPropertyPath({ a: { b: { c: 1 } }, c: 2 }, 'a.b.c'),
output: 1
},
{
input: utils.getPropertyPath({ a: { b: { c: 1 } }, c: 2 }, 'a.b.x'),
output: undefined
},
{
input: utils.getPropertyPath({ a: { b: { c: 1 } }, c: 2 }, 'a.b'),
output: { c: 1 }
},
{
input: utils.getPropertyPath({ 'a-b': { 'c-d': 1} }, 'a-b.c-d'),
output: 1
},
{
input: utils.getPropertyPath({ 'a.b': { 'c.d': 1} }, 'a.b.c.d'),
output: undefined
}
];
testCases.forEach(function(testCase) {
test.assertEquals(testCase.input, testCase.output,
'getPropertyPath() gets a property using a path');
});
test.done();
});
casper.test.begin('isArray() tests', 3, function(test) {
test.assertEquals(utils.isArray([]), true, 'isArray() checks for an Array');
test.assertEquals(utils.isArray({}), false, 'isArray() checks for an Array');
test.assertEquals(utils.isArray("foo"), false, 'isArray() checks for an Array');
test.done();
});
casper.test.begin('isClipRect() tests', 5, function(test) {
var testCases = [
[{}, false],
[{top: 2}, false],
[{top: 2, left: 2, width: 2, height: 2}, true],
[{top: 2, left: 2, height: 2, width: 2}, true],
[{top: 2, left: 2, width: 2, height: new Date()}, false]
];
testCases.forEach(function(testCase) {
test.assertEquals(utils.isClipRect(testCase[0]), testCase[1],
'isClipRect() checks for a ClipRect');
});
test.done();
});
casper.test.begin('isHTTPResource() tests', 6, function(test) {
var testCases = [
[{}, false],
[{url: 'file:///var/www/i.html'}, false],
[{url: 'mailto:plop@plop.com'}, false],
[{url: 'ftp://ftp.plop.com'}, false],
[{url: 'HTTP://plop.com/'}, true],
[{url: 'https://plop.com/'}, true]
];
testCases.forEach(function(testCase) {
test.assertEquals(utils.isHTTPResource(testCase[0]), testCase[1],
'isHTTPResource() checks for an HTTP resource');
});
test.done();
});
casper.test.begin('isObject() tests', 8, function(test) {
test.assertEquals(utils.isObject({}), true, 'isObject() checks for an Object');
test.assertEquals(utils.isObject([]), true, 'isObject() checks for an Object');
test.assertEquals(utils.isObject(1), false, 'isObject() checks for an Object');
test.assertEquals(utils.isObject("1"), false, 'isObject() checks for an Object');
test.assertEquals(utils.isObject(function(){}), false, 'isObject() checks for an Object');
test.assertEquals(utils.isObject(new Function('return {};')()), true, 'isObject() checks for an Object');
test.assertEquals(utils.isObject(require('webpage').create()), true, 'isObject() checks for an Object');
test.assertEquals(utils.isObject(null), false, 'isObject() checks for an Object');
test.done();
});
casper.test.begin('isValidSelector() tests', 10, function(test) {
t.assertEquals(utils.isValidSelector({}), false,
'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector(""), false,
'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector("a"), true,
'isValidSelector() checks for a valid selector');
t.assert(
utils.isValidSelector('div#plop form[name="form"] input[type="submit"]'),
'isValidSelector() checks for a valid selector'
);
t.assertEquals(utils.isValidSelector(x('//a')), true,
'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector({
type: "css",
path: 'div#plop form[name="form"] input[type="submit"]'
}), true, 'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector({
type: "xpath",
path: '//a'
}), true, 'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector({
type: "css"
}), false, 'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector({
type: "xpath"
}), false, 'isValidSelector() checks for a valid selector');
t.assertEquals(utils.isValidSelector({
type: "css3",
path: "a"
}), false, 'isValidSelector() checks for a valid selector');
test.done();
});
casper.test.begin('isWebPage() tests', 3, function(test) {
var pageModule = require('webpage');
test.assertEquals(utils.isWebPage(pageModule), false,
'isWebPage() checks for a WebPage instance');
test.assertEquals(utils.isWebPage(pageModule.create()), true,
'isWebPage() checks for a WebPage instance');
test.assertEquals(utils.isWebPage(null), false,
'isWebPage() checks for a WebPage instance');
test.done();
});
casper.test.begin('isJsFile() tests', 5, function(test) {
var testCases = {
'': false,
'toto.png': false,
'plop': false,
'gniii.coffee': '.coffee' in require.extensions || false,
'script.js': true
};
for (var testCase in testCases) {
test.assertEquals(utils.isJsFile(testCase), testCases[testCase],
'isJsFile() checks for js file');
}
test.done();
});
casper.test.begin('mergeObjects() tests', 10, function(test) {
/*eslint eqeqeq:0 */
var testCases = [
{
obj1: {a: 1}, obj2: {b: 2}, merged: {a: 1, b: 2}
},
{
obj1: {}, obj2: {a: 1}, merged: {a: 1}
},
{
obj1: {}, obj2: {a: {b: 2}}, merged: {a: {b: 2}}
},
{
obj1: {a: 1}, obj2: {}, merged: {a: 1}
},
{
obj1: {a: 1}, obj2: {a: 2}, merged: {a: 2}
},
{
obj1: {x: 0, double: function(){return this.x*2;}},
obj2: {triple: function(){return this.x*3;}},
merged: {
x: 0,
double: function(){return this.x*2;},
triple: function(){return this.x*3;}
}
}
];
testCases.forEach(function(testCase) {
test.assertEquals(
utils.mergeObjects(testCase.obj1, testCase.obj2),
testCase.merged,
'mergeObjects() can merge objects'
);
});
var obj = {x: 1},
qtruntimeobject = {foo: 'baz'};
var merged1 = utils.mergeObjects({}, {a: obj});
merged1.a.x = 2;
test.assertEquals(obj.x, 1, 'mergeObjects() creates deep clones #1');
var merged2 = utils.mergeObjects({a: {}}, {a: obj});
merged2.a.x = 2;
test.assertEquals(obj.x, 1, 'mergeObjects() creates deep clones #2');
var refObj = {a: qtruntimeobject};
var merged3 = utils.mergeObjects({}, refObj, {keepReferences: false});
test.assertFalsy(merged3.a == refObj.a, 'disabling references should not point to same object');
var merged4 = utils.mergeObjects({}, refObj, {keepReferences: true});
test.assert(merged4.a == refObj.a, 'enabling references should point to same object');
test.done();
});
casper.test.begin('objectValues() tests', 2, function(test) {
test.assertEquals(utils.objectValues({}), [],
'objectValues() can extract object values');
test.assertEquals(utils.objectValues({a: 1, b: 2}), [1, 2],
'objectValues() can extract object values');
test.done();
});
casper.test.begin('quoteXPathAttributeString() tests', 2, function(test) {
casper.start('tests/site/click.html', function() {
var selector = utils.format('//a[text()=%s]',
utils.quoteXPathAttributeString('Label with double "quotes"'));
test.assertExists(x(selector), utils.format('Xpath selector "%s" is found on "tests/site/click.html" page', selector));
selector = utils.format('//a[text()=%s]',
utils.quoteXPathAttributeString("Label with single 'quotes'"));
test.assertExists(x(selector), utils.format('Xpath selector "%s" is found on "tests/site/click.html" page', selector));
}).run(function() {
test.done();
});
});
casper.test.begin('unique() tests', 4, function(test) {
var testCases = [
{
input: [1,2,3],
output: [1,2,3]
},
{
input: [1,2,3,2,1],
output: [1,2,3]
},
{
input: ["foo", "bar", "foo"],
output: ["foo", "bar"]
},
{
input: [],
output: []
}
];
testCases.forEach(function(testCase) {
test.assertEquals(utils.unique(testCase.input), testCase.output,
'unique() computes unique values of an array');
});
test.done();
});
casper.test.begin('cmpVersion() tests', 10, function suite(test) {
test.assertEquals(utils.cmpVersion('1.0.0', '2.0.0'), -1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion('1.0.0-DEV', '2.0.0-BOOM'), -1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion('1.0.0', '1.1.0'), -1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion('1.1.0', '1.0.0'), 1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion('0.0.3', '0.0.4'), -1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion('0.0.3', '1.0.3'), -1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion('0.1', '1.0.3.8'), -1,
'cmpVersion() can compare version strings');
test.assertEquals(utils.cmpVersion({major: 1, minor: 2, patch: 3},
{major: 1, minor: 2, patch: 4}), -1,
'cmpVersion() can compare version objects');
test.assertEquals(utils.cmpVersion({major: 2, minor: 0, patch: 3},
{major: 1, minor: 0, patch: 4}), 1,
'cmpVersion() can compare version objects');
test.assertEquals(utils.cmpVersion({major: 0, minor: 0, patch: 3},
{major: 1, minor: 0, patch: 3}), -1,
'cmpVersion() can compare version objects');
test.done();
});
casper.test.begin('gteVersion() tests', 4, function suite(test) {
test.assert(utils.gteVersion('1.1.0', '1.0.0'),
'gteVersion() checks for a greater or equal version');
test.assertNot(utils.gteVersion('1.0.0', '1.1.0'),
'gteVersion() checks for a greater or equal version');
test.assert(utils.gteVersion({major: 1, minor: 1, patch: 0},
{major: 1, minor: 0, patch: 0}),
'gteVersion() checks for a greater or equal version');
test.assertNot(utils.gteVersion({major: 1, minor: 0, patch: 0},
{major: 1, minor: 1, patch: 0}),
'gteVersion() checks for a greater or equal version');
test.done();
});
casper.test.begin('ltVersion() tests', 4, function suite(test) {
test.assert(utils.ltVersion('1.0.0', '1.1.0'),
'ltVersion() checks for a lesser version');
test.assertNot(utils.ltVersion('1.1.0', '1.0.0'),
'ltVersion() checks for a lesser version');
test.assert(utils.ltVersion({major: 1, minor: 0, patch: 0},
{major: 1, minor: 1, patch: 0}),
'ltVersion() checks for a lesser version');
test.assertNot(utils.ltVersion({major: 1, minor: 1, patch: 0},
{major: 1, minor: 0, patch: 0}),
'ltVersion() checks for a lesser version');
test.done();
});