highline 2.0.0.pre.develop.9 → 2.0.0.pre.develop.11
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +59 -5
- data/.travis.yml +9 -4
- data/Changelog.md +11 -0
- data/Gemfile +12 -19
- data/Rakefile +5 -11
- data/examples/ansi_colors.rb +6 -11
- data/examples/asking_for_arrays.rb +4 -3
- data/examples/basic_usage.rb +29 -22
- data/examples/color_scheme.rb +11 -10
- data/examples/get_character.rb +6 -5
- data/examples/limit.rb +2 -1
- data/examples/menus.rb +11 -11
- data/examples/overwrite.rb +7 -6
- data/examples/page_and_wrap.rb +5 -4
- data/examples/password.rb +2 -1
- data/examples/repeat_entry.rb +7 -5
- data/examples/trapping_eof.rb +2 -1
- data/examples/using_readline.rb +2 -1
- data/highline.gemspec +25 -25
- data/lib/highline.rb +103 -111
- data/lib/highline/builtin_styles.rb +45 -41
- data/lib/highline/color_scheme.rb +32 -28
- data/lib/highline/compatibility.rb +3 -3
- data/lib/highline/custom_errors.rb +2 -1
- data/lib/highline/import.rb +8 -11
- data/lib/highline/list.rb +4 -8
- data/lib/highline/list_renderer.rb +207 -201
- data/lib/highline/menu.rb +75 -63
- data/lib/highline/menu/item.rb +2 -0
- data/lib/highline/paginator.rb +5 -6
- data/lib/highline/question.rb +38 -36
- data/lib/highline/question/answer_converter.rb +2 -2
- data/lib/highline/question_asker.rb +15 -17
- data/lib/highline/simulate.rb +11 -13
- data/lib/highline/statement.rb +12 -10
- data/lib/highline/string.rb +9 -8
- data/lib/highline/string_extensions.rb +30 -14
- data/lib/highline/style.rb +68 -45
- data/lib/highline/template_renderer.rb +5 -5
- data/lib/highline/terminal.rb +24 -31
- data/lib/highline/terminal/io_console.rb +2 -2
- data/lib/highline/terminal/ncurses.rb +4 -3
- data/lib/highline/terminal/unix_stty.rb +12 -9
- data/lib/highline/version.rb +1 -1
- data/lib/highline/wrapper.rb +12 -11
- metadata +34 -43
- data/test/acceptance/acceptance.rb +0 -62
- data/test/acceptance/acceptance_test.rb +0 -69
- data/test/acceptance/at_color_output_using_erb_templates.rb +0 -17
- data/test/acceptance/at_echo_false.rb +0 -23
- data/test/acceptance/at_readline.rb +0 -37
- data/test/io_console_compatible.rb +0 -37
- data/test/string_methods.rb +0 -35
- data/test/test_answer_converter.rb +0 -26
- data/test/test_color_scheme.rb +0 -94
- data/test/test_helper.rb +0 -22
- data/test/test_highline.rb +0 -1627
- data/test/test_import.rb +0 -55
- data/test/test_list.rb +0 -60
- data/test/test_menu.rb +0 -749
- data/test/test_paginator.rb +0 -73
- data/test/test_question_asker.rb +0 -20
- data/test/test_simulator.rb +0 -24
- data/test/test_string_extension.rb +0 -72
- data/test/test_string_highline.rb +0 -42
- data/test/test_style.rb +0 -613
- data/test/test_wrapper.rb +0 -188
data/test/test_import.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# coding: utf-8
|
3
|
-
|
4
|
-
# tc_import.rb
|
5
|
-
#
|
6
|
-
# Created by James Edward Gray II on 2005-04-26.
|
7
|
-
# Copyright 2005 Gray Productions. All rights reserved.
|
8
|
-
#
|
9
|
-
# This is Free Software. See LICENSE and COPYING for details.
|
10
|
-
|
11
|
-
require "test_helper"
|
12
|
-
|
13
|
-
require "highline/import"
|
14
|
-
require "stringio"
|
15
|
-
|
16
|
-
class TestImport < Minitest::Test
|
17
|
-
def test_import
|
18
|
-
assert_respond_to(self, :agree)
|
19
|
-
assert_respond_to(self, :ask)
|
20
|
-
assert_respond_to(self, :choose)
|
21
|
-
assert_respond_to(self, :say)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_or_ask
|
25
|
-
old_terminal = $terminal
|
26
|
-
|
27
|
-
input = StringIO.new
|
28
|
-
output = StringIO.new
|
29
|
-
$terminal = HighLine.new(input, output)
|
30
|
-
|
31
|
-
input << "10\n"
|
32
|
-
input.rewind
|
33
|
-
|
34
|
-
assert_equal(10, nil.or_ask("How much? ", Integer))
|
35
|
-
|
36
|
-
input.rewind
|
37
|
-
|
38
|
-
assert_equal(20, "20".or_ask("How much? ", Integer))
|
39
|
-
assert_equal(20, 20.or_ask("How much? ", Integer))
|
40
|
-
|
41
|
-
assert_equal(10, 20.or_ask("How much? ", Integer) { |q| q.in = 1..10 })
|
42
|
-
ensure
|
43
|
-
$terminal = old_terminal
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_redirection
|
47
|
-
old_terminal = $terminal
|
48
|
-
|
49
|
-
$terminal = HighLine.new(nil, (output = StringIO.new))
|
50
|
-
say("Testing...")
|
51
|
-
assert_equal("Testing...\n", output.string)
|
52
|
-
ensure
|
53
|
-
$terminal = old_terminal
|
54
|
-
end
|
55
|
-
end
|
data/test/test_list.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# coding: utf-8
|
3
|
-
|
4
|
-
require "test_helper"
|
5
|
-
|
6
|
-
require "highline/list"
|
7
|
-
|
8
|
-
class TestHighLineList < Minitest::Test
|
9
|
-
def setup
|
10
|
-
@items = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" ]
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_in_2_cols
|
14
|
-
list_in_two_cols =
|
15
|
-
[ [ "a", "b" ],
|
16
|
-
[ "c", "d" ],
|
17
|
-
[ "e", "f" ],
|
18
|
-
[ "g", "h" ],
|
19
|
-
[ "i", "j" ] ]
|
20
|
-
|
21
|
-
highline_list = HighLine::List.new(@items, cols: 2)
|
22
|
-
|
23
|
-
assert_equal list_in_two_cols, highline_list.list
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_in_2_cols_col_down
|
27
|
-
col_down_list =
|
28
|
-
[ [ "a", "f"],
|
29
|
-
[ "b", "g"],
|
30
|
-
[ "c", "h"],
|
31
|
-
[ "d", "i"],
|
32
|
-
[ "e", "j"] ]
|
33
|
-
|
34
|
-
highline_list = HighLine::List.new(@items, cols: 2, col_down: true)
|
35
|
-
|
36
|
-
assert_equal col_down_list, highline_list.list
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_in_2_cols_transposed
|
40
|
-
transposed_list =
|
41
|
-
[ [ "a", "c", "e", "g", "i" ],
|
42
|
-
[ "b", "d", "f", "h", "j" ] ]
|
43
|
-
|
44
|
-
highline_list = HighLine::List.new(@items, cols: 2, transpose: true)
|
45
|
-
|
46
|
-
assert_equal transposed_list, highline_list.list
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_in_3_cols
|
50
|
-
list_in_three_cols =
|
51
|
-
[ [ "a", "b", "c" ],
|
52
|
-
[ "d", "e", "f" ],
|
53
|
-
[ "g", "h", "i" ],
|
54
|
-
[ "j" ] ]
|
55
|
-
|
56
|
-
highline_list = HighLine::List.new(@items, cols: 3)
|
57
|
-
|
58
|
-
assert_equal list_in_three_cols, highline_list.list
|
59
|
-
end
|
60
|
-
end
|
data/test/test_menu.rb
DELETED
@@ -1,749 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# coding: utf-8
|
3
|
-
|
4
|
-
# tc_menu.rb
|
5
|
-
#
|
6
|
-
# Created by Gregory Thomas Brown on 2005-05-10.
|
7
|
-
# Copyright 2005. All rights reserved.
|
8
|
-
#
|
9
|
-
# This is Free Software. See LICENSE and COPYING for details.
|
10
|
-
|
11
|
-
require "test_helper"
|
12
|
-
|
13
|
-
require "highline"
|
14
|
-
require "stringio"
|
15
|
-
|
16
|
-
class TestMenu < Minitest::Test
|
17
|
-
def setup
|
18
|
-
HighLine.reset
|
19
|
-
@input = StringIO.new
|
20
|
-
@output = StringIO.new
|
21
|
-
@terminal = HighLine.new(@input, @output)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_choices
|
25
|
-
@input << "2\n"
|
26
|
-
@input.rewind
|
27
|
-
|
28
|
-
output = @terminal.choose do |menu|
|
29
|
-
menu.choices("Sample1", "Sample2", "Sample3")
|
30
|
-
end
|
31
|
-
assert_equal("Sample2", output)
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_default
|
35
|
-
@input << "\n"
|
36
|
-
@input.rewind
|
37
|
-
|
38
|
-
output = @terminal.choose do |menu|
|
39
|
-
menu.choices("Sample1", "Sample2", "Sample3")
|
40
|
-
menu.default = "Sample1"
|
41
|
-
end
|
42
|
-
|
43
|
-
assert_equal("Sample1", output)
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_flow
|
47
|
-
@input << "Sample1\n"
|
48
|
-
@input.rewind
|
49
|
-
|
50
|
-
@terminal.choose do |menu|
|
51
|
-
# Default: menu.flow = :rows
|
52
|
-
|
53
|
-
menu.choice "Sample1"
|
54
|
-
menu.choice "Sample2"
|
55
|
-
menu.choice "Sample3"
|
56
|
-
end
|
57
|
-
assert_equal("1. Sample1\n2. Sample2\n3. Sample3\n? ", @output.string)
|
58
|
-
|
59
|
-
@output.truncate(@output.rewind)
|
60
|
-
@input.rewind
|
61
|
-
|
62
|
-
@terminal.choose do |menu|
|
63
|
-
menu.flow = :columns_across
|
64
|
-
|
65
|
-
menu.choice "Sample1"
|
66
|
-
menu.choice "Sample2"
|
67
|
-
menu.choice "Sample3"
|
68
|
-
end
|
69
|
-
assert_equal("1. Sample1 2. Sample2 3. Sample3\n? ", @output.string)
|
70
|
-
|
71
|
-
@output.truncate(@output.rewind)
|
72
|
-
@input.rewind
|
73
|
-
|
74
|
-
@terminal.choose do |menu|
|
75
|
-
menu.flow = :inline
|
76
|
-
menu.index = :none
|
77
|
-
|
78
|
-
menu.choice "Sample1"
|
79
|
-
menu.choice "Sample2"
|
80
|
-
menu.choice "Sample3"
|
81
|
-
end
|
82
|
-
assert_equal("Sample1, Sample2 or Sample3? ", @output.string)
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_unicode_flow
|
86
|
-
@input << "1\n"
|
87
|
-
@input.rewind
|
88
|
-
|
89
|
-
@terminal.choose do |menu|
|
90
|
-
# Default: menu.flow = :rows
|
91
|
-
menu.choice "Unicode right single quotation mark: ’"
|
92
|
-
end
|
93
|
-
assert_equal("1. Unicode right single quotation mark: ’\n? ".encode(@output.external_encoding, { :undef => :replace }), @output.string)
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_text_override_index_selects_name
|
97
|
-
@input << "1\n"
|
98
|
-
@input.rewind
|
99
|
-
|
100
|
-
selected = @terminal.choose do |menu|
|
101
|
-
menu.choice("Sample1", nil, "Sample2")
|
102
|
-
menu.choice("Sample2", nil, "Sample1")
|
103
|
-
end
|
104
|
-
assert_equal(selected, "Sample1")
|
105
|
-
assert_equal("1. Sample2\n" +
|
106
|
-
"2. Sample1\n" +
|
107
|
-
"? ", @output.string)
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_text_override_selections_matches_name
|
111
|
-
@input << "Sample2\n"
|
112
|
-
@input.rewind
|
113
|
-
|
114
|
-
selected = @terminal.choose do |menu|
|
115
|
-
menu.choice("Sample1", nil, "Sample2")
|
116
|
-
menu.choice("Sample2", nil, "Sample1")
|
117
|
-
end
|
118
|
-
assert_equal(selected, "Sample2")
|
119
|
-
assert_equal("1. Sample2\n" +
|
120
|
-
"2. Sample1\n" +
|
121
|
-
"? ", @output.string)
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_menu_add_item_index_selects_name
|
125
|
-
@input << "1\n"
|
126
|
-
@input.rewind
|
127
|
-
|
128
|
-
selected = @terminal.choose do |menu|
|
129
|
-
menu.add_item(HighLine::Menu::Item.new("Sample1", text: "Sample2"))
|
130
|
-
menu.add_item(HighLine::Menu::Item.new("Sample2", text: "Sample1"))
|
131
|
-
end
|
132
|
-
assert_equal(selected, "Sample1")
|
133
|
-
assert_equal("1. Sample2\n" +
|
134
|
-
"2. Sample1\n" +
|
135
|
-
"? ", @output.string)
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_menu_add_item_selections_matches_name
|
139
|
-
@input << "Sample2\n"
|
140
|
-
@input.rewind
|
141
|
-
|
142
|
-
selected = @terminal.choose do |menu|
|
143
|
-
menu.add_item(HighLine::Menu::Item.new("Sample1", text: "Sample2"))
|
144
|
-
menu.add_item(HighLine::Menu::Item.new("Sample2", text: "Sample1"))
|
145
|
-
end
|
146
|
-
assert_equal(selected, "Sample2")
|
147
|
-
assert_equal("1. Sample2\n" +
|
148
|
-
"2. Sample1\n" +
|
149
|
-
"? ", @output.string)
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_menu_build_item
|
153
|
-
@input << "Sample2\n"
|
154
|
-
@input.rewind
|
155
|
-
|
156
|
-
selected = @terminal.choose do |menu|
|
157
|
-
menu.add_item(menu.build_item("Sample1", text: "Sample2"))
|
158
|
-
menu.add_item(menu.build_item("Sample2", text: "Sample1"))
|
159
|
-
end
|
160
|
-
assert_equal(selected, "Sample2")
|
161
|
-
assert_equal("1. Sample2\n" +
|
162
|
-
"2. Sample1\n" +
|
163
|
-
"? ", @output.string)
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_help
|
167
|
-
@input << "help\nhelp load\nhelp rules\nhelp missing\n"
|
168
|
-
@input.rewind
|
169
|
-
|
170
|
-
4.times do
|
171
|
-
@terminal.choose do |menu|
|
172
|
-
menu.shell = true
|
173
|
-
|
174
|
-
menu.choice(:load, "Load a file.")
|
175
|
-
menu.choice(:save, "Save data in file.")
|
176
|
-
menu.choice(:quit, "Exit program.")
|
177
|
-
|
178
|
-
menu.help("rules", "The rules of this system are as follows...")
|
179
|
-
end
|
180
|
-
end
|
181
|
-
assert_equal( "1. load\n2. save\n3. quit\n4. help\n? " +
|
182
|
-
"This command will display helpful messages about " +
|
183
|
-
"functionality, like this one. To see the help for a " +
|
184
|
-
"specific topic enter:\n" +
|
185
|
-
"\thelp [TOPIC]\n" +
|
186
|
-
"Try asking for help on any of the following:\n" +
|
187
|
-
"\nload quit rules save \n" +
|
188
|
-
"1. load\n2. save\n3. quit\n4. help\n? " +
|
189
|
-
"= load\n\n" +
|
190
|
-
"Load a file.\n" +
|
191
|
-
"1. load\n2. save\n3. quit\n4. help\n? " +
|
192
|
-
"= rules\n\n" +
|
193
|
-
"The rules of this system are as follows...\n" +
|
194
|
-
"1. load\n2. save\n3. quit\n4. help\n? " +
|
195
|
-
"= missing\n\n" +
|
196
|
-
"There's no help for that topic.\n", @output.string )
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_index
|
200
|
-
@input << "Sample1\n"
|
201
|
-
@input.rewind
|
202
|
-
|
203
|
-
@terminal.choose do |menu|
|
204
|
-
# Default: menu.index = :number
|
205
|
-
|
206
|
-
menu.choice "Sample1"
|
207
|
-
menu.choice "Sample2"
|
208
|
-
menu.choice "Sample3"
|
209
|
-
end
|
210
|
-
assert_equal("1. Sample1\n2. Sample2\n3. Sample3\n? ", @output.string)
|
211
|
-
|
212
|
-
@output.truncate(@output.rewind)
|
213
|
-
@input.rewind
|
214
|
-
|
215
|
-
@terminal.choose do |menu|
|
216
|
-
menu.index = :letter
|
217
|
-
menu.index_suffix = ") "
|
218
|
-
|
219
|
-
menu.choice "Sample1"
|
220
|
-
menu.choice "Sample2"
|
221
|
-
menu.choice "Sample3"
|
222
|
-
end
|
223
|
-
assert_equal("a) Sample1\nb) Sample2\nc) Sample3\n? ", @output.string)
|
224
|
-
|
225
|
-
@output.truncate(@output.rewind)
|
226
|
-
@input.rewind
|
227
|
-
|
228
|
-
@terminal.choose do |menu|
|
229
|
-
menu.index = :none
|
230
|
-
|
231
|
-
menu.choice "Sample1"
|
232
|
-
menu.choice "Sample2"
|
233
|
-
menu.choice "Sample3"
|
234
|
-
end
|
235
|
-
assert_equal("Sample1\nSample2\nSample3\n? ", @output.string)
|
236
|
-
|
237
|
-
@output.truncate(@output.rewind)
|
238
|
-
@input.rewind
|
239
|
-
|
240
|
-
@terminal.choose do |menu|
|
241
|
-
menu.index = "*"
|
242
|
-
|
243
|
-
menu.choice "Sample1"
|
244
|
-
menu.choice "Sample2"
|
245
|
-
menu.choice "Sample3"
|
246
|
-
end
|
247
|
-
assert_equal("* Sample1\n* Sample2\n* Sample3\n? ", @output.string)
|
248
|
-
end
|
249
|
-
|
250
|
-
def test_index_with_color
|
251
|
-
index_color = :rgb_77bbff
|
252
|
-
|
253
|
-
@input << "Sample1\n"
|
254
|
-
@input.rewind
|
255
|
-
|
256
|
-
@terminal.choose do |menu|
|
257
|
-
# Default: menu.index = :number
|
258
|
-
menu.index_color = index_color
|
259
|
-
|
260
|
-
menu.choice "Sample1"
|
261
|
-
menu.choice "Sample2"
|
262
|
-
menu.choice "Sample3"
|
263
|
-
end
|
264
|
-
|
265
|
-
assert_equal(
|
266
|
-
HighLine.color("1. ", index_color) + "Sample1\n" +
|
267
|
-
HighLine.color("2. ", index_color) + "Sample2\n" +
|
268
|
-
HighLine.color("3. ", index_color) + "Sample3\n" +
|
269
|
-
"? ",
|
270
|
-
@output.string
|
271
|
-
)
|
272
|
-
|
273
|
-
@output.truncate(@output.rewind)
|
274
|
-
@input.rewind
|
275
|
-
|
276
|
-
@terminal.choose do |menu|
|
277
|
-
menu.index = :letter
|
278
|
-
menu.index_suffix = ") "
|
279
|
-
menu.index_color = index_color
|
280
|
-
|
281
|
-
menu.choice "Sample1"
|
282
|
-
menu.choice "Sample2"
|
283
|
-
menu.choice "Sample3"
|
284
|
-
end
|
285
|
-
|
286
|
-
assert_equal(
|
287
|
-
HighLine.color("a) ", index_color) + "Sample1\n" +
|
288
|
-
HighLine.color("b) ", index_color) + "Sample2\n" +
|
289
|
-
HighLine.color("c) ", index_color) + "Sample3\n? ",
|
290
|
-
@output.string
|
291
|
-
)
|
292
|
-
|
293
|
-
@output.truncate(@output.rewind)
|
294
|
-
@input.rewind
|
295
|
-
|
296
|
-
@terminal.choose do |menu|
|
297
|
-
menu.index = :none
|
298
|
-
menu.index_color = index_color
|
299
|
-
|
300
|
-
menu.choice "Sample1"
|
301
|
-
menu.choice "Sample2"
|
302
|
-
menu.choice "Sample3"
|
303
|
-
end
|
304
|
-
|
305
|
-
assert_equal(
|
306
|
-
HighLine.color("Sample1", index_color) + "\n" +
|
307
|
-
HighLine.color("Sample2", index_color) + "\n" +
|
308
|
-
HighLine.color("Sample3", index_color) + "\n? ",
|
309
|
-
@output.string
|
310
|
-
)
|
311
|
-
|
312
|
-
@output.truncate(@output.rewind)
|
313
|
-
@input.rewind
|
314
|
-
|
315
|
-
@terminal.choose do |menu|
|
316
|
-
menu.index = "*"
|
317
|
-
menu.index_color = index_color
|
318
|
-
|
319
|
-
menu.choice "Sample1"
|
320
|
-
menu.choice "Sample2"
|
321
|
-
menu.choice "Sample3"
|
322
|
-
end
|
323
|
-
|
324
|
-
colored_asterix = HighLine.color("* ", index_color)
|
325
|
-
assert_equal(
|
326
|
-
"#{colored_asterix}Sample1\n" +
|
327
|
-
"#{colored_asterix}Sample2\n" +
|
328
|
-
"#{colored_asterix}Sample3\n? ",
|
329
|
-
@output.string
|
330
|
-
)
|
331
|
-
end
|
332
|
-
|
333
|
-
def test_layouts
|
334
|
-
@input << "save\n"
|
335
|
-
@input.rewind
|
336
|
-
|
337
|
-
@terminal.choose(:load, :save, :quit) # Default: layout = :list
|
338
|
-
assert_equal("1. load\n2. save\n3. quit\n? ", @output.string)
|
339
|
-
|
340
|
-
@input.rewind
|
341
|
-
@output.truncate(@output.rewind)
|
342
|
-
|
343
|
-
@terminal.choose(:load, :save, :quit) do |menu|
|
344
|
-
menu.header = "File Menu"
|
345
|
-
end
|
346
|
-
assert_equal( "File Menu:\n" +
|
347
|
-
"1. load\n2. save\n3. quit\n? ", @output.string )
|
348
|
-
|
349
|
-
@input.rewind
|
350
|
-
@output.truncate(@output.rewind)
|
351
|
-
|
352
|
-
@terminal.choose(:load, :save, :quit) do |menu|
|
353
|
-
menu.layout = :one_line
|
354
|
-
menu.header = "File Menu"
|
355
|
-
menu.prompt = "Operation? "
|
356
|
-
end
|
357
|
-
assert_equal( "File Menu: Operation? " +
|
358
|
-
"(load, save or quit) ", @output.string )
|
359
|
-
|
360
|
-
@input.rewind
|
361
|
-
@output.truncate(@output.rewind)
|
362
|
-
|
363
|
-
@terminal.choose(:load, :save, :quit) do |menu|
|
364
|
-
menu.layout = :menu_only
|
365
|
-
end
|
366
|
-
assert_equal("load, save or quit? ", @output.string)
|
367
|
-
|
368
|
-
@input.rewind
|
369
|
-
@output.truncate(@output.rewind)
|
370
|
-
|
371
|
-
@terminal.choose(:load, :save, :quit) do |menu|
|
372
|
-
menu.layout = '<%= list(menu) %>File Menu: '
|
373
|
-
end
|
374
|
-
assert_equal("1. load\n2. save\n3. quit\nFile Menu: ", @output.string)
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_list_option
|
378
|
-
@input << "l\n"
|
379
|
-
@input.rewind
|
380
|
-
|
381
|
-
@terminal.choose(:load, :save, :quit) do |menu|
|
382
|
-
menu.layout = :menu_only
|
383
|
-
menu.list_option = ", or "
|
384
|
-
end
|
385
|
-
assert_equal("load, save, or quit? ", @output.string)
|
386
|
-
end
|
387
|
-
|
388
|
-
def test_nil_on_handled
|
389
|
-
@input << "3\n3\n2\n"
|
390
|
-
@input.rewind
|
391
|
-
|
392
|
-
# Shows that by default proc results are returned.
|
393
|
-
output = @terminal.choose do |menu|
|
394
|
-
menu.choice "Sample1" do "output1" end
|
395
|
-
menu.choice "Sample2" do "output2" end
|
396
|
-
menu.choice "Sample3" do "output3" end
|
397
|
-
end
|
398
|
-
assert_equal("output3", output)
|
399
|
-
|
400
|
-
#
|
401
|
-
# Shows that they can be replaced with +nil+ by setting
|
402
|
-
# _nil_on_handled to +true+.
|
403
|
-
#
|
404
|
-
output = @terminal.choose do |menu|
|
405
|
-
menu.nil_on_handled = true
|
406
|
-
menu.choice "Sample1" do "output1" end
|
407
|
-
menu.choice "Sample2" do "output2" end
|
408
|
-
menu.choice "Sample3" do "output3" end
|
409
|
-
end
|
410
|
-
assert_equal(nil, output)
|
411
|
-
|
412
|
-
# Shows that a menu item without a proc will be returned no matter what.
|
413
|
-
output = @terminal.choose do |menu|
|
414
|
-
menu.choice "Sample1"
|
415
|
-
menu.choice "Sample2"
|
416
|
-
menu.choice "Sample3"
|
417
|
-
end
|
418
|
-
assert_equal("Sample2", output)
|
419
|
-
end
|
420
|
-
|
421
|
-
def test_passed_command
|
422
|
-
@input << "q\n"
|
423
|
-
@input.rewind
|
424
|
-
|
425
|
-
selected = nil
|
426
|
-
@terminal.choose do |menu|
|
427
|
-
menu.choices(:load, :save, :quit) { |command| selected = command }
|
428
|
-
end
|
429
|
-
assert_equal(:quit, selected)
|
430
|
-
end
|
431
|
-
|
432
|
-
def test_question_options
|
433
|
-
@input << "save\n"
|
434
|
-
@input.rewind
|
435
|
-
|
436
|
-
answer = @terminal.choose(:Load, :Save, :Quit) do |menu|
|
437
|
-
menu.case = :capitalize
|
438
|
-
end
|
439
|
-
assert_equal(:Save, answer)
|
440
|
-
|
441
|
-
@input.rewind
|
442
|
-
|
443
|
-
answer = @terminal.choose(:Load, :Save, :Quit) do |menu|
|
444
|
-
menu.case = :capitalize
|
445
|
-
menu.character = :getc
|
446
|
-
end
|
447
|
-
assert_equal(:Save, answer)
|
448
|
-
assert_equal(?a, @input.getc)
|
449
|
-
end
|
450
|
-
|
451
|
-
def test_select_by
|
452
|
-
@input << "Sample1\n2\n"
|
453
|
-
@input.rewind
|
454
|
-
|
455
|
-
selected = @terminal.choose do |menu|
|
456
|
-
menu.choice "Sample1"
|
457
|
-
menu.choice "Sample2"
|
458
|
-
menu.choice "Sample3"
|
459
|
-
end
|
460
|
-
assert_equal("Sample1", selected)
|
461
|
-
|
462
|
-
@input.rewind
|
463
|
-
|
464
|
-
selected = @terminal.choose do |menu|
|
465
|
-
menu.select_by = :index
|
466
|
-
|
467
|
-
menu.choice "Sample1"
|
468
|
-
menu.choice "Sample2"
|
469
|
-
menu.choice "Sample3"
|
470
|
-
end
|
471
|
-
assert_equal("Sample2", selected)
|
472
|
-
|
473
|
-
@input.rewind
|
474
|
-
|
475
|
-
selected = @terminal.choose do |menu|
|
476
|
-
menu.select_by = :name
|
477
|
-
|
478
|
-
menu.choice "Sample1"
|
479
|
-
menu.choice "Sample2"
|
480
|
-
menu.choice "Sample3"
|
481
|
-
end
|
482
|
-
assert_equal("Sample1", selected)
|
483
|
-
end
|
484
|
-
|
485
|
-
def test_hidden
|
486
|
-
@input << "Hidden\n4\n"
|
487
|
-
@input.rewind
|
488
|
-
|
489
|
-
selected = @terminal.choose do |menu|
|
490
|
-
menu.choice "Sample1"
|
491
|
-
menu.choice "Sample2"
|
492
|
-
menu.choice "Sample3"
|
493
|
-
menu.hidden "Hidden!"
|
494
|
-
end
|
495
|
-
assert_equal("Hidden!", selected)
|
496
|
-
assert_equal("1. Sample1\n2. Sample2\n3. Sample3\n? ", @output.string)
|
497
|
-
|
498
|
-
@input.rewind
|
499
|
-
|
500
|
-
selected = @terminal.choose do |menu|
|
501
|
-
menu.select_by = :index
|
502
|
-
|
503
|
-
menu.choice "Sample1"
|
504
|
-
menu.choice "Sample2"
|
505
|
-
menu.choice "Sample3"
|
506
|
-
menu.hidden "Hidden!"
|
507
|
-
end
|
508
|
-
assert_equal("Hidden!", selected)
|
509
|
-
|
510
|
-
@input.rewind
|
511
|
-
|
512
|
-
selected = @terminal.choose do |menu|
|
513
|
-
menu.select_by = :name
|
514
|
-
|
515
|
-
menu.choice "Sample1"
|
516
|
-
menu.choice "Sample2"
|
517
|
-
menu.choice "Sample3"
|
518
|
-
menu.hidden "Hidden!"
|
519
|
-
end
|
520
|
-
assert_equal("Hidden!", selected)
|
521
|
-
|
522
|
-
@input.rewind
|
523
|
-
end
|
524
|
-
|
525
|
-
def test_select_by_letter
|
526
|
-
@input << "b\n"
|
527
|
-
@input.rewind
|
528
|
-
|
529
|
-
selected = @terminal.choose do |menu|
|
530
|
-
menu.index = :letter
|
531
|
-
menu.choice :save
|
532
|
-
menu.choice :load
|
533
|
-
menu.choice :quit
|
534
|
-
end
|
535
|
-
assert_equal(:load, selected)
|
536
|
-
end
|
537
|
-
|
538
|
-
def test_shell
|
539
|
-
@input << "save --some-option my_file.txt\n"
|
540
|
-
@input.rewind
|
541
|
-
|
542
|
-
selected = nil
|
543
|
-
options = nil
|
544
|
-
answer = @terminal.choose do |menu|
|
545
|
-
menu.choices(:load, :quit)
|
546
|
-
menu.choice(:save) do |command, details|
|
547
|
-
selected = command
|
548
|
-
options = details
|
549
|
-
|
550
|
-
"Saved!"
|
551
|
-
end
|
552
|
-
menu.shell = true
|
553
|
-
end
|
554
|
-
assert_equal("Saved!", answer)
|
555
|
-
assert_equal(:save, selected)
|
556
|
-
assert_equal("--some-option my_file.txt", options)
|
557
|
-
end
|
558
|
-
|
559
|
-
def test_simple_menu_shortcut
|
560
|
-
@input << "3\n"
|
561
|
-
@input.rewind
|
562
|
-
|
563
|
-
selected = @terminal.choose(:save, :load, :quit)
|
564
|
-
assert_equal(:quit, selected)
|
565
|
-
end
|
566
|
-
|
567
|
-
def test_symbols
|
568
|
-
@input << "3\n"
|
569
|
-
@input.rewind
|
570
|
-
|
571
|
-
selected = @terminal.choose do |menu|
|
572
|
-
menu.choices(:save, :load, :quit)
|
573
|
-
end
|
574
|
-
assert_equal(:quit, selected)
|
575
|
-
end
|
576
|
-
|
577
|
-
def test_paged_print_infinite_loop_bug
|
578
|
-
@terminal.page_at = 5
|
579
|
-
# Will page twice, so start with two new lines
|
580
|
-
@input << "\n\n3\n"
|
581
|
-
@input.rewind
|
582
|
-
|
583
|
-
# Sadly this goes into an infinite loop without the fix to page_print
|
584
|
-
selected = @terminal.choose(* 1..10)
|
585
|
-
assert_equal(selected, 3)
|
586
|
-
end
|
587
|
-
|
588
|
-
def test_cancel_paging
|
589
|
-
# Tests that paging can be cancelled halfway through
|
590
|
-
@terminal.page_at = 5
|
591
|
-
# Will page twice, so stop after first page and make choice 3
|
592
|
-
@input << "q3\n"
|
593
|
-
@input.rewind
|
594
|
-
|
595
|
-
selected = @terminal.choose(* 1..10)
|
596
|
-
assert_equal(selected, 3)
|
597
|
-
|
598
|
-
# Make sure paging message appeared
|
599
|
-
assert( @output.string.index('press enter/return to continue or q to stop'),
|
600
|
-
"Paging message did not appear." )
|
601
|
-
|
602
|
-
# Make sure it only appeared once
|
603
|
-
assert( @output.string !~ /q to stop.*q to stop/m,
|
604
|
-
"Paging message appeared more than once." )
|
605
|
-
end
|
606
|
-
|
607
|
-
def test_autocomplete_prompt
|
608
|
-
@input << "lisp\nRuby\n"
|
609
|
-
@input.rewind
|
610
|
-
|
611
|
-
answer = @terminal.choose do |menu|
|
612
|
-
menu.choice(:Perl)
|
613
|
-
menu.choice(:Python)
|
614
|
-
menu.choice(:Ruby)
|
615
|
-
menu.prompt = "What is your favorite programming language? "
|
616
|
-
end
|
617
|
-
languages = [:Perl, :Python, :Ruby]
|
618
|
-
assert_equal("1. Perl\n" +
|
619
|
-
"2. Python\n" +
|
620
|
-
"3. Ruby\n" +
|
621
|
-
"What is your favorite programming language? " +
|
622
|
-
"You must choose one of [1, 2, 3, Perl, Python, Ruby].\n" +
|
623
|
-
"? ", @output.string )
|
624
|
-
end
|
625
|
-
|
626
|
-
# Issue #180 - https://github.com/JEG2/highline/issues/180
|
627
|
-
def test_menu_prompt
|
628
|
-
@input << "2\n1\n"
|
629
|
-
@input.rewind
|
630
|
-
|
631
|
-
selected = @terminal.choose do |menu|
|
632
|
-
menu.responses[:ask_on_error] = "> "
|
633
|
-
menu.prompt = "> "
|
634
|
-
menu.choice :exit, "Exit cube editor"
|
635
|
-
end
|
636
|
-
|
637
|
-
prompt = "> "
|
638
|
-
first_asking = "1. exit\n"
|
639
|
-
error_message = "You must choose one of [1, exit].\n"
|
640
|
-
complete_interaction = first_asking + prompt + error_message + prompt # Same prompt when repeating question
|
641
|
-
|
642
|
-
assert_equal complete_interaction, @output.string
|
643
|
-
end
|
644
|
-
|
645
|
-
def test_menu_gather_integer
|
646
|
-
@input << "Sample1\nlast\n"
|
647
|
-
@input.rewind
|
648
|
-
|
649
|
-
selected = @terminal.choose do |menu|
|
650
|
-
menu.gather = 2
|
651
|
-
menu.choice "Sample1"
|
652
|
-
menu.choice "Sample2"
|
653
|
-
menu.choice "last"
|
654
|
-
end
|
655
|
-
assert_equal(["Sample1", "last"], selected)
|
656
|
-
|
657
|
-
assert_equal("1. Sample1\n" +
|
658
|
-
"2. Sample2\n" +
|
659
|
-
"3. last\n" +
|
660
|
-
"? 1. Sample1\n" +
|
661
|
-
"2. Sample2\n" +
|
662
|
-
"3. last\n" +
|
663
|
-
"? ", @output.string)
|
664
|
-
end
|
665
|
-
|
666
|
-
def test_menu_gather_string
|
667
|
-
@input << "Sample1\nlast\n"
|
668
|
-
@input.rewind
|
669
|
-
|
670
|
-
selected = @terminal.choose do |menu|
|
671
|
-
menu.gather = :last
|
672
|
-
menu.choice "Sample1"
|
673
|
-
menu.choice "Sample2"
|
674
|
-
menu.choice :last
|
675
|
-
end
|
676
|
-
assert_equal(["Sample1"], selected)
|
677
|
-
|
678
|
-
assert_equal("1. Sample1\n" +
|
679
|
-
"2. Sample2\n" +
|
680
|
-
"3. last\n" +
|
681
|
-
"? 1. Sample1\n" +
|
682
|
-
"2. Sample2\n" +
|
683
|
-
"3. last\n" +
|
684
|
-
"? ", @output.string)
|
685
|
-
end
|
686
|
-
|
687
|
-
def test_menu_gather_symbol
|
688
|
-
@input << "Sample1\nlast\n"
|
689
|
-
@input.rewind
|
690
|
-
|
691
|
-
selected = @terminal.choose do |menu|
|
692
|
-
menu.gather = "last"
|
693
|
-
menu.choice "Sample1"
|
694
|
-
menu.choice "Sample2"
|
695
|
-
menu.choice "last"
|
696
|
-
end
|
697
|
-
assert_equal(["Sample1"], selected)
|
698
|
-
|
699
|
-
assert_equal("1. Sample1\n" +
|
700
|
-
"2. Sample2\n" +
|
701
|
-
"3. last\n" +
|
702
|
-
"? 1. Sample1\n" +
|
703
|
-
"2. Sample2\n" +
|
704
|
-
"3. last\n" +
|
705
|
-
"? ", @output.string)
|
706
|
-
end
|
707
|
-
|
708
|
-
def test_menu_gather_regexp
|
709
|
-
@input << "Sample1\nlast\n"
|
710
|
-
@input.rewind
|
711
|
-
|
712
|
-
selected = @terminal.choose do |menu|
|
713
|
-
menu.gather = /la/
|
714
|
-
menu.choice "Sample1"
|
715
|
-
menu.choice "Sample2"
|
716
|
-
menu.choice "last"
|
717
|
-
end
|
718
|
-
assert_equal(["Sample1"], selected)
|
719
|
-
|
720
|
-
assert_equal("1. Sample1\n" +
|
721
|
-
"2. Sample2\n" +
|
722
|
-
"3. last\n" +
|
723
|
-
"? 1. Sample1\n" +
|
724
|
-
"2. Sample2\n" +
|
725
|
-
"3. last\n" +
|
726
|
-
"? ", @output.string)
|
727
|
-
end
|
728
|
-
|
729
|
-
def test_menu_gather_hash
|
730
|
-
@input << "Sample1\n3\n"
|
731
|
-
@input.rewind
|
732
|
-
|
733
|
-
selected = @terminal.choose do |menu|
|
734
|
-
menu.gather = { "First" => true, second: true }
|
735
|
-
menu.choice "Sample1"
|
736
|
-
menu.choice "Sample2"
|
737
|
-
menu.choice "last"
|
738
|
-
end
|
739
|
-
assert_equal({ "First" => "Sample1", second: "last" }, selected)
|
740
|
-
|
741
|
-
assert_equal("1. Sample1\n" +
|
742
|
-
"2. Sample2\n" +
|
743
|
-
"3. last\n" +
|
744
|
-
"? 1. Sample1\n" +
|
745
|
-
"2. Sample2\n" +
|
746
|
-
"3. last\n" +
|
747
|
-
"? ", @output.string)
|
748
|
-
end
|
749
|
-
end
|