highline 0.2.0 → 0.3.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.
- data/CHANGELOG +19 -1
- data/INSTALL +15 -2
- data/README +5 -5
- data/Rakefile +8 -2
- data/TODO +2 -7
- data/examples/ansi_colors.rb +32 -0
- data/examples/basic_usage.rb +22 -4
- data/lib/highline.rb +153 -22
- data/lib/highline/question.rb +95 -41
- data/setup.rb +1360 -0
- data/test/tc_highline.rb +141 -0
- metadata +4 -2
data/test/tc_highline.rb
CHANGED
@@ -28,6 +28,12 @@ class TestHighLine < Test::Unit::TestCase
|
|
28
28
|
assert_equal(true, @terminal.agree("Yes or no? "))
|
29
29
|
assert_equal(true, @terminal.agree("Yes or no? "))
|
30
30
|
assert_equal(false, @terminal.agree("Yes or no? "))
|
31
|
+
|
32
|
+
@input.truncate(@input.rewind)
|
33
|
+
@input << "yellow"
|
34
|
+
@input.rewind
|
35
|
+
|
36
|
+
assert_equal(true, @terminal.agree("Yes or no? ", :getc))
|
31
37
|
end
|
32
38
|
|
33
39
|
def test_ask
|
@@ -38,6 +44,41 @@ class TestHighLine < Test::Unit::TestCase
|
|
38
44
|
assert_equal(name, @terminal.ask("What is your name? "))
|
39
45
|
end
|
40
46
|
|
47
|
+
def test_character_reading
|
48
|
+
# WARNING: This method does NOT cover Unix and Windows savvy testing!
|
49
|
+
@input << "12345"
|
50
|
+
@input.rewind
|
51
|
+
|
52
|
+
answer = @terminal.ask("Enter a single digit: ", Integer) do |q|
|
53
|
+
q.character = :getc
|
54
|
+
end
|
55
|
+
assert_equal(1, answer)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_color
|
59
|
+
@terminal.say("This should be <%= BLUE %>blue<%= CLEAR %>!")
|
60
|
+
assert_equal("This should be \e[34mblue\e[0m!\n", @output.string)
|
61
|
+
|
62
|
+
@output.truncate(@output.rewind)
|
63
|
+
|
64
|
+
@terminal.say( "This should be " +
|
65
|
+
"<%= BOLD + ON_WHITE %>bold on white<%= CLEAR %>!" )
|
66
|
+
assert_equal( "This should be \e[1m\e[47mbold on white\e[0m!\n",
|
67
|
+
@output.string )
|
68
|
+
|
69
|
+
@output.truncate(@output.rewind)
|
70
|
+
|
71
|
+
@terminal.say("This should be <%= color('cyan', CYAN) %>!")
|
72
|
+
assert_equal("This should be \e[36mcyan\e[0m!\n", @output.string)
|
73
|
+
|
74
|
+
@output.truncate(@output.rewind)
|
75
|
+
|
76
|
+
@terminal.say( "This should be " +
|
77
|
+
"<%= color('blinking on red', :blink, :on_red) %>!" )
|
78
|
+
assert_equal( "This should be \e[5m\e[41mblinking on red\e[0m!\n",
|
79
|
+
@output.string )
|
80
|
+
end
|
81
|
+
|
41
82
|
def test_defaults
|
42
83
|
@input << "\nNo Comment\n"
|
43
84
|
@input.rewind
|
@@ -72,6 +113,53 @@ class TestHighLine < Test::Unit::TestCase
|
|
72
113
|
assert_equal("yes", answer)
|
73
114
|
end
|
74
115
|
|
116
|
+
def test_erb
|
117
|
+
@terminal.say( "The integers from 1 to 10 are:\n" +
|
118
|
+
"% (1...10).each do |n|\n" +
|
119
|
+
"\t<%= n %>,\n" +
|
120
|
+
"% end\n" +
|
121
|
+
"\tand 10" )
|
122
|
+
assert_equal( "The integers from 1 to 10 are:\n" +
|
123
|
+
"\t1,\n\t2,\n\t3,\n\t4,\n\t5,\n" +
|
124
|
+
"\t6,\n\t7,\n\t8,\n\t9,\n\tand 10\n",
|
125
|
+
@output.string )
|
126
|
+
end
|
127
|
+
|
128
|
+
class NameClass
|
129
|
+
def self.parse( string )
|
130
|
+
if string =~ /^\s*(\w+),\s*(\w+)\s+(\w+)\s*$/
|
131
|
+
self.new($2, $3, $1)
|
132
|
+
else
|
133
|
+
raise ArgumentError, "Invalid name format."
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def initialize(first, middle, last)
|
138
|
+
@first, @middle, @last = first, middle, last
|
139
|
+
end
|
140
|
+
|
141
|
+
attr_reader :first, :middle, :last
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_my_class_conversion
|
145
|
+
@input << "Gray, James Edward\n"
|
146
|
+
@input.rewind
|
147
|
+
|
148
|
+
|
149
|
+
answer = @terminal.ask("Your name? ", NameClass) do |q|
|
150
|
+
q.validate = lambda do |name|
|
151
|
+
names = name.split(/,\s*/)
|
152
|
+
return false unless names.size == 2
|
153
|
+
return false if names.first =~ /\s/
|
154
|
+
names.last.split.size == 2
|
155
|
+
end
|
156
|
+
end
|
157
|
+
assert_instance_of(NameClass, answer)
|
158
|
+
assert_equal("Gray", answer.last)
|
159
|
+
assert_equal("James", answer.first)
|
160
|
+
assert_equal("Edward", answer.middle)
|
161
|
+
end
|
162
|
+
|
75
163
|
def test_range_requirements
|
76
164
|
@input << "112\n-541\n28\n"
|
77
165
|
@input.rewind
|
@@ -183,6 +271,23 @@ class TestHighLine < Test::Unit::TestCase
|
|
183
271
|
"? ", @output.string)
|
184
272
|
end
|
185
273
|
|
274
|
+
def test_response_embedding
|
275
|
+
@input << "112\n-541\n28\n"
|
276
|
+
@input.rewind
|
277
|
+
|
278
|
+
answer = @terminal.ask("Tell me your age.", Integer) do |q|
|
279
|
+
q.in = 0..105
|
280
|
+
q.responses[:not_in_range] = "Need a <%= @question.answer_type %>" +
|
281
|
+
" <%= @question.expected_range %>."
|
282
|
+
end
|
283
|
+
assert_equal(28, answer)
|
284
|
+
assert_equal( "Tell me your age.\n" +
|
285
|
+
"Need a Integer included in 0..105.\n" +
|
286
|
+
"? " +
|
287
|
+
"Need a Integer included in 0..105.\n" +
|
288
|
+
"? ", @output.string )
|
289
|
+
end
|
290
|
+
|
186
291
|
def test_say
|
187
292
|
@terminal.say("This will have a newline.")
|
188
293
|
assert_equal("This will have a newline.\n", @output.string)
|
@@ -298,4 +403,40 @@ class TestHighLine < Test::Unit::TestCase
|
|
298
403
|
end
|
299
404
|
assert_equal("Gray, James Edward", answer)
|
300
405
|
end
|
406
|
+
|
407
|
+
def test_whitespace
|
408
|
+
@input << " A lot\tof \t space\t \there! \n"
|
409
|
+
@input.rewind
|
410
|
+
|
411
|
+
answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
|
412
|
+
q.whitespace = :chomp
|
413
|
+
end
|
414
|
+
assert_equal(" A lot\tof \t space\t \there! ", answer)
|
415
|
+
|
416
|
+
@input.rewind
|
417
|
+
|
418
|
+
answer = @terminal.ask("Enter a whitespace filled string: ")
|
419
|
+
assert_equal("A lot\tof \t space\t \there!", answer)
|
420
|
+
|
421
|
+
@input.rewind
|
422
|
+
|
423
|
+
answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
|
424
|
+
q.whitespace = :strip_and_collapse
|
425
|
+
end
|
426
|
+
assert_equal("A lot of space here!", answer)
|
427
|
+
|
428
|
+
@input.rewind
|
429
|
+
|
430
|
+
answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
|
431
|
+
q.whitespace = :remove
|
432
|
+
end
|
433
|
+
assert_equal("Alotofspacehere!", answer)
|
434
|
+
|
435
|
+
@input.rewind
|
436
|
+
|
437
|
+
answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
|
438
|
+
q.whitespace = :none
|
439
|
+
end
|
440
|
+
assert_equal(" A lot\tof \t space\t \there! \n", answer)
|
441
|
+
end
|
301
442
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: highline
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-04
|
6
|
+
version: 0.3.0
|
7
|
+
date: 2005-05-04
|
8
8
|
summary: HighLine is a high-level line oriented console interface.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,6 +29,7 @@ platform: ruby
|
|
29
29
|
authors:
|
30
30
|
- James Edward Gray II
|
31
31
|
files:
|
32
|
+
- examples/ansi_colors.rb
|
32
33
|
- examples/basic_usage.rb
|
33
34
|
- lib/highline.rb
|
34
35
|
- lib/highline/import.rb
|
@@ -37,6 +38,7 @@ files:
|
|
37
38
|
- test/tc_import.rb
|
38
39
|
- test/ts_all.rb
|
39
40
|
- Rakefile
|
41
|
+
- setup.rb
|
40
42
|
- README
|
41
43
|
- INSTALL
|
42
44
|
- TODO
|