@@ -842,6 +842,84 @@ public function testSelectableCallableReceivesSelectableAndNotSplitItem() : void
842
842
self ::assertSame ($ expectedSelectedItem , $ actualSelectedItem );
843
843
}
844
844
845
+ public function testAddItemSelectsFirstSelectableItemWhenItemsExistButNoneAreSelectable () : void
846
+ {
847
+ $ menu = new CliMenu ('PHP School FTW ' , [], $ this ->terminal );
848
+ $ menu ->addItem (new StaticItem ('No Selectable ' ));
849
+
850
+ self ::assertNull (self ::readAttribute ($ menu , 'selectedItem ' ));
851
+
852
+ $ menu ->addItem ($ item = new SelectableItem ('Selectable ' , function () {
853
+ }));
854
+
855
+ self ::assertEquals ($ item , $ menu ->getSelectedItem ());
856
+ }
857
+
858
+ public function testAddItemsSelectsFirstSelectableItemWhenItemsExistButNoneAreSelectable () : void
859
+ {
860
+ $ menu = new CliMenu ('PHP School FTW ' , [], $ this ->terminal );
861
+ $ menu ->addItem (new StaticItem ('No Selectable ' ));
862
+
863
+ self ::assertNull (self ::readAttribute ($ menu , 'selectedItem ' ));
864
+
865
+ $ menu ->addItems ([$ item = new SelectableItem ('Selectable ' , function () {
866
+ })]);
867
+
868
+ self ::assertEquals ($ item , $ menu ->getSelectedItem ());
869
+ }
870
+
871
+ public function testSetItemsReSelectsFirstSelectableItem () : void
872
+ {
873
+ $ menu = new CliMenu ('PHP School FTW ' , [], $ this ->terminal );
874
+ $ menu ->addItem (new StaticItem ('No Selectable ' ));
875
+ $ menu ->addItem ($ item = new SelectableItem ('Selectable ' , function () {
876
+ }));
877
+
878
+ self ::assertEquals ($ item , $ menu ->getSelectedItem ());
879
+
880
+ $ menu ->setItems ([$ item2 = new SelectableItem ('Selectable ' , function () {
881
+ })]);
882
+
883
+ self ::assertEquals ($ item2 , $ menu ->getSelectedItem ());
884
+ }
885
+
886
+ public function testRemoveItemReSelectsFirstSelectableItemIfSelectedItemRemoved () : void
887
+ {
888
+ $ menu = new CliMenu ('PHP School FTW ' , [], $ this ->terminal );
889
+ $ menu ->addItem (new StaticItem ('No Selectable ' ));
890
+ $ menu ->addItem ($ item = new SelectableItem ('Selectable ' , function () {
891
+ }));
892
+
893
+ self ::assertEquals ($ item , $ menu ->getSelectedItem ());
894
+
895
+ $ menu ->removeItem ($ item );
896
+
897
+ self ::assertNull (self ::readAttribute ($ menu , 'selectedItem ' ));
898
+
899
+ $ menu = new CliMenu ('PHP School FTW ' , [], $ this ->terminal );
900
+ $ menu ->addItem (new StaticItem ('No Selectable ' ));
901
+ $ menu ->addItem ($ item1 = new SelectableItem ('Selectable ' , function () {
902
+ }));
903
+ $ menu ->addItem ($ item2 = new SelectableItem ('Selectable ' , function () {
904
+ }));
905
+
906
+ self ::assertEquals ($ item1 , $ menu ->getSelectedItem ());
907
+
908
+ $ menu ->removeItem ($ item1 );
909
+
910
+ self ::assertEquals ($ item2 , $ menu ->getSelectedItem ());
911
+ }
912
+
913
+ public function testGetSelectedItemThrowsExceptionIfNoSelectedItem () : void
914
+ {
915
+ self ::expectException (\RuntimeException::class);
916
+ self ::expectExceptionMessage ('No selected item ' );
917
+
918
+ $ menu = new CliMenu ('PHP School FTW ' , [], $ this ->terminal );
919
+ $ menu ->addItem (new StaticItem ('No Selectable ' ));
920
+ $ menu ->getSelectedItem ();
921
+ }
922
+
845
923
private function getTestFile () : string
846
924
{
847
925
return sprintf ('%s/res/%s.txt ' , __DIR__ , $ this ->getName ());
0 commit comments