polyserve
Version:
A simple dev server for bower components
152 lines • 9.34 kB
JavaScript
;
/**
* @license
* Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
* This code may only be used under the BSD style license found at
* http://polymer.github.io/LICENSE.txt
* The complete set of authors may be found at
* http://polymer.github.io/AUTHORS.txt
* The complete set of contributors may be found at
* http://polymer.github.io/CONTRIBUTORS.txt
* Code distributed by Google as part of the polymer project is also
* subject to an additional IP rights grant found at
* http://polymer.github.io/PATENTS.txt
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const chai = require("chai");
const chaiAsPromised = require("chai-as-promised");
const fs = require("fs");
const path = require("path");
const supertest = require("supertest-as-promised");
const compile_middleware_1 = require("../compile-middleware");
const start_server_1 = require("../start_server");
chai.use(chaiAsPromised);
const assert = chai.assert;
const root = path.join(__dirname, '..', '..', 'test');
const userAgentsThatDontSupportES2015 = [
'unknown browser',
'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/14.99999',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.14986',
];
const userAgentsThatSupportES2015 = [
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/16.00000',
];
suite('compile-middleware', () => {
suite('babelCompileCache', () => {
let app;
const uncompiledHtml = fs.readFileSync(path.join(root, 'bower_components/test-component/test.html'))
.toString();
const uncompiledJs = fs.readFileSync(path.join(root, 'bower_components/test-component/test.js'))
.toString();
beforeEach(() => {
app = start_server_1.getApp({
root: root,
compile: 'always',
componentDir: path.join(root, 'bower_components'),
});
// Ensure a fresh cache for each test.
compile_middleware_1.babelCompileCache.reset();
});
test('caches html compilation results', () => __awaiter(this, void 0, void 0, function* () {
assert(!compile_middleware_1.babelCompileCache.has(uncompiledHtml));
const response = yield supertest(app).get('/components/test-component/test.html');
assert(compile_middleware_1.babelCompileCache.has(uncompiledHtml));
assert.equal(response.text, compile_middleware_1.babelCompileCache.get(uncompiledHtml));
assert.equal(response.text.indexOf('class A {}'), -1, 'Did not compile');
}));
test('returns cached html compilation results', () => __awaiter(this, void 0, void 0, function* () {
compile_middleware_1.babelCompileCache.set(uncompiledHtml, 'IM IN UR CACHE');
const response = yield supertest(app).get('/components/test-component/test.html');
assert.equal(response.text, 'IM IN UR CACHE');
}));
test('caches javascript compilation results', () => __awaiter(this, void 0, void 0, function* () {
assert(!compile_middleware_1.babelCompileCache.has(uncompiledJs));
const response = yield supertest(app).get('/components/test-component/test.js');
assert(compile_middleware_1.babelCompileCache.has(uncompiledJs));
assert.equal(response.text, compile_middleware_1.babelCompileCache.get(uncompiledJs));
assert.equal(response.text.indexOf('class A {}'), -1, 'Did not compile');
}));
test('returns cached js compilation results', () => __awaiter(this, void 0, void 0, function* () {
compile_middleware_1.babelCompileCache.set(uncompiledJs, 'IM IN UR CACHE');
const response = yield supertest(app).get('/components/test-component/test.js');
assert.equal(response.text, 'IM IN UR CACHE');
}));
test('honors the cache max evicting least recently used', () => __awaiter(this, void 0, void 0, function* () {
yield supertest(app).get('/components/test-component/test.html');
assert(compile_middleware_1.babelCompileCache.has(uncompiledHtml));
const originalMax = compile_middleware_1.babelCompileCache['max'];
compile_middleware_1.babelCompileCache['max'] = compile_middleware_1.babelCompileCache.length;
try {
yield supertest(app).get('/components/test-component/test.js');
assert(!compile_middleware_1.babelCompileCache.has(uncompiledHtml), 'cached html evicted');
}
finally {
compile_middleware_1.babelCompileCache['max'] = originalMax;
}
}));
test('script tags with invalid javascript are unchanged', () => __awaiter(this, void 0, void 0, function* () {
const uncompiled = fs
.readFileSync(path.join(root, 'bower_components/compile-test/script-tags.html'))
.toString();
assert(!compile_middleware_1.babelCompileCache.has(uncompiled), 'Unexpected entry in cache');
const response = yield supertest(app).get('/components/compile-test/script-tags.html');
assert(compile_middleware_1.babelCompileCache.has(uncompiled), 'Missing cache entry');
assert.include(response.text, `<script>\nthis is not valid\n</script>`);
// The valid script tag should still be compiled.
assert.notInclude(response.text, `<script>\nclass A {}\n</script>`);
}));
suite('with compile option set to \'auto\'', () => {
beforeEach(() => {
app = start_server_1.getApp({
root: root,
compile: 'auto',
componentDir: path.join(root, 'bower_components'),
});
// Ensure a fresh cache for each test.
compile_middleware_1.babelCompileCache.reset();
});
test('detect user-agents that do not need compilation', () => __awaiter(this, void 0, void 0, function* () {
assert.isFalse(compile_middleware_1.babelCompileCache.has(`Unexpected .js file in cache`));
for (const userAgent of userAgentsThatSupportES2015) {
const response = yield supertest(app)
.get('/components/test-component/test.js')
.set('User-Agent', userAgent);
assert.isFalse(compile_middleware_1.babelCompileCache.has(uncompiledJs), `Unexpected .js file in cache User-Agent ${userAgent}`);
assert.include(response.text, 'class A {}', `Unexpected compilation for User-Agent ${userAgent}`);
compile_middleware_1.babelCompileCache.reset();
}
}));
test('detect user-agents that need compilation', () => __awaiter(this, void 0, void 0, function* () {
assert.isFalse(compile_middleware_1.babelCompileCache.has(`Unexpected .js file in cache`));
for (const userAgent of userAgentsThatDontSupportES2015) {
const response = yield supertest(app)
.get('/components/test-component/test.js')
.set('User-Agent', userAgent);
assert.isTrue(compile_middleware_1.babelCompileCache.has(uncompiledJs), `Expected .js file in cache User-Agent ${userAgent}`);
assert.notInclude(response.text, 'class A {}', `Expected compilation for User-Agent ${userAgent}`);
compile_middleware_1.babelCompileCache.reset();
}
}));
});
});
test('browserNeedsCompilation', () => {
for (const userAgent of userAgentsThatDontSupportES2015) {
assert.equal(compile_middleware_1.browserNeedsCompilation(userAgent), true, userAgent);
}
for (const userAgent of userAgentsThatSupportES2015) {
assert.equal(compile_middleware_1.browserNeedsCompilation(userAgent), false, userAgent);
}
});
});
//# sourceMappingURL=compile-middleware_test.js.map