Skip to content

Commit

Permalink
Add test for checking logged import error AG-14327
Browse files Browse the repository at this point in the history
Merge in ADGUARD-FILTERS/scriptlets from fix/AG-14327 to release/v1.7

Squashed commit of the following:

commit 378af55
Author: Stanislav A <s.atroschenko@adguard.com>
Date:   Tue Nov 15 20:04:43 2022 +0300

    add 'empty object in chain' test case for all related scriptlets

commit c521ec8
Author: Stanislav A <s.atroschenko@adguard.com>
Date:   Mon Nov 14 18:46:59 2022 +0300

    Add test for checking logged import error
  • Loading branch information
stanislav-atr committed Nov 16, 2022
1 parent 3b228a6 commit ef618b3
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 0 deletions.
14 changes: 14 additions & 0 deletions tests/scriptlets/abort-current-inline-script.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,20 @@ test('works with chained properties', (assert) => {
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('Works with an empty object in chain', (assert) => {
const scriptletArgs = ['window.aaa.bbb'];

window.onerror = onError(assert);
window.aaa = {};

runScriptlet(name, scriptletArgs);

window.aaa.bbb = 1;
addAndRemoveInlineScript('window.aaa.bbb = 4');

assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('should not work if chained properties are undefined', (assert) => {
window.onerror = onError(assert);
const chainProperty = 'a.b.c';
Expand Down
15 changes: 15 additions & 0 deletions tests/scriptlets/abort-on-property-read.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,18 @@ test('dot notation deferred defenition', (assert) => {
);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('Works with an empty object in chain', (assert) => {
window.aaa = {};
const scriptletArgs = [CHAIN_PROPERTY];
runScriptlet(name, scriptletArgs);

window.aaa.bbb = 'value';

assert.throws(
() => window.aaa.bbb,
/ReferenceError/,
`should throw Reference error when try to access property ${CHAIN_PROPERTY}`,
);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});
18 changes: 18 additions & 0 deletions tests/scriptlets/abort-on-property-write.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,21 @@ test('dot notation deferred defenition', (assert) => {
);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('Works with an empty object in chain', (assert) => {
const CHAIN_PROPERTY = 'window.aaa.bbb';
const scriptletArgs = [CHAIN_PROPERTY];
window.aaa = {};
runScriptlet(name, scriptletArgs);

window.aaa.bbb = 'value';

assert.throws(
() => {
window.aaa.bbb = 'new value';
},
/ReferenceError/,
`should throw Reference error when try to access property ${CHAIN_PROPERTY}`,
);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});
22 changes: 22 additions & 0 deletions tests/scriptlets/abort-on-stack-trace.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,28 @@ test('simple, matches stack', (assert) => {
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('simple, matches stack with an empty object in chain', (assert) => {
const PROPERTY = 'window.aaa.bbb';
window.aaa = {};
const scriptletArgs = [PROPERTY];
runScriptlet(name, scriptletArgs);

window.aaa.bbb = 'value';

assert.throws(
() => window.aaa.bbb,
/ReferenceError/,
`Reference error thrown when trying to access property ${PROPERTY}`,
);
assert.throws(
// eslint-disable-next-line no-return-assign
() => window.aaa.bbb = 'new value',
/ReferenceError/,
`Reference error thrown when trying to reassign property ${PROPERTY}`,
);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('simple, does NOT match stack', (assert) => {
window[PROPERTY] = 'value';
const noStackMatch = 'no_match.js';
Expand Down
14 changes: 14 additions & 0 deletions tests/scriptlets/debug-current-inline-script.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,20 @@ test('works', (assert) => {
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('works with an empty object in chain', (assert) => {
window.onerror = onError(assert);
const property = 'window.aaa.bbb';
const scriptletArgs = [property];

window.aaa = {};
runScriptlet(name, scriptletArgs);
window.aaa.bbb = 'value';

addAndRemoveInlineScript('window.aaa.bbb;');

assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('works with chained properties', (assert) => {
window.onerror = onError(assert);
const chainProperty = 'aaa.bbb.ccc';
Expand Down
11 changes: 11 additions & 0 deletions tests/scriptlets/debug-on-property-read.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,14 @@ test('dot notation deferred defenition', (assert) => {
console.log(window.aaa.bbb);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('works with an empty object in chain', (assert) => {
const scriptletArgs = [CHAIN_PROPERTY];

window.aaa = {};
runScriptlet(name, scriptletArgs);
window.aaa.bbb = 'value';

console.log(window.aaa.bbb);
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});
11 changes: 11 additions & 0 deletions tests/scriptlets/debug-on-property-write.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,14 @@ test('dot notation deferred defenition', (assert) => {
window.aaa.bbb = 'new value';
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('works with an empty object in chain', (assert) => {
const scriptletArgs = [CHAIN_PROPERTY];

window.aaa = {};
runScriptlet(name, scriptletArgs);
window.aaa.bbb = 'value';

window.aaa.bbb = 'new value';
assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});
24 changes: 24 additions & 0 deletions tests/scriptlets/log-on-stack-trace.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,27 @@ test('logs specific message', (assert) => {

assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

test('works with an empty object in chain', (assert) => {
const PROPERTY = 'window.aaa.bbb';
const scriptletArgs = [PROPERTY];

window.aaa = {};
runScriptlet(name, scriptletArgs);
window.aaa.bbb = 'value';

assert.strictEqual(
window.aaa.bbb,
'value',
'Property is accessible',
);

window.aaa.bbb = 'new value';
assert.strictEqual(
window.aaa.bbb,
'new value',
'Property is writeable',
);

assert.strictEqual(window.hit, 'FIRED', 'hit fired');
});

0 comments on commit ef618b3

Please # to comment.