mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| "use strict";
 | |
| 
 | |
| const should = require("should");
 | |
| const compareLocations = require("../lib/compareLocations");
 | |
| const createPosition = function(overides) {
 | |
| 	return Object.assign({
 | |
| 		line: 10,
 | |
| 		column: 5
 | |
| 	}, overides);
 | |
| };
 | |
| 
 | |
| const createLocation = function(start, end, index) {
 | |
| 	return {
 | |
| 		start: createPosition(start),
 | |
| 		end: createPosition(end),
 | |
| 		index: index || 3
 | |
| 	};
 | |
| };
 | |
| 
 | |
| describe("compareLocations", () => {
 | |
| 	describe("string location comparison", () => {
 | |
| 		it("returns -1 when the first string comes before the second string", () =>
 | |
| 			compareLocations("alpha", "beta").should.be.exactly(-1));
 | |
| 
 | |
| 		it("returns 1 when the first string comes after the second string", () =>
 | |
| 			compareLocations("beta", "alpha").should.be.exactly(1));
 | |
| 
 | |
| 		it("returns 0 when the first string is the same as the second string", () =>
 | |
| 			compareLocations("charlie", "charlie").should.be.exactly(0));
 | |
| 	});
 | |
| 
 | |
| 	describe("object location comparison", () => {
 | |
| 		let a, b;
 | |
| 
 | |
| 		describe("location line number", () => {
 | |
| 			beforeEach(() => {
 | |
| 				a = createLocation({
 | |
| 					line: 10
 | |
| 				});
 | |
| 				b = createLocation({
 | |
| 					line: 20
 | |
| 				});
 | |
| 			});
 | |
| 
 | |
| 			it("returns -1 when the first location line number comes before the second location line number", () => {
 | |
| 				return compareLocations(a, b).should.be.exactly(-1);
 | |
| 			});
 | |
| 
 | |
| 			it("returns 1 when the first location line number comes after the second location line number", () =>
 | |
| 				compareLocations(b, a).should.be.exactly(1));
 | |
| 		});
 | |
| 
 | |
| 		describe("location column number", () => {
 | |
| 			beforeEach(() => {
 | |
| 				a = createLocation({
 | |
| 					column: 10
 | |
| 				});
 | |
| 				b = createLocation({
 | |
| 					column: 20
 | |
| 				});
 | |
| 			});
 | |
| 
 | |
| 			it("returns -1 when the first location column number comes before the second location column number", () =>
 | |
| 				compareLocations(a, b).should.be.exactly(-1));
 | |
| 
 | |
| 			it("returns 1 when the first location column number comes after the second location column number", () =>
 | |
| 				compareLocations(b, a).should.be.exactly(1));
 | |
| 		});
 | |
| 
 | |
| 		describe("location index number", () => {
 | |
| 			beforeEach(() => {
 | |
| 				a = createLocation(null, null, 10);
 | |
| 				b = createLocation(null, null, 20);
 | |
| 			});
 | |
| 
 | |
| 			it("returns -1 when the first location index number comes before the second location index number", () =>
 | |
| 				compareLocations(a, b).should.be.exactly(-1));
 | |
| 
 | |
| 			it("returns 1 when the first location index number comes after the second location index number", () =>
 | |
| 				compareLocations(b, a).should.be.exactly(1));
 | |
| 		});
 | |
| 
 | |
| 		describe("same location", () => {
 | |
| 			beforeEach(() => {
 | |
| 				a = createLocation();
 | |
| 				b = createLocation();
 | |
| 			});
 | |
| 
 | |
| 			it("returns 0", () => {
 | |
| 				compareLocations(a, b).should.be.exactly(0);
 | |
| 			});
 | |
| 		});
 | |
| 	});
 | |
| 
 | |
| 	describe("string and object location comparison", () => {
 | |
| 		it("returns 1 when the first parameter is a string and the second parameter is an object", () =>
 | |
| 			compareLocations("alpha", createLocation()).should.be.exactly(1));
 | |
| 
 | |
| 		it("returns -1 when the first parameter is an object and the second parameter is a string", () =>
 | |
| 			compareLocations(createLocation(), "alpha").should.be.exactly(-1));
 | |
| 	});
 | |
| 
 | |
| 	describe("unknown location type comparison", () => {
 | |
| 		it("returns 0 when the first parameter is an object and the second parameter is a number", () =>
 | |
| 			compareLocations(createLocation(), 123).should.be.exactly(0));
 | |
| 
 | |
| 		it("returns undefined when the first parameter is a number and the second parameter is an object", () =>
 | |
| 			should(compareLocations(123, createLocation())).be.undefined());
 | |
| 
 | |
| 		it("returns 0 when the first parameter is a string and the second parameter is a number", () =>
 | |
| 			compareLocations("alpha", 123).should.be.exactly(0));
 | |
| 
 | |
| 		it("returns undefined when the first parameter is a number and the second parameter is a string", () =>
 | |
| 			should(compareLocations(123, "alpha")).be.undefined());
 | |
| 
 | |
| 		it("returns undefined when both the first parameter and the second parameter is a number", () =>
 | |
| 			should(compareLocations(123, 456)).be.undefined());
 | |
| 
 | |
| 	});
 | |
| });
 |