rtt 0.0.0.21 → 0.0.0.22

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 (40) hide show
  1. data/Manifest +1 -31
  2. data/Rakefile +2 -2
  3. data/db/rtt.sqlite3 +0 -0
  4. data/db/test.sqlite3 +0 -0
  5. data/lib/rtt.rb +3 -1
  6. data/lib/rtt/cmd_line_parser.rb +13 -1
  7. data/lib/rtt/storage.rb +12 -0
  8. data/rtt.gemspec +6 -6
  9. metadata +14 -36
  10. data/todo.txt +0 -1
  11. data/vendor/highline-1.5.2/CHANGELOG +0 -227
  12. data/vendor/highline-1.5.2/INSTALL +0 -41
  13. data/vendor/highline-1.5.2/LICENSE +0 -7
  14. data/vendor/highline-1.5.2/README +0 -63
  15. data/vendor/highline-1.5.2/Rakefile +0 -82
  16. data/vendor/highline-1.5.2/TODO +0 -6
  17. data/vendor/highline-1.5.2/examples/ansi_colors.rb +0 -38
  18. data/vendor/highline-1.5.2/examples/asking_for_arrays.rb +0 -18
  19. data/vendor/highline-1.5.2/examples/basic_usage.rb +0 -75
  20. data/vendor/highline-1.5.2/examples/color_scheme.rb +0 -32
  21. data/vendor/highline-1.5.2/examples/limit.rb +0 -12
  22. data/vendor/highline-1.5.2/examples/menus.rb +0 -65
  23. data/vendor/highline-1.5.2/examples/overwrite.rb +0 -19
  24. data/vendor/highline-1.5.2/examples/page_and_wrap.rb +0 -322
  25. data/vendor/highline-1.5.2/examples/password.rb +0 -7
  26. data/vendor/highline-1.5.2/examples/trapping_eof.rb +0 -22
  27. data/vendor/highline-1.5.2/examples/using_readline.rb +0 -17
  28. data/vendor/highline-1.5.2/lib/highline.rb +0 -758
  29. data/vendor/highline-1.5.2/lib/highline/color_scheme.rb +0 -120
  30. data/vendor/highline-1.5.2/lib/highline/compatibility.rb +0 -17
  31. data/vendor/highline-1.5.2/lib/highline/import.rb +0 -43
  32. data/vendor/highline-1.5.2/lib/highline/menu.rb +0 -395
  33. data/vendor/highline-1.5.2/lib/highline/question.rb +0 -463
  34. data/vendor/highline-1.5.2/lib/highline/system_extensions.rb +0 -240
  35. data/vendor/highline-1.5.2/setup.rb +0 -1360
  36. data/vendor/highline-1.5.2/test/tc_color_scheme.rb +0 -56
  37. data/vendor/highline-1.5.2/test/tc_highline.rb +0 -823
  38. data/vendor/highline-1.5.2/test/tc_import.rb +0 -54
  39. data/vendor/highline-1.5.2/test/tc_menu.rb +0 -429
  40. data/vendor/highline-1.5.2/test/ts_all.rb +0 -15
