test(modal): adds canLeave test

This commit is contained in:
Manu Mtz.-Almeida
2016-10-12 22:47:31 +02:00
parent 58d09edf15
commit 1300cbd7c0
2 changed files with 59 additions and 33 deletions

View File

@ -130,6 +130,8 @@ export class E2EPage {
</ion-item> </ion-item>
</ion-list> </ion-list>
<button ion-button full (click)="submit()">Submit</button> <button ion-button full (click)="submit()">Submit</button>
<p>ionViewCanEnter ({{called.ionViewCanEnter}})</p>
<p>ionViewCanLeave ({{called.ionViewCanLeave}})</p>
<p>ionViewDidLoad ({{called.ionViewDidLoad}})</p> <p>ionViewDidLoad ({{called.ionViewDidLoad}})</p>
<p>ionViewWillEnter ({{called.ionViewWillEnter}})</p> <p>ionViewWillEnter ({{called.ionViewWillEnter}})</p>
<p>ionViewDidEnter ({{called.ionViewDidEnter}})</p> <p>ionViewDidEnter ({{called.ionViewDidEnter}})</p>
@ -146,6 +148,7 @@ export class ModalPassData {
constructor( constructor(
public viewCtrl: ViewController, public viewCtrl: ViewController,
public toastCtrl: ToastController, public toastCtrl: ToastController,
public alertCtrl: AlertController,
params: NavParams, params: NavParams,
someComponentProvider: SomeComponentProvider, someComponentProvider: SomeComponentProvider,
someAppProvider: SomeAppProvider) { someAppProvider: SomeAppProvider) {
@ -156,6 +159,8 @@ export class ModalPassData {
console.log('SomeAppProvider Data', someAppProvider.getData()); console.log('SomeAppProvider Data', someAppProvider.getData());
this.called = { this.called = {
ionViewCanEnter: 0,
ionViewCanLeave: 0,
ionViewDidLoad: 0, ionViewDidLoad: 0,
ionViewWillEnter: 0, ionViewWillEnter: 0,
ionViewDidEnter: 0, ionViewDidEnter: 0,
@ -166,7 +171,29 @@ export class ModalPassData {
submit() { submit() {
console.time('modal'); console.time('modal');
this.viewCtrl.dismiss(this.data); this.viewCtrl.dismiss(this.data).catch(() => {
console.log('submit was cancelled');
});
}
ionViewCanEnter() {
console.log('ModalPassData ionViewCanEnter fired');
this.called.ionViewCanEnter++;
return true;
}
ionViewCanLeave() {
console.log('ModalPassData ionViewCanLeave fired');
this.called.ionViewCanLeave++;
return new Promise((resolve: any, reject: any) => {
let alert = this.alertCtrl.create();
alert.setTitle('Do you want to submit?');
alert.addButton({ text: 'Submit', handler: resolve });
alert.addButton({ text: 'Cancel', role: 'cancel', handler: reject });
alert.present();
});
} }
ionViewDidLoad() { ionViewDidLoad() {
@ -360,6 +387,8 @@ export class ContactUs {
<p> <p>
<button ion-button (click)="openActionSheet()">Open Action Sheet</button> <button ion-button (click)="openActionSheet()">Open Action Sheet</button>
</p> </p>
<p>ionViewCanEnter ({{called.ionViewCanEnter}})</p>
<p>ionViewCanLeave ({{called.ionViewCanLeave}})</p>
<p>ionViewDidLoad ({{called.ionViewDidLoad}})</p> <p>ionViewDidLoad ({{called.ionViewDidLoad}})</p>
<p>ionViewWillEnter ({{called.ionViewWillEnter}})</p> <p>ionViewWillEnter ({{called.ionViewWillEnter}})</p>
<p>ionViewDidEnter ({{called.ionViewDidEnter}})</p> <p>ionViewDidEnter ({{called.ionViewDidEnter}})</p>
@ -391,6 +420,8 @@ export class ModalFirstPage {
} }
this.called = { this.called = {
ionViewCanEnter: 0,
ionViewCanLeave: 0,
ionViewDidLoad: 0, ionViewDidLoad: 0,
ionViewWillEnter: 0, ionViewWillEnter: 0,
ionViewDidEnter: 0, ionViewDidEnter: 0,
@ -410,6 +441,18 @@ export class ModalFirstPage {
this.navCtrl.parent.pop(); this.navCtrl.parent.pop();
} }
ionViewCanEnter() {
console.log('ModalFirstPage ionViewCanEnter fired');
this.called.ionViewCanEnter++;
return true;
}
ionViewCanLeave() {
console.log('ModalFirstPage ionViewCanLeave fired');
this.called.ionViewCanLeave++;
return true;
}
ionViewDidLoad() { ionViewDidLoad() {
console.log('ModalFirstPage ionViewDidLoad fired'); console.log('ModalFirstPage ionViewDidLoad fired');
this.called.ionViewDidLoad++; this.called.ionViewDidLoad++;

View File

@ -38,21 +38,19 @@ export class NavControllerBase extends Ion implements NavController {
_viewport: ViewContainerRef; _viewport: ViewContainerRef;
_views: ViewController[] = []; _views: ViewController[] = [];
viewDidLoad: EventEmitter<any>; viewDidLoad: EventEmitter<any> = new EventEmitter();
viewWillEnter: EventEmitter<any>; viewWillEnter: EventEmitter<any> = new EventEmitter();
viewDidEnter: EventEmitter<any>; viewDidEnter: EventEmitter<any> = new EventEmitter();
viewWillLeave: EventEmitter<any>; viewWillLeave: EventEmitter<any> = new EventEmitter();
viewDidLeave: EventEmitter<any>; viewDidLeave: EventEmitter<any> = new EventEmitter();
viewWillUnload: EventEmitter<any>; viewWillUnload: EventEmitter<any> = new EventEmitter();
id: string; id: string;
parent: any;
config: Config;
constructor( constructor(
parent: any, public parent: any,
public _app: App, public _app: App,
config: Config, public config: Config,
public _keyboard: Keyboard, public _keyboard: Keyboard,
elementRef: ElementRef, elementRef: ElementRef,
public _zone: NgZone, public _zone: NgZone,
@ -64,20 +62,10 @@ export class NavControllerBase extends Ion implements NavController {
) { ) {
super(config, elementRef, renderer); super(config, elementRef, renderer);
this.parent = parent;
this.config = config;
this._sbEnabled = config.getBoolean('swipeBackEnabled'); this._sbEnabled = config.getBoolean('swipeBackEnabled');
this._sbThreshold = config.getNumber('swipeBackThreshold', 40); this._sbThreshold = config.getNumber('swipeBackThreshold', 40);
this.id = 'n' + (++ctrlIds); this.id = 'n' + (++ctrlIds);
this.viewDidLoad = new EventEmitter();
this.viewWillEnter = new EventEmitter();
this.viewDidEnter = new EventEmitter();
this.viewWillLeave = new EventEmitter();
this.viewDidLeave = new EventEmitter();
this.viewWillUnload = new EventEmitter();
} }
push(page: any, params?: any, opts?: NavOptions, done?: Function): Promise<any> { push(page: any, params?: any, opts?: NavOptions, done?: Function): Promise<any> {
@ -280,7 +268,8 @@ export class NavControllerBase extends Ion implements NavController {
return this._viewTest(enteringView, leavingView, ti); return this._viewTest(enteringView, leavingView, ti);
} else { } else {
return this._postViewInit(enteringView, leavingView, ti, ti.resolve); this._postViewInit(enteringView, leavingView, ti, ti.resolve);
return true;
} }
} }
@ -334,7 +323,7 @@ export class NavControllerBase extends Ion implements NavController {
return null; return null;
} }
_postViewInit(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction, resolve: TransitionResolveFn): boolean { _postViewInit(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction, resolve: TransitionResolveFn) {
const opts = ti.opts || {}; const opts = ti.opts || {};
const insertViews = ti.insertViews; const insertViews = ti.insertViews;
@ -425,8 +414,6 @@ export class NavControllerBase extends Ion implements NavController {
// resolve immediately because there's no animation that's happening // resolve immediately because there's no animation that's happening
resolve(true, false); resolve(true, false);
} }
return true;
} }
/** /**
@ -447,7 +434,7 @@ export class NavControllerBase extends Ion implements NavController {
enteringView._state = ViewState.INITIALIZED; enteringView._state = ViewState.INITIALIZED;
} }
_viewTest(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction): boolean { _viewTest(enteringView: ViewController, leavingView: ViewController, ti: TransitionInstruction) {
const promises: Promise<any>[] = []; const promises: Promise<any>[] = [];
const reject = ti.reject; const reject = ti.reject;
const resolve = ti.resolve; const resolve = ti.resolve;
@ -490,20 +477,16 @@ export class NavControllerBase extends Ion implements NavController {
// all promises resolved! let's continue // all promises resolved! let's continue
this._postViewInit(enteringView, leavingView, ti, resolve); this._postViewInit(enteringView, leavingView, ti, resolve);
}).catch((rejectReason) => { }).catch(reject);
reject(rejectReason); return true;
});
return false;
} }
// synchronous and all tests passed! let's move on already // synchronous and all tests passed! let's move on already
this._postViewInit(enteringView, leavingView, ti, resolve); this._postViewInit(enteringView, leavingView, ti, resolve);
return true; return true;
} }
_transition(enteringView: ViewController, leavingView: ViewController, opts: NavOptions, resolve: TransitionResolveFn): void { _transition(enteringView: ViewController, leavingView: ViewController, opts: NavOptions, resolve: TransitionResolveFn) {
// figure out if this transition is the root one or a // figure out if this transition is the root one or a
// child of a parent nav that has the root transition // child of a parent nav that has the root transition
this._trnsId = this._trnsCtrl.getRootTrnsId(this); this._trnsId = this._trnsCtrl.getRootTrnsId(this);