test(service-worker): run the remaining service-worker tests under bazel (#27386)

PR Close #27386
This commit is contained in:
Igor Minar 2018-11-30 17:57:39 -08:00
parent fba9fa2302
commit 194f1f084f
3 changed files with 179 additions and 142 deletions

View File

@ -0,0 +1,23 @@
load("//tools:defaults.bzl", "jasmine_node_test", "ts_library")
ts_library(
name = "test_lib",
testonly = True,
srcs = glob(
["**/*.ts"],
),
deps = [
"//packages/service-worker/config",
],
)
jasmine_node_test(
name = "test",
bootstrap = ["angular/tools/testing/init_node_spec.js"],
deps = [
":test_lib",
"//packages/service-worker/config",
"//packages/service-worker/config/testing",
"//tools/testing:node",
],
)

View File

@ -9,150 +9,148 @@
import {Generator} from '../src/generator'; import {Generator} from '../src/generator';
import {MockFilesystem} from '../testing/mock'; import {MockFilesystem} from '../testing/mock';
{ describe('Generator', () => {
describe('Generator', () => { it('generates a correct config', done => {
it('generates a correct config', done => { const fs = new MockFilesystem({
const fs = new MockFilesystem({ '/index.html': 'This is a test',
'/index.html': 'This is a test', '/main.css': 'This is a CSS file',
'/main.css': 'This is a CSS file', '/main.js': 'This is a JS file',
'/main.js': 'This is a JS file', '/main.ts': 'This is a TS file',
'/main.ts': 'This is a TS file', '/test.txt': 'Another test',
'/test.txt': 'Another test', '/foo/test.html': 'Another test',
'/foo/test.html': 'Another test', '/ignored/x.html': 'should be ignored',
'/ignored/x.html': 'should be ignored', });
}); const gen = new Generator(fs, '/test');
const gen = new Generator(fs, '/test'); const res = gen.process({
const res = gen.process({ appData: {
appData: { test: true,
test: true, },
}, index: '/index.html',
index: '/index.html', assetGroups: [{
assetGroups: [{ name: 'test',
name: 'test', resources: {
resources: { files: [
files: [ '/**/*.html',
'/**/*.html', '/**/*.?s',
'/**/*.?s', '!/ignored/**',
'!/ignored/**',
],
versionedFiles: [
'/**/*.txt',
],
urls: [
'/absolute/**',
'/some/url?with+escaped+chars',
'relative/*.txt',
]
}
}],
dataGroups: [{
name: 'other',
urls: [
'/api/**',
'relapi/**',
'https://example.com/**/*?with+escaped+chars',
], ],
cacheConfig: { versionedFiles: [
maxSize: 100, '/**/*.txt',
maxAge: '3d', ],
timeout: '1m', urls: [
} '/absolute/**',
}], '/some/url?with+escaped+chars',
navigationUrls: [ 'relative/*.txt',
'/included/absolute/**', ]
'!/excluded/absolute/**', }
'/included/some/url/with+escaped+chars', }],
'!excluded/relative/*.txt', dataGroups: [{
'!/api/?*', name: 'other',
'http://example.com/included', urls: [
'!http://example.com/excluded', '/api/**',
'relapi/**',
'https://example.com/**/*?with+escaped+chars',
], ],
}); cacheConfig: {
res.then(config => { maxSize: 100,
expect(config).toEqual({ maxAge: '3d',
configVersion: 1, timeout: '1m',
appData: { }
test: true, }],
}, navigationUrls: [
index: '/test/index.html', '/included/absolute/**',
assetGroups: [{ '!/excluded/absolute/**',
name: 'test', '/included/some/url/with+escaped+chars',
installMode: 'prefetch', '!excluded/relative/*.txt',
updateMode: 'prefetch', '!/api/?*',
urls: [ 'http://example.com/included',
'/test/foo/test.html', '!http://example.com/excluded',
'/test/index.html', ],
'/test/main.js',
'/test/main.ts',
'/test/test.txt',
],
patterns: [
'\\/absolute\\/.*',
'\\/some\\/url\\?with\\+escaped\\+chars',
'\\/test\\/relative\\/[^/]*\\.txt',
]
}],
dataGroups: [{
name: 'other',
patterns: [
'\\/api\\/.*',
'\\/test\\/relapi\\/.*',
'https:\\/\\/example\\.com\\/(?:.+\\/)?[^/]*\\?with\\+escaped\\+chars',
],
strategy: 'performance',
maxSize: 100,
maxAge: 259200000,
timeoutMs: 60000,
version: 1,
}],
navigationUrls: [
{positive: true, regex: '^\\/included\\/absolute\\/.*$'},
{positive: false, regex: '^\\/excluded\\/absolute\\/.*$'},
{positive: true, regex: '^\\/included\\/some\\/url\\/with\\+escaped\\+chars$'},
{positive: false, regex: '^\\/test\\/excluded\\/relative\\/[^/]*\\.txt$'},
{positive: false, regex: '^\\/api\\/[^/][^/]*$'},
{positive: true, regex: '^http:\\/\\/example\\.com\\/included$'},
{positive: false, regex: '^http:\\/\\/example\\.com\\/excluded$'},
],
hashTable: {
'/test/foo/test.html': '18f6f8eb7b1c23d2bb61bff028b83d867a9e4643',
'/test/index.html': 'a54d88e06612d820bc3be72877c74f257b561b19',
'/test/main.js': '41347a66676cdc0516934c76d9d13010df420f2c',
'/test/main.ts': '7d333e31f0bfc4f8152732bb211a93629484c035',
'/test/test.txt': '18f6f8eb7b1c23d2bb61bff028b83d867a9e4643'
}
});
done();
})
.catch(err => done.fail(err));
}); });
res.then(config => {
it('uses default `navigationUrls` if not provided', done => { expect(config).toEqual({
const fs = new MockFilesystem({ configVersion: 1,
'/index.html': 'This is a test', appData: {
}); test: true,
const gen = new Generator(fs, '/test'); },
const res = gen.process({ index: '/test/index.html',
index: '/index.html', assetGroups: [{
}); name: 'test',
res.then(config => { installMode: 'prefetch',
expect(config).toEqual({ updateMode: 'prefetch',
configVersion: 1, urls: [
appData: undefined, '/test/foo/test.html',
index: '/test/index.html', '/test/index.html',
assetGroups: [], '/test/main.js',
dataGroups: [], '/test/main.ts',
navigationUrls: [ '/test/test.txt',
{positive: true, regex: '^\\/.*$'},
{positive: false, regex: '^\\/(?:.+\\/)?[^/]*\\.[^/]*$'},
{positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*$'},
{positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*\\/.*$'},
], ],
hashTable: {} patterns: [
}); '\\/absolute\\/.*',
done(); '\\/some\\/url\\?with\\+escaped\\+chars',
}) '\\/test\\/relative\\/[^/]*\\.txt',
.catch(err => done.fail(err)); ]
}); }],
dataGroups: [{
name: 'other',
patterns: [
'\\/api\\/.*',
'\\/test\\/relapi\\/.*',
'https:\\/\\/example\\.com\\/(?:.+\\/)?[^/]*\\?with\\+escaped\\+chars',
],
strategy: 'performance',
maxSize: 100,
maxAge: 259200000,
timeoutMs: 60000,
version: 1,
}],
navigationUrls: [
{positive: true, regex: '^\\/included\\/absolute\\/.*$'},
{positive: false, regex: '^\\/excluded\\/absolute\\/.*$'},
{positive: true, regex: '^\\/included\\/some\\/url\\/with\\+escaped\\+chars$'},
{positive: false, regex: '^\\/test\\/excluded\\/relative\\/[^/]*\\.txt$'},
{positive: false, regex: '^\\/api\\/[^/][^/]*$'},
{positive: true, regex: '^http:\\/\\/example\\.com\\/included$'},
{positive: false, regex: '^http:\\/\\/example\\.com\\/excluded$'},
],
hashTable: {
'/test/foo/test.html': '18f6f8eb7b1c23d2bb61bff028b83d867a9e4643',
'/test/index.html': 'a54d88e06612d820bc3be72877c74f257b561b19',
'/test/main.js': '41347a66676cdc0516934c76d9d13010df420f2c',
'/test/main.ts': '7d333e31f0bfc4f8152732bb211a93629484c035',
'/test/test.txt': '18f6f8eb7b1c23d2bb61bff028b83d867a9e4643'
}
});
done();
})
.catch(err => done.fail(err));
}); });
}
it('uses default `navigationUrls` if not provided', done => {
const fs = new MockFilesystem({
'/index.html': 'This is a test',
});
const gen = new Generator(fs, '/test');
const res = gen.process({
index: '/index.html',
});
res.then(config => {
expect(config).toEqual({
configVersion: 1,
appData: undefined,
index: '/test/index.html',
assetGroups: [],
dataGroups: [],
navigationUrls: [
{positive: true, regex: '^\\/.*$'},
{positive: false, regex: '^\\/(?:.+\\/)?[^/]*\\.[^/]*$'},
{positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*$'},
{positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*\\/.*$'},
],
hashTable: {}
});
done();
})
.catch(err => done.fail(err));
});
});

View File

@ -0,0 +1,16 @@
package(default_visibility = ["//visibility:public"])
exports_files(["package.json"])
load("//tools:defaults.bzl", "ts_library")
ts_library(
name = "testing",
srcs = glob([
"*.ts",
]),
deps = [
"//packages/service-worker/cli",
"//packages/service-worker/config",
],
)