// 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'}); });