| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | const path = require("path"); | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | const fs = require("graceful-fs"); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | const rimraf = require("rimraf"); | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 21:26:35 +08:00
										 |  |  | const webpack = require(".."); | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | const WebpackOptionsDefaulter = require("../lib/WebpackOptionsDefaulter"); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | let fixtureCount = 0; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | describe("Compiler (caching)", () => { | 
					
						
							|  |  |  | 	jest.setTimeout(15000); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	function compile(entry, options, callback) { | 
					
						
							| 
									
										
										
										
											2018-01-03 23:26:55 +08:00
										 |  |  | 		options.mode = "none"; | 
					
						
							| 
									
										
										
										
											2017-09-14 15:22:29 +08:00
										 |  |  | 		options = new WebpackOptionsDefaulter().process(options); | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 		options.cache = true; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		options.entry = entry; | 
					
						
							| 
									
										
										
										
											2018-07-15 04:17:55 +08:00
										 |  |  | 		options.optimization.moduleIds = "natural"; | 
					
						
							| 
									
										
										
										
											2017-12-19 04:18:07 +08:00
										 |  |  | 		options.optimization.minimize = false; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		options.context = path.join(__dirname, "fixtures"); | 
					
						
							| 
									
										
										
										
											2017-02-02 19:36:15 +08:00
										 |  |  | 		options.output.path = "/"; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		options.output.filename = "bundle.js"; | 
					
						
							|  |  |  | 		options.output.pathinfo = true; | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		const logs = { | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 			mkdir: [], | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			writeFile: [] | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		const c = webpack(options); | 
					
						
							|  |  |  | 		const files = {}; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		c.outputFileSystem = { | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | 			mkdir(path, callback) { | 
					
						
							|  |  |  | 				logs.mkdir.push(path); | 
					
						
							|  |  |  | 				const err = new Error(); | 
					
						
							|  |  |  | 				err.code = "EEXIST"; | 
					
						
							|  |  |  | 				callback(err); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 			writeFile(name, content, callback) { | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 				logs.writeFile.push(name, content); | 
					
						
							|  |  |  | 				files[name] = content.toString("utf-8"); | 
					
						
							|  |  |  | 				callback(); | 
					
						
							| 
									
										
										
										
											2019-11-04 18:40:36 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 			stat(path, callback) { | 
					
						
							|  |  |  | 				callback(new Error("ENOENT")); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		c.hooks.compilation.tap( | 
					
						
							|  |  |  | 			"CompilerCachingTest", | 
					
						
							|  |  |  | 			compilation => (compilation.bail = true) | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		let compilerIteration = 1; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-14 19:03:24 +08:00
										 |  |  | 		function runCompiler(options, callback) { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			if (typeof options === "function") { | 
					
						
							| 
									
										
										
										
											2016-12-14 19:03:24 +08:00
										 |  |  | 				callback = options; | 
					
						
							|  |  |  | 				options = {}; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 			c.run((err, stats) => { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 				if (err) throw err; | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 				expect(typeof stats).toBe("object"); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 				stats = stats.toJson({ | 
					
						
							|  |  |  | 					modules: true, | 
					
						
							|  |  |  | 					reasons: true | 
					
						
							|  |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 				expect(typeof stats).toBe("object"); | 
					
						
							|  |  |  | 				expect(stats).toHaveProperty("errors"); | 
					
						
							|  |  |  | 				expect(Array.isArray(stats.errors)).toBe(true); | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 				if (options.expectErrors) { | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 					expect(stats.errors).toHaveLength(options.expectErrors); | 
					
						
							| 
									
										
										
										
											2016-12-14 19:03:24 +08:00
										 |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 					if (stats.errors.length > 0) { | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 						expect(typeof stats.errors[0]).toBe("string"); | 
					
						
							| 
									
										
										
										
											2016-12-14 19:03:24 +08:00
										 |  |  | 						throw new Error(stats.errors[0]); | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				stats.logs = logs; | 
					
						
							|  |  |  | 				callback(stats, files, compilerIteration++); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		runCompiler(callback); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return { | 
					
						
							|  |  |  | 			compilerInstance: c, | 
					
						
							| 
									
										
										
										
											2017-12-20 23:51:24 +08:00
										 |  |  | 			runAgain: runCompiler | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		}; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 	const tempFixturePath = path.join( | 
					
						
							|  |  |  | 		__dirname, | 
					
						
							|  |  |  | 		"fixtures", | 
					
						
							|  |  |  | 		"temp-cache-fixture" | 
					
						
							|  |  |  | 	); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	function cleanup() { | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		rimraf.sync(`${tempFixturePath}-*`); | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 	beforeAll(cleanup); | 
					
						
							|  |  |  | 	afterAll(cleanup); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	function createTempFixture() { | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		const fixturePath = `${tempFixturePath}-${fixtureCount}`; | 
					
						
							|  |  |  | 		const aFilepath = path.join(fixturePath, "a.js"); | 
					
						
							|  |  |  | 		const cFilepath = path.join(fixturePath, "c.js"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		// Remove previous copy if present
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		rimraf.sync(fixturePath); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		// Copy over file since we"ll be modifying some of them
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		fs.mkdirSync(fixturePath); | 
					
						
							| 
									
										
										
										
											2018-05-29 22:14:16 +08:00
										 |  |  | 		fs.createReadStream(path.join(__dirname, "fixtures", "a.js")).pipe( | 
					
						
							|  |  |  | 			fs.createWriteStream(aFilepath) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		fs.createReadStream(path.join(__dirname, "fixtures", "c.js")).pipe( | 
					
						
							|  |  |  | 			fs.createWriteStream(cFilepath) | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		fixtureCount++; | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 		return { | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 			rootPath: fixturePath, | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 			aFilepath: aFilepath, | 
					
						
							|  |  |  | 			cFilepath: cFilepath | 
					
						
							|  |  |  | 		}; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 	it("should cache single file (with manual 1s wait) ", done => { | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		const options = {}; | 
					
						
							|  |  |  | 		const tempFixture = createTempFixture(); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		const helper = compile(tempFixture.cFilepath, options, (stats, files) => { | 
					
						
							|  |  |  | 			// Not cached the first time
 | 
					
						
							|  |  |  | 			expect(stats.assets[0].name).toBe("bundle.js"); | 
					
						
							|  |  |  | 			expect(stats.assets[0].emitted).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 				// Cached the second run
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 				expect(stats.assets[0].name).toBe("bundle.js"); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				expect(stats.assets[0].emitted).toBe(false); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				const aContent = fs | 
					
						
							|  |  |  | 					.readFileSync(tempFixture.aFilepath) | 
					
						
							|  |  |  | 					.toString() | 
					
						
							|  |  |  | 					.replace("This is a", "This is a MODIFIED"); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				setTimeout(() => { | 
					
						
							|  |  |  | 					fs.writeFileSync(tempFixture.aFilepath, aContent); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 						// Cached the third run
 | 
					
						
							|  |  |  | 						expect(stats.assets[0].name).toBe("bundle.js"); | 
					
						
							|  |  |  | 						expect(stats.assets[0].emitted).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 						done(); | 
					
						
							|  |  |  | 					}); | 
					
						
							|  |  |  | 				}, 1100); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 	it("should cache single file (even with no timeout) ", done => { | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		const options = {}; | 
					
						
							|  |  |  | 		const tempFixture = createTempFixture(); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		const helper = compile(tempFixture.cFilepath, options, (stats, files) => { | 
					
						
							|  |  |  | 			// Not cached the first time
 | 
					
						
							|  |  |  | 			expect(stats.assets[0].name).toBe("bundle.js"); | 
					
						
							|  |  |  | 			expect(stats.assets[0].emitted).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 			helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 				// Cached the second run
 | 
					
						
							|  |  |  | 				expect(stats.assets[0].name).toBe("bundle.js"); | 
					
						
							|  |  |  | 				expect(stats.assets[0].emitted).toBe(false); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				expect(files["/bundle.js"]).toMatch("This is a"); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				const aContent = fs | 
					
						
							|  |  |  | 					.readFileSync(tempFixture.aFilepath) | 
					
						
							|  |  |  | 					.toString() | 
					
						
							|  |  |  | 					.replace("This is a", "This is a MODIFIED"); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				fs.writeFileSync(tempFixture.aFilepath, aContent); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 					// Cached the third run
 | 
					
						
							|  |  |  | 					expect(stats.assets[0].name).toBe("bundle.js"); | 
					
						
							|  |  |  | 					expect(stats.assets[0].emitted).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					expect(files["/bundle.js"]).toMatch("This is a MODIFIED"); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					done(); | 
					
						
							| 
									
										
										
										
											2016-05-07 01:42:06 +08:00
										 |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 	it("should only build when modified (with manual 2s wait)", done => { | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		const options = {}; | 
					
						
							|  |  |  | 		const tempFixture = createTempFixture(); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		const helper = compile(tempFixture.cFilepath, options, (stats, files) => { | 
					
						
							|  |  |  | 			// Built the first time
 | 
					
						
							|  |  |  | 			expect(stats.modules[0].name).toMatch("c.js"); | 
					
						
							|  |  |  | 			expect(stats.modules[0].built).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 			expect(stats.modules[1].name).toMatch("a.js"); | 
					
						
							|  |  |  | 			expect(stats.modules[1].built).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 			setTimeout(() => { | 
					
						
							|  |  |  | 				helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 					// Not built when cached the second run
 | 
					
						
							|  |  |  | 					expect(stats.modules[0].name).toMatch("c.js"); | 
					
						
							|  |  |  | 					// expect(stats.modules[0].built).toBe(false);
 | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					expect(stats.modules[1].name).toMatch("a.js"); | 
					
						
							|  |  |  | 					// expect(stats.modules[1].built).toBe(false);
 | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					const aContent = fs | 
					
						
							|  |  |  | 						.readFileSync(tempFixture.aFilepath) | 
					
						
							|  |  |  | 						.toString() | 
					
						
							|  |  |  | 						.replace("This is a", "This is a MODIFIED"); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					setTimeout(() => { | 
					
						
							|  |  |  | 						fs.writeFileSync(tempFixture.aFilepath, aContent); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 						helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 							// And only a.js built after it was modified
 | 
					
						
							|  |  |  | 							expect(stats.modules[0].name).toMatch("c.js"); | 
					
						
							|  |  |  | 							expect(stats.modules[0].built).toBe(false); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 							expect(stats.modules[1].name).toMatch("a.js"); | 
					
						
							|  |  |  | 							expect(stats.modules[1].built).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 							done(); | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 					}, 2100); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}, 4100); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 	it("should build when modified (even with no timeout)", done => { | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 		const options = {}; | 
					
						
							|  |  |  | 		const tempFixture = createTempFixture(); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 		const helper = compile(tempFixture.cFilepath, options, (stats, files) => { | 
					
						
							|  |  |  | 			// Built the first time
 | 
					
						
							|  |  |  | 			expect(stats.modules[0].name).toMatch("c.js"); | 
					
						
							|  |  |  | 			expect(stats.modules[0].built).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			expect(stats.modules[1].name).toMatch("a.js"); | 
					
						
							|  |  |  | 			expect(stats.modules[1].built).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			helper.runAgain((stats, files, iteration) => { | 
					
						
							|  |  |  | 				// Not built when cached the second run
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 				expect(stats.modules[0].name).toMatch("c.js"); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				// expect(stats.modules[0].built).toBe(false);
 | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 				expect(stats.modules[1].name).toMatch("a.js"); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 				// expect(stats.modules[1].built).toBe(false);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				const aContent = fs | 
					
						
							|  |  |  | 					.readFileSync(tempFixture.aFilepath) | 
					
						
							|  |  |  | 					.toString() | 
					
						
							|  |  |  | 					.replace("This is a", "This is a MODIFIED"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				fs.writeFileSync(tempFixture.aFilepath, aContent); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 16:23:20 +08:00
										 |  |  | 				helper.runAgain((stats, files, iteration) => { | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					// And only a.js built after it was modified
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 					expect(stats.modules[0].name).toMatch("c.js"); | 
					
						
							|  |  |  | 					// expect(stats.modules[0].built).toBe(false);
 | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-24 23:00:43 +08:00
										 |  |  | 					expect(stats.modules[1].name).toMatch("a.js"); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					expect(stats.modules[1].built).toBe(true); | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 					done(); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2018-04-20 01:10:27 +08:00
										 |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-05-06 19:38:21 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }); |