mirror of https://github.com/webpack/webpack.git
				
				
				
			fix tests and code
This commit is contained in:
		
							parent
							
								
									6478fb9e2a
								
							
						
					
					
						commit
						5c4ffd5b90
					
				| 
						 | 
				
			
			@ -162,7 +162,7 @@ class JsonpMainTemplatePlugin {
 | 
			
		|||
					"script.src = jsonpScriptSrc(chunkId);",
 | 
			
		||||
					crossOriginLoading
 | 
			
		||||
						? Template.asString([
 | 
			
		||||
								"if (script.src.indexOf(window.location.origin)) {",
 | 
			
		||||
								"if (script.src.indexOf(window.location.origin + '/') !== 0) {",
 | 
			
		||||
								Template.indent(
 | 
			
		||||
									`script.crossOrigin = ${JSON.stringify(crossOriginLoading)};`
 | 
			
		||||
								),
 | 
			
		||||
| 
						 | 
				
			
			@ -224,7 +224,7 @@ class JsonpMainTemplatePlugin {
 | 
			
		|||
					"link.href = jsonpScriptSrc(chunkId);",
 | 
			
		||||
					crossOriginLoading
 | 
			
		||||
						? Template.asString([
 | 
			
		||||
								"if (link.href.indexOf(window.location.origin)) {",
 | 
			
		||||
								"if (link.href.indexOf(window.location.origin + '/') !== 0) {",
 | 
			
		||||
								Template.indent(
 | 
			
		||||
									`link.crossOrigin = ${JSON.stringify(crossOriginLoading)};`
 | 
			
		||||
								),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -178,7 +178,14 @@ describe("ConfigTestCases", () => {
 | 
			
		|||
										expect: expect,
 | 
			
		||||
										setTimeout: setTimeout,
 | 
			
		||||
										clearTimeout: clearTimeout,
 | 
			
		||||
										document: new FakeDocument()
 | 
			
		||||
										document: new FakeDocument(),
 | 
			
		||||
										location: {
 | 
			
		||||
											href: "https://test.cases/path/index.html",
 | 
			
		||||
											origin: "https://test.cases",
 | 
			
		||||
											toString() {
 | 
			
		||||
												return "https://test.cases/path/index.html";
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
									};
 | 
			
		||||
 | 
			
		||||
									function _require(currentDirectory, module) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +0,0 @@
 | 
			
		|||
it("should load script without crossorigin attribute", function(done) {
 | 
			
		||||
	import("./empty?a" /* webpackChunkName: "chunk-with-crossorigin-attr" */);
 | 
			
		||||
	// if in browser context, test that crossorigin attribute was not added.
 | 
			
		||||
	if (typeof document !== 'undefined') {
 | 
			
		||||
		var script = document.querySelector('script[src="js/chunk-with-crossorigin-attr.web.js"]');
 | 
			
		||||
		script.getAttribute('crossorigin').should.be.exactly(null);
 | 
			
		||||
	}
 | 
			
		||||
	done();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
it("should load script with crossorigin attribute 'anonymous'", function(done) {
 | 
			
		||||
	var originalValue = __webpack_public_path__;
 | 
			
		||||
	__webpack_public_path__ = 'https://example.com/';
 | 
			
		||||
	import("./empty?b" /* webpackChunkName: "chunk-without-crossorigin-attr" */);
 | 
			
		||||
	__webpack_public_path__ = originalValue;
 | 
			
		||||
	// if in browser context, test that crossorigin attribute was added.
 | 
			
		||||
	if (typeof document !== 'undefined') {
 | 
			
		||||
		var script = document.querySelector('script[src="https://example.com/js/chunk-without-crossorigin-attr.web.js"]');
 | 
			
		||||
		script.getAttribute('crossorigin').should.be.exactly('anonymous');
 | 
			
		||||
	}
 | 
			
		||||
	__webpack_public_path__ = originalValue;
 | 
			
		||||
	done();
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,67 @@
 | 
			
		|||
it("should load script without crossorigin attribute (default)", function() {
 | 
			
		||||
	const promise = import("./empty?a" /* webpackChunkName: "crossorigin-default" */);
 | 
			
		||||
 | 
			
		||||
	var script = document.head._children.pop();
 | 
			
		||||
	__non_webpack_require__("./crossorigin-default.web.js");
 | 
			
		||||
	expect(script.src).toBe("https://test.cases/path/crossorigin-default.web.js");
 | 
			
		||||
	expect(script.crossOrigin).toBe(undefined);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
it("should load script without crossorigin attribute (relative)", function() {
 | 
			
		||||
	var originalValue = __webpack_public_path__;
 | 
			
		||||
	__webpack_public_path__ = "../";
 | 
			
		||||
	const promise = import("./empty?b" /* webpackChunkName: "crossorigin-relative" */);
 | 
			
		||||
	__webpack_public_path__ = originalValue;
 | 
			
		||||
 | 
			
		||||
	var script = document.head._children.pop();
 | 
			
		||||
	__non_webpack_require__("./crossorigin-relative.web.js");
 | 
			
		||||
	expect(script.src).toBe("https://test.cases/crossorigin-relative.web.js");
 | 
			
		||||
	expect(script.crossOrigin).toBe(undefined);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
it("should load script without crossorigin attribute (server relative)", function() {
 | 
			
		||||
	var originalValue = __webpack_public_path__;
 | 
			
		||||
	__webpack_public_path__ = "/server/";
 | 
			
		||||
	const promise = import("./empty?c" /* webpackChunkName: "crossorigin-server-relative" */);
 | 
			
		||||
	__webpack_public_path__ = originalValue;
 | 
			
		||||
 | 
			
		||||
	var script = document.head._children.pop();
 | 
			
		||||
	__non_webpack_require__("./crossorigin-server-relative.web.js");
 | 
			
		||||
	expect(script.src).toBe("https://test.cases/server/crossorigin-server-relative.web.js");
 | 
			
		||||
	expect(script.crossOrigin).toBe(undefined);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
it("should load script without crossorigin attribute (same origin)", function() {
 | 
			
		||||
	var originalValue = __webpack_public_path__;
 | 
			
		||||
	__webpack_public_path__ = "https://test.cases/";
 | 
			
		||||
	const promise = import("./empty?d" /* webpackChunkName: "crossorigin-same-origin" */);
 | 
			
		||||
	__webpack_public_path__ = originalValue;
 | 
			
		||||
 | 
			
		||||
	var script = document.head._children.pop();
 | 
			
		||||
	__non_webpack_require__("./crossorigin-same-origin.web.js");
 | 
			
		||||
	expect(script.src).toBe("https://test.cases/crossorigin-same-origin.web.js");
 | 
			
		||||
	expect(script.crossOrigin).toBe(undefined);
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
it("should load script with crossorigin attribute anonymous (different origin)", function() {
 | 
			
		||||
	var originalValue = __webpack_public_path__;
 | 
			
		||||
	__webpack_public_path__ = "https://example.com/";
 | 
			
		||||
	const promise = import("./empty?e" /* webpackChunkName: "crossorigin-different-origin" */);
 | 
			
		||||
	__webpack_public_path__ = originalValue;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	var script = document.head._children.pop();
 | 
			
		||||
	__non_webpack_require__("./crossorigin-different-origin.web.js");
 | 
			
		||||
	expect(script.src).toBe("https://example.com/crossorigin-different-origin.web.js");
 | 
			
		||||
	expect(script.crossOrigin).toBe("anonymous");
 | 
			
		||||
 | 
			
		||||
	return promise;
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
module.exports = {
 | 
			
		||||
	target: "web",
 | 
			
		||||
	output: {
 | 
			
		||||
		chunkFilename: "[name].web.js",
 | 
			
		||||
		crossOriginLoading: "anonymous"
 | 
			
		||||
	},
 | 
			
		||||
	performance: {
 | 
			
		||||
		hints: false
 | 
			
		||||
	},
 | 
			
		||||
	optimization: {
 | 
			
		||||
		minimize: false
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ it("should be able to load the split chunk on demand", () => {
 | 
			
		|||
	const promise = import(/* webpackChunkName: "shared" */ "./shared");
 | 
			
		||||
 | 
			
		||||
	const script = document.head._children[0];
 | 
			
		||||
	expect(script.src).toBe("dep~b~shared.js");
 | 
			
		||||
	expect(script.src).toBe("https://test.cases/path/dep~b~shared.js");
 | 
			
		||||
 | 
			
		||||
	__non_webpack_require__("./dep~b~shared.js");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,18 +5,16 @@ let oldPublicPath;
 | 
			
		|||
beforeEach(() => {
 | 
			
		||||
	oldNonce = __webpack_nonce__;
 | 
			
		||||
	oldPublicPath = __webpack_public_path__;
 | 
			
		||||
	global.location = {origin: "https://example.com"};
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
afterEach(() => {
 | 
			
		||||
	__webpack_nonce__ = oldNonce;
 | 
			
		||||
	__webpack_public_path__ = oldPublicPath;
 | 
			
		||||
	delete global.location;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
it("should prefetch and preload child chunks on chunk load", () => {
 | 
			
		||||
	__webpack_nonce__ = "nonce";
 | 
			
		||||
	__webpack_public_path__ = "/public/path/";
 | 
			
		||||
	__webpack_public_path__ = "https://example.com/public/path/";
 | 
			
		||||
 | 
			
		||||
	let link, script;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,8 @@ class FakeElement {
 | 
			
		|||
		this._type = type;
 | 
			
		||||
		this._children = [];
 | 
			
		||||
		this._attributes = Object.create(null);
 | 
			
		||||
		this._src = undefined;
 | 
			
		||||
		this._href = undefined;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	appendChild(node) {
 | 
			
		||||
| 
						 | 
				
			
			@ -33,4 +35,40 @@ class FakeElement {
 | 
			
		|||
	getAttribute(name) {
 | 
			
		||||
		return this._attributes[name];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_toRealUrl(value) {
 | 
			
		||||
		if (/^\//.test(value)) {
 | 
			
		||||
			return `https://test.cases${value}`;
 | 
			
		||||
		} else if (/^\.\.\//.test(value)) {
 | 
			
		||||
			return `https://test.cases${value.substr(2)}`;
 | 
			
		||||
		} else if (/^\.\//.test(value)) {
 | 
			
		||||
			return `https://test.cases/path${value.substr(1)}`;
 | 
			
		||||
		} else if (/^\w+:\/\//.test(value)) {
 | 
			
		||||
			return value;
 | 
			
		||||
		} else if (/^\/\//.test(value)) {
 | 
			
		||||
			return `https:${value}`;
 | 
			
		||||
		} else {
 | 
			
		||||
			return `https://test.cases/path/${value}`;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	set src(value) {
 | 
			
		||||
		if (this._type === "script") {
 | 
			
		||||
			this._src = this._toRealUrl(value);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	get src() {
 | 
			
		||||
		return this._src;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	set href(value) {
 | 
			
		||||
		if (this._type === "link") {
 | 
			
		||||
			this._href = this._toRealUrl(value);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	get href() {
 | 
			
		||||
		return this._href;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue