Skip to content
This repository was archived by the owner on Apr 9, 2019. It is now read-only.

Commit 045c527

Browse files
committed
Generalize lifecycle events test and test push and pop
1 parent a4c5d6a commit 045c527

File tree

1 file changed

+112
-27
lines changed

1 file changed

+112
-27
lines changed

spec/navigation-controller.spec.jsx

Lines changed: 112 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('NavigationController', () => {
3232
);
3333
viewWrapper0 = controller['__view-wrapper-0'];
3434
viewWrapper1 = controller['__view-wrapper-1'];
35-
})
35+
});
3636
it('exports a component', () => {
3737
let controller = renderIntoDocument(
3838
<NavigationController views={views} />
@@ -459,32 +459,6 @@ describe('NavigationController', () => {
459459
});
460460
})
461461
});
462-
it('calls lifecycle events', (done) => {
463-
const willHideViewSpy = sinon.spy();
464-
const willShowViewSpy = sinon.spy();
465-
const didHideViewSpy = sinon.spy();
466-
const didShowViewSpy = sinon.spy();
467-
var stub = sinon.stub(controller, '__transitionViews', function (options) {
468-
let prevView = controller.refs['view-0'];
469-
let nextView = controller.refs['view-1'];
470-
prevView.navigationControllerWillHideView = willHideViewSpy;
471-
nextView.navigationControllerWillShowView = willShowViewSpy;
472-
prevView.navigationControllerDidHideView = didHideViewSpy;
473-
nextView.navigationControllerDidShowView = didShowViewSpy;
474-
stub.restore();
475-
controller.__transitionViews(options);
476-
requestAnimationFrame(() => {
477-
expect(willHideViewSpy.calledOnce).to.be.true;
478-
expect(willShowViewSpy.calledOnce).to.be.true;
479-
expect(didHideViewSpy.calledOnce).to.be.true;
480-
expect(didShowViewSpy.calledOnce).to.be.true;
481-
done();
482-
});
483-
});
484-
controller.__pushView(<ViewB />, {
485-
transition: Transition.type.NONE
486-
});
487-
});
488462
});
489463
describe('#__popView', () => {
490464
beforeEach(done => {
@@ -691,4 +665,115 @@ describe('NavigationController', () => {
691665
});
692666
});
693667
});
668+
describe('Lifecycle Events', () => {
669+
let stubLifecycleEvents = (onTransitionViews) => {
670+
const e = {
671+
prevView: {
672+
willHide: sinon.spy(),
673+
didHide: sinon.spy()
674+
},
675+
nextView: {
676+
willShow: sinon.spy(),
677+
didShow: sinon.spy()
678+
}
679+
}
680+
var stub = sinon.stub(controller, '__transitionViews', (options) => {
681+
let prevView = controller.refs['view-0'];
682+
if (prevView) {
683+
prevView.navigationControllerWillHideView = e.prevView.willHide;
684+
prevView.navigationControllerDidHideView = e.prevView.didHide;
685+
}
686+
let nextView = controller.refs['view-1'];
687+
if (nextView) {
688+
nextView.navigationControllerWillShowView = e.nextView.willShow;
689+
nextView.navigationControllerDidShowView = e.nextView.didShow;
690+
}
691+
stub.restore();
692+
controller.__transitionViews(options);
693+
onTransitionViews();
694+
});
695+
return e;
696+
};
697+
describe('#__pushView', () => {
698+
beforeEach(done => {
699+
requestAnimationFrame(() => {
700+
done();
701+
});
702+
});
703+
it('calls events with a "none" transition', (done) => {
704+
const e = stubLifecycleEvents(() => {
705+
expect(e.prevView.willHide.calledOnce).to.be.true;
706+
expect(e.nextView.willShow.calledOnce).to.be.true;
707+
expect(e.prevView.didHide.calledOnce).to.be.false;
708+
expect(e.nextView.didShow.calledOnce).to.be.false;
709+
});
710+
controller.__pushView(<ViewB />, {
711+
transition: Transition.type.NONE,
712+
onComplete() {
713+
expect(e.prevView.didHide.calledOnce).to.be.true;
714+
expect(e.nextView.didShow.calledOnce).to.be.true;
715+
done();
716+
}
717+
});
718+
});
719+
it('calls events with a built-in spring animation', (done) => {
720+
const e = stubLifecycleEvents(() => {
721+
expect(e.prevView.willHide.calledOnce).to.be.true;
722+
expect(e.nextView.willShow.calledOnce).to.be.true;
723+
expect(e.prevView.didHide.calledOnce).to.be.false;
724+
expect(e.nextView.didShow.calledOnce).to.be.false;
725+
});
726+
controller.__pushView(<ViewB />, {
727+
transition: Transition.type.PUSH_LEFT,
728+
onComplete() {
729+
expect(e.prevView.didHide.calledOnce).to.be.true;
730+
expect(e.nextView.didShow.calledOnce).to.be.true;
731+
done();
732+
}
733+
});
734+
});
735+
});
736+
describe('#__popView', () => {
737+
beforeEach(done => {
738+
controller = renderIntoDocument(
739+
<NavigationController views={[<ViewA />,<ViewB />]} />
740+
);
741+
requestAnimationFrame(() => {
742+
done();
743+
});
744+
});
745+
it('calls events with a "none" transition', (done) => {
746+
const e = stubLifecycleEvents(() => {
747+
expect(e.prevView.willHide.calledOnce).to.be.true;
748+
expect(e.nextView.willShow.calledOnce).to.be.true;
749+
expect(e.prevView.didHide.calledOnce).to.be.false;
750+
expect(e.nextView.didShow.calledOnce).to.be.false;
751+
});
752+
controller.__popView({
753+
transition: Transition.type.NONE,
754+
onComplete() {
755+
expect(e.prevView.didHide.calledOnce).to.be.true;
756+
expect(e.nextView.didShow.calledOnce).to.be.true;
757+
done();
758+
}
759+
});
760+
});
761+
it('calls events with a built-in spring animation', (done) => {
762+
const e = stubLifecycleEvents(() => {
763+
expect(e.prevView.willHide.calledOnce).to.be.true;
764+
expect(e.nextView.willShow.calledOnce).to.be.true;
765+
expect(e.prevView.didHide.calledOnce).to.be.false;
766+
expect(e.nextView.didShow.calledOnce).to.be.false;
767+
});
768+
controller.__popView({
769+
transition: Transition.type.PUSH_LEFT,
770+
onComplete() {
771+
expect(e.prevView.didHide.calledOnce).to.be.true;
772+
expect(e.nextView.didShow.calledOnce).to.be.true;
773+
done();
774+
}
775+
});
776+
});
777+
});
778+
});
694779
});

0 commit comments

Comments
 (0)