@@ -415,6 +415,78 @@ func TestFormsUseSlackTheme(t *testing.T) {
415415 })
416416}
417417
418+ func TestFormsAccessible (t * testing.T ) {
419+ fsMock := slackdeps .NewFsMock ()
420+ osMock := slackdeps .NewOsMock ()
421+ osMock .AddDefaultMocks ()
422+ cfg := config .NewConfig (fsMock , osMock )
423+ cfg .AccessibleFlag = true
424+ io := NewIOStreams (cfg , fsMock , osMock )
425+
426+ t .Run ("select form accepts valid numbered input" , func (t * testing.T ) {
427+ var selected string
428+ f := buildSelectForm (io , "Pick one" , []string {"A" , "B" , "C" }, SelectPromptConfig {}, & selected )
429+
430+ var out strings.Builder
431+ err := f .WithOutput (& out ).WithInput (strings .NewReader ("2\n " )).Run ()
432+
433+ assert .NoError (t , err )
434+ assert .Equal (t , "B" , selected )
435+ assert .Contains (t , out .String (), "1. A" )
436+ assert .Contains (t , out .String (), "2. B" )
437+ assert .Contains (t , out .String (), "3. C" )
438+ assert .Contains (t , out .String (), "Enter a number between 1 and 3" )
439+ })
440+
441+ t .Run ("select form shows default hint in accessible mode" , func (t * testing.T ) {
442+ var selected string
443+ f := buildSelectForm (io , "Pick one" , []string {"Alpha" , "Beta" }, SelectPromptConfig {}, & selected )
444+
445+ var out strings.Builder
446+ err := f .WithOutput (& out ).WithInput (strings .NewReader ("\n " )).Run ()
447+
448+ assert .NoError (t , err )
449+ assert .Equal (t , "Alpha" , selected )
450+ assert .Contains (t , out .String (), "Pick one (press Enter for 1)" )
451+ })
452+
453+ t .Run ("confirm form accepts yes/no input" , func (t * testing.T ) {
454+ var choice bool
455+ f := buildConfirmForm (io , "Continue?" , & choice )
456+
457+ var out strings.Builder
458+ err := f .WithOutput (& out ).WithInput (strings .NewReader ("y\n " )).Run ()
459+
460+ assert .NoError (t , err )
461+ assert .True (t , choice )
462+ assert .Contains (t , out .String (), "Continue?" )
463+ })
464+
465+ t .Run ("input form accepts text input" , func (t * testing.T ) {
466+ var input string
467+ f := buildInputForm (io , "Name?" , InputPromptConfig {}, & input )
468+
469+ var out strings.Builder
470+ err := f .WithOutput (& out ).WithInput (strings .NewReader ("my-app\n " )).Run ()
471+
472+ assert .NoError (t , err )
473+ assert .Equal (t , "my-app" , input )
474+ assert .Contains (t , out .String (), "Name?" )
475+ })
476+
477+ t .Run ("input form shows default placeholder in accessible mode" , func (t * testing.T ) {
478+ var input string
479+ f := buildInputForm (io , "Name your app:" , InputPromptConfig {Placeholder : "cool-app-123" }, & input )
480+
481+ var out strings.Builder
482+ err := f .WithOutput (& out ).WithInput (strings .NewReader ("\n " )).Run ()
483+
484+ assert .NoError (t , err )
485+ assert .Equal (t , "" , input )
486+ assert .Contains (t , out .String (), "Name your app (default: cool-app-123):" )
487+ })
488+ }
489+
418490func TestFormsNoColor (t * testing.T ) {
419491 t .Run ("forms use plain theme with no-color" , func (t * testing.T ) {
420492 fsMock := slackdeps .NewFsMock ()
0 commit comments