chore: 整理 third-party Dark Reader 目录并移除本地说明文件跟踪
This commit is contained in:
@@ -0,0 +1,270 @@
|
||||
import type {DynamicThemeFix} from '../../../src/definitions';
|
||||
import {findRelevantFix, combineFixes} from '../../../src/inject/dynamic-theme/fixes';
|
||||
import {multiline} from '../../support/test-utils';
|
||||
|
||||
describe('Select fixes via findRelevantFix()', () => {
|
||||
const emptyFix: DynamicThemeFix = {
|
||||
url: [],
|
||||
css: '',
|
||||
invert: [],
|
||||
ignoreImageAnalysis: [],
|
||||
ignoreInlineStyle: [],
|
||||
ignoreCSSUrl: [],
|
||||
disableStyleSheetsProxy: false,
|
||||
disableCustomElementRegistryProxy: false,
|
||||
};
|
||||
|
||||
it('If fix list is empty or invalid, findRelevantFix() returns null', () => {
|
||||
expect(findRelevantFix('https://example.com', [])).toBe(null);
|
||||
expect(findRelevantFix('https://example.com', 1 as any)).toBe(null);
|
||||
expect(findRelevantFix('https://example.com', 'a' as any)).toBe(null);
|
||||
expect(findRelevantFix('https://example.com', {} as any)).toBe(null);
|
||||
});
|
||||
|
||||
it('If no matching URL found, findRelevantFix() returns null', () => {
|
||||
expect(findRelevantFix('https://example.com', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
])).toBe(null);
|
||||
|
||||
expect(findRelevantFix('https://example.com', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'other.com',
|
||||
'some.net',
|
||||
],
|
||||
},
|
||||
])).toBe(null);
|
||||
|
||||
expect(findRelevantFix('https://example.com', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/sub',
|
||||
],
|
||||
},
|
||||
])).toBe(null);
|
||||
});
|
||||
|
||||
it('If multiple matching URL patterns found, select the most specific one', () => {
|
||||
expect(findRelevantFix('https://example.com/sub', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com',
|
||||
'example.net',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/sub',
|
||||
'some.net',
|
||||
],
|
||||
},
|
||||
])).toBe(2);
|
||||
|
||||
expect(findRelevantFix('https://example.com/1/2/3', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/1',
|
||||
'example.net',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/1/2',
|
||||
'example.net',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/1/2/3',
|
||||
'some.net',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/1/2/3/4',
|
||||
'some.net',
|
||||
],
|
||||
},
|
||||
])).toBe(3);
|
||||
});
|
||||
|
||||
it('BUG COMPATIBILITY: If multiple matching URL patterns found, the most specific fix is determined by the length of first pattern', () => {
|
||||
expect(findRelevantFix('https://example.com/exact/match', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'other.net',
|
||||
'example.com/exact/match',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'other.net/this/fix/is/selected',
|
||||
'example.com',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'other.net',
|
||||
'example.com/exact/match',
|
||||
],
|
||||
},
|
||||
])).toBe(2);
|
||||
});
|
||||
|
||||
it('BUG COMPATIBILITY: If multiple matching URL patterns of the same length are found, select the first one', () => {
|
||||
expect(findRelevantFix('https://example.com/exact/match', [
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/exact/match',
|
||||
],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: [
|
||||
'example.com/exact/match',
|
||||
],
|
||||
},
|
||||
])).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Construct single fix via combineFixes()', () => {
|
||||
const emptyFix: DynamicThemeFix = {
|
||||
url: [],
|
||||
css: '',
|
||||
invert: [],
|
||||
ignoreImageAnalysis: [],
|
||||
ignoreInlineStyle: [],
|
||||
ignoreCSSUrl: [],
|
||||
disableStyleSheetsProxy: false,
|
||||
disableCustomElementRegistryProxy: false,
|
||||
};
|
||||
|
||||
it('Merges CSS', () => {
|
||||
expect(combineFixes([
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
css: 'body { background: blue; }',
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['example.com'],
|
||||
css: 'h1 { color: yellow; }\n',
|
||||
},
|
||||
])!.css).toBe(multiline(
|
||||
'body { background: blue; }',
|
||||
'h1 { color: yellow; }',
|
||||
));
|
||||
});
|
||||
|
||||
it('Merges invert', () => {
|
||||
expect(combineFixes([
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
invert: ['img'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
invert: ['svg'],
|
||||
},
|
||||
])!.invert).toStrictEqual(['img', 'svg']);
|
||||
});
|
||||
|
||||
it('Merges ignoreImageAnalysis', () => {
|
||||
expect(combineFixes([
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
ignoreImageAnalysis: ['img'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
ignoreImageAnalysis: ['svg'],
|
||||
},
|
||||
])!.ignoreImageAnalysis).toStrictEqual(['img', 'svg']);
|
||||
});
|
||||
|
||||
it('Merges ignoreInlineStyle', () => {
|
||||
expect(combineFixes([
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
ignoreInlineStyle: ['img'],
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
ignoreInlineStyle: ['svg'],
|
||||
},
|
||||
])!.ignoreInlineStyle).toStrictEqual(['img', 'svg']);
|
||||
});
|
||||
|
||||
it('disableStyleSheetsProxy is true if it is true in at least one fix', () => {
|
||||
expect(combineFixes([
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
disableStyleSheetsProxy: false,
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
},
|
||||
])!.disableStyleSheetsProxy).toBe(false);
|
||||
|
||||
expect(combineFixes([
|
||||
{
|
||||
...emptyFix,
|
||||
url: ['*'],
|
||||
disableStyleSheetsProxy: false,
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
disableStyleSheetsProxy: true,
|
||||
},
|
||||
{
|
||||
...emptyFix,
|
||||
disableStyleSheetsProxy: false,
|
||||
},
|
||||
])!.disableStyleSheetsProxy).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user