diff --git a/src/components/nav/test/advanced-nav-then-tabs/pages/tabs-one/tab-one-page-three/tab-one-page-three.ts b/src/components/nav/test/advanced-nav-then-tabs/pages/tabs-one/tab-one-page-three/tab-one-page-three.ts index ddc3d0dc36..5deb7fc068 100644 --- a/src/components/nav/test/advanced-nav-then-tabs/pages/tabs-one/tab-one-page-three/tab-one-page-three.ts +++ b/src/components/nav/test/advanced-nav-then-tabs/pages/tabs-one/tab-one-page-three/tab-one-page-three.ts @@ -19,7 +19,6 @@ import { IonicPage, NavController, NavParams } from '../../../../../../..';
Name: {{paramTwo}}
- ` }) diff --git a/src/components/nav/test/advanced-nested-navs/app/app.component.ts b/src/components/nav/test/advanced-nested-navs/app/app.component.ts new file mode 100644 index 0000000000..9ae964b0e6 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/app/app.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; + +@Component({ + template: ` + + + + + + ` +}) +export class AppComponent { + rootOne = 'NestedNavOnePageOne'; + rootTwo = 'NestedNavTwoPageOne'; +} diff --git a/src/components/nav/test/advanced-nested-navs/app/app.module.ts b/src/components/nav/test/advanced-nested-navs/app/app.module.ts new file mode 100644 index 0000000000..55310fa215 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { IonicApp, IonicModule } from '../../../../..'; + +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + IonicModule.forRoot(AppComponent, { swipeBackEnabled: true, preloadModules: true }), + ], + bootstrap: [IonicApp] +}) +export class AppModule {} diff --git a/src/components/nav/test/advanced-nested-navs/app/main.ts b/src/components/nav/test/advanced-nested-navs/app/main.ts new file mode 100644 index 0000000000..6af7a5b2ae --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/app/main.ts @@ -0,0 +1,5 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.html b/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.html new file mode 100644 index 0000000000..e82b2f2388 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.html @@ -0,0 +1,9 @@ + + + Page One + + + +

Page One

+ +
\ No newline at end of file diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.module.ts b/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.module.ts new file mode 100644 index 0000000000..c17e0dde59 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { FirstPage } from './first-page'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(FirstPage) + ], + declarations: [ + FirstPage + ] +}) +export class FirstPageModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.ts b/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.ts new file mode 100644 index 0000000000..027607bc6d --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/first-page/first-page.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, } from '../../../../../../..'; + +@IonicPage() +@Component({ + templateUrl: 'first-page.html' +}) +export class FirstPage { + constructor(public nav: NavController) { + } + + goToPageTwo() { + this.nav.push('SecondPage', { userId: '123', name: 'Michael Scott'}); + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-one.module.ts b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-one.module.ts new file mode 100644 index 0000000000..2da62fb42a --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-one.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { NestedNavOnePageOne } from './nested-nav-one-page-one'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(NestedNavOnePageOne) + ], + declarations: [ + NestedNavOnePageOne + ] +}) +export class NestedNavOnePageOneModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-one.ts b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-one.ts new file mode 100644 index 0000000000..e2626f8237 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-one.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, } from '../../../../../../..'; + +@IonicPage() +@Component({ + template: ` + + ` +}) +export class NestedNavOnePageOne { + + root: string = 'NestedNavOnePageTwo'; + constructor(public nav: NavController) { + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-two.module.ts b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-two.module.ts new file mode 100644 index 0000000000..94f61701ed --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-two.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { NestedNavOnePageTwo } from './nested-nav-one-page-two'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(NestedNavOnePageTwo) + ], + declarations: [ + NestedNavOnePageTwo + ] +}) +export class NestedNavOnePageTwoModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-two.ts b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-two.ts new file mode 100644 index 0000000000..e6ef5ef5c3 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/nested-nav-one/nested-nav-one-page-two.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, } from '../../../../../../..'; + +@IonicPage() +@Component({ + template: ` + + ` +}) +export class NestedNavOnePageTwo { + + root: string = 'FirstPage'; + constructor(public nav: NavController) { + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.html b/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.html new file mode 100644 index 0000000000..39d1124a07 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.html @@ -0,0 +1,15 @@ + + + Page Two + + + +

Page Two

+
+ User ID: {{userId}} +
+
+ Name {{name}} +
+ +
\ No newline at end of file diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.module.ts b/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.module.ts new file mode 100644 index 0000000000..ce824037f8 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { SecondPage } from './second-page'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(SecondPage) + ], + declarations: [ + SecondPage + ] +}) +export class SecondPageModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.ts b/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.ts new file mode 100644 index 0000000000..44abf580fe --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/second-page/second-page.ts @@ -0,0 +1,22 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, NavParams } from '../../../../../../..'; + +@IonicPage({ + segment: 'pageTwo/user/:userId/name/:name' +}) +@Component({ + templateUrl: 'second-page.html' +}) +export class SecondPage { + + userId: string; + name: string; + constructor(public nav: NavController, public params: NavParams) { + this.userId = this.params.data.userId; + this.name = this.params.data.name; + } + + goToNextPage() { + this.nav.push('ThirdPage', { paramOne: 'mono', paramTwo: 'stereo'}); + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.html b/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.html new file mode 100644 index 0000000000..af317e8de8 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.html @@ -0,0 +1,14 @@ + + + Page Three + + + + Page Three +
+ Param One: {{paramOne}} +
+
+ Param Two: {{paramTwo}} +
+
\ No newline at end of file diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.module.ts b/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.module.ts new file mode 100644 index 0000000000..fab76aa598 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { ThirdPage } from './third-page'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(ThirdPage) + ], + declarations: [ + ThirdPage + ] +}) +export class ThirdPageModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.ts b/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.ts new file mode 100644 index 0000000000..9cbbc0413f --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/left/third-page/third-page.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, NavParams} from '../../../../../../..'; + +@IonicPage({ + segment: 'thirdPage/paramOne/:paramOne/paramTwo/:paramTwo' +}) +@Component({ + templateUrl: 'third-page.html' +}) +export class ThirdPage { + paramOne: string; + paramTwo: string; + constructor(public nav: NavController, public params: NavParams) { + this.paramOne = params.data.paramOne; + this.paramTwo = params.data.paramTwo; + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.html b/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.html new file mode 100644 index 0000000000..3a700e617f --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.html @@ -0,0 +1,15 @@ + + + Page Five + + + +

Page Five

+
+ User ID: {{userId}} +
+
+ Name {{name}} +
+ +
\ No newline at end of file diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.module.ts b/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.module.ts new file mode 100644 index 0000000000..1499d707cf --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { FifthPage } from './fifth-page'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(FifthPage) + ], + declarations: [ + FifthPage + ] +}) +export class FifthPageModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.ts b/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.ts new file mode 100644 index 0000000000..fd3023b1f5 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/fifth-page/fifth-page.ts @@ -0,0 +1,22 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, NavParams } from '../../../../../../..'; + +@IonicPage({ + segment: 'pageFive/user/:userId/name/:name' +}) +@Component({ + templateUrl: 'fifth-page.html' +}) +export class FifthPage { + + userId: string; + name: string; + constructor(public nav: NavController, public params: NavParams) { + this.userId = this.params.data.userId; + this.name = this.params.data.name; + } + + goToNextPage() { + this.nav.push('SixthPage', { paramOne: 'Tobey', paramTwo: 'Holly'}); + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.html b/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.html new file mode 100644 index 0000000000..a89fef0a4e --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.html @@ -0,0 +1,9 @@ + + + Page Four + + + +

Page Four

+ +
\ No newline at end of file diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.module.ts b/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.module.ts new file mode 100644 index 0000000000..d041e3bcc8 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { FourthPage } from './fourth-page'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(FourthPage) + ], + declarations: [ + FourthPage + ] +}) +export class FourthPageModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.ts b/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.ts new file mode 100644 index 0000000000..6ad06442e0 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/fouth-page/fourth-page.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, } from '../../../../../../..'; + +@IonicPage() +@Component({ + templateUrl: 'fourth-page.html' +}) +export class FourthPage { + constructor(public nav: NavController) { + } + + goToPageTwo() { + this.nav.push('FifthPage', { userId: '567', name: 'Pamela Beasley'}); + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-one.module.ts b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-one.module.ts new file mode 100644 index 0000000000..1fe930c8f6 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-one.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { NestedNavTwoPageOne } from './nested-nav-two-page-one'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(NestedNavTwoPageOne) + ], + declarations: [ + NestedNavTwoPageOne + ] +}) +export class NestedNavTwoPageOneModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-one.ts b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-one.ts new file mode 100644 index 0000000000..881a5b9b80 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-one.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, } from '../../../../../../..'; + +@IonicPage() +@Component({ + template: ` + + ` +}) +export class NestedNavTwoPageOne { + + root: string = 'NestedNavTwoPageTwo'; + constructor(public nav: NavController) { + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-two.module.ts b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-two.module.ts new file mode 100644 index 0000000000..0ce9ba085b --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-two.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { NestedNavTwoPageTwo } from './nested-nav-two-page-two'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(NestedNavTwoPageTwo) + ], + declarations: [ + NestedNavTwoPageTwo + ] +}) +export class NestedNavTwoPageTwoModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-two.ts b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-two.ts new file mode 100644 index 0000000000..6f267decef --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/nested-nav-two/nested-nav-two-page-two.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, } from '../../../../../../..'; + +@IonicPage() +@Component({ + template: ` + + ` +}) +export class NestedNavTwoPageTwo { + + root: string = 'FourthPage'; + constructor(public nav: NavController) { + } +} diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.html b/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.html new file mode 100644 index 0000000000..8732947e36 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.html @@ -0,0 +1,14 @@ + + + Page Six + + + + Page Six +
+ Param One: {{paramOne}} +
+
+ Param Two: {{paramTwo}} +
+
\ No newline at end of file diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.module.ts b/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.module.ts new file mode 100644 index 0000000000..212bd5c889 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { IonicPageModule } from '../../../../../../..'; +import { SixthPage } from './sixth-page'; + +@NgModule({ + imports: [ + IonicPageModule.forChild(SixthPage) + ], + declarations: [ + SixthPage + ] +}) +export class SixthPageModule { } diff --git a/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.ts b/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.ts new file mode 100644 index 0000000000..6f075c5fa4 --- /dev/null +++ b/src/components/nav/test/advanced-nested-navs/pages/right/sixth-page/sixth-page.ts @@ -0,0 +1,18 @@ +import { Component } from '@angular/core'; +import { IonicPage, NavController, NavParams} from '../../../../../../..'; + +@IonicPage({ + segment: 'sixthPage/paramOne/:paramOne/paramTwo/:paramTwo' +}) +@Component({ + templateUrl: 'sixth-page.html' +}) +export class SixthPage { + + paramOne: string; + paramTwo: string; + constructor(public nav: NavController, public params: NavParams) { + this.paramOne = params.data.paramOne; + this.paramTwo = params.data.paramTwo; + } +} diff --git a/src/components/nav/test/simple-nav-then-tabs/pages/tabs/tabs-page.ts b/src/components/nav/test/simple-nav-then-tabs/pages/tabs/tabs-page.ts index 306cc66994..70cca4a5f9 100644 --- a/src/components/nav/test/simple-nav-then-tabs/pages/tabs/tabs-page.ts +++ b/src/components/nav/test/simple-nav-then-tabs/pages/tabs/tabs-page.ts @@ -4,7 +4,7 @@ import { IonicPage, } from '../../../../../..'; @IonicPage() @Component({ template: ` - + diff --git a/src/components/tabs/tab.ts b/src/components/tabs/tab.ts index ee8985c6a3..45c3b53ab8 100644 --- a/src/components/tabs/tab.ts +++ b/src/components/tabs/tab.ts @@ -307,14 +307,33 @@ export class Tab extends NavControllerBase implements ITab { load(opts: NavOptions, done?: () => void) { if (this._lazyRootFromUrl || (!this._loaded && this.root)) { this.setElementClass('show-tab', true); - if (this._lazyRootFromUrl) { - this.push(this._lazyRootFromUrl, this._lazyRootFromUrlData, opts, done); - this._lazyRootFromUrl = null; - this._lazyRootFromUrlData = null; - } else { - this.push(this.root, this.rootParams, opts, done); + // okay, first thing we need to do if check if the view already exists + const nameToUse = this._lazyRootFromUrl ? this._lazyRootFromUrl : this.root; + const dataToUse = this._lazyRootFromUrlData ? this._lazyRootFromUrlData : this.rootParams; + const numViews = this.length() - 1; + for (let i = numViews; i >= 0; i--) { + const viewController = this.getByIndex(i); + if (viewController && (viewController.id === nameToUse || viewController.component === nameToUse)) { + if (i === numViews) { + // this is the last view in the stack and it's the same + // as the segment so there's no change needed + return done(); + } else { + // it's not the exact view as the end + // let's have this nav go back to this exact view + return this.popTo(viewController, { + animate: false, + updateUrl: false, + }, done); + } + } } + this.push(nameToUse, dataToUse, opts, done); + + + this._lazyRootFromUrl = null; + this._lazyRootFromUrlData = null; this._loaded = true; } else { @@ -324,7 +343,7 @@ export class Tab extends NavControllerBase implements ITab { this._dom.read(() => { this.resize(); }); - done(); + return done(); } } diff --git a/src/components/tabs/test/tab.spec.ts b/src/components/tabs/test/tab.spec.ts new file mode 100644 index 0000000000..0c95bd2043 --- /dev/null +++ b/src/components/tabs/test/tab.spec.ts @@ -0,0 +1,91 @@ +import { mockTab, mockTabs, mockView, mockViews } from '../../../util/mock-providers'; + +describe('tab', () => { + describe('load', () => { + it('should measure and refresh the tabs', () => { + // TODO - this test is super leaky but I cant come up with a better way short term + const tabs = mockTabs(); + const tab = mockTab(tabs, false); + const spy = jasmine.createSpy('done'); + + spyOn(tab, 'push'); + spyOn(tab, 'popTo'); + tab.load({}, spy); + + expect(tab.push).not.toHaveBeenCalled(); + expect(tab.popTo).not.toHaveBeenCalled(); + expect(spy).toHaveBeenCalled(); + }); + + it('should reuse the view if its the top view in the stack', () => { + const tabs = mockTabs(); + const tab = mockTab(tabs, false); + const spy = jasmine.createSpy('done'); + + const mockViewOne = mockView('one'); + const mockViewTwo = mockView('two'); + mockViews(tab, [mockViewOne, mockViewTwo]); + + tab._lazyRootFromUrl = 'someValue'; + tab._lazyRootFromUrlData = { }; + + mockViewTwo.id = tab._lazyRootFromUrl; + + spyOn(tab, 'push'); + spyOn(tab, 'popTo'); + + tab.load({}, spy); + + expect(tab.push).not.toHaveBeenCalled(); + expect(tab.popTo).not.toHaveBeenCalled(); + expect(spy).toHaveBeenCalled(); + }); + + it('should pop back to a previous view if ', () => { + const tabs = mockTabs(); + const tab = mockTab(tabs, false); + const spy = jasmine.createSpy('done'); + + const mockViewOne = mockView('one'); + const mockViewTwo = mockView('two'); + mockViews(tab, [mockViewOne, mockViewTwo]); + + tab._lazyRootFromUrl = 'someValue'; + tab._lazyRootFromUrlData = { }; + + mockViewOne.id = tab._lazyRootFromUrl; + + spyOn(tab, 'push'); + spyOn(tab, 'popTo'); + + tab.load({}, spy); + + expect(tab.push).not.toHaveBeenCalled(); + expect(tab.popTo).toHaveBeenCalled(); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should push the view if it doesnt exist already', () => { + const tabs = mockTabs(); + const tab = mockTab(tabs, false); + const spy = jasmine.createSpy('done'); + + const mockViewOne = mockView('one'); + const mockViewTwo = mockView('two'); + mockViews(tab, [mockViewOne, mockViewTwo]); + + tab._lazyRootFromUrl = 'someValue'; + tab._lazyRootFromUrlData = { }; + + spyOn(tab, 'push'); + spyOn(tab, 'popTo'); + + tab.load({}, spy); + + expect(tab.push).toHaveBeenCalled(); + expect(tab.popTo).not.toHaveBeenCalled(); + expect(spy).not.toHaveBeenCalled(); + }); + + }); +}); diff --git a/src/util/mock-providers.ts b/src/util/mock-providers.ts index 78bd12ee16..e51cefe05f 100644 --- a/src/util/mock-providers.ts +++ b/src/util/mock-providers.ts @@ -470,7 +470,7 @@ export function mockOverlayPortal(app: App, config: Config, plt: MockPlatform): ); } -export function mockTab(parentTabs: Tabs): Tab { +export function mockTab(parentTabs: Tabs, overrideLoad: boolean = true): Tab { let platform = mockPlatform(); let config = mockConfig(null, '/', platform); let app = (parentTabs)._app || mockApp(config, platform); @@ -500,9 +500,11 @@ export function mockTab(parentTabs: Tabs): Tab { null ); - tab.load = (opts: any, cb: Function) => { - cb(); - }; + if (overrideLoad) { + tab.load = (opts: any, cb: Function) => { + cb(); + }; + } return tab; }