rtt 0.0.0.21 → 0.0.0.22

Sign up to get free protection for your applications and to get access to all the features.
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