From 806fe5dbe18648ee50c6eaaec6e7bd14dd13c84f Mon Sep 17 00:00:00 2001 From: Manish Jethani Date: Fri, 13 Aug 2021 22:38:13 +0530 Subject: [PATCH] Add Mocha tests (#3815) --- platform/nodejs/package.json | 5 +- platform/nodejs/tests/snfe.js | 106 ++++++++++++++++++++++++++++++++++ tools/make-nodejs.sh | 1 + 3 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 platform/nodejs/tests/snfe.js diff --git a/platform/nodejs/package.json b/platform/nodejs/package.json index fd38151b4..03ce28d03 100644 --- a/platform/nodejs/package.json +++ b/platform/nodejs/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "node build.js", "lint": "eslint js/ *.js", - "test": "node test.js" + "test": "mocha tests" }, "repository": { "type": "git", @@ -30,6 +30,7 @@ "npm": ">=6.14.4" }, "devDependencies": { - "eslint": "^7.32.0" + "eslint": "^7.32.0", + "mocha": "^9.0.3" } } diff --git a/platform/nodejs/tests/snfe.js b/platform/nodejs/tests/snfe.js new file mode 100644 index 000000000..dba745a39 --- /dev/null +++ b/platform/nodejs/tests/snfe.js @@ -0,0 +1,106 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ + +import { strict as assert } from 'assert'; +import { createRequire } from 'module'; + +import { + enableWASM, + StaticNetFilteringEngine, +} from '../index.js'; + +let engine = null; + +describe('SNFE', () => { + function fetch(listName) { + return new Promise(resolve => { + const require = createRequire(import.meta.url); // jshint ignore:line + resolve(require(`../data/${listName}.json`)); + }); + } + + function testSNFE(engine) { + let result = 0; + + // Tests + // Not blocked + result = engine.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://www.bloomberg.com/tophat/assets/v2.6.1/that.css', + type: 'stylesheet' + }); + if ( result !== 0 ) { + engine.toLogData(); + } + + // Blocked + result = engine.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js', + type: 'script' + }); + if ( result !== 0 ) { + engine.toLogData(); + } + + // Unblocked + result = engine.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://sourcepointcmp.bloomberg.com/ccpa.js', + type: 'script' + }); + if ( result !== 0 ) { + engine.toLogData(); + } + } + + beforeEach(async () => { + engine = await StaticNetFilteringEngine.create(); + + await engine.useLists([ + fetch('easylist').then(raw => ({ name: 'easylist', raw })), + fetch('easyprivacy').then(raw => ({ name: 'easyprivacy', raw })), + ]); + }); + + describe('Basic', async () => { + it ('should work', async () => { + testSNFE(engine); + + const serialized = await engine.serialize(); + engine.useLists([]); + + assert.notDeepEqual(await engine.serialize(), serialized); + + testSNFE(engine); + + await engine.deserialize(serialized); + + assert.deepEqual(await engine.serialize(), serialized); + + testSNFE(engine); + }); + }); +}); diff --git a/tools/make-nodejs.sh b/tools/make-nodejs.sh index d113cc07c..b566c5055 100755 --- a/tools/make-nodejs.sh +++ b/tools/make-nodejs.sh @@ -58,6 +58,7 @@ cp platform/nodejs/*.js $DES/ cp platform/nodejs/*.json $DES/ cp platform/nodejs/README.md $DES/ cp LICENSE.txt $DES/ +cp -R platform/nodejs/tests $DES/ cd $DES npm run build