2025-07-16 22:29:28 +08:00
|
|
|
"use strict";
|
|
|
|
|
2024-10-05 23:52:05 +08:00
|
|
|
const fs = require("fs");
|
|
|
|
const path = require("path");
|
2021-09-07 15:08:58 +08:00
|
|
|
const walkCssTokens = require("../lib/css/walkCssTokens");
|
|
|
|
|
|
|
|
describe("walkCssTokens", () => {
|
|
|
|
const test = (name, content, fn) => {
|
2024-10-05 23:52:05 +08:00
|
|
|
it(`should parse ${name}`, () => {
|
2021-09-07 15:08:58 +08:00
|
|
|
const results = [];
|
2024-11-07 03:18:34 +08:00
|
|
|
walkCssTokens(content, 0, {
|
2024-10-16 21:14:48 +08:00
|
|
|
comment: (input, s, e) => {
|
|
|
|
results.push(["comment", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2021-09-07 15:08:58 +08:00
|
|
|
url: (input, s, e, cs, ce) => {
|
|
|
|
results.push(["url", input.slice(s, e), input.slice(cs, ce)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
leftCurlyBracket: (input, s, e) => {
|
|
|
|
results.push(["leftCurlyBracket", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
rightCurlyBracket: (input, s, e) => {
|
|
|
|
results.push(["rightCurlyBracket", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
leftParenthesis: (input, s, e) => {
|
|
|
|
results.push(["leftParenthesis", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
rightParenthesis: (input, s, e) => {
|
|
|
|
results.push(["rightParenthesis", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
semicolon: (input, s, e) => {
|
|
|
|
results.push(["semicolon", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
comma: (input, s, e) => {
|
|
|
|
results.push(["comma", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2021-12-01 20:27:00 +08:00
|
|
|
atKeyword: (input, s, e) => {
|
|
|
|
results.push(["atKeyword", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2024-10-09 17:09:36 +08:00
|
|
|
colon: (input, s, e) => {
|
|
|
|
results.push(["colon", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
delim: (input, s, e) => {
|
|
|
|
results.push(["delim", input.slice(s, e)]);
|
2021-09-07 15:08:58 +08:00
|
|
|
return e;
|
|
|
|
},
|
|
|
|
identifier: (input, s, e) => {
|
|
|
|
results.push(["identifier", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
2024-10-09 14:21:00 +08:00
|
|
|
hash: (input, s, e, isID) => {
|
|
|
|
results.push(["hash", input.slice(s, e), isID]);
|
2021-09-07 15:08:58 +08:00
|
|
|
return e;
|
2024-10-05 23:52:05 +08:00
|
|
|
},
|
|
|
|
string: (input, s, e) => {
|
|
|
|
results.push(["string", input.slice(s, e)]);
|
|
|
|
return e;
|
|
|
|
},
|
|
|
|
function: (input, s, e) => {
|
|
|
|
results.push(["function", input.slice(s, e)]);
|
|
|
|
return e;
|
2021-09-07 15:08:58 +08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
fn(expect(results));
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2024-10-05 23:52:05 +08:00
|
|
|
const casesPath = path.resolve(__dirname, "./configCases/css/parsing/cases");
|
|
|
|
const tests = fs
|
|
|
|
.readdirSync(casesPath)
|
2025-07-17 00:13:14 +08:00
|
|
|
.filter((test) => /\.css/.test(test))
|
|
|
|
.map((item) => [
|
2024-10-05 23:52:05 +08:00
|
|
|
item,
|
2025-07-02 20:10:54 +08:00
|
|
|
fs.readFileSync(path.resolve(casesPath, item), "utf8")
|
2024-10-05 23:52:05 +08:00
|
|
|
]);
|
2021-12-01 20:27:00 +08:00
|
|
|
|
2024-10-05 23:52:05 +08:00
|
|
|
for (const [name, code] of tests) {
|
2025-07-17 00:13:14 +08:00
|
|
|
test(name, code, (e) => e.toMatchSnapshot());
|
2024-10-05 23:52:05 +08:00
|
|
|
}
|
2021-09-07 15:08:58 +08:00
|
|
|
});
|