mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-14 18:20:35 +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 { asyncWriteToStream } from './async-write-to-stream';
|
||||
|
||||
export async function compareAndWriteFile(span: Span, linesA: string[], filePath: string) {
|
||||
let isEqual = true;
|
||||
const linesALen = linesA.length;
|
||||
export const fileEqual = async (linesA: string[], source: AsyncIterable<string>): Promise<boolean> => {
|
||||
if (linesA.length === 0) {
|
||||
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;
|
||||
for await (const lineB of readFileByLine(filePath)) {
|
||||
for await (const lineB of source) {
|
||||
const lineA = linesA[index] as string | undefined;
|
||||
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
|
||||
return false;
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user