| 
									
										
										
										
											2018-01-19 00:14:19 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const SideEffectsFlagPlugin = require("../lib/optimize/SideEffectsFlagPlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe("SideEffectsFlagPlugin", () => { | 
					
						
							|  |  |  | 	it("should assume true", () => { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./foo/bar.js", | 
					
						
							|  |  |  | 				undefined, | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(true); | 
					
						
							| 
									
										
										
										
											2018-01-19 00:14:19 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	it("should understand boolean values", () => { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./foo/bar.js", | 
					
						
							|  |  |  | 				true, | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./foo/bar.js", | 
					
						
							|  |  |  | 				false, | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(false); | 
					
						
							| 
									
										
										
										
											2018-01-19 00:14:19 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	it("should understand a glob", () => { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"./src/**/*.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./x.js", | 
					
						
							|  |  |  | 				"./src/**/*.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(false); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"./**/src/x/y/z.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							|  |  |  | 				"**.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"./src/**/z.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"./**/x/**/z.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"./**/src/**", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							|  |  |  | 				"./**/src/*", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(false); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							|  |  |  | 				"*.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"x/**/z.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 		).toBe(false); | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"src/**/z.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"src/**/{x,y,z}.js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							|  |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 				"src/**/[x-z].js", | 
					
						
							|  |  |  | 				new Map() | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 			) | 
					
						
							|  |  |  | 		).toBe(true); | 
					
						
							| 
									
										
										
										
											2018-01-19 00:14:19 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	it("should understand arrays", () => { | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		const array = ["./src/**/*.js", "./dirty.js"]; | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects( | 
					
						
							|  |  |  | 				"./src/x/y/z.js", | 
					
						
							|  |  |  | 				array, | 
					
						
							|  |  |  | 				new Map() | 
					
						
							|  |  |  | 			) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects("./dirty.js", array, new Map()) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(true); | 
					
						
							|  |  |  | 		expect( | 
					
						
							| 
									
										
										
										
											2019-05-17 03:12:59 +08:00
										 |  |  | 			SideEffectsFlagPlugin.moduleHasSideEffects("./clean.js", array, new Map()) | 
					
						
							| 
									
										
										
										
											2018-02-25 18:46:17 +08:00
										 |  |  | 		).toBe(false); | 
					
						
							| 
									
										
										
										
											2018-01-19 00:14:19 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }); |