| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | const should = require("should"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const RuleSet = require("../lib/RuleSet"); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function match(ruleSet, resource) { | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 	const result = ruleSet.exec({ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		resource: resource | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 	return result.filter((r) => { | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		return r.type === "use"; | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 	}).map(r => r.value).map(r => { | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		if(!r.options) | 
					
						
							|  |  |  | 			return r.loader; | 
					
						
							|  |  |  | 		if(typeof r.options === "string") | 
					
						
							|  |  |  | 			return r.loader + "?" + r.options; | 
					
						
							|  |  |  | 		return r.loader + "?" + JSON.stringify(r.options); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | describe("RuleSet", () => { | 
					
						
							|  |  |  | 	it("should create RuleSet with a blank array", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		(loader.rules).should.eql([]); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 	it("should create RuleSet and match with empty array", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "something")).should.eql([]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 	it("should not match with loaders array", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "something")).should.eql([]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should match with regex", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should match with string", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			test: "style.css", | 
					
						
							|  |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should match with function", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: function(str) { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				return str === "style.css"; | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should throw if invalid test", () => { | 
					
						
							|  |  |  | 		should.throws(() => { | 
					
						
							|  |  |  | 			const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 				test: { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 					invalid: "test" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 				}, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}, /Unexcepted property invalid in condition/); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should accept multiple test array that all match", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: [ | 
					
						
							|  |  |  | 				/style.css/, | 
					
						
							|  |  |  | 				/yle.css/ | 
					
						
							|  |  |  | 			], | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should accept multiple test array that not all match", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: [ | 
					
						
							|  |  |  | 				/style.css/, | 
					
						
							|  |  |  | 				/something.css/ | 
					
						
							|  |  |  | 			], | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should not match if include does not match", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			include: /output.css/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql([]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should match if include matches", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			include: /style.css/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should not match if exclude matches", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			exclude: /style.css/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql([]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should match if exclude does not match", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			exclude: /output.css/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work if a loader is applied to all files", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 		(match(loader, "scripts.js")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loader as string", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loader as array", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: ["css"] | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loaders as string", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loaders: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loaders as array", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loaders: ["css"] | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should throw if using loaders with non-string or array", () => { | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		should.throws(function() { | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 			const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 				test: /\.css$/, | 
					
						
							|  |  |  | 				loaders: { | 
					
						
							|  |  |  | 					someObj: true | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 		}, /No loader specified/); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loader with inline query", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css?modules=1" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css?modules=1"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loader with string query", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css", | 
					
						
							|  |  |  | 			query: "modules=1" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css?modules=1"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using loader with object query", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loader: "css", | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			query: { | 
					
						
							|  |  |  | 				modules: 1 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css?{\"modules\":1}"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using array loaders with basic object notation", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			loaders: [{ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loader: "css" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}] | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should throw if using array loaders with object notation without specifying a loader", () => { | 
					
						
							|  |  |  | 		should.throws(() => { | 
					
						
							|  |  |  | 			const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 				test: /\.css$/, | 
					
						
							|  |  |  | 				loaders: [{ | 
					
						
							|  |  |  | 					stuff: 1 | 
					
						
							|  |  |  | 				}] | 
					
						
							|  |  |  | 			}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			match(loader, "style.css"); | 
					
						
							|  |  |  | 		}, /No loader specified/); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using array loaders with object notation", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			loaders: [{ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loader: "css", | 
					
						
							|  |  |  | 				query: "modules=1" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}] | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["css?modules=1"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using multiple array loaders with object notation", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			loaders: [{ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loader: "style", | 
					
						
							|  |  |  | 				query: "filesize=1000" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}, { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loader: "css", | 
					
						
							|  |  |  | 				query: "modules=1" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}] | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["style?filesize=1000", "css?modules=1"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work with using string multiple loaders", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loaders: "style?filesize=1000!css?modules=1" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["style?filesize=1000", "css?modules=1"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should throw if using array loaders with a single legacy", () => { | 
					
						
							|  |  |  | 		should.throws(() => { | 
					
						
							|  |  |  | 			const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 				test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loaders: ["style-loader", "css-loader"], | 
					
						
							|  |  |  | 				query: "modules=1" | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 		}, /options\/query cannot be used with loaders/); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work when using array loaders", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			loaders: ["style-loader", "css-loader"] | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["style-loader", "css-loader"]); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work when using an array of functions returning a loader", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			use: [ | 
					
						
							|  |  |  | 				function(data) { | 
					
						
							| 
									
										
										
										
											2016-12-23 02:20:50 +08:00
										 |  |  | 					return { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 						loader: "style-loader" | 
					
						
							|  |  |  | 					}; | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				function(data) { | 
					
						
							| 
									
										
										
										
											2016-12-23 02:20:50 +08:00
										 |  |  | 					return { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 						loader: "css-loader" | 
					
						
							|  |  |  | 					}; | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			] | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["style-loader", "css-loader"]); | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work when using an array of either functions or strings returning a loader", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			use: [ | 
					
						
							|  |  |  | 				"style-loader", | 
					
						
							|  |  |  | 				function(data) { | 
					
						
							| 
									
										
										
										
											2016-12-23 02:20:50 +08:00
										 |  |  | 					return { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 						loader: "css-loader" | 
					
						
							|  |  |  | 					}; | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			] | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["style-loader", "css-loader"]); | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should work when using an array of functions returning either a loader obejct or loader name string", () => { | 
					
						
							|  |  |  | 		const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 			test: /\.css$/, | 
					
						
							|  |  |  | 			use: [ | 
					
						
							|  |  |  | 				function(data) { | 
					
						
							| 
									
										
										
										
											2017-11-15 21:08:11 +08:00
										 |  |  | 					return "style-loader"; | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 				function(data) { | 
					
						
							| 
									
										
										
										
											2016-12-23 02:20:50 +08:00
										 |  |  | 					return { | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 						loader: "css-loader" | 
					
						
							|  |  |  | 					}; | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			] | 
					
						
							|  |  |  | 		}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 		(match(loader, "style.css")).should.eql(["style-loader", "css-loader"]); | 
					
						
							| 
									
										
										
										
											2016-12-23 02:14:54 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	it("should throw if using array loaders with invalid type", () => { | 
					
						
							|  |  |  | 		should.throws(() => { | 
					
						
							|  |  |  | 			const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 				test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				loaders: ["style-loader", "css-loader", 5], | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 			}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 			(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 		}, /No loader specified/); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	describe("when exclude array holds an undefined item", () => { | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 		function errorHasContext(err) { | 
					
						
							| 
									
										
										
										
											2016-10-27 03:09:27 +08:00
										 |  |  | 			if(/Expected condition but got falsy value/.test(err) && | 
					
						
							|  |  |  | 				/test/.test(err) && | 
					
						
							|  |  |  | 				/include/.test(err) && | 
					
						
							|  |  |  | 				/exclude/.test(err) && | 
					
						
							|  |  |  | 				/node_modules/.test(err) && | 
					
						
							|  |  |  | 				/undefined/.test(err)) { | 
					
						
							| 
									
										
										
										
											2016-10-23 02:20:22 +08:00
										 |  |  | 				return true; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		it("should throw with context", () => { | 
					
						
							|  |  |  | 			should.throws(() => { | 
					
						
							|  |  |  | 				const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 					test: /\.css$/, | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 					loader: "css", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 					include: [ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 						"src", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 					], | 
					
						
							|  |  |  | 					exclude: [ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 						"node_modules", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 						undefined, | 
					
						
							|  |  |  | 					], | 
					
						
							|  |  |  | 				}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 			}, errorHasContext); | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 		it("in resource should throw with context", () => { | 
					
						
							|  |  |  | 			should.throws(() => { | 
					
						
							|  |  |  | 				const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 					resource: { | 
					
						
							|  |  |  | 						test: /\.css$/, | 
					
						
							|  |  |  | 						include: [ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 							"src", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 						], | 
					
						
							|  |  |  | 						exclude: [ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 							"node_modules", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 							undefined, | 
					
						
							|  |  |  | 						], | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 				}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 			}, errorHasContext); | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-01-18 22:59:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		it("in issuer should throw with context", () => { | 
					
						
							|  |  |  | 			should.throws(() => { | 
					
						
							|  |  |  | 				const loader = new RuleSet([{ | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 					issuer: { | 
					
						
							|  |  |  | 						test: /\.css$/, | 
					
						
							|  |  |  | 						include: [ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 							"src", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 						], | 
					
						
							|  |  |  | 						exclude: [ | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 							"node_modules", | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 							undefined, | 
					
						
							|  |  |  | 						], | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 				}]); | 
					
						
							| 
									
										
										
										
											2017-01-18 05:26:38 +08:00
										 |  |  | 				(match(loader, "style.css")).should.eql(["css"]); | 
					
						
							|  |  |  | 			}, errorHasContext); | 
					
						
							| 
									
										
										
										
											2016-10-23 07:46:15 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-10-23 02:20:22 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | }); |