mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-15 02:30:37 +08:00
Chore: add tests for ruleset create utility
This commit is contained in:
parent
026bd02b90
commit
0bbbeaa372
53
Build/lib/create-file.test.ts
Normal file
53
Build/lib/create-file.test.ts
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import { expect } from 'chai';
|
||||||
|
import { fileEqual } from './create-file';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/require-await -- async iterable
|
||||||
|
const createSource = async function *(input: string[]) {
|
||||||
|
for (const line of input) {
|
||||||
|
yield line;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const test = async (a: string[], b: string[], expected: boolean) => {
|
||||||
|
expect((await fileEqual(a, createSource(b)))).to.eq(expected);
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('fileEqual', () => {
|
||||||
|
it('same', () => test(
|
||||||
|
['A', 'B'],
|
||||||
|
['A', 'B'],
|
||||||
|
true
|
||||||
|
));
|
||||||
|
|
||||||
|
it('ignore comment', async () => {
|
||||||
|
await test(
|
||||||
|
['# A', 'B'],
|
||||||
|
['# B', 'B'],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
await test(
|
||||||
|
['# A', '# C', 'B'],
|
||||||
|
['# A', '# D', 'B'],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('comment more', () => test(
|
||||||
|
['# A', 'B'],
|
||||||
|
['# A', '# B', 'B'],
|
||||||
|
false
|
||||||
|
));
|
||||||
|
|
||||||
|
it('larger', () => test(
|
||||||
|
['A', 'B'],
|
||||||
|
['A', 'B', 'C'],
|
||||||
|
false
|
||||||
|
));
|
||||||
|
|
||||||
|
it('smaller', () => test(
|
||||||
|
['A', 'B', 'C'],
|
||||||
|
['A', 'B'],
|
||||||
|
false
|
||||||
|
));
|
||||||
|
});
|
||||||
@ -12,20 +12,13 @@ import { createTrie } from './trie';
|
|||||||
import { pack, unpackFirst, unpackSecond } from './bitwise';
|
import { pack, unpackFirst, unpackSecond } from './bitwise';
|
||||||
import { asyncWriteToStream } from './async-write-to-stream';
|
import { asyncWriteToStream } from './async-write-to-stream';
|
||||||
|
|
||||||
export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
|
export const fileEqual = async (linesA: string[], source: AsyncIterable<string>): Promise<boolean> => {
|
||||||
let isEqual = true;
|
if (linesA.length === 0) {
|
||||||
const linesALen = linesA.length;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(filePath)) {
|
|
||||||
console.log(`${filePath} does not exists, writing...`);
|
|
||||||
isEqual = false;
|
|
||||||
} else if (linesALen === 0) {
|
|
||||||
console.log(`Nothing to write to ${filePath}...`);
|
|
||||||
isEqual = false;
|
|
||||||
} else {
|
|
||||||
isEqual = await span.traceChildAsync(`comparing ${filePath}`, async () => {
|
|
||||||
let index = 0;
|
let index = 0;
|
||||||
for await (const lineB of readFileByLine(filePath)) {
|
for await (const lineB of source) {
|
||||||
const lineA = linesA[index] as string | undefined;
|
const lineA = linesA[index] as string | undefined;
|
||||||
index++;
|
index++;
|
||||||
|
|
||||||
@ -53,13 +46,23 @@ export async function compareAndWriteFile(span: Span, linesA: string[], filePath
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index !== linesALen) {
|
if (index !== linesA.length) {
|
||||||
// The file becomes larger
|
// The file becomes larger
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
};
|
||||||
|
|
||||||
|
export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
|
||||||
|
let isEqual = true;
|
||||||
|
const linesALen = linesA.length;
|
||||||
|
|
||||||
|
if (fs.existsSync(filePath)) {
|
||||||
|
isEqual = await fileEqual(linesA, readFileByLine(filePath));
|
||||||
|
} else {
|
||||||
|
console.log(`${filePath} does not exists, writing...`);
|
||||||
|
isEqual = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isEqual) {
|
if (isEqual) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user