tty-prompt 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -3
  3. data/CHANGELOG.md +12 -0
  4. data/README.md +3 -3
  5. data/appveyor.yml +2 -0
  6. data/lib/tty/prompt/keypress.rb +7 -4
  7. data/lib/tty/prompt/reader.rb +1 -1
  8. data/lib/tty/prompt/reader/win_api.rb +14 -0
  9. data/lib/tty/prompt/reader/win_console.rb +9 -2
  10. data/lib/tty/prompt/timeout.rb +44 -23
  11. data/lib/tty/prompt/version.rb +1 -1
  12. data/tty-prompt.gemspec +6 -3
  13. metadata +21 -131
  14. data/spec/spec_helper.rb +0 -45
  15. data/spec/unit/ask_spec.rb +0 -132
  16. data/spec/unit/choice/eql_spec.rb +0 -22
  17. data/spec/unit/choice/from_spec.rb +0 -29
  18. data/spec/unit/choices/add_spec.rb +0 -12
  19. data/spec/unit/choices/each_spec.rb +0 -13
  20. data/spec/unit/choices/find_by_spec.rb +0 -10
  21. data/spec/unit/choices/new_spec.rb +0 -10
  22. data/spec/unit/choices/pluck_spec.rb +0 -9
  23. data/spec/unit/collect_spec.rb +0 -33
  24. data/spec/unit/converters/convert_bool_spec.rb +0 -58
  25. data/spec/unit/converters/convert_char_spec.rb +0 -11
  26. data/spec/unit/converters/convert_custom_spec.rb +0 -14
  27. data/spec/unit/converters/convert_date_spec.rb +0 -34
  28. data/spec/unit/converters/convert_file_spec.rb +0 -17
  29. data/spec/unit/converters/convert_number_spec.rb +0 -39
  30. data/spec/unit/converters/convert_path_spec.rb +0 -18
  31. data/spec/unit/converters/convert_range_spec.rb +0 -22
  32. data/spec/unit/converters/convert_regex_spec.rb +0 -12
  33. data/spec/unit/converters/convert_string_spec.rb +0 -21
  34. data/spec/unit/converters/on_error_spec.rb +0 -9
  35. data/spec/unit/distance/distance_spec.rb +0 -73
  36. data/spec/unit/enum_paginator_spec.rb +0 -65
  37. data/spec/unit/enum_select_spec.rb +0 -310
  38. data/spec/unit/error_spec.rb +0 -20
  39. data/spec/unit/evaluator_spec.rb +0 -67
  40. data/spec/unit/expand_spec.rb +0 -198
  41. data/spec/unit/keypress_spec.rb +0 -58
  42. data/spec/unit/mask_spec.rb +0 -132
  43. data/spec/unit/multi_select_spec.rb +0 -319
  44. data/spec/unit/multiline_spec.rb +0 -77
  45. data/spec/unit/new_spec.rb +0 -20
  46. data/spec/unit/ok_spec.rb +0 -10
  47. data/spec/unit/paginator_spec.rb +0 -63
  48. data/spec/unit/question/checks_spec.rb +0 -97
  49. data/spec/unit/question/default_spec.rb +0 -31
  50. data/spec/unit/question/echo_spec.rb +0 -38
  51. data/spec/unit/question/in_spec.rb +0 -115
  52. data/spec/unit/question/initialize_spec.rb +0 -12
  53. data/spec/unit/question/modifier/apply_to_spec.rb +0 -24
  54. data/spec/unit/question/modifier/letter_case_spec.rb +0 -41
  55. data/spec/unit/question/modifier/whitespace_spec.rb +0 -51
  56. data/spec/unit/question/modify_spec.rb +0 -41
  57. data/spec/unit/question/required_spec.rb +0 -92
  58. data/spec/unit/question/validate_spec.rb +0 -115
  59. data/spec/unit/question/validation/call_spec.rb +0 -31
  60. data/spec/unit/question/validation/coerce_spec.rb +0 -30
  61. data/spec/unit/reader/history_spec.rb +0 -172
  62. data/spec/unit/reader/key_event_spec.rb +0 -86
  63. data/spec/unit/reader/line_spec.rb +0 -110
  64. data/spec/unit/reader/publish_keypress_event_spec.rb +0 -94
  65. data/spec/unit/reader/read_keypress_spec.rb +0 -80
  66. data/spec/unit/reader/read_line_spec.rb +0 -68
  67. data/spec/unit/reader/read_multiline_spec.rb +0 -60
  68. data/spec/unit/result_spec.rb +0 -40
  69. data/spec/unit/say_spec.rb +0 -67
  70. data/spec/unit/select_spec.rb +0 -359
  71. data/spec/unit/slider_spec.rb +0 -96
  72. data/spec/unit/statement/initialize_spec.rb +0 -15
  73. data/spec/unit/suggest_spec.rb +0 -28
  74. data/spec/unit/warn_spec.rb +0 -21
  75. data/spec/unit/yes_no_spec.rb +0 -235
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt::Statement, '#new' do
4
- it "forces newline after the prompt message" do
5
- prompt = TTY::TestPrompt.new
6
- statement = described_class.new(prompt)
7
- expect(statement.newline).to eq(true)
8
- end
9
-
10
- it "displays prompt message in color" do
11
- prompt = TTY::TestPrompt.new
12
- statement = described_class.new(prompt)
13
- expect(statement.color).to eq(false)
14
- end
15
- end
@@ -1,28 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt, '#suggest' do
4
- let(:possible) { %w(status stage stash commit branch blame) }
5
-
6
- subject(:prompt) { TTY::TestPrompt.new }
7
-
8
- it 'suggests few matches' do
9
- prompt.suggest('sta', possible)
10
- expect(prompt.output.string).
11
- to eql("Did you mean one of these?\n stage\n stash\n")
12
- end
13
-
14
- it 'suggests a single match for one character' do
15
- prompt.suggest('b', possible)
16
- expect(prompt.output.string).to eql("Did you mean this?\n blame\n")
17
- end
18
-
19
- it 'suggests a single match for two characters' do
20
- prompt.suggest('co', possible)
21
- expect(prompt.output.string).to eql("Did you mean this?\n commit\n")
22
- end
23
-
24
- it 'suggests with different text and indentation' do
25
- prompt.suggest('b', possible, indent: 4, single_text: 'Perhaps you meant?')
26
- expect(prompt.output.string).to eql("Perhaps you meant?\n blame\n")
27
- end
28
- end
@@ -1,21 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt, '#warn' do
4
-
5
- subject(:prompt) { TTY::TestPrompt.new }
6
-
7
- it 'displays one message' do
8
- prompt.warn "Careful young apprentice!"
9
- expect(prompt.output.string).to eql "\e[33mCareful young apprentice!\e[0m\n"
10
- end
11
-
12
- it 'displays many messages' do
13
- prompt.warn "Careful there!", "It's dangerous!"
14
- expect(prompt.output.string).to eql "\e[33mCareful there!\e[0m\n\e[33mIt's dangerous!\e[0m\n"
15
- end
16
-
17
- it 'displays message with option' do
18
- prompt.warn "Careful young apprentice!", newline: false
19
- expect(prompt.output.string).to eql "\e[33mCareful young apprentice!\e[0m"
20
- end
21
- end
@@ -1,235 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt, 'confirmation' do
4
-
5
- subject(:prompt) { TTY::TestPrompt.new }
6
-
7
- context '#yes?' do
8
- it 'agrees with question' do
9
- prompt.input << 'yes'
10
- prompt.input.rewind
11
- expect(prompt.yes?("Are you a human?")).to eq(true)
12
- expect(prompt.output.string).to eq([
13
- "Are you a human? \e[90m(Y/n)\e[0m ",
14
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m y",
15
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m ye",
16
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m yes",
17
- "\e[1A\e[2K\e[1G",
18
- "Are you a human? \e[32mYes\e[0m\n"
19
- ].join)
20
- end
21
-
22
- it 'disagrees with question' do
23
- prompt.input << 'no'
24
- prompt.input.rewind
25
- expect(prompt.yes?("Are you a human?")).to eq(false)
26
- expect(prompt.output.string).to eq([
27
- "Are you a human? \e[90m(Y/n)\e[0m ",
28
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m n",
29
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m no",
30
- "\e[1A\e[2K\e[1G",
31
- "Are you a human? \e[32mno\e[0m\n"
32
- ].join)
33
- end
34
-
35
- it 'assumes default true' do
36
- prompt.input << "\r"
37
- prompt.input.rewind
38
- expect(prompt.yes?("Are you a human?")).to eq(true)
39
- expect(prompt.output.string).to eq([
40
- "Are you a human? \e[90m(Y/n)\e[0m ",
41
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m \n",
42
- "\e[1A\e[2K\e[1G",
43
- "Are you a human? \e[32mYes\e[0m\n"
44
- ].join)
45
- end
46
-
47
- it 'changes default' do
48
- prompt.input << "\n"
49
- prompt.input.rewind
50
- expect(prompt.yes?("Are you a human?", default: false)).to eq(false)
51
- expect(prompt.output.string).to eq([
52
- "Are you a human? \e[90m(y/N)\e[0m ",
53
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m \n",
54
- "\e[1A\e[2K\e[1G",
55
- "Are you a human? \e[32mNo\e[0m\n"
56
- ].join)
57
- end
58
-
59
- it "defaults suffix and converter" do
60
- prompt.input << "Nope\n"
61
- prompt.input.rewind
62
- result = prompt.yes?("Are you a human?") do |q|
63
- q.positive 'Yup'
64
- q.negative 'nope'
65
- end
66
- expect(result).to eq(false)
67
- expect(prompt.output.string).to eq([
68
- "Are you a human? \e[90m(Yup/nope)\e[0m ",
69
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m N",
70
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m No",
71
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nop",
72
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope",
73
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope\n",
74
- "\e[1A\e[2K\e[1G",
75
- "Are you a human? \e[32mnope\e[0m\n"
76
- ].join)
77
- end
78
-
79
- it "defaults positive and negative" do
80
- prompt.input << "Nope\n"
81
- prompt.input.rewind
82
- result = prompt.yes?("Are you a human?") do |q|
83
- q.suffix 'Yup/nope'
84
- end
85
- expect(result).to eq(false)
86
- expect(prompt.output.string).to eq([
87
- "Are you a human? \e[90m(Yup/nope)\e[0m ",
88
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m N",
89
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m No",
90
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nop",
91
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope",
92
- "\e[2K\e[1GAre you a human? \e[90m(Yup/nope)\e[0m Nope\n",
93
- "\e[1A\e[2K\e[1G",
94
- "Are you a human? \e[32mnope\e[0m\n"
95
- ].join)
96
- end
97
-
98
- it "customizes question through options" do
99
- prompt.input << "\r"
100
- prompt.input.rewind
101
- result = prompt.yes?("Are you a human?", suffix: 'Agree/Disagree',
102
- positive: 'Agree', negative: 'Disagree')
103
- expect(result).to eq(true)
104
- expect(prompt.output.string).to eq([
105
- "Are you a human? \e[90m(Agree/Disagree)\e[0m ",
106
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m \n",
107
- "\e[1A\e[2K\e[1G",
108
- "Are you a human? \e[32mAgree\e[0m\n"
109
- ].join)
110
- end
111
-
112
- it "customizes question through DSL" do
113
- prompt.input << "disagree\r"
114
- prompt.input.rewind
115
- conversion = proc { |input| !input.match(/^agree$/i).nil? }
116
- result = prompt.yes?("Are you a human?") do |q|
117
- q.suffix 'Agree/Disagree'
118
- q.positive 'Agree'
119
- q.negative 'Disagree'
120
- q.convert conversion
121
- end
122
- expect(result).to eq(false)
123
- expect(prompt.output.string).to eq([
124
- "Are you a human? \e[90m(Agree/Disagree)\e[0m ",
125
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m d",
126
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m di",
127
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m dis",
128
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disa",
129
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disag",
130
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagr",
131
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagre",
132
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagree",
133
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m disagree\n",
134
- "\e[1A\e[2K\e[1G",
135
- "Are you a human? \e[32mDisagree\e[0m\n"
136
- ].join)
137
- end
138
- end
139
-
140
- context '#no?' do
141
- it 'agrees with question' do
142
- prompt.input << 'no'
143
- prompt.input.rewind
144
- expect(prompt.no?("Are you a human?")).to eq(true)
145
- expect(prompt.output.string).to eq([
146
- "Are you a human? \e[90m(y/N)\e[0m ",
147
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m n",
148
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m no",
149
- "\e[1A\e[2K\e[1G",
150
- "Are you a human? \e[32mNo\e[0m\n"
151
- ].join)
152
- end
153
-
154
- it 'disagrees with question' do
155
- prompt.input << 'yes'
156
- prompt.input.rewind
157
- expect(prompt.no?("Are you a human?")).to eq(false)
158
- expect(prompt.output.string).to eq([
159
- "Are you a human? \e[90m(y/N)\e[0m ",
160
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m y",
161
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m ye",
162
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m yes",
163
- "\e[1A\e[2K\e[1G",
164
- "Are you a human? \e[32myes\e[0m\n"
165
- ].join)
166
- end
167
-
168
- it 'assumes default false' do
169
- prompt.input << "\r"
170
- prompt.input.rewind
171
- expect(prompt.no?("Are you a human?")).to eq(true)
172
- expect(prompt.output.string).to eq([
173
- "Are you a human? \e[90m(y/N)\e[0m ",
174
- "\e[2K\e[1GAre you a human? \e[90m(y/N)\e[0m \n",
175
- "\e[1A\e[2K\e[1G",
176
- "Are you a human? \e[32mNo\e[0m\n"
177
- ].join)
178
- end
179
-
180
- it 'changes default' do
181
- prompt.input << "\r"
182
- prompt.input.rewind
183
- expect(prompt.no?("Are you a human?", default: true)).to eq(false)
184
- expect(prompt.output.string).to eq([
185
- "Are you a human? \e[90m(Y/n)\e[0m ",
186
- "\e[2K\e[1GAre you a human? \e[90m(Y/n)\e[0m \n",
187
- "\e[1A\e[2K\e[1G",
188
- "Are you a human? \e[32mYes\e[0m\n"
189
- ].join)
190
- end
191
-
192
- it "defaults suffix and converter" do
193
- prompt.input << "Yup\n"
194
- prompt.input.rewind
195
- result = prompt.no?("Are you a human?") do |q|
196
- q.positive 'yup'
197
- q.negative 'Nope'
198
- end
199
- expect(result).to eq(false)
200
- expect(prompt.output.string).to eq([
201
- "Are you a human? \e[90m(yup/Nope)\e[0m ",
202
- "\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Y",
203
- "\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Yu",
204
- "\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Yup",
205
- "\e[2K\e[1GAre you a human? \e[90m(yup/Nope)\e[0m Yup\n",
206
- "\e[1A\e[2K\e[1G",
207
- "Are you a human? \e[32myup\e[0m\n"
208
- ].join)
209
- end
210
-
211
- it "customizes question through DSL" do
212
- prompt.input << "agree\r"
213
- prompt.input.rewind
214
- conversion = proc { |input| !input.match(/^agree$/i).nil? }
215
- result = prompt.no?("Are you a human?") do |q|
216
- q.suffix 'Agree/Disagree'
217
- q.positive 'Agree'
218
- q.negative 'Disagree'
219
- q.convert conversion
220
- end
221
- expect(result).to eq(false)
222
- expect(prompt.output.string).to eq([
223
- "Are you a human? \e[90m(Agree/Disagree)\e[0m ",
224
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m a",
225
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m ag",
226
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agr",
227
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agre",
228
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agree",
229
- "\e[2K\e[1GAre you a human? \e[90m(Agree/Disagree)\e[0m agree\n",
230
- "\e[1A\e[2K\e[1G",
231
- "Are you a human? \e[32mAgree\e[0m\n"
232
- ].join)
233
- end
234
- end
235
- end