mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
	
	
		
			167 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			167 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /* globals describe, it, beforeEach */ | ||
|  | "use strict"; | ||
|  | 
 | ||
|  | const should = require("should"); | ||
|  | const sinon = require("sinon"); | ||
|  | const Chunk = require("../lib/Chunk"); | ||
|  | 
 | ||
|  | describe("Chunk", () => { | ||
|  | 	let ChunkInstance; | ||
|  | 
 | ||
|  | 	beforeEach(() => ChunkInstance = new Chunk("chunk-test", "module-test", "loc-test")); | ||
|  | 
 | ||
|  | 	it("should have debugId more than 999", () => should(ChunkInstance.debugId).be.above(999)); | ||
|  | 
 | ||
|  | 	it("returns a string with modules information", () => should(ChunkInstance.toString()).be.exactly("Chunk[]")); | ||
|  | 
 | ||
|  | 	it("should have origins based in constructor information", () => | ||
|  | 		should(ChunkInstance.origins[0]).be.eql({ | ||
|  | 			module: "module-test", | ||
|  | 			loc: "loc-test", | ||
|  | 			name: "chunk-test" | ||
|  | 		})); | ||
|  | 
 | ||
|  | 	it("should not be the initial instance", () => should(ChunkInstance.isInitial()).be.false()); | ||
|  | 
 | ||
|  | 	describe("entry", () => { | ||
|  | 		it("returns an error if get entry", () => | ||
|  | 			should(() => { | ||
|  | 				ChunkInstance.entry; | ||
|  | 			}).throw("Chunk.entry was removed. Use hasRuntime()")); | ||
|  | 
 | ||
|  | 		it("returns an error if set an entry", () => | ||
|  | 			should(() => { | ||
|  | 				ChunkInstance.entry = 10; | ||
|  | 			}).throw("Chunk.entry was removed. Use hasRuntime()")); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("initial", () => { | ||
|  | 		it("returns an error if get initial", () => | ||
|  | 			should(() => { | ||
|  | 				ChunkInstance.initial; | ||
|  | 			}).throw("Chunk.initial was removed. Use isInitial()")); | ||
|  | 
 | ||
|  | 		it("returns an error if set an initial", () => | ||
|  | 			should(() => { | ||
|  | 				ChunkInstance.initial = 10; | ||
|  | 			}).throw("Chunk.initial was removed. Use isInitial()")); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("hasRuntime", () => { | ||
|  | 		it("returns false", () => should(ChunkInstance.hasRuntime()).be.false()); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("isEmpty", () => { | ||
|  | 		it("should NOT have any module by default", () => should(ChunkInstance.isEmpty()).be.true()); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("size", () => { | ||
|  | 		it("should NOT have any module by default", () => | ||
|  | 			should(ChunkInstance.size({ | ||
|  | 				chunkOverhead: 10, | ||
|  | 				entryChunkMultiplicator: 2 | ||
|  | 			})).be.exactly(10)); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("checkConstraints", () => { | ||
|  | 		it("throws an error", () => | ||
|  | 			should(() => { | ||
|  | 				ChunkInstance.checkConstraints(); | ||
|  | 			}).not.throw(/checkConstraints/)); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("canBeIntegrated", () => { | ||
|  | 		it("returns `false` if other object is initial", () => { | ||
|  | 			const other = { | ||
|  | 				isInitial: () => true | ||
|  | 			}; | ||
|  | 			should(ChunkInstance.canBeIntegrated(other)).be.false(); | ||
|  | 		}); | ||
|  | 
 | ||
|  | 		it("returns `true` if other object and chunk instance are NOT initial", () => { | ||
|  | 			const other = { | ||
|  | 				isInitial: () => false | ||
|  | 			}; | ||
|  | 			should(ChunkInstance.canBeIntegrated(other)).be.true(); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("removeModule", function() { | ||
|  | 		let module; | ||
|  | 		let removeChunkSpy; | ||
|  | 		beforeEach(function() { | ||
|  | 			removeChunkSpy = sinon.spy(); | ||
|  | 			module = { | ||
|  | 				removeChunk: removeChunkSpy | ||
|  | 			}; | ||
|  | 		}); | ||
|  | 		describe("and the chunk does not contain this module", function() { | ||
|  | 			it("returns false", function() { | ||
|  | 				ChunkInstance.removeModule(module).should.eql(false); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 		describe("and the chunk does contain this module", function() { | ||
|  | 			beforeEach(function() { | ||
|  | 				ChunkInstance._modules = new Set([module]); | ||
|  | 			}); | ||
|  | 			it("calls module.removeChunk with itself and returns true", function() { | ||
|  | 				ChunkInstance.removeModule(module).should.eql(true); | ||
|  | 				removeChunkSpy.callCount.should.eql(1); | ||
|  | 				removeChunkSpy.args[0][0].should.eql(ChunkInstance); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("removeChunk", function() { | ||
|  | 		let chunk; | ||
|  | 		let removeParentSpy; | ||
|  | 		beforeEach(function() { | ||
|  | 			removeParentSpy = sinon.spy(); | ||
|  | 			chunk = { | ||
|  | 				removeParent: removeParentSpy | ||
|  | 			}; | ||
|  | 		}); | ||
|  | 		describe("and the chunk does not contain this chunk", function() { | ||
|  | 			it("returns false", function() { | ||
|  | 				ChunkInstance.removeChunk(chunk).should.eql(false); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 		describe("and the chunk does contain this module", function() { | ||
|  | 			beforeEach(function() { | ||
|  | 				ChunkInstance._chunks = new Set([chunk]); | ||
|  | 			}); | ||
|  | 			it("calls module.removeChunk with itself and returns true", function() { | ||
|  | 				ChunkInstance.removeChunk(chunk).should.eql(true); | ||
|  | 				removeParentSpy.callCount.should.eql(1); | ||
|  | 				removeParentSpy.args[0][0].should.eql(ChunkInstance); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | 
 | ||
|  | 	describe("removeParent", function() { | ||
|  | 		let chunk; | ||
|  | 		let removeChunkSpy; | ||
|  | 		beforeEach(function() { | ||
|  | 			removeChunkSpy = sinon.spy(); | ||
|  | 			chunk = { | ||
|  | 				removeChunk: removeChunkSpy | ||
|  | 			}; | ||
|  | 		}); | ||
|  | 		describe("and the chunk does not contain this chunk", function() { | ||
|  | 			it("returns false", function() { | ||
|  | 				ChunkInstance.removeParent(chunk).should.eql(false); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 		describe("and the chunk does contain this module", function() { | ||
|  | 			beforeEach(function() { | ||
|  | 				ChunkInstance.parents = [chunk]; | ||
|  | 			}); | ||
|  | 			it("calls module.removeChunk with itself and returns true", function() { | ||
|  | 				ChunkInstance.removeParent(chunk).should.eql(true); | ||
|  | 				removeChunkSpy.callCount.should.eql(1); | ||
|  | 				removeChunkSpy.args[0][0].should.eql(ChunkInstance); | ||
|  | 			}); | ||
|  | 		}); | ||
|  | 	}); | ||
|  | }); |