Skip to content

Commit 9c26894

Browse files
committed
feat: add --accessible flag to huh interactive prompts
1 parent 3621ff8 commit 9c26894

File tree

4 files changed

+53
-0
lines changed

4 files changed

+53
-0
lines changed

internal/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type Config struct {
5858
SlackTestTraceFlag bool
5959
TeamFlag string
6060
TokenFlag string
61+
Accessible bool
6162
NoColor bool
6263

6364
// Feature experiments

internal/config/flags.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func (c *Config) InitializeGlobalFlags(cmd *cobra.Command) {
3737
cmd.PersistentFlags().BoolVarP(&c.DeprecatedDevFlag, "dev", "d", false, "use dev apis") // Can be removed after v0.25.0
3838
cmd.PersistentFlags().StringVarP(&c.DeprecatedWorkspaceFlag, "workspace", "", "", "select workspace or organization by domain name or team ID")
3939
cmd.PersistentFlags().StringSliceVarP(&c.ExperimentsFlag, "experiment", "e", nil, "use the experiment(s) in the command")
40+
cmd.PersistentFlags().BoolVarP(&c.Accessible, "accessible", "", false, "use accessible prompts for screen readers")
4041
cmd.PersistentFlags().BoolVarP(&c.ForceFlag, "force", "f", false, "ignore warnings and continue executing command")
4142
cmd.PersistentFlags().BoolVarP(&c.NoColor, "no-color", "", false, "remove styles and formatting from outputs")
4243
cmd.PersistentFlags().BoolVarP(&c.SkipUpdateFlag, "skip-update", "s", false, "skip checking for latest version of CLI")

internal/iostreams/forms.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ func newForm(io *IOStreams, field huh.Field) *huh.Form {
3737
} else {
3838
form = form.WithTheme(style.ThemeSurvey())
3939
}
40+
if io != nil && io.config.Accessible {
41+
form = form.WithAccessible(true)
42+
}
4043
return form
4144
}
4245

internal/iostreams/forms_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,54 @@ 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.Accessible = 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("confirm form accepts yes/no input", func(t *testing.T) {
442+
var choice bool
443+
f := buildConfirmForm(io, "Continue?", &choice)
444+
445+
var out strings.Builder
446+
err := f.WithOutput(&out).WithInput(strings.NewReader("y\n")).Run()
447+
448+
assert.NoError(t, err)
449+
assert.True(t, choice)
450+
assert.Contains(t, out.String(), "Continue?")
451+
})
452+
453+
t.Run("input form accepts text input", func(t *testing.T) {
454+
var input string
455+
f := buildInputForm(io, "Name?", InputPromptConfig{}, &input)
456+
457+
var out strings.Builder
458+
err := f.WithOutput(&out).WithInput(strings.NewReader("my-app\n")).Run()
459+
460+
assert.NoError(t, err)
461+
assert.Equal(t, "my-app", input)
462+
assert.Contains(t, out.String(), "Name?")
463+
})
464+
}
465+
418466
func TestFormsUseSurveyTheme(t *testing.T) {
419467
t.Run("multi-select uses survey prefix without lipgloss", func(t *testing.T) {
420468
var selected []string

0 commit comments

Comments
 (0)