mirror of
https://github.com/webrecorder/pywb.git
synced 2025-03-28 08:32:29 +01:00
162 lines
4.9 KiB
JavaScript
162 lines
4.9 KiB
JavaScript
|
import test from 'ava';
|
||
|
import TestHelper from './helpers/testHelper';
|
||
|
import { NativeFnTest, SaveSrcSetDataSrcSet } from './helpers/testedValues';
|
||
|
|
||
|
/**
|
||
|
* @type {TestHelper}
|
||
|
*/
|
||
|
let helper = null;
|
||
|
|
||
|
test.before(async t => {
|
||
|
helper = await TestHelper.init(t, true);
|
||
|
});
|
||
|
|
||
|
test.beforeEach(async t => {
|
||
|
t.context.sandbox = helper.sandbox();
|
||
|
t.context.testPage = helper.testPage();
|
||
|
t.context.server = helper.server();
|
||
|
await helper.initWombat();
|
||
|
});
|
||
|
|
||
|
test.after.always(async t => {
|
||
|
await helper.stop();
|
||
|
});
|
||
|
|
||
|
test('getPageUnderModifier: should return the modifier the page is under', async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(() =>
|
||
|
wombat.getPageUnderModifier()
|
||
|
);
|
||
|
t.is(testResult, 'mp_');
|
||
|
});
|
||
|
|
||
|
test('isNativeFunction: should return T/F indicating if a function is a native function or not', async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(NativeFnTest.testFN);
|
||
|
t.deepEqual(testResult, NativeFnTest.expectedValue);
|
||
|
});
|
||
|
|
||
|
for (let i = 0; i < SaveSrcSetDataSrcSet.values.length; i++) {
|
||
|
const value = SaveSrcSetDataSrcSet.values[i];
|
||
|
test(`isSavedSrcSrcset: should return '${value.expected}' for '${
|
||
|
value.name
|
||
|
}'`, async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(
|
||
|
SaveSrcSetDataSrcSet.testFnSS,
|
||
|
value.tagName,
|
||
|
value.parentElement
|
||
|
);
|
||
|
t.is(testResult, value.expected);
|
||
|
});
|
||
|
test(`isSavedDataSrcSrcset: should return '${value.expected}' for '${
|
||
|
value.name
|
||
|
}' if it has data.srcset and 'false' when it does not`, async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(
|
||
|
SaveSrcSetDataSrcSet.testFnDSS,
|
||
|
value.tagName,
|
||
|
value.parentElement
|
||
|
);
|
||
|
t.deepEqual(testResult, {
|
||
|
with: value.expected,
|
||
|
without: false
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
test('isArgumentsObj: should return T/F indicating if the supplied object is the arguments object', async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(() => ({
|
||
|
null: wombat.isArgumentsObj(null),
|
||
|
undefined: wombat.isArgumentsObj(undefined),
|
||
|
objToStringNotFn: wombat.isArgumentsObj({ toString: 1 }),
|
||
|
objToStringNotArgumentsObject: wombat.isArgumentsObj({}),
|
||
|
actualArgumentsObject: wombat.isArgumentsObj(
|
||
|
(function() {
|
||
|
return arguments;
|
||
|
})()
|
||
|
)
|
||
|
}));
|
||
|
t.deepEqual(testResult, {
|
||
|
null: false,
|
||
|
undefined: false,
|
||
|
objToStringNotFn: false,
|
||
|
objToStringNotArgumentsObject: false,
|
||
|
actualArgumentsObject: true
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('deproxyArrayHandlingArgumentsObj: should deproxy elements in both an array and the arguments object', async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(() => {
|
||
|
const makeProxy = returnWhat =>
|
||
|
new Proxy(
|
||
|
{},
|
||
|
{
|
||
|
get(target, p, receiver) {
|
||
|
if (p === '__WBProxyRealObj__') return returnWhat;
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
const argumentsObjWithProxies = (function() {
|
||
|
return arguments;
|
||
|
})(makeProxy(1), makeProxy(2));
|
||
|
const argumentsDeproxied = wombat.deproxyArrayHandlingArgumentsObj(
|
||
|
argumentsObjWithProxies
|
||
|
);
|
||
|
const justAnArrayWithProxies = [makeProxy(3), makeProxy(4)];
|
||
|
const justArrayDeproxied = wombat.deproxyArrayHandlingArgumentsObj(
|
||
|
justAnArrayWithProxies
|
||
|
);
|
||
|
return {
|
||
|
argsDeproxied:
|
||
|
Array.isArray(argumentsDeproxied) &&
|
||
|
argumentsDeproxied !== argumentsObjWithProxies &&
|
||
|
argumentsDeproxied[0] === 1 &&
|
||
|
argumentsDeproxied[1] === 2,
|
||
|
arrayDeproxied:
|
||
|
Array.isArray(justArrayDeproxied) &&
|
||
|
justArrayDeproxied === justAnArrayWithProxies &&
|
||
|
justArrayDeproxied[0] === 3 &&
|
||
|
justArrayDeproxied[1] === 4
|
||
|
};
|
||
|
});
|
||
|
t.deepEqual(testResult, {
|
||
|
argsDeproxied: true,
|
||
|
arrayDeproxied: true
|
||
|
});
|
||
|
});
|
||
|
|
||
|
test('deproxyArrayHandlingArgumentsObj: should return the original argument if it is falsy, a NodeList, has not elements, or the length property is falsy', async t => {
|
||
|
const { sandbox } = t.context;
|
||
|
const testResult = await sandbox.evaluate(() => {
|
||
|
const nl = document.querySelectorAll('*');
|
||
|
const dpNL = wombat.deproxyArrayHandlingArgumentsObj(nl);
|
||
|
const zeroLenArray = [];
|
||
|
const zeroLenArguments = (function() {
|
||
|
return arguments;
|
||
|
})();
|
||
|
const falsyLength = {};
|
||
|
return {
|
||
|
falsey: wombat.deproxyArrayHandlingArgumentsObj(null) === null,
|
||
|
nodeList: dpNL instanceof NodeList && dpNL === nl,
|
||
|
zeroLenArray:
|
||
|
wombat.deproxyArrayHandlingArgumentsObj(zeroLenArray) === zeroLenArray,
|
||
|
zeroLenArguments:
|
||
|
wombat.deproxyArrayHandlingArgumentsObj(zeroLenArguments) ===
|
||
|
zeroLenArguments,
|
||
|
falsyLength:
|
||
|
wombat.deproxyArrayHandlingArgumentsObj(falsyLength) === falsyLength
|
||
|
};
|
||
|
});
|
||
|
t.deepEqual(testResult, {
|
||
|
falsey: true,
|
||
|
nodeList: true,
|
||
|
zeroLenArray: true,
|
||
|
zeroLenArguments: true,
|
||
|
falsyLength: true
|
||
|
});
|
||
|
});
|