describe('PageRouter', () => { describe('route', () => { it('should choose the longest match', async () => { const context = new BrowsingContext(); const [Page, PageRouter, ComponentBase] = await context.importScripts( ['instrumentation.js', '../shared/common-component-base.js', 'components/base.js', 'pages/page.js', 'pages/page-router.js'], 'Page', 'PageRouter', 'ComponentBase'); let someRenderCount = 0; class SomePage extends Page { constructor() { super('some page'); } render() { someRenderCount++; } routeName() { return 'page'; } }; let anotherRenderCount = 0; class AnotherPage extends Page { constructor() { super('another page'); } render() { anotherRenderCount++; } routeName() { return 'page/another'; } }; const router = new PageRouter; const somePage = new SomePage; const anotherPage = new AnotherPage; router.addPage(somePage); router.addPage(anotherPage); context.global.location.hash = '#/page/another/1'; router.route(); await waitForComponentsToRender(context); expect(someRenderCount).to.be(0); expect(anotherRenderCount).to.be(1); }); }); });