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