ad-block
Version:
Ad block engine used in the Brave browser for ABP filter syntax based lists like EasyList.
303 lines (300 loc) • 19.4 kB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/* global describe, it, before, beforeEach */
const assert = require('assert')
const {AdBlockClient} = require('../..')
describe('getFilters', function () {
before(function () {
this.adBlockClient = new AdBlockClient()
})
beforeEach(function () {
this.adBlockClient.clear()
})
describe('invalid input', function () {
it('Returns an empty list when no filterType is specified', function () {
assert.deepEqual(this.adBlockClient.getFilters(), [])
})
it('Returns an empty list when an invalid filterType is specified', function () {
assert.deepEqual(this.adBlockClient.getFilters('fdsafsdfasdfs'), [])
})
it('Returns an empty list when an empty string filterType is specified', function () {
assert.deepEqual(this.adBlockClient.getFilters(''), [])
})
})
describe('returns filters of the correct types', function () {
it('for basic filters', function () {
this.adBlockClient.parse('basicfilter')
const filters = this.adBlockClient.getFilters('filters')
assert.equal(filters.length, 1)
assert.equal(filters[0].isDomainOnlyFilter, false)
assert.equal(filters[0].isAntiDomainOnlyFilter, false)
assert.equal(filters[0].isDomainOnlyExceptionFilter, false)
assert.equal(filters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for cosmetic filters', function () {
this.adBlockClient.parse('##table[width="80%"]')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
const cosmeticFilters = this.adBlockClient.getFilters('cosmeticFilters')
assert.equal(cosmeticFilters.length, 1)
assert.equal(cosmeticFilters[0].isDomainOnlyFilter, false)
assert.equal(cosmeticFilters[0].isAntiDomainOnlyFilter, false)
assert.equal(cosmeticFilters[0].isDomainOnlyExceptionFilter, false)
assert.equal(cosmeticFilters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for html filters', function () {
this.adBlockClient.parse('example.org$$script[data-src="banner"]')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
const htmlFilters = this.adBlockClient.getFilters('htmlFilters')
assert.equal(htmlFilters.length, 1)
assert.equal(htmlFilters[0].isDomainOnlyFilter, true)
assert.equal(htmlFilters[0].isAntiDomainOnlyFilter, false)
assert.equal(htmlFilters[0].isDomainOnlyExceptionFilter, false)
assert.equal(htmlFilters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for exception filters', function () {
this.adBlockClient.parse('@@advice')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
const exceptionFilters = this.adBlockClient.getFilters('exceptionFilters')
assert.equal(exceptionFilters.length, 1)
assert.equal(exceptionFilters[0].isDomainOnlyFilter, false)
assert.equal(exceptionFilters[0].isAntiDomainOnlyFilter, false)
assert.equal(exceptionFilters[0].isDomainOnlyExceptionFilter, false)
assert.equal(exceptionFilters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for noFingerprint', function () {
this.adBlockClient.parse('adv')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
const noFingerprintFilters = this.adBlockClient.getFilters('noFingerprintFilters')
assert.equal(noFingerprintFilters.length, 1)
assert.equal(noFingerprintFilters[0].isDomainOnlyFilter, false)
assert.equal(noFingerprintFilters[0].isAntiDomainOnlyFilter, false)
assert.equal(noFingerprintFilters[0].isDomainOnlyExceptionFilter, false)
assert.equal(noFingerprintFilters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for noFingerprint domain only', function () {
this.adBlockClient.parse('adv$domain=brianbondy.com')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
const filters = this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters')
assert.equal(filters.length, 1)
assert.equal(filters[0].isDomainOnlyFilter, true)
assert.equal(filters[0].isAntiDomainOnlyFilter, false)
assert.equal(filters[0].isDomainOnlyExceptionFilter, false)
assert.equal(filters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for noFingerprint anti-domain only', function () {
this.adBlockClient.parse('adv$domain=~brianbondy.com')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
const filters = this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters')
assert.equal(filters.length, 1)
assert.equal(filters[0].isDomainOnlyFilter, false)
assert.equal(filters[0].isAntiDomainOnlyFilter, true)
assert.equal(filters[0].isDomainOnlyExceptionFilter, false)
assert.equal(filters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for noFingerprint domain only exception', function () {
this.adBlockClient.parse('@@adv$domain=brianbondy.com')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
const filters = this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters')
assert.equal(filters.length, 1)
assert.equal(filters[0].isDomainOnlyFilter, false)
assert.equal(filters[0].isAntiDomainOnlyFilter, false)
assert.equal(filters[0].isDomainOnlyExceptionFilter, true)
assert.equal(filters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('for noFingerprint anti-domain only exception', function () {
this.adBlockClient.parse('@@adv$domain=~brianbondy.com')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
const filters = this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters')
assert.equal(filters.length, 1)
assert.equal(filters[0].isDomainOnlyFilter, false)
assert.equal(filters[0].isAntiDomainOnlyFilter, false)
assert.equal(filters[0].isDomainOnlyExceptionFilter, false)
assert.equal(filters[0].isAntiDomainOnlyExceptionFilter, true)
})
it('simple host anchored filters', function () {
this.adBlockClient.parse('||test.com')
assert.equal(this.adBlockClient.getFilters('filters').length, 0)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
it('host anchored filters with paths', function () {
this.adBlockClient.parse('||test.com/test')
const filters = this.adBlockClient.getFilters('filters')
assert.equal(filters.length, 1)
assert.equal(filters[0].isDomainOnlyFilter, false)
assert.equal(filters[0].isAntiDomainOnlyFilter, false)
assert.equal(filters[0].isDomainOnlyExceptionFilter, false)
assert.equal(filters[0].isAntiDomainOnlyExceptionFilter, false)
assert.equal(this.adBlockClient.getFilters('cosmeticFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('htmlFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('exceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintDomainOnlyExceptionFilters').length, 0)
assert.equal(this.adBlockClient.getFilters('noFingerprintAntiDomainOnlyExceptionFilters').length, 0)
})
})
describe('filter data is returned correctly', function () {
it('parses filter data', function () {
this.adBlockClient.parse('basicfilter')
const filter = this.adBlockClient.getFilters('filters')[0]
assert.equal(filter.data, 'basicfilter')
assert.equal(Object.keys(filter).length, 8)
})
it('parses domainList domains', function () {
this.adBlockClient.parse('somefilter$domain=test.com|test.net')
const filter = this.adBlockClient.getFilters('filters')[0]
assert.equal(filter.data, 'somefilter')
assert.deepEqual(filter.domainList, ['test.com', 'test.net'])
assert.deepEqual(filter.antiDomainList, [])
assert.equal(Object.keys(filter).length, 8)
assert.equal(filter.isDomainOnlyFilter, true)
assert.equal(filter.isAntiDomainOnlyFilter, false)
assert.equal(filter.isDomainOnlyExceptionFilter, false)
assert.equal(filter.isAntiDomainOnlyExceptionFilter, false)
})
it('parses domainList domains for exception rule', function () {
this.adBlockClient.parse('@@somefilter$domain=test.com|test.net')
const filter = this.adBlockClient.getFilters('exceptionFilters')[0]
assert.equal(filter.data, 'somefilter')
assert.deepEqual(filter.domainList, ['test.com', 'test.net'])
assert.deepEqual(filter.antiDomainList, [])
assert.equal(Object.keys(filter).length, 8)
assert.equal(filter.isDomainOnlyFilter, false)
assert.equal(filter.isAntiDomainOnlyFilter, false)
assert.equal(filter.isDomainOnlyExceptionFilter, true)
assert.equal(filter.isAntiDomainOnlyExceptionFilter, false)
})
it('parses domainList anti domains', function () {
this.adBlockClient.parse('somefilter$domain=~test.com|~test.net')
const filter = this.adBlockClient.getFilters('filters')[0]
assert.equal(filter.data, 'somefilter')
assert.deepEqual(filter.domainList, [])
assert.deepEqual(filter.antiDomainList, ['test.com', 'test.net'])
assert.equal(Object.keys(filter).length, 8)
assert.equal(filter.isDomainOnlyFilter, false)
assert.equal(filter.isAntiDomainOnlyFilter, true)
assert.equal(filter.isDomainOnlyExceptionFilter, false)
assert.equal(filter.isAntiDomainOnlyExceptionFilter, false)
})
it('parses domainList exception anti domains', function () {
this.adBlockClient.parse('@@somefilter$domain=~test.com|~test.net')
const filter = this.adBlockClient.getFilters('exceptionFilters')[0]
assert.equal(filter.data, 'somefilter')
assert.deepEqual(filter.domainList, [])
assert.deepEqual(filter.antiDomainList, ['test.com', 'test.net'])
assert.equal(Object.keys(filter).length, 8)
assert.equal(filter.isDomainOnlyFilter, false)
assert.equal(filter.isAntiDomainOnlyFilter, false)
assert.equal(filter.isDomainOnlyExceptionFilter, false)
assert.equal(filter.isAntiDomainOnlyExceptionFilter, true)
})
it('parses domainList mixed domains', function () {
this.adBlockClient.parse('somefilter$domain=example.com|~good.example.com')
const filter = this.adBlockClient.getFilters('filters')[0]
assert.equal(filter.data, 'somefilter')
assert.deepEqual(filter.domainList, ['example.com'])
assert.deepEqual(filter.antiDomainList, ['good.example.com'])
assert.equal(Object.keys(filter).length, 8)
assert.equal(filter.isDomainOnlyFilter, false)
assert.equal(filter.isAntiDomainOnlyFilter, false)
assert.equal(filter.isDomainOnlyExceptionFilter, false)
assert.equal(filter.isAntiDomainOnlyExceptionFilter, false)
})
it('parses domainList mixed domains for an exception rule', function () {
this.adBlockClient.parse('@@somefilter$domain=example.com|~good.example.com')
const filter = this.adBlockClient.getFilters('exceptionFilters')[0]
assert.equal(filter.data, 'somefilter')
assert.deepEqual(filter.domainList, ['example.com'])
assert.deepEqual(filter.antiDomainList, ['good.example.com'])
assert.equal(Object.keys(filter).length, 8)
assert.equal(filter.isDomainOnlyFilter, false)
assert.equal(filter.isAntiDomainOnlyFilter, false)
assert.equal(filter.isDomainOnlyExceptionFilter, false)
assert.equal(filter.isAntiDomainOnlyExceptionFilter, false)
})
})
})