@@ -1,56 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
-
3
- # tc_color_scheme.rb
4
- #
5
- # Created by Jeremy Hinegardner on 2007-01-24.
6
- # Copyright 2007 Jeremy Hinegardner. All rights reserved.
7
- #
8
- # This is Free Software. See LICENSE and COPYING for details.
9
-
10
- require "test/unit"
11
-
12
- require "highline"
13
- require "stringio"
14
-
15
- class TestColorScheme < Test::Unit::TestCase
16
- def setup
17
- @input = StringIO.new
18
- @output = StringIO.new
19
- @terminal = HighLine.new(@input, @output)
20
-
21
- @old_color_scheme = HighLine.color_scheme
22
- end
23
-
24
- def teardown
25
- HighLine.color_scheme = @old_color_scheme
26
- end
27
-
28
- def test_using_color_scheme
29
- assert_equal(false,HighLine.using_color_scheme?)
30
-
31
- HighLine.color_scheme = HighLine::ColorScheme.new
32
- assert_equal(true,HighLine.using_color_scheme?)
33
- end
34
-
35
- def test_scheme
36
- HighLine.color_scheme = HighLine::SampleColorScheme.new
37
-
38
- @terminal.say("This should be <%= color('warning yellow', :warning) %>.")
39
- assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string)
40
- @output.rewind
41
-
42
- @terminal.say("This should be <%= color('warning yellow', 'warning') %>.")
43
- assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string)
44
- @output.rewind
45
-
46
- @terminal.say("This should be <%= color('warning yellow', 'WarNing') %>.")
47
- assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string)
48
- @output.rewind
49
-
50
- # turn it back off, should raise an exception
51
- HighLine.color_scheme = @old_color_scheme
52
- assert_raises(NameError) {
53
- @terminal.say("This should be <%= color('nothing at all', :error) %>.")
54
- }
55
- end
56
- end
@@ -1,823 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
-
3
- # tc_highline.rb
4
- #
5
- # Created by James Edward Gray II on 2005-04-26.
6
- # Copyright 2005 Gray Productions. All rights reserved.
7
- #
8
- # This is Free Software. See LICENSE and COPYING for details.
9
-
10
- require "test/unit"
11
-
12
- require "highline"
13
- require "stringio"
14
-
15
- if HighLine::CHARACTER_MODE == "Win32API"
16
- class HighLine
17
- # Override Windows' character reading so it's not tied to STDIN.
18
- def get_character( input = STDIN )
19
- input.getc
20
- end
21
- end
22
- end
23
-
24
- class TestHighLine < Test::Unit::TestCase
25
- def setup
26
- @input = StringIO.new
27
- @output = StringIO.new
28
- @terminal = HighLine.new(@input, @output)
29
- end
30
-
31
- def test_agree
32
- @input << "y\nyes\nYES\nHell no!\nNo\n"
33
- @input.rewind
34
-
35
- assert_equal(true, @terminal.agree("Yes or no? "))
36
- assert_equal(true, @terminal.agree("Yes or no? "))
37
- assert_equal(true, @terminal.agree("Yes or no? "))
38
- assert_equal(false, @terminal.agree("Yes or no? "))
39
-
40
- @input.truncate(@input.rewind)
41
- @input << "yellow"
42
- @input.rewind
43
-
44
- assert_equal(true, @terminal.agree("Yes or no? ", :getc))
45
- end
46
-
47
- def test_agree_with_block
48
- @input << "\n\n"
49
- @input.rewind
50
-
51
- assert_equal(true, @terminal.agree("Yes or no? ") { |q| q.default = "y" })
52
- assert_equal(false, @terminal.agree("Yes or no? ") { |q| q.default = "n" })
53
- end
54
-
55
- def test_ask
56
- name = "James Edward Gray II"
57
- @input << name << "\n"
58
- @input.rewind
59
-
60
- assert_equal(name, @terminal.ask("What is your name? "))
61
-
62
- assert_raise(EOFError) { @terminal.ask("Any input left? ") }
63
- end
64
-
65
- def test_bug_fixes
66
- # auto-complete bug
67
- @input << "ruby\nRuby\n"
68
- @input.rewind
69
-
70
- languages = [:Perl, :Python, :Ruby]
71
- answer = @terminal.ask( "What is your favorite programming language? ",
72
- languages )
73
- assert_equal(languages.last, answer)
74
-
75
- @input.truncate(@input.rewind)
76
- @input << "ruby\n"
77
- @input.rewind
78
-
79
- answer = @terminal.ask( "What is your favorite programming language? ",
80
- languages ) do |q|
81
- q.case = :capitalize
82
- end
83
- assert_equal(languages.last, answer)
84
-
85
- # poor auto-complete error message
86
- @input.truncate(@input.rewind)
87
- @input << "lisp\nruby\n"
88
- @input.rewind
89
- @output.truncate(@output.rewind)
90
-
91
- answer = @terminal.ask( "What is your favorite programming language? ",
92
- languages ) do |q|
93
- q.case = :capitalize
94
- end
95
- assert_equal(languages.last, answer)
96
- assert_equal( "What is your favorite programming language? " +
97
- "You must choose one of [:Perl, :Python, :Ruby].\n" +
98
- "? ", @output.string )
99
- end
100
-
101
- def test_case_changes
102
- @input << "jeg2\n"
103
- @input.rewind
104
-
105
- answer = @terminal.ask("Enter your initials ") do |q|
106
- q.case = :up
107
- end
108
- assert_equal("JEG2", answer)
109
-
110
- @input.truncate(@input.rewind)
111
- @input << "cRaZY\n"
112
- @input.rewind
113
-
114
- answer = @terminal.ask("Enter a search string: ") do |q|
115
- q.case = :down
116
- end
117
- assert_equal("crazy", answer)
118
- end
119
-
120
- def test_character_echo
121
- @input << "password\r"
122
- @input.rewind
123
-
124
- answer = @terminal.ask("Please enter your password: ") do |q|
125
- q.echo = "*"
126
- end
127
- assert_equal("password", answer)
128
- assert_equal("Please enter your password: ********\n", @output.string)
129
-
130
- @input.truncate(@input.rewind)
131
- @input << "2"
132
- @input.rewind
133
- @output.truncate(@output.rewind)
134
-
135
- answer = @terminal.ask( "Select an option (1, 2 or 3): ",
136
- Integer ) do |q|
137
- q.echo = "*"
138
- q.character = true
139
- end
140
- assert_equal(2, answer)
141
- assert_equal("Select an option (1, 2 or 3): *\n", @output.string)
142
- end
143
-
144
- def test_backspace_does_not_enter_prompt
145
- @input << "\b\b"
146
- @input.rewind
147
- answer = @terminal.ask("Please enter your password: ") do |q|
148
- q.echo = "*"
149
- end
150
- assert_equal("", answer)
151
- assert_equal("Please enter your password: \n",@output.string)
152
- end
153
-
154
- def test_readline_on_non_echo_question_has_prompt
155
- @input << "you can't see me"
156
- @input.rewind
157
- answer = @terminal.ask("Please enter some hidden text: ") do |q|
158
- q.readline = true
159
- q.echo = "*"
160
- end
161
- assert_equal("you can't see me", answer)
162
- assert_equal("Please enter some hidden text: ****************\n",@output.string)
163
- end
164
-
165
- def test_character_reading
166
- # WARNING: This method does NOT cover Unix and Windows savvy testing!
167
- @input << "12345"
168
- @input.rewind
169
-
170
- answer = @terminal.ask("Enter a single digit: ", Integer) do |q|
171
- q.character = :getc
172
- end
173
- assert_equal(1, answer)
174
- end
175
-
176
- def test_color
177
- @terminal.say("This should be <%= BLUE %>blue<%= CLEAR %>!")
178
- assert_equal("This should be \e[34mblue\e[0m!\n", @output.string)
179
-
180
- @output.truncate(@output.rewind)
181
-
182
- @terminal.say( "This should be " +
183
- "<%= BOLD + ON_WHITE %>bold on white<%= CLEAR %>!" )
184
- assert_equal( "This should be \e[1m\e[47mbold on white\e[0m!\n",
185
- @output.string )
186
-
187
- @output.truncate(@output.rewind)
188
-
189
- @terminal.say("This should be <%= color('cyan', CYAN) %>!")
190
- assert_equal("This should be \e[36mcyan\e[0m!\n", @output.string)
191
-
192
- @output.truncate(@output.rewind)
193
-
194
- @terminal.say( "This should be " +
195
- "<%= color('blinking on red', :blink, :on_red) %>!" )
196
- assert_equal( "This should be \e[5m\e[41mblinking on red\e[0m!\n",
197
- @output.string )
198
-
199
- @output.truncate(@output.rewind)
200
-
201
- # turn off color
202
- old_setting = HighLine.use_color?
203
- assert_nothing_raised(Exception) { HighLine.use_color = false }
204
- @terminal.say("This should be <%= color('cyan', CYAN) %>!")
205
- assert_equal("This should be cyan!\n", @output.string)
206
- HighLine.use_color = old_setting
207
- end
208
-
209
- def test_confirm
210
- @input << "junk.txt\nno\nsave.txt\ny\n"
211
- @input.rewind
212
-
213
- answer = @terminal.ask("Enter a filename: ") do |q|
214
- q.confirm = "Are you sure you want to overwrite <%= @answer %>? "
215
- q.responses[:ask_on_error] = :question
216
- end
217
- assert_equal("save.txt", answer)
218
- assert_equal( "Enter a filename: " +
219
- "Are you sure you want to overwrite junk.txt? " +
220
- "Enter a filename: " +
221
- "Are you sure you want to overwrite save.txt? ",
222
- @output.string )
223
-
224
- @input.truncate(@input.rewind)
225
- @input << "junk.txt\nyes\nsave.txt\nn\n"
226
- @input.rewind
227
- @output.truncate(@output.rewind)
228
-
229
- answer = @terminal.ask("Enter a filename: ") do |q|
230
- q.confirm = "Are you sure you want to overwrite <%= @answer %>? "
231
- end
232
- assert_equal("junk.txt", answer)
233
- assert_equal( "Enter a filename: " +
234
- "Are you sure you want to overwrite junk.txt? ",
235
- @output.string )
236
- end
237
-
238
- def test_defaults
239
- @input << "\nNo Comment\n"
240
- @input.rewind
241
-
242
- answer = @terminal.ask("Are you sexually active? ") do |q|
243
- q.validate = /\Ay(?:es)?|no?|no comment\Z/i
244
- end
245
- assert_equal("No Comment", answer)
246
-
247
- @input.truncate(@input.rewind)
248
- @input << "\nYes\n"
249
- @input.rewind
250
- @output.truncate(@output.rewind)
251
-
252
- answer = @terminal.ask("Are you sexually active? ") do |q|
253
- q.default = "No Comment"
254
- q.validate = /\Ay(?:es)?|no?|no comment\Z/i
255
- end
256
- assert_equal("No Comment", answer)
257
- assert_equal( "Are you sexually active? |No Comment| ",
258
- @output.string )
259
- end
260
-
261
- def test_empty
262
- @input << "\n"
263
- @input.rewind
264
-
265
- answer = @terminal.ask("") do |q|
266
- q.default = "yes"
267
- q.validate = /\Ay(?:es)?|no?\Z/i
268
- end
269
- assert_equal("yes", answer)
270
- end
271
-
272
- def test_erb
273
- @terminal.say( "The integers from 1 to 10 are:\n" +
274
- "% (1...10).each do |n|\n" +
275
- "\t<%= n %>,\n" +
276
- "% end\n" +
277
- "\tand 10" )
278
- assert_equal( "The integers from 1 to 10 are:\n" +
279
- "\t1,\n\t2,\n\t3,\n\t4,\n\t5,\n" +
280
- "\t6,\n\t7,\n\t8,\n\t9,\n\tand 10\n",
281
- @output.string )
282
- end
283
-
284
- def test_files
285
- @input << "#{File.basename(__FILE__)[0, 5]}\n"
286
- @input.rewind
287
-
288
- file = @terminal.ask("Select a file: ", File) do |q|
289
- q.directory = File.expand_path(File.dirname(__FILE__))
290
- q.glob = "*.rb"
291
- end
292
- assert_instance_of(File, file)
293
- assert_equal("#!/usr/local/bin/ruby -w\n", file.gets)
294
- assert_equal("\n", file.gets)
295
- assert_equal("# tc_highline.rb\n", file.gets)
296
- file.close
297
-
298
- @input.rewind
299
-
300
- pathname = @terminal.ask("Select a file: ", Pathname) do |q|
301
- q.directory = File.expand_path(File.dirname(__FILE__))
302
- q.glob = "*.rb"
303
- end
304
- assert_instance_of(Pathname, pathname)
305
- assert_equal(File.size(__FILE__), pathname.size)
306
- end
307
-
308
- def test_gather
309
- @input << "James\nDana\nStorm\nGypsy\n\n"
310
- @input.rewind
311
-
312
- answers = @terminal.ask("Enter four names:") do |q|
313
- q.gather = 4
314
- end
315
- assert_equal(%w{James Dana Storm Gypsy}, answers)
316
- assert_equal("\n", @input.gets)
317
- assert_equal("Enter four names:\n", @output.string)
318
-
319
- @input.rewind
320
-
321
- answers = @terminal.ask("Enter four names:") do |q|
322
- q.gather = ""
323
- end
324
- assert_equal(%w{James Dana Storm Gypsy}, answers)
325
-
326
- @input.rewind
327
-
328
- answers = @terminal.ask("Enter four names:") do |q|
329
- q.gather = /^\s*$/
330
- end
331
- assert_equal(%w{James Dana Storm Gypsy}, answers)
332
-
333
- @input.truncate(@input.rewind)
334
- @input << "29\n49\n30\n"
335
- @input.rewind
336
- @output.truncate(@output.rewind)
337
-
338
- answers = @terminal.ask("<%= @key %>: ", Integer) do |q|
339
- q.gather = { "Age" => 0, "Wife's Age" => 0, "Father's Age" => 0}
340
- end
341
- assert_equal( { "Age" => 29, "Wife's Age" => 30, "Father's Age" => 49},
342
- answers )
343
- assert_equal("Age: Father's Age: Wife's Age: ", @output.string)
344
- end
345
-
346
- def test_lists
347
- digits = %w{Zero One Two Three Four Five Six Seven Eight Nine}
348
- erb_digits = digits.dup
349
- erb_digits[erb_digits.index("Five")] = "<%= color('Five', :blue) %%>"
350
-
351
- @terminal.say("<%= list(#{digits.inspect}) %>")
352
- assert_equal(digits.map { |d| "#{d}\n" }.join, @output.string)
353
-
354
- @output.truncate(@output.rewind)
355
-
356
- @terminal.say("<%= list(#{digits.inspect}, :inline) %>")
357
- assert_equal( digits[0..-2].join(", ") + " or #{digits.last}\n",
358
- @output.string )
359
-
360
- @output.truncate(@output.rewind)
361
-
362
- @terminal.say("<%= list(#{digits.inspect}, :inline, ' and ') %>")
363
- assert_equal( digits[0..-2].join(", ") + " and #{digits.last}\n",
364
- @output.string )
365
-
366
- @output.truncate(@output.rewind)
367
-
368
- @terminal.say("<%= list(#{digits.inspect}, :columns_down, 3) %>")
369
- assert_equal( "Zero Four Eight\n" +
370
- "One Five Nine \n" +
371
- "Two Six \n" +
372
- "Three Seven\n",
373
- @output.string )
374
-
375
- @output.truncate(@output.rewind)
376
-
377
- @terminal.say("<%= list(#{erb_digits.inspect}, :columns_down, 3) %>")
378
- assert_equal( "Zero Four Eight\n" +
379
- "One \e[34mFive\e[0m Nine \n" +
380
- "Two Six \n" +
381
- "Three Seven\n",
382
- @output.string )
383
-
384
- colums_of_twenty = ["12345678901234567890"] * 5
385
-
386
- @output.truncate(@output.rewind)
387
-
388
- @terminal.say("<%= list(#{colums_of_twenty.inspect}, :columns_down) %>")
389
- assert_equal( "12345678901234567890 12345678901234567890 " +
390
- "12345678901234567890\n" +
391
- "12345678901234567890 12345678901234567890\n",
392
- @output.string )
393
-
394
- @output.truncate(@output.rewind)
395
-
396
- @terminal.say("<%= list(#{digits.inspect}, :columns_across, 3) %>")
397
- assert_equal( "Zero One Two \n" +
398
- "Three Four Five \n" +
399
- "Six Seven Eight\n" +
400
- "Nine \n",
401
- @output.string )
402
-
403
- colums_of_twenty.pop
404
-
405
- @output.truncate(@output.rewind)
406
-
407
- @terminal.say("<%= list( #{colums_of_twenty.inspect}, :columns_across ) %>")
408
- assert_equal( "12345678901234567890 12345678901234567890 " +
409
- "12345678901234567890\n" +
410
- "12345678901234567890\n",
411
- @output.string )
412
- end
413
-
414
- def test_mode
415
- assert(%w[Win32API termios ncurses stty].include?(HighLine::CHARACTER_MODE))
416
- end
417
-
418
- class NameClass
419
- def self.parse( string )
420
- if string =~ /^\s*(\w+),\s*(\w+)\s+(\w+)\s*$/
421
- self.new($2, $3, $1)
422
- else
423
- raise ArgumentError, "Invalid name format."
424
- end
425
- end
426
-
427
- def initialize(first, middle, last)
428
- @first, @middle, @last = first, middle, last
429
- end
430
-
431
- attr_reader :first, :middle, :last
432
- end
433
-
434
- def test_my_class_conversion
435
- @input << "Gray, James Edward\n"
436
- @input.rewind
437
-
438
- answer = @terminal.ask("Your name? ", NameClass) do |q|
439
- q.validate = lambda do |name|
440
- names = name.split(/,\s*/)
441
- return false unless names.size == 2
442
- return false if names.first =~ /\s/
443
- names.last.split.size == 2
444
- end
445
- end
446
- assert_instance_of(NameClass, answer)
447
- assert_equal("Gray", answer.last)
448
- assert_equal("James", answer.first)
449
- assert_equal("Edward", answer.middle)
450
- end
451
-
452
- def test_no_echo
453
- @input << "password\r"
454
- @input.rewind
455
-
456
- answer = @terminal.ask("Please enter your password: ") do |q|
457
- q.echo = false
458
- end
459
- assert_equal("password", answer)
460
- assert_equal("Please enter your password: \n", @output.string)
461
-
462
- @input.rewind
463
- @output.truncate(@output.rewind)
464
-
465
- answer = @terminal.ask("Pick a letter or number: ") do |q|
466
- q.character = true
467
- q.echo = false
468
- end
469
- assert_equal("p", answer)
470
- assert_equal("a", @input.getc.chr)
471
- assert_equal("Pick a letter or number: \n", @output.string)
472
- end
473
-
474
- def test_paging
475
- @terminal.page_at = 22
476
-
477
- @input << "\n\n"
478
- @input.rewind
479
-
480
- @terminal.say((1..50).map { |n| "This is line #{n}.\n"}.join)
481
- assert_equal( (1..22).map { |n| "This is line #{n}.\n"}.join +
482
- "\n-- press enter/return to continue or q to stop -- \n\n" +
483
- (23..44).map { |n| "This is line #{n}.\n"}.join +
484
- "\n-- press enter/return to continue or q to stop -- \n\n" +
485
- (45..50).map { |n| "This is line #{n}.\n"}.join,
486
- @output.string )
487
- end
488
-
489
- def test_range_requirements
490
- @input << "112\n-541\n28\n"
491
- @input.rewind
492
-
493
- answer = @terminal.ask("Tell me your age.", Integer) do |q|
494
- q.in = 0..105
495
- end
496
- assert_equal(28, answer)
497
- assert_equal( "Tell me your age.\n" +
498
- "Your answer isn't within the expected range " +
499
- "(included in 0..105).\n" +
500
- "? " +
501
- "Your answer isn't within the expected range " +
502
- "(included in 0..105).\n" +
503
- "? ", @output.string )
504
-
505
- @input.truncate(@input.rewind)
506
- @input << "1\n-541\n28\n"
507
- @input.rewind
508
- @output.truncate(@output.rewind)
509
-
510
- answer = @terminal.ask("Tell me your age.", Integer) do |q|
511
- q.above = 3
512
- end
513
- assert_equal(28, answer)
514
- assert_equal( "Tell me your age.\n" +
515
- "Your answer isn't within the expected range " +
516
- "(above 3).\n" +
517
- "? " +
518
- "Your answer isn't within the expected range " +
519
- "(above 3).\n" +
520
- "? ", @output.string )
521
-
522
- @input.truncate(@input.rewind)
523
- @input << "1\n28\n-541\n"
524
- @input.rewind
525
- @output.truncate(@output.rewind)
526
-
527
- answer = @terminal.ask("Lowest numer you can think of?", Integer) do |q|
528
- q.below = 0
529
- end
530
- assert_equal(-541, answer)
531
- assert_equal( "Lowest numer you can think of?\n" +
532
- "Your answer isn't within the expected range " +
533
- "(below 0).\n" +
534
- "? " +
535
- "Your answer isn't within the expected range " +
536
- "(below 0).\n" +
537
- "? ", @output.string )
538
-
539
- @input.truncate(@input.rewind)
540
- @input << "1\n-541\n6\n"
541
- @input.rewind
542
- @output.truncate(@output.rewind)
543
-
544
- answer = @terminal.ask("Enter a low even number: ", Integer) do |q|
545
- q.above = 0
546
- q.below = 10
547
- q.in = [2, 4, 6, 8]
548
- end
549
- assert_equal(6, answer)
550
- assert_equal( "Enter a low even number: " +
551
- "Your answer isn't within the expected range " +
552
- "(above 0, below 10, and included in [2, 4, 6, 8]).\n" +
553
- "? " +
554
- "Your answer isn't within the expected range " +
555
- "(above 0, below 10, and included in [2, 4, 6, 8]).\n" +
556
- "? ", @output.string )
557
- end
558
-
559
- def test_reask
560
- number = 61676
561
- @input << "Junk!\n" << number << "\n"
562
- @input.rewind
563
-
564
- answer = @terminal.ask("Favorite number? ", Integer)
565
- assert_kind_of(Integer, number)
566
- assert_instance_of(Fixnum, number)
567
- assert_equal(number, answer)
568
- assert_equal( "Favorite number? " +
569
- "You must enter a valid Integer.\n" +
570
- "? ", @output.string )
571
-
572
- @input.rewind
573
- @output.truncate(@output.rewind)
574
-
575
- answer = @terminal.ask("Favorite number? ", Integer) do |q|
576
- q.responses[:ask_on_error] = :question
577
- q.responses[:invalid_type] = "Not a valid number!"
578
- end
579
- assert_kind_of(Integer, number)
580
- assert_instance_of(Fixnum, number)
581
- assert_equal(number, answer)
582
- assert_equal( "Favorite number? " +
583
- "Not a valid number!\n" +
584
- "Favorite number? ", @output.string )
585
-
586
- @input.truncate(@input.rewind)
587
- @input << "gen\ngene\n"
588
- @input.rewind
589
- @output.truncate(@output.rewind)
590
-
591
- answer = @terminal.ask("Select a mode: ", [:generate, :gentle])
592
- assert_instance_of(Symbol, answer)
593
- assert_equal(:generate, answer)
594
- assert_equal( "Select a mode: " +
595
- "Ambiguous choice. " +
596
- "Please choose one of [:generate, :gentle].\n" +
597
- "? ", @output.string )
598
- end
599
-
600
- def test_response_embedding
601
- @input << "112\n-541\n28\n"
602
- @input.rewind
603
-
604
- answer = @terminal.ask("Tell me your age.", Integer) do |q|
605
- q.in = 0..105
606
- q.responses[:not_in_range] = "Need a <%= @question.answer_type %>" +
607
- " <%= @question.expected_range %>."
608
- end
609
- assert_equal(28, answer)
610
- assert_equal( "Tell me your age.\n" +
611
- "Need a Integer included in 0..105.\n" +
612
- "? " +
613
- "Need a Integer included in 0..105.\n" +
614
- "? ", @output.string )
615
- end
616
-
617
- def test_say
618
- @terminal.say("This will have a newline.")
619
- assert_equal("This will have a newline.\n", @output.string)
620
-
621
- @output.truncate(@output.rewind)
622
-
623
- @terminal.say("This will also have one newline.\n")
624
- assert_equal("This will also have one newline.\n", @output.string)
625
-
626
- @output.truncate(@output.rewind)
627
-
628
- @terminal.say("This will not have a newline. ")
629
- assert_equal("This will not have a newline. ", @output.string)
630
- end
631
-
632
- def test_type_conversion
633
- number = 61676
634
- @input << number << "\n"
635
- @input.rewind
636
-
637
- answer = @terminal.ask("Favorite number? ", Integer)
638
- assert_kind_of(Integer, answer)
639
- assert_instance_of(Fixnum, answer)
640
- assert_equal(number, answer)
641
-
642
- @input.truncate(@input.rewind)
643
- number = 1_000_000_000_000_000_000_000_000_000_000
644
- @input << number << "\n"
645
- @input.rewind
646
-
647
- answer = @terminal.ask("Favorite number? ", Integer)
648
- assert_kind_of(Integer, answer)
649
- assert_instance_of(Bignum, answer)
650
- assert_equal(number, answer)
651
-
652
- @input.truncate(@input.rewind)
653
- number = 10.5002
654
- @input << number << "\n"
655
- @input.rewind
656
-
657
- answer = @terminal.ask( "Favorite number? ",
658
- lambda { |n| n.to_f.abs.round } )
659
- assert_kind_of(Integer, answer)
660
- assert_instance_of(Fixnum, answer)
661
- assert_equal(11, answer)
662
-
663
- @input.truncate(@input.rewind)
664
- animal = :dog
665
- @input << animal << "\n"
666
- @input.rewind
667
-
668
- answer = @terminal.ask("Favorite animal? ", Symbol)
669
- assert_instance_of(Symbol, answer)
670
- assert_equal(animal, answer)
671
-
672
- @input.truncate(@input.rewind)
673
- @input << "16th June 1976\n"
674
- @input.rewind
675
-
676
- answer = @terminal.ask("Enter your birthday.", Date)
677
- assert_instance_of(Date, answer)
678
- assert_equal(16, answer.day)
679
- assert_equal(6, answer.month)
680
- assert_equal(1976, answer.year)
681
-
682
- @input.truncate(@input.rewind)
683
- pattern = "^yes|no$"
684
- @input << pattern << "\n"
685
- @input.rewind
686
-
687
- answer = @terminal.ask("Give me a pattern to match with: ", Regexp)
688
- assert_instance_of(Regexp, answer)
689
- assert_equal(/#{pattern}/, answer)
690
-
691
- @input.truncate(@input.rewind)
692
- @input << "gen\n"
693
- @input.rewind
694
-
695
- answer = @terminal.ask("Select a mode: ", [:generate, :run])
696
- assert_instance_of(Symbol, answer)
697
- assert_equal(:generate, answer)
698
- end
699
-
700
- def test_validation
701
- @input << "system 'rm -rf /'\n105\n0b101_001\n"
702
- @input.rewind
703
-
704
- answer = @terminal.ask("Enter a binary number: ") do |q|
705
- q.validate = /\A(?:0b)?[01_]+\Z/
706
- end
707
- assert_equal("0b101_001", answer)
708
- assert_equal( "Enter a binary number: " +
709
- "Your answer isn't valid " +
710
- "(must match /\\A(?:0b)?[01_]+\\Z/).\n" +
711
- "? " +
712
- "Your answer isn't valid " +
713
- "(must match /\\A(?:0b)?[01_]+\\Z/).\n" +
714
- "? ", @output.string )
715
-
716
- @input.truncate(@input.rewind)
717
- @input << "Gray II, James Edward\n" +
718
- "Gray, Dana Ann Leslie\n" +
719
- "Gray, James Edward\n"
720
- @input.rewind
721
-
722
- answer = @terminal.ask("Your name? ") do |q|
723
- q.validate = lambda do |name|
724
- names = name.split(/,\s*/)
725
- return false unless names.size == 2
726
- return false if names.first =~ /\s/
727
- names.last.split.size == 2
728
- end
729
- end
730
- assert_equal("Gray, James Edward", answer)
731
- end
732
-
733
- def test_whitespace
734
- @input << " A lot\tof \t space\t \there! \n"
735
- @input.rewind
736
-
737
- answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
738
- q.whitespace = :chomp
739
- end
740
- assert_equal(" A lot\tof \t space\t \there! ", answer)
741
-
742
- @input.rewind
743
-
744
- answer = @terminal.ask("Enter a whitespace filled string: ")
745
- assert_equal("A lot\tof \t space\t \there!", answer)
746
-
747
- @input.rewind
748
-
749
- answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
750
- q.whitespace = :strip_and_collapse
751
- end
752
- assert_equal("A lot of space here!", answer)
753
-
754
- @input.rewind
755
-
756
- answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
757
- q.whitespace = :remove
758
- end
759
- assert_equal("Alotofspacehere!", answer)
760
-
761
- @input.rewind
762
-
763
- answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
764
- q.whitespace = :none
765
- end
766
- assert_equal(" A lot\tof \t space\t \there! \n", answer)
767
- end
768
-
769
- def test_wrap
770
- @terminal.wrap_at = 80
771
-
772
- @terminal.say("This is a very short line.")
773
- assert_equal("This is a very short line.\n", @output.string)
774
-
775
- @output.truncate(@output.rewind)
776
-
777
- @terminal.say( "This is a long flowing paragraph meant to span " +
778
- "several lines. This text should definitely be " +
779
- "wrapped at the set limit, in the result. Your code " +
780
- "does well with things like this.\n\n" +
781
- " * This is a simple embedded list.\n" +
782
- " * You're code should not mess with this...\n" +
783
- " * Because it's already formatted correctly and " +
784
- "does not\n" +
785
- " exceed the limit!" )
786
- assert_equal( "This is a long flowing paragraph meant to span " +
787
- "several lines. This text should\n" +
788
- "definitely be wrapped at the set limit, in the " +
789
- "result. Your code does well with\n" +
790
- "things like this.\n\n" +
791
- " * This is a simple embedded list.\n" +
792
- " * You're code should not mess with this...\n" +
793
- " * Because it's already formatted correctly and does " +
794
- "not\n" +
795
- " exceed the limit!\n", @output.string )
796
-
797
- @output.truncate(@output.rewind)
798
-
799
- @terminal.say("-=" * 50)
800
- assert_equal(("-=" * 40 + "\n") + ("-=" * 10 + "\n"), @output.string)
801
- end
802
-
803
- def test_track_eof
804
- assert_raise(EOFError) { @terminal.ask("Any input left? ") }
805
-
806
- # turn EOF tracking
807
- old_setting = HighLine.track_eof?
808
- assert_nothing_raised(Exception) { HighLine.track_eof = false }
809
- begin
810
- @terminal.ask("And now? ") # this will still blow up, nothing available
811
- rescue
812
- assert_not_equal(EOFError, $!.class) # but HighLine's safe guards are off
813
- end
814
- HighLine.track_eof = old_setting
815
- end
816
-
817
- def test_version
818
- assert_not_nil(HighLine::VERSION)
819
- assert_instance_of(String, HighLine::VERSION)
820
- assert(HighLine::VERSION.frozen?)
821
- assert_match(/\A\d\.\d\.\d\Z/, HighLine::VERSION)
822
- end
823
- end