@@ -19,6 +19,7 @@ import * as helper from "../helper";
1919import { GridLayout } from "tns-core-modules/ui/layouts/grid-layout" ;
2020import { StackLayout } from "tns-core-modules/ui/layouts/stack-layout" ;
2121import { View , PercentLength , Observable , unsetValue , EventData , isIOS } from "tns-core-modules/ui/core/view" ;
22+ import { Frame } from "tns-core-modules/ui/frame" ;
2223import { Label } from "tns-core-modules/ui/label" ;
2324import { Color } from "tns-core-modules/color" ;
2425
@@ -538,6 +539,271 @@ export function test_WhenPageIsNavigatedToItCanShowAnotherPageAsModal() {
538539 masterPage . off ( Page . navigatedToEvent , navigatedToEventHandler ) ;
539540}
540541
542+ export function test_WhenModalPageShownHostPageNavigationEventsShouldNotBeRaised ( ) {
543+ let hostNavigatingToCount = 0 ;
544+ let hostNavigatedToCount = 0 ;
545+ let hostNavigatingFromCount = 0 ;
546+ let hostNavigatedFromCount = 0 ;
547+
548+ let ready = false ;
549+
550+ const modalCloseCallback = function ( returnValue : any ) {
551+ ready = true ;
552+ }
553+
554+ const hostNavigatingToEventHandler = function ( ) {
555+ hostNavigatingToCount ++ ;
556+ } ;
557+
558+ const hostNavigatedToEventHandler = function ( ) {
559+ hostNavigatedToCount ++ ;
560+ } ;
561+
562+ const hostNavigatingFromEventHandler = function ( ) {
563+ hostNavigatingFromCount ++ ;
564+ } ;
565+
566+ const hostNavigatedFromEventHandler = function ( ) {
567+ hostNavigatedFromCount ++ ;
568+ } ;
569+
570+ const hostNavigatedToEventHandler2 = function ( args : NavigatedData ) {
571+ const page = < Page > args . object ;
572+ page . off ( Page . navigatedToEvent , hostNavigatedToEventHandler2 ) ;
573+
574+ const basePath = "ui/page/" ;
575+ const entry : NavigationEntry = {
576+ moduleName : basePath + "modal-page"
577+ } ;
578+
579+ const modalPage = createViewFromEntry ( entry ) as Page ;
580+ page . showModal ( modalPage , { } , modalCloseCallback , false , false ) ;
581+ }
582+
583+ const masterPageFactory = function ( ) : Page {
584+ const masterPage = new Page ( ) ;
585+ masterPage . id = "masterPage_test_WhenModalPageShownHostPageNavigationEventsShouldNotBeRaised" ;
586+ masterPage . on ( Page . navigatingToEvent , hostNavigatingToEventHandler ) ;
587+ masterPage . on ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
588+ masterPage . on ( Page . navigatedToEvent , hostNavigatedToEventHandler2 ) ;
589+ masterPage . on ( Page . navigatingFromEvent , hostNavigatingFromEventHandler ) ;
590+ masterPage . on ( Page . navigatedFromEvent , hostNavigatedFromEventHandler ) ;
591+
592+ const label = new Label ( ) ;
593+ label . text = "Text" ;
594+ masterPage . content = label ;
595+ return masterPage ;
596+ } ;
597+
598+ helper . navigate ( masterPageFactory ) ;
599+
600+ TKUnit . waitUntilReady ( ( ) => ready ) ;
601+
602+ // only raised by the initial navigation to the master page
603+ TKUnit . assertTrue ( hostNavigatingToCount === 1 ) ;
604+ TKUnit . assertTrue ( hostNavigatedToCount === 1 ) ;
605+
606+ TKUnit . assertTrue ( hostNavigatingFromCount === 0 ) ;
607+ TKUnit . assertTrue ( hostNavigatedFromCount === 0 ) ;
608+ }
609+
610+ export function test_WhenModalPageShownModalNavigationToEventsShouldBeRaised ( ) {
611+ let modalNavigatingToCount = 0 ;
612+ let modalNavigatedToCount = 0 ;
613+ let modalNavigatingFromCount = 0 ;
614+ let modalNavigatedFromCount = 0 ;
615+
616+ let ready = false ;
617+
618+ const modalCloseCallback = function ( returnValue : any ) {
619+ ready = true ;
620+ }
621+
622+ const modalNavigatingToEventHandler = function ( ) {
623+ modalNavigatingToCount ++ ;
624+ } ;
625+
626+ const modalNavigatedToEventHandler = function ( args : NavigatedData ) {
627+ modalNavigatedToCount ++ ;
628+
629+ ( args . object as View ) . closeModal ( ) ;
630+ } ;
631+
632+ const modalNavigatingFromEventHandler = function ( ) {
633+ modalNavigatingFromCount ++ ;
634+ } ;
635+
636+ const modalNavigatedFromEventHandler = function ( ) {
637+ modalNavigatedFromCount ++ ;
638+ } ;
639+
640+ const modalFrameShownModallyEventHandler = function ( args ) {
641+ const basePath = "ui/page/" ;
642+ const entry : NavigationEntry = {
643+ moduleName : basePath + "modal-page"
644+ } ;
645+
646+ const modalPage = createViewFromEntry ( entry ) as Page ;
647+ modalPage . on ( Page . navigatingToEvent , modalNavigatingToEventHandler ) ;
648+ modalPage . on ( Page . navigatedToEvent , modalNavigatedToEventHandler ) ;
649+ modalPage . on ( Page . navigatingFromEvent , modalNavigatingFromEventHandler ) ;
650+ modalPage . on ( Page . navigatedFromEvent , modalNavigatedFromEventHandler ) ;
651+
652+ ( args . object as Frame ) . navigate ( ( ) => modalPage ) ;
653+ }
654+
655+ let modalFrame ;
656+
657+ const hostNavigatedToEventHandler = function ( args ) {
658+ const page = < Page > args . object ;
659+ page . off ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
660+
661+ modalFrame = new Frame ( ) ;
662+ modalFrame . on ( Frame . shownModallyEvent , modalFrameShownModallyEventHandler ) ;
663+
664+ page . showModal ( modalFrame , { } , modalCloseCallback , false , false ) ;
665+ }
666+
667+ const masterPageFactory = function ( ) : Page {
668+ const masterPage = new Page ( ) ;
669+ masterPage . id = "masterPage_test_WhenModalPageShownModalNavigationToEventsShouldBeRaised" ;
670+ masterPage . on ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
671+
672+ const label = new Label ( ) ;
673+ label . text = "Text" ;
674+ masterPage . content = label ;
675+ return masterPage ;
676+ } ;
677+
678+ helper . navigate ( masterPageFactory ) ;
679+
680+ TKUnit . waitUntilReady ( ( ) => ready && ! modalFrame . isLoaded ) ;
681+
682+ // only raised by the initial show modal navigation
683+ TKUnit . assertTrue ( modalNavigatingToCount === 1 ) ;
684+ TKUnit . assertTrue ( modalNavigatedToCount === 1 ) ;
685+
686+ TKUnit . assertTrue ( modalNavigatingFromCount === 0 ) ;
687+ TKUnit . assertTrue ( modalNavigatedFromCount === 0 ) ;
688+ }
689+
690+ export function test_WhenModalFrameShownModalEventsRaisedOnRootModalFrame ( ) {
691+ let showingModallyCount = 0 ;
692+ let shownModallyCount = 0 ;
693+
694+ let ready = false ;
695+
696+ const modalCloseCallback = function ( returnValue : any ) {
697+ ready = true ;
698+ }
699+
700+ const modalFrameShowingModallyEventHandler = function ( args : ShownModallyData ) {
701+ showingModallyCount ++ ;
702+ }
703+
704+ const modalFrameShownModallyEventHandler = function ( args : ShownModallyData ) {
705+ shownModallyCount ++ ;
706+
707+ args . closeCallback ( "return value" ) ;
708+ }
709+
710+ let modalFrame ;
711+
712+ const hostNavigatedToEventHandler = function ( args ) {
713+ const page = < Page > args . object ;
714+ page . off ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
715+
716+ const basePath = "ui/page/" ;
717+ const entry : NavigationEntry = {
718+ moduleName : basePath + "modal-page"
719+ } ;
720+
721+ const modalPage = createViewFromEntry ( entry ) as Page ;
722+
723+ modalFrame = new Frame ( ) ;
724+ modalFrame . on ( Frame . showingModallyEvent , modalFrameShowingModallyEventHandler ) ;
725+ modalFrame . on ( Frame . shownModallyEvent , modalFrameShownModallyEventHandler ) ;
726+ modalFrame . navigate ( ( ) => modalPage ) ;
727+
728+ page . showModal ( modalFrame , { } , modalCloseCallback , false , false ) ;
729+ }
730+
731+ const masterPageFactory = function ( ) : Page {
732+ const masterPage = new Page ( ) ;
733+ masterPage . id = "masterPage_test_WhenModalFrameShownModalEventsRaisedOnRootModalFrame" ;
734+ masterPage . on ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
735+
736+ const label = new Label ( ) ;
737+ label . text = "Text" ;
738+ masterPage . content = label ;
739+ return masterPage ;
740+ } ;
741+
742+ helper . navigate ( masterPageFactory ) ;
743+
744+ TKUnit . waitUntilReady ( ( ) => ready && ! modalFrame . isLoaded ) ;
745+
746+ TKUnit . assertTrue ( showingModallyCount === 1 ) ;
747+ TKUnit . assertTrue ( shownModallyCount === 1 ) ;
748+ }
749+
750+ export function test_WhenModalPageShownShowModalEventsRaisedOnRootModalPage ( ) {
751+ let showingModallyCount = 0 ;
752+ let shownModallyCount = 0 ;
753+
754+ let ready = false ;
755+
756+ const modalCloseCallback = function ( returnValue : any ) {
757+ ready = true ;
758+ }
759+
760+ const modalPageShowingModallyEventHandler = function ( args : ShownModallyData ) {
761+ showingModallyCount ++ ;
762+ }
763+
764+ const modalPageShownModallyEventHandler = function ( args : ShownModallyData ) {
765+ shownModallyCount ++ ;
766+
767+ setTimeout ( ( ) => {
768+ args . closeCallback ( "return value" ) ;
769+ } , 0 ) ;
770+ }
771+
772+ const hostNavigatedToEventHandler = function ( args ) {
773+ const page = < Page > args . object ;
774+ page . off ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
775+
776+ const basePath = "ui/page/" ;
777+ const entry : NavigationEntry = {
778+ moduleName : basePath + "modal-page"
779+ } ;
780+
781+ const modalPage = createViewFromEntry ( entry ) as Page ;
782+ modalPage . on ( Page . showingModallyEvent , modalPageShowingModallyEventHandler ) ;
783+ modalPage . on ( Page . shownModallyEvent , modalPageShownModallyEventHandler ) ;
784+
785+ page . showModal ( modalPage , { } , modalCloseCallback , false , false ) ;
786+ }
787+
788+ const masterPageFactory = function ( ) : Page {
789+ const masterPage = new Page ( ) ;
790+ masterPage . id = "masterPage_test_WhenModalPageShownShowModalEventsRaisedOnRootModalPage" ;
791+ masterPage . on ( Page . navigatedToEvent , hostNavigatedToEventHandler ) ;
792+
793+ const label = new Label ( ) ;
794+ label . text = "Text" ;
795+ masterPage . content = label ;
796+ return masterPage ;
797+ } ;
798+
799+ helper . navigate ( masterPageFactory ) ;
800+
801+ TKUnit . waitUntilReady ( ( ) => ready ) ;
802+
803+ TKUnit . assertTrue ( showingModallyCount === 1 ) ;
804+ TKUnit . assertTrue ( shownModallyCount === 1 ) ;
805+ }
806+
541807export function test_percent_width_and_height_support ( ) {
542808 const testPage = new Page ( ) ;
543809 testPage . id = "test_percent_width_and_height_support" ;
0 commit comments