blob: 28bf10746641a9ba7b7ed427ef0d84b54cb0df3d [file] [log] [blame]
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {Router} from './router';
const mockComponent = {
view() {}
};
beforeEach(() => {
window.location.hash = '';
});
test('Default route must be defined', () => {
expect(() => new Router({'/a': mockComponent})).toThrow();
});
test('Resolves empty route to default component', () => {
const router = new Router({'/': mockComponent});
window.location.hash = '';
expect(router.resolve().tag).toBe(mockComponent);
});
test('Resolves subpage route to component of main page', () => {
const nonDefaultComponent = {view() {}};
const router = new Router({
'/': mockComponent,
'/a': nonDefaultComponent,
});
window.location.hash = '#!/a/subpage';
expect(router.resolve().tag).toBe(nonDefaultComponent);
expect(router.resolve().attrs.subpage).toBe('/subpage');
});
test('Pass empty subpage if not found in URL', () => {
const nonDefaultComponent = {view() {}};
const router = new Router({
'/': mockComponent,
'/a': nonDefaultComponent,
});
window.location.hash = '#!/a';
expect(router.resolve().tag).toBe(nonDefaultComponent);
expect(router.resolve().attrs.subpage).toBe('');
});
test('Args parsing', () => {
const url = 'http://localhost/#!/foo?p=123&s=42&url=a?b?c';
const args = Router.parseUrl(url).args;
expect(args.p).toBe('123');
expect(args.s).toBe('42');
expect(args.url).toBe('a?b?c');
});
test('empty route broken into empty components', () => {
const {page, subpage, args} = Router.parseFragment('');
expect(page).toBe('');
expect(subpage).toBe('');
expect(args).toEqual({});
});
test('invalid route broken into empty components', () => {
const {page, subpage, args} = Router.parseFragment('/bla');
expect(page).toBe('');
expect(subpage).toBe('');
expect(args).toEqual({});
});
test('simple route has page defined', () => {
const {page, subpage, args} = Router.parseFragment('#!/record');
expect(page).toBe('/record');
expect(subpage).toBe('');
expect(args).toEqual({});
});
test('simple route has both components defined', () => {
const {page, subpage, args} = Router.parseFragment('#!/record/memory');
expect(page).toBe('/record');
expect(subpage).toBe('/memory');
expect(args).toEqual({});
});
test('route broken at first slash', () => {
const {page, subpage, args} = Router.parseFragment('#!/record/memory/stuff');
expect(page).toBe('/record');
expect(subpage).toBe('/memory/stuff');
expect(args).toEqual({});
});
test('parameters separated from route', () => {
const {page, subpage, args} =
Router.parseFragment('#!/record/memory?url=http://localhost:1234/aaaa');
expect(page).toBe('/record');
expect(subpage).toBe('/memory');
expect(args).toEqual({url: 'http://localhost:1234/aaaa'});
});