| 
									
										
										
										
											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
										 |  |  | }); |