mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			133 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
const BinaryMiddleware = require("../lib/serialization/BinaryMiddleware");
 | 
						|
const SerializerMiddleware = require("../lib/serialization/SerializerMiddleware");
 | 
						|
 | 
						|
const cont = (base, count) => {
 | 
						|
	const result = [];
 | 
						|
	for (let i = 0; i < count; i++) {
 | 
						|
		result.push(base[i % base.length]);
 | 
						|
	}
 | 
						|
	return result;
 | 
						|
};
 | 
						|
 | 
						|
const mw = new BinaryMiddleware();
 | 
						|
const other = { other: true };
 | 
						|
 | 
						|
const resolveLazy = item => {
 | 
						|
	if (SerializerMiddleware.isLazy(item)) {
 | 
						|
		const data = item();
 | 
						|
		if (Array.isArray(data)) return { resolvesTo: data.map(resolveLazy) };
 | 
						|
		return { resolvesTo: resolveLazy(data) };
 | 
						|
	}
 | 
						|
	return item;
 | 
						|
};
 | 
						|
 | 
						|
describe("BinaryMiddleware", () => {
 | 
						|
	const items = [
 | 
						|
		true,
 | 
						|
		false,
 | 
						|
		null,
 | 
						|
		"",
 | 
						|
		"hi",
 | 
						|
		"hi".repeat(200),
 | 
						|
		"😀",
 | 
						|
		"😀".repeat(200),
 | 
						|
		Buffer.from("hello"),
 | 
						|
		1,
 | 
						|
		11,
 | 
						|
		0x100,
 | 
						|
		-1,
 | 
						|
		-11,
 | 
						|
		-0x100,
 | 
						|
		-1.25,
 | 
						|
		SerializerMiddleware.createLazy([5], other)
 | 
						|
	];
 | 
						|
 | 
						|
	const itemsWithLazy = [
 | 
						|
		...items,
 | 
						|
		SerializerMiddleware.createLazy(
 | 
						|
			[SerializerMiddleware.createLazy([5], other)],
 | 
						|
			mw
 | 
						|
		),
 | 
						|
		SerializerMiddleware.createLazy(
 | 
						|
			[
 | 
						|
				1,
 | 
						|
				SerializerMiddleware.createLazy([2], mw),
 | 
						|
				SerializerMiddleware.createLazy([5], other),
 | 
						|
				4
 | 
						|
			],
 | 
						|
			mw
 | 
						|
		)
 | 
						|
	];
 | 
						|
	itemsWithLazy.push(
 | 
						|
		SerializerMiddleware.createLazy(itemsWithLazy.slice(), mw)
 | 
						|
	);
 | 
						|
	itemsWithLazy.push(
 | 
						|
		SerializerMiddleware.createLazy(itemsWithLazy.slice(), other)
 | 
						|
	);
 | 
						|
 | 
						|
	items.push(undefined);
 | 
						|
 | 
						|
	const cases = [
 | 
						|
		...itemsWithLazy.map(item => [item]),
 | 
						|
		[(true, true)],
 | 
						|
		[false, true],
 | 
						|
		[true, false],
 | 
						|
		[false, false],
 | 
						|
		[false, false, false],
 | 
						|
		[false, true, false, true],
 | 
						|
		[true, true, true],
 | 
						|
		[false, false, false],
 | 
						|
		cont([false, true, false, true], 5),
 | 
						|
		cont([true], 5),
 | 
						|
		cont([false], 5),
 | 
						|
		cont([false, true, false, true], 6),
 | 
						|
		cont([true], 6),
 | 
						|
		cont([false], 6),
 | 
						|
		cont([false, true, false, true], 7),
 | 
						|
		cont([false, true, false, true], 8),
 | 
						|
		cont([false, true, false, true], 9),
 | 
						|
		cont([false, true, false, true], 132),
 | 
						|
		cont([false, true, false, true], 133),
 | 
						|
		cont([false, true, false, true], 134),
 | 
						|
		cont([false, true, false, true], 135),
 | 
						|
		cont([false, true, false, true], 10000),
 | 
						|
		cont([true], 135),
 | 
						|
		[null],
 | 
						|
		[null, null],
 | 
						|
		[null, null, null],
 | 
						|
		cont([null], 4),
 | 
						|
		cont([null], 100),
 | 
						|
		cont([null], 300),
 | 
						|
		cont([-20], 20),
 | 
						|
		cont([400], 20),
 | 
						|
		cont([5.5], 20)
 | 
						|
	];
 | 
						|
 | 
						|
	for (const c of [1, 100]) {
 | 
						|
		for (const caseData of cases) {
 | 
						|
			for (const prepend of items) {
 | 
						|
				for (const append of items) {
 | 
						|
					if (c > 1 && append !== undefined) continue;
 | 
						|
					const data = [prepend, ...caseData, append].filter(
 | 
						|
						x => x !== undefined
 | 
						|
					);
 | 
						|
					if (data.length * c > 200000) continue;
 | 
						|
					if (data.length === 0) continue;
 | 
						|
					let key = JSON.stringify(data.map(resolveLazy));
 | 
						|
					if (key.length > 100)
 | 
						|
						key = `${key.slice(0, 50)} ... ${key.slice(-50)}`;
 | 
						|
					it(`should serialize ${c} x ${key} (${data.length}) correctly`, () => {
 | 
						|
						// process.stderr.write(
 | 
						|
						// 	`${c} x ${key.slice(0, 20)} (${data.length})\n`
 | 
						|
						// );
 | 
						|
						const realData = cont(data, data.length * c);
 | 
						|
						const serialized = mw.serialize(realData, {});
 | 
						|
						const newData = mw.deserialize(serialized, {});
 | 
						|
						expect(newData.map(resolveLazy)).toEqual(realData.map(resolveLazy));
 | 
						|
					});
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
});
 |