tty-prompt 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,319 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt do
4
- let(:symbols) { TTY::Prompt::Symbols.symbols }
5
-
6
- it "selects nothing when return pressed immediately" do
7
- prompt = TTY::TestPrompt.new
8
- choices = %w(vodka beer wine whisky bourbon)
9
- prompt.input << "\r"
10
- prompt.input.rewind
11
- expect(prompt.multi_select("Select drinks?", choices)). to eq([])
12
- expect(prompt.output.string).to eq([
13
- "\e[?25lSelect drinks? \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
14
- "#{symbols[:pointer]} #{symbols[:radio_off]} vodka\n",
15
- " #{symbols[:radio_off]} beer\n",
16
- " #{symbols[:radio_off]} wine\n",
17
- " #{symbols[:radio_off]} whisky\n",
18
- " #{symbols[:radio_off]} bourbon",
19
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
20
- "Select drinks? \n\e[?25h"
21
- ].join)
22
- end
23
-
24
- it "selects item when space pressed" do
25
- prompt = TTY::TestPrompt.new
26
- choices = %w(vodka beer wine whisky bourbon)
27
- prompt.input << " \r"
28
- prompt.input.rewind
29
- expect(prompt.multi_select("Select drinks?", choices)). to eq(['vodka'])
30
- expect(prompt.output.string).to eq([
31
- "\e[?25lSelect drinks? \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
32
- "#{symbols[:pointer]} #{symbols[:radio_off]} vodka\n",
33
- " #{symbols[:radio_off]} beer\n",
34
- " #{symbols[:radio_off]} wine\n",
35
- " #{symbols[:radio_off]} whisky\n",
36
- " #{symbols[:radio_off]} bourbon",
37
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
38
- "Select drinks? vodka\n",
39
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m vodka\n",
40
- " #{symbols[:radio_off]} beer\n",
41
- " #{symbols[:radio_off]} wine\n",
42
- " #{symbols[:radio_off]} whisky\n",
43
- " #{symbols[:radio_off]} bourbon",
44
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
45
- "Select drinks? \e[32mvodka\e[0m\n\e[?25h"
46
- ].join)
47
- end
48
-
49
- it "selects item when space pressed but doesn't echo item if echo: false" do
50
- prompt = TTY::TestPrompt.new
51
- choices = %w(vodka beer wine whisky bourbon)
52
- prompt.input << " \r"
53
- prompt.input.rewind
54
- expect(prompt.multi_select("Select drinks?", choices, echo: false)). to eq(['vodka'])
55
- expect(prompt.output.string).to eq([
56
- "\e[?25lSelect drinks? \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
57
- "#{symbols[:pointer]} #{symbols[:radio_off]} vodka\n",
58
- " #{symbols[:radio_off]} beer\n",
59
- " #{symbols[:radio_off]} wine\n",
60
- " #{symbols[:radio_off]} whisky\n",
61
- " #{symbols[:radio_off]} bourbon",
62
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
63
- "Select drinks? \n",
64
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m vodka\n",
65
- " #{symbols[:radio_off]} beer\n",
66
- " #{symbols[:radio_off]} wine\n",
67
- " #{symbols[:radio_off]} whisky\n",
68
- " #{symbols[:radio_off]} bourbon",
69
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
70
- "Select drinks? \n\e[?25h"
71
- ].join)
72
- end
73
-
74
- it "sets choice custom values" do
75
- prompt = TTY::TestPrompt.new
76
- choices = {vodka: 1, beer: 2, wine: 3, whisky: 4, bourbon: 5}
77
- prompt.input << " \r"
78
- prompt.input.rewind
79
- expect(prompt.multi_select("Select drinks?", choices)).to eq([1])
80
- expect(prompt.output.string).to eq([
81
- "\e[?25lSelect drinks? \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
82
- "#{symbols[:pointer]} #{symbols[:radio_off]} vodka\n",
83
- " #{symbols[:radio_off]} beer\n",
84
- " #{symbols[:radio_off]} wine\n",
85
- " #{symbols[:radio_off]} whisky\n",
86
- " #{symbols[:radio_off]} bourbon",
87
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
88
- "Select drinks? vodka\n",
89
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m vodka\n",
90
- " #{symbols[:radio_off]} beer\n",
91
- " #{symbols[:radio_off]} wine\n",
92
- " #{symbols[:radio_off]} whisky\n",
93
- " #{symbols[:radio_off]} bourbon",
94
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
95
- "Select drinks? \e[32mvodka\e[0m\n\e[?25h"
96
- ].join)
97
- end
98
-
99
- it "sets choice name and value through DSL" do
100
- prompt = TTY::TestPrompt.new
101
- prompt.input << " \r"
102
- prompt.input.rewind
103
- value = prompt.multi_select("Select drinks?") do |menu|
104
- menu.enum ')'
105
-
106
- menu.choice :vodka, {score: 1}
107
- menu.choice :beer, 2
108
- menu.choice :wine, 3
109
- menu.choices whisky: 4, bourbon: 5
110
- end
111
- expect(value).to eq([{score: 1}])
112
- expect(prompt.output.string).to eq([
113
- "\e[?25lSelect drinks? \e[90m(Use arrow or number (1-5) keys, press Space to select and Enter to finish)\e[0m\n",
114
- "#{symbols[:pointer]} #{symbols[:radio_off]} 1) vodka\n",
115
- " #{symbols[:radio_off]} 2) beer\n",
116
- " #{symbols[:radio_off]} 3) wine\n",
117
- " #{symbols[:radio_off]} 4) whisky\n",
118
- " #{symbols[:radio_off]} 5) bourbon",
119
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
120
- "Select drinks? vodka\n",
121
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m 1) vodka\n",
122
- " #{symbols[:radio_off]} 2) beer\n",
123
- " #{symbols[:radio_off]} 3) wine\n",
124
- " #{symbols[:radio_off]} 4) whisky\n",
125
- " #{symbols[:radio_off]} 5) bourbon",
126
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
127
- "Select drinks? \e[32mvodka\e[0m\n\e[?25h"
128
- ].join)
129
- end
130
-
131
- it "sets default options through DSL syntax" do
132
- prompt = TTY::TestPrompt.new
133
- prompt.input << "\r"
134
- prompt.input.rewind
135
- value = prompt.multi_select("Select drinks?") do |menu|
136
- menu.default 2, 5
137
-
138
- menu.choice :vodka, {score: 10}
139
- menu.choice :beer, {score: 20}
140
- menu.choice :wine, {score: 30}
141
- menu.choice :whisky, {score: 40}
142
- menu.choice :bourbon, {score: 50}
143
- end
144
- expect(value).to match_array([{score: 20}, {score: 50}])
145
- expect(prompt.output.string).to eq([
146
- "\e[?25lSelect drinks? beer, bourbon \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
147
- " #{symbols[:radio_off]} vodka\n",
148
- " \e[32m#{symbols[:radio_on]}\e[0m beer\n",
149
- " #{symbols[:radio_off]} wine\n",
150
- " #{symbols[:radio_off]} whisky\n",
151
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m bourbon",
152
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
153
- "Select drinks? \e[32mbeer, bourbon\e[0m\n\e[?25h",
154
- ].join)
155
- end
156
-
157
- it "sets default options through hash syntax" do
158
- prompt = TTY::TestPrompt.new
159
- prompt.input << "\r"
160
- prompt.input.rewind
161
- value = prompt.multi_select("Select drinks?", default: [2, 5]) do |menu|
162
- menu.choice :vodka, {score: 10}
163
- menu.choice :beer, {score: 20}
164
- menu.choice :wine, {score: 30}
165
- menu.choice :whisky, {score: 40}
166
- menu.choice :bourbon, {score: 50}
167
- end
168
- expect(value).to match_array([{score: 20}, {score: 50}])
169
- end
170
-
171
- it "raises error for defaults out of range" do
172
- prompt = TTY::TestPrompt.new
173
- prompt.input << "\r"
174
- prompt.input.rewind
175
- expect {
176
- prompt.multi_select("Select drinks?", default: [2, 6]) do |menu|
177
- menu.choice :vodka, {score: 10}
178
- menu.choice :beer, {score: 20}
179
- menu.choice :wine, {score: 30}
180
- menu.choice :whisky, {score: 40}
181
- menu.choice :bourbon, {score: 50}
182
- end
183
- }.to raise_error(TTY::Prompt::ConfigurationError,
184
- /default index `6` out of range \(1 - 5\)/)
185
- end
186
-
187
- it "sets prompt prefix" do
188
- prompt = TTY::TestPrompt.new(prefix: '[?] ')
189
- choices = %w(vodka beer wine whisky bourbon)
190
- prompt.input << "\r"
191
- prompt.input.rewind
192
- expect(prompt.multi_select("Select drinks?", choices)). to eq([])
193
- expect(prompt.output.string).to eq([
194
- "\e[?25l[?] Select drinks? \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
195
- "#{symbols[:pointer]} #{symbols[:radio_off]} vodka\n",
196
- " #{symbols[:radio_off]} beer\n",
197
- " #{symbols[:radio_off]} wine\n",
198
- " #{symbols[:radio_off]} whisky\n",
199
- " #{symbols[:radio_off]} bourbon",
200
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
201
- "[?] Select drinks? \n\e[?25h"
202
- ].join)
203
- end
204
-
205
- it "changes selected item color & marker" do
206
- prompt = TTY::TestPrompt.new
207
- choices = %w(vodka beer wine whisky bourbon)
208
- prompt.input << "\r"
209
- prompt.input.rewind
210
- options = {default: [1], active_color: :blue, marker: '>'}
211
- expect(prompt.multi_select("Select drinks?", choices, options)). to eq(['vodka'])
212
- expect(prompt.output.string).to eq([
213
- "\e[?25lSelect drinks? vodka \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
214
- "> \e[34m#{symbols[:radio_on]}\e[0m vodka\n",
215
- " #{symbols[:radio_off]} beer\n",
216
- " #{symbols[:radio_off]} wine\n",
217
- " #{symbols[:radio_off]} whisky\n",
218
- " #{symbols[:radio_off]} bourbon",
219
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
220
- "Select drinks? \e[34mvodka\e[0m\n\e[?25h"
221
- ].join)
222
- end
223
-
224
- it "changes help text" do
225
- prompt = TTY::TestPrompt.new
226
- choices = %w(vodka beer wine whisky bourbon)
227
- prompt.input << "\r"
228
- prompt.input.rewind
229
- expect(prompt.multi_select("Select drinks?", choices, help: '(Bash keyboard)')). to eq([])
230
- expect(prompt.output.string).to eq([
231
- "\e[?25lSelect drinks? \e[90m(Bash keyboard)\e[0m\n",
232
- "#{symbols[:pointer]} #{symbols[:radio_off]} vodka\n",
233
- " #{symbols[:radio_off]} beer\n",
234
- " #{symbols[:radio_off]} wine\n",
235
- " #{symbols[:radio_off]} whisky\n",
236
- " #{symbols[:radio_off]} bourbon",
237
- "\e[2K\e[1G\e[1A" * 5, "\e[2K\e[1G",
238
- "Select drinks? \n\e[?25h"
239
- ].join)
240
- end
241
-
242
- it "paginates long selections" do
243
- prompt = TTY::TestPrompt.new
244
- choices = %w(A B C D E F G H)
245
- prompt.input << "\r"
246
- prompt.input.rewind
247
- value = prompt.multi_select("What letter?", choices, per_page: 3, default: 4)
248
- expect(value).to eq(['D'])
249
- expect(prompt.output.string).to eq([
250
- "\e[?25lWhat letter? D \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
251
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m D\n",
252
- " #{symbols[:radio_off]} E\n",
253
- " #{symbols[:radio_off]} F\n",
254
- "\e[90m(Move up or down to reveal more choices)\e[0m",
255
- "\e[2K\e[1G\e[1A" * 4, "\e[2K\e[1G",
256
- "What letter? \e[32mD\e[0m\n\e[?25h",
257
- ].join)
258
- end
259
-
260
- it "paginates choices as hash object" do
261
- prompt = TTY::TestPrompt.new
262
- choices = {A: 1, B: 2, C: 3, D: 4, E: 5, F: 6, G: 7, H: 8}
263
- prompt.input << "\r"
264
- prompt.input.rewind
265
- value = prompt.multi_select("What letter?", choices, default: 4, per_page: 3)
266
- expect(value).to eq([4])
267
- expect(prompt.output.string).to eq([
268
- "\e[?25lWhat letter? D \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
269
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m D\n",
270
- " #{symbols[:radio_off]} E\n",
271
- " #{symbols[:radio_off]} F\n",
272
- "\e[90m(Move up or down to reveal more choices)\e[0m",
273
- "\e[2K\e[1G\e[1A" * 4, "\e[2K\e[1G",
274
- "What letter? \e[32mD\e[0m\n\e[?25h",
275
- ].join)
276
- end
277
-
278
- it "paginates long selections through DSL" do
279
- prompt = TTY::TestPrompt.new
280
- choices = %w(A B C D E F G H)
281
- prompt.input << "\r"
282
- prompt.input.rewind
283
- value = prompt.multi_select("What letter?") do |menu|
284
- menu.per_page 3
285
- menu.page_help '(Wiggle thy finger up or down to see more)'
286
- menu.default 4
287
- menu.choices choices
288
- end
289
- expect(value).to eq(['D'])
290
- expect(prompt.output.string).to eq([
291
- "\e[?25lWhat letter? D \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
292
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m D\n",
293
- " #{symbols[:radio_off]} E\n",
294
- " #{symbols[:radio_off]} F\n",
295
- "\e[90m(Wiggle thy finger up or down to see more)\e[0m",
296
- "\e[2K\e[1G\e[1A" * 4, "\e[2K\e[1G",
297
- "What letter? \e[32mD\e[0m\n\e[?25h",
298
- ].join)
299
- end
300
-
301
- it "doesn't paginate short selections" do
302
- prompt = TTY::TestPrompt.new
303
- choices = %w(A B C D)
304
- prompt.input << "\r"
305
- prompt.input.rewind
306
- value = prompt.multi_select("What letter?", choices, per_page: 4, default: 1)
307
- expect(value).to eq(['A'])
308
-
309
- expect(prompt.output.string).to eq([
310
- "\e[?25lWhat letter? A \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
311
- "#{symbols[:pointer]} \e[32m#{symbols[:radio_on]}\e[0m A\n",
312
- " #{symbols[:radio_off]} B\n",
313
- " #{symbols[:radio_off]} C\n",
314
- " #{symbols[:radio_off]} D",
315
- "\e[2K\e[1G\e[1A" * 4, "\e[2K\e[1G",
316
- "What letter? \e[32mA\e[0m\n\e[?25h",
317
- ].join)
318
- end
319
- end
@@ -1,77 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt::Question, '#multiline' do
4
- it 'reads no lines' do
5
- prompt = TTY::TestPrompt.new
6
- prompt.input << "\C-d"
7
- prompt.input.rewind
8
-
9
- answer = prompt.multiline("Description?")
10
-
11
- expect(answer).to eq([])
12
- expect(prompt.output.string).to eq([
13
- "Description? \e[90m(Press CTRL-D or CTRL-Z to finish)\e[0m\n",
14
- "\e[2K\e[1G\e[1A\e[2K\e[1G",
15
- "Description? \n"
16
- ].join)
17
- end
18
-
19
- it "uses defualt when no input" do
20
- prompt = TTY::TestPrompt.new
21
- prompt.input << "\C-d"
22
- prompt.input.rewind
23
-
24
- answer = prompt.multiline("Description?", default: 'A super sweet prompt')
25
-
26
- expect(answer).to eq([])
27
- expect(prompt.output.string).to eq([
28
- "Description? \e[90m(Press CTRL-D or CTRL-Z to finish)\e[0m\n",
29
- "\e[2K\e[1G\e[1A\e[2K\e[1G",
30
- "Description? \e[32mA super sweet prompt\e[0m\n"
31
- ].join)
32
- end
33
-
34
- it "changes help text" do
35
- prompt = TTY::TestPrompt.new
36
- prompt.input << "\C-d"
37
- prompt.input.rewind
38
-
39
- answer = prompt.multiline("Description?") do |q|
40
- q.default 'A super sweet prompt'
41
- q.help '(Press thy ctrl-d to end)'
42
- end
43
-
44
- expect(answer).to eq([])
45
- expect(prompt.output.string).to eq([
46
- "Description? \e[90m(Press thy ctrl-d to end)\e[0m\n",
47
- "\e[2K\e[1G\e[1A\e[2K\e[1G",
48
- "Description? \e[32mA super sweet prompt\e[0m\n"
49
- ].join)
50
- end
51
-
52
- it 'reads multiple lines with empty lines' do
53
- prompt = TTY::TestPrompt.new
54
- prompt.input << "aa\n\nbb\n\n\ncc\C-d"
55
- prompt.input.rewind
56
-
57
- answer = prompt.multiline("Description?")
58
- expect(answer).to eq(["aa\n", "bb\n", "cc"])
59
- expect(prompt.output.string).to eq([
60
- "Description? \e[90m(Press CTRL-D or CTRL-Z to finish)\e[0m\n",
61
- "\e[2K\e[1Ga",
62
- "\e[2K\e[1Gaa",
63
- "\e[2K\e[1Gaa\n",
64
- "\e[2K\e[1G\n",
65
- "\e[2K\e[1Gb",
66
- "\e[2K\e[1Gbb",
67
- "\e[2K\e[1Gbb\n",
68
- "\e[2K\e[1G\n",
69
- "\e[2K\e[1G\n",
70
- "\e[2K\e[1Gc",
71
- "\e[2K\e[1Gcc",
72
- "\e[2K\e[1G\e[1A" * 6,
73
- "\e[2K\e[1G",
74
- "Description? \e[32maa ...\e[0m\n"
75
- ].join)
76
- end
77
- end
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt, '#new' do
4
- let(:env) { { "TTY_TEST" => true } }
5
-
6
- it "sets prefix" do
7
- prompt = described_class.new(prefix: "[?]", env: env)
8
- expect(prompt.prefix).to eq("[?]")
9
- end
10
-
11
- it "sets input stream" do
12
- prompt = described_class.new(input: :stream1, env: env)
13
- expect(prompt.input).to eq(:stream1)
14
- end
15
-
16
- it "sets output stream" do
17
- prompt = described_class.new(output: :stream2, env: env)
18
- expect(prompt.output).to eq(:stream2)
19
- end
20
- end
data/spec/unit/ok_spec.rb DELETED
@@ -1,10 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt, 'ok' do
4
- subject(:prompt) { TTY::TestPrompt.new }
5
-
6
- it 'prints text in green' do
7
- prompt.ok("All is fine")
8
- expect(prompt.output.string).to eq("\e[32mAll is fine\e[0m\n")
9
- end
10
- end
@@ -1,63 +0,0 @@
1
- # encoding: utf-8
2
-
3
- RSpec.describe TTY::Prompt::Paginator, '#paginate' do
4
- it "ignores per_page when equal items " do
5
- list = %w(a b c d)
6
- paginator = described_class.new({per_page: 4})
7
-
8
- expect(paginator.paginate(list, 1).to_a).to eq([
9
- ['a',0],['b',1],['c',2],['d',3]])
10
- end
11
-
12
- it "ignores per_page when less items " do
13
- list = %w(a b c d)
14
- paginator = described_class.new({per_page: 5})
15
-
16
- expect(paginator.paginate(list, 1).to_a).to eq([
17
- ['a',0],['b',1],['c',2],['d',3]])
18
- end
19
-
20
- it "paginates items matching per_page count" do
21
- list = %w(a b c d e f)
22
- paginator = described_class.new({per_page: 3})
23
-
24
- expect(paginator.paginate(list, 1).to_a).to eq([['a',0], ['b',1], ['c',2]])
25
- expect(paginator.paginate(list, 2).to_a).to eq([['a',0], ['b',1], ['c',2]])
26
- expect(paginator.paginate(list, 3).to_a).to eq([['a',0], ['b',1], ['c',2]])
27
- expect(paginator.paginate(list, 4).to_a).to eq([['b',1], ['c',2], ['d',3]])
28
- expect(paginator.paginate(list, 5).to_a).to eq([['c',2], ['d',3], ['e',4]])
29
- expect(paginator.paginate(list, 6).to_a).to eq([['d',3], ['e',4], ['f',5]])
30
- expect(paginator.paginate(list, 7).to_a).to eq([['d',3], ['e',4], ['f',5]])
31
- end
32
-
33
- it "paginates items not matching per_page count" do
34
- list = %w(a b c d e f g)
35
- paginator = described_class.new({per_page: 3})
36
-
37
- expect(paginator.paginate(list, 1).to_a).to eq([['a',0], ['b',1], ['c',2]])
38
- expect(paginator.paginate(list, 2).to_a).to eq([['a',0], ['b',1], ['c',2]])
39
- expect(paginator.paginate(list, 3).to_a).to eq([['a',0], ['b',1], ['c',2]])
40
- expect(paginator.paginate(list, 4).to_a).to eq([['b',1], ['c',2], ['d',3]])
41
- expect(paginator.paginate(list, 5).to_a).to eq([['c',2], ['d',3], ['e',4]])
42
- expect(paginator.paginate(list, 6).to_a).to eq([['d',3], ['e',4], ['f',5]])
43
- expect(paginator.paginate(list, 7).to_a).to eq([['e',4], ['f',5], ['g',6]])
44
- expect(paginator.paginate(list, 8).to_a).to eq([['e',4], ['f',5], ['g',6]])
45
- end
46
-
47
- it "finds maximum index for current selection" do
48
- list = %w(a b c d e f g)
49
- paginator = described_class.new({per_page: 3, default: 0})
50
-
51
- paginator.paginate(list, 4)
52
- expect(paginator.max_index).to eq(3)
53
- paginator.paginate(list, 5)
54
- expect(paginator.max_index).to eq(4)
55
- end
56
-
57
- it "starts with default selection" do
58
- list = %w(a b c d e f g)
59
- paginator = described_class.new({per_page: 3, default: 3})
60
-
61
- expect(paginator.paginate(list, 4).to_a).to eq([['d',3], ['e',4], ['f',5]])
62
- end
63
- end