@@ -801,218 +801,173 @@ describe('Splitter', () => {
801801 } ) ;
802802 } ) ;
803803
804- // TODO: test when the slots have assigned sizes/min sizes + edge cases
805804 describe ( 'Resizing with constraints and edge cases' , ( ) => {
806- describe ( 'Horizontal orientation' , ( ) => {
807- it ( 'should honor minSize and maxSize constraints when resizing, constraints in px' , async ( ) => {
808- const mixedConstraintSplitter = await fixture < IgcSplitterComponent > (
809- createTwoPanesWithSizesAndConstraints ( {
810- startSize : '200px' ,
811- startMinSize : '100px' ,
812- startMaxSize : '300px' ,
813- endSize : '200px' ,
814- endMinSize : '100px' ,
815- endMaxSize : '300px' ,
816- } )
817- ) ;
818- await elementUpdated ( mixedConstraintSplitter ) ;
805+ const testMinMaxConstraintsPx = async (
806+ orientation : SplitterOrientation
807+ ) => {
808+ const mixedConstraintSplitter = await fixture < IgcSplitterComponent > (
809+ createTwoPanesWithSizesAndConstraints ( {
810+ orientation,
811+ startSize : '200px' ,
812+ startMinSize : '100px' ,
813+ startMaxSize : '300px' ,
814+ endSize : '200px' ,
815+ endMinSize : '100px' ,
816+ endMaxSize : '300px' ,
817+ } )
818+ ) ;
819+ await elementUpdated ( mixedConstraintSplitter ) ;
819820
820- let deltaX = 1000 ;
821- await resize ( mixedConstraintSplitter , deltaX , 0 ) ;
821+ const isX = orientation === 'horizontal' ;
822+ let delta = 1000 ;
823+ await resize ( mixedConstraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
822824
823- let sizes = getPanesSizes ( mixedConstraintSplitter , 'width' ) ;
824- expect ( sizes . startSize ) . to . equal ( 300 ) ;
825+ let sizes = getPanesSizes (
826+ mixedConstraintSplitter ,
827+ isX ? 'width' : 'height'
828+ ) ;
829+ expect ( sizes . startSize ) . to . equal ( 300 ) ;
825830
826- deltaX = - 1000 ;
827- await resize ( mixedConstraintSplitter , deltaX , 0 ) ;
831+ delta = - 1000 ;
832+ await resize ( mixedConstraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
828833
829- sizes = getPanesSizes ( mixedConstraintSplitter , 'width' ) ;
830- expect ( sizes . startSize ) . to . equal ( 100 ) ;
834+ sizes = getPanesSizes ( mixedConstraintSplitter , isX ? 'width' : 'height ') ;
835+ expect ( sizes . startSize ) . to . equal ( 100 ) ;
831836
832- deltaX = 1000 ;
833- await resize ( mixedConstraintSplitter , deltaX , 0 ) ;
837+ delta = 1000 ;
838+ await resize ( mixedConstraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
839+ sizes = getPanesSizes ( mixedConstraintSplitter , isX ? 'width' : 'height' ) ;
840+ expect ( sizes . endSize ) . to . equal ( 100 ) ;
834841
835- sizes = getPanesSizes ( mixedConstraintSplitter , 'width' ) ;
836- expect ( sizes . endSize ) . to . equal ( 100 ) ;
842+ delta = - 1000 ;
843+ await resize ( mixedConstraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
837844
838- deltaX = - 1000 ;
839- await resize ( mixedConstraintSplitter , deltaX , 0 ) ;
845+ sizes = getPanesSizes ( mixedConstraintSplitter , isX ? 'width' : 'height' ) ;
846+ expect ( sizes . endSize ) . to . equal ( 300 ) ;
847+ } ;
840848
841- sizes = getPanesSizes ( mixedConstraintSplitter , 'width' ) ;
842- expect ( sizes . endSize ) . to . equal ( 300 ) ;
843- } ) ;
849+ const testMinMaxConstraintsInPercentage = async (
850+ orientation : SplitterOrientation
851+ ) => {
852+ const constraintSplitter = await fixture < IgcSplitterComponent > (
853+ createTwoPanesWithSizesAndConstraints ( {
854+ orientation,
855+ startSize : '30%' ,
856+ startMinSize : '10%' ,
857+ startMaxSize : '80%' ,
858+ endSize : '70%' ,
859+ endMinSize : '20%' ,
860+ endMaxSize : '90%' ,
861+ } )
862+ ) ;
863+ await elementUpdated ( constraintSplitter ) ;
844864
845- it ( 'should respect both panes constraints when they conflict during resize in px' , async ( ) => {
846- const constraintSplitter = await fixture < IgcSplitterComponent > (
847- createTwoPanesWithSizesAndConstraints ( {
848- startSize : '200px' ,
849- startMinSize : '100px' ,
850- startMaxSize : '400px' ,
851- endSize : '200px' ,
852- endMinSize : '150px' ,
853- endMaxSize : '350px' ,
854- } )
855- ) ;
856- await elementUpdated ( constraintSplitter ) ;
857-
858- const bar = getSplitterPart ( constraintSplitter , 'bar' ) ;
859- const barSize = bar . getBoundingClientRect ( ) . width ;
860- const totalAvailable = 500 - barSize ;
861- expect ( totalAvailable ) . to . equal ( 495 ) ;
862-
863- const initialSizes = getPanesSizes ( constraintSplitter , 'width' ) ;
864- const initialCombinedSize =
865- initialSizes . startSize + initialSizes . endSize ;
866-
867- // Try to grow start pane to max, but end pane has min (150px)
868- // Result: Start pane can only grow as much as end pane allows
869- const deltaX = 1000 ;
870- await resize ( constraintSplitter , deltaX , 0 ) ;
871-
872- const sizes = getPanesSizes ( constraintSplitter , 'width' ) ;
873-
874- // Start pane can only grow until end pane hits its minSize
875- // Within the initial combined size of 400px - because of flex basis
876- expect ( sizes . startSize ) . to . equal ( 250 ) ;
877- expect ( sizes . endSize ) . to . equal ( 150 ) ;
878-
879- expect ( sizes . startSize + sizes . endSize ) . to . equal ( initialCombinedSize ) ;
880- expect ( sizes . startSize + sizes . endSize ) . to . be . at . most ( totalAvailable ) ;
865+ const isX = orientation === 'horizontal' ;
866+
867+ const bar = getSplitterPart ( constraintSplitter , 'bar' ) ;
868+ const barSize = bar . getBoundingClientRect ( ) [ isX ? 'width' : 'height' ] ;
869+ const totalAvailable = 500 - barSize ;
870+ expect ( totalAvailable ) . to . equal ( 495 ) ;
871+
872+ let delta = 1000 ;
873+ await resize ( constraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
874+
875+ let sizes = getPanesSizes ( constraintSplitter , isX ? 'width' : 'height' ) ;
876+ const expectedStartMax = Math . round ( ( totalAvailable * 80 ) / 100 ) ;
877+ expect ( sizes . startSize ) . to . be . closeTo ( expectedStartMax , 2 ) ;
878+
879+ delta = - 1000 ;
880+ await resize ( constraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
881+
882+ sizes = getPanesSizes ( constraintSplitter , isX ? 'width' : 'height' ) ;
883+ const expectedStartMin = Math . round ( ( totalAvailable * 10 ) / 100 ) ;
884+ expect ( sizes . startSize ) . to . be . closeTo ( expectedStartMin , 2 ) ;
885+
886+ delta = 1000 ;
887+ await resize ( constraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
888+
889+ sizes = getPanesSizes ( constraintSplitter , isX ? 'width' : 'height' ) ;
890+ const expectedEndMin = Math . round ( ( totalAvailable * 20 ) / 100 ) ;
891+ expect ( sizes . endSize ) . to . be . closeTo ( expectedEndMin , 2 ) ;
892+
893+ delta = - 1000 ;
894+ await resize ( constraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
895+
896+ sizes = getPanesSizes ( constraintSplitter , isX ? 'width' : 'height' ) ;
897+ const expectedEndMax = Math . round ( ( totalAvailable * 90 ) / 100 ) ;
898+ expect ( sizes . endSize ) . to . be . closeTo ( expectedEndMax , 2 ) ;
899+ } ;
900+
901+ const testConflictingConstraints = async (
902+ orientation : SplitterOrientation
903+ ) => {
904+ const constraintSplitter = await fixture < IgcSplitterComponent > (
905+ createTwoPanesWithSizesAndConstraints ( {
906+ orientation,
907+ startSize : '200px' ,
908+ startMinSize : '100px' ,
909+ startMaxSize : '400px' ,
910+ endSize : '200px' ,
911+ endMinSize : '150px' ,
912+ endMaxSize : '350px' ,
913+ } )
914+ ) ;
915+ await elementUpdated ( constraintSplitter ) ;
916+
917+ const isX = orientation === 'horizontal' ;
918+
919+ const bar = getSplitterPart ( constraintSplitter , 'bar' ) ;
920+ const barSize = bar . getBoundingClientRect ( ) [ isX ? 'width' : 'height' ] ;
921+ const totalAvailable = 500 - barSize ;
922+ expect ( totalAvailable ) . to . equal ( 495 ) ;
923+
924+ const initialSizes = getPanesSizes (
925+ constraintSplitter ,
926+ isX ? 'width' : 'height'
927+ ) ;
928+ const initialCombinedSize = initialSizes . startSize + initialSizes . endSize ;
929+
930+ // Try to grow start pane to max, but end pane has min (150px)
931+ // Result: Start pane can only grow as much as end pane allows
932+ const delta = 1000 ;
933+ await resize ( constraintSplitter , isX ? delta : 0 , isX ? 0 : delta ) ;
934+
935+ const sizes = getPanesSizes ( constraintSplitter , isX ? 'width' : 'height' ) ;
936+
937+ // Start pane can only grow until end pane hits its minSize
938+ // Within the initial combined size of 400px - because of flex basis
939+ expect ( sizes . startSize ) . to . equal ( 250 ) ;
940+ expect ( sizes . endSize ) . to . equal ( 150 ) ;
941+
942+ expect ( sizes . startSize + sizes . endSize ) . to . equal ( initialCombinedSize ) ;
943+ expect ( sizes . startSize + sizes . endSize ) . to . be . at . most ( totalAvailable ) ;
944+ } ;
945+
946+ describe ( 'Horizontal orientation' , ( ) => {
947+ it ( 'should honor minSize and maxSize constraints when resizing, constraints in px' , async ( ) => {
948+ await testMinMaxConstraintsPx ( 'horizontal' ) ;
881949 } ) ;
882950
883951 it ( 'should honor minSize and maxSize constraints when resizing, constraints in %' , async ( ) => {
884- const constraintSplitter = await fixture < IgcSplitterComponent > (
885- createTwoPanesWithSizesAndConstraints ( {
886- startSize : '30%' ,
887- startMinSize : '10%' ,
888- startMaxSize : '80%' ,
889- endSize : '70%' ,
890- endMinSize : '20%' ,
891- endMaxSize : '90%' ,
892- } )
893- ) ;
894- await elementUpdated ( constraintSplitter ) ;
895-
896- const bar = getSplitterPart ( constraintSplitter , 'bar' ) ;
897- const barSize = bar . getBoundingClientRect ( ) . width ;
898- const totalAvailable = 500 - barSize ;
899- expect ( totalAvailable ) . to . equal ( 495 ) ;
900-
901- let deltaX = 1000 ;
902- await resize ( constraintSplitter , deltaX , 0 ) ;
903-
904- let sizes = getPanesSizes ( constraintSplitter , 'width' ) ;
905- const expectedStartMax = Math . round ( ( totalAvailable * 80 ) / 100 ) ;
906- expect ( sizes . startSize ) . to . be . closeTo ( expectedStartMax , 2 ) ;
907-
908- deltaX = - 1000 ;
909- await resize ( constraintSplitter , deltaX , 0 ) ;
910-
911- sizes = getPanesSizes ( constraintSplitter , 'width' ) ;
912- const expectedStartMin = Math . round ( ( totalAvailable * 10 ) / 100 ) ;
913- expect ( sizes . startSize ) . to . be . closeTo ( expectedStartMin , 2 ) ;
914-
915- deltaX = 1000 ;
916- await resize ( constraintSplitter , deltaX , 0 ) ;
917-
918- sizes = getPanesSizes ( constraintSplitter , 'width' ) ;
919- const expectedEndMin = Math . round ( ( totalAvailable * 20 ) / 100 ) ;
920- expect ( sizes . endSize ) . to . be . closeTo ( expectedEndMin , 2 ) ;
921-
922- deltaX = - 1000 ;
923- await resize ( constraintSplitter , deltaX , 0 ) ;
924-
925- sizes = getPanesSizes ( constraintSplitter , 'width' ) ;
926- const expectedEndMax = Math . round ( ( totalAvailable * 90 ) / 100 ) ;
927- expect ( sizes . endSize ) . to . be . closeTo ( expectedEndMax , 2 ) ;
952+ await testMinMaxConstraintsInPercentage ( 'horizontal' ) ;
953+ } ) ;
954+
955+ it ( 'should respect both panes constraints when they conflict during resize in px' , async ( ) => {
956+ await testConflictingConstraints ( 'horizontal' ) ;
928957 } ) ;
929958 } ) ;
930959
931960 describe ( 'Vertical orientation' , ( ) => {
932961 it ( 'should honor minSize and maxSize constraints when resizing - constraints in px - vertical' , async ( ) => {
933- const mixedConstraintSplitter = await fixture < IgcSplitterComponent > (
934- createTwoPanesWithSizesAndConstraints ( {
935- orientation : 'vertical' ,
936- startSize : '200px' ,
937- startMinSize : '100px' ,
938- startMaxSize : '300px' ,
939- endSize : '200px' ,
940- endMinSize : '100px' ,
941- endMaxSize : '300px' ,
942- } )
943- ) ;
944- await elementUpdated ( mixedConstraintSplitter ) ;
945-
946- let deltaY = 1000 ;
947- await resize ( mixedConstraintSplitter , 0 , deltaY ) ;
948-
949- let sizes = getPanesSizes ( mixedConstraintSplitter , 'height' ) ;
950- expect ( sizes . startSize ) . to . equal ( 300 ) ;
951-
952- deltaY = - 1000 ;
953- await resize ( mixedConstraintSplitter , 0 , deltaY ) ;
954-
955- sizes = getPanesSizes ( mixedConstraintSplitter , 'height' ) ;
956- expect ( sizes . startSize ) . to . equal ( 100 ) ;
957-
958- deltaY = 1000 ;
959- await resize ( mixedConstraintSplitter , 0 , deltaY ) ;
960- sizes = getPanesSizes ( mixedConstraintSplitter , 'height' ) ;
961- expect ( sizes . endSize ) . to . equal ( 100 ) ;
962-
963- deltaY = - 1000 ;
964- await resize ( mixedConstraintSplitter , 0 , deltaY ) ;
965-
966- sizes = getPanesSizes ( mixedConstraintSplitter , 'height' ) ;
967- expect ( sizes . endSize ) . to . equal ( 300 ) ;
962+ await testMinMaxConstraintsPx ( 'vertical' ) ;
968963 } ) ;
969964
970965 it ( 'should honor minSize and maxSize constraints when resizing, constraints in % - vertical' , async ( ) => {
971- const constraintSplitter = await fixture < IgcSplitterComponent > (
972- createTwoPanesWithSizesAndConstraints ( {
973- orientation : 'vertical' ,
974- startSize : '30%' ,
975- startMinSize : '10%' ,
976- startMaxSize : '80%' ,
977- endSize : '70%' ,
978- endMinSize : '20%' ,
979- endMaxSize : '90%' ,
980- } )
981- ) ;
982- await elementUpdated ( constraintSplitter ) ;
983-
984- const bar = getSplitterPart ( constraintSplitter , 'bar' ) ;
985- const barSize = bar . getBoundingClientRect ( ) . height ;
986- const totalAvailable = 500 - barSize ;
987- expect ( totalAvailable ) . to . equal ( 495 ) ;
988-
989- let deltaY = 1000 ;
990- await resize ( constraintSplitter , 0 , deltaY ) ;
991-
992- let sizes = getPanesSizes ( constraintSplitter , 'height' ) ;
993- const expectedStartMax = Math . round ( ( totalAvailable * 80 ) / 100 ) ;
994- expect ( sizes . startSize ) . to . be . closeTo ( expectedStartMax , 2 ) ;
995-
996- deltaY = - 1000 ;
997- await resize ( constraintSplitter , 0 , deltaY ) ;
998-
999- sizes = getPanesSizes ( constraintSplitter , 'height' ) ;
1000- const expectedStartMin = Math . round ( ( totalAvailable * 10 ) / 100 ) ;
1001- expect ( sizes . startSize ) . to . be . closeTo ( expectedStartMin , 2 ) ;
1002-
1003- deltaY = 1000 ;
1004- await resize ( constraintSplitter , 0 , deltaY ) ;
1005-
1006- sizes = getPanesSizes ( constraintSplitter , 'height' ) ;
1007- const expectedEndMin = Math . round ( ( totalAvailable * 20 ) / 100 ) ;
1008- expect ( sizes . endSize ) . to . be . closeTo ( expectedEndMin , 2 ) ;
1009-
1010- deltaY = - 1000 ;
1011- await resize ( constraintSplitter , 0 , deltaY ) ;
1012-
1013- sizes = getPanesSizes ( constraintSplitter , 'height' ) ;
1014- const expectedEndMax = Math . round ( ( totalAvailable * 90 ) / 100 ) ;
1015- expect ( sizes . endSize ) . to . be . closeTo ( expectedEndMax , 2 ) ;
966+ await testMinMaxConstraintsInPercentage ( 'vertical' ) ;
967+ } ) ;
968+
969+ it ( 'should respect both panes constraints when they conflict during resize in px - vertical' , async ( ) => {
970+ await testConflictingConstraints ( 'vertical' ) ;
1016971 } ) ;
1017972 } ) ;
1018973
0 commit comments