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.
@@ -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.2.0
7
- date: 2005-04-29
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