tty-prompt 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.
- checksums.yaml +4 -4
- data/.travis.yml +9 -6
- data/CHANGELOG.md +40 -3
- data/Gemfile +0 -1
- data/README.md +246 -65
- data/examples/ask.rb +7 -0
- data/examples/echo.rb +7 -0
- data/examples/in.rb +7 -0
- data/examples/mask.rb +9 -0
- data/examples/multi_select.rb +8 -0
- data/examples/select.rb +8 -0
- data/examples/validation.rb +9 -0
- data/examples/yes_no.rb +7 -0
- data/lib/tty-prompt.rb +6 -4
- data/lib/tty/prompt.rb +100 -25
- data/lib/tty/prompt/choice.rb +1 -1
- data/lib/tty/prompt/converter_dsl.rb +19 -0
- data/lib/tty/prompt/converter_registry.rb +56 -0
- data/lib/tty/prompt/converters.rb +77 -0
- data/lib/tty/prompt/evaluator.rb +29 -0
- data/lib/tty/prompt/list.rb +38 -36
- data/lib/tty/prompt/mask_question.rb +85 -0
- data/lib/tty/prompt/multi_list.rb +21 -32
- data/lib/tty/prompt/question.rb +184 -162
- data/lib/tty/prompt/question/checks.rb +85 -0
- data/lib/tty/prompt/question/modifier.rb +4 -5
- data/lib/tty/prompt/question/validation.rb +29 -35
- data/lib/tty/prompt/reader.rb +98 -52
- data/lib/tty/prompt/reader/codes.rb +63 -0
- data/lib/tty/prompt/reader/key_event.rb +67 -0
- data/lib/tty/prompt/reader/mode.rb +66 -0
- data/lib/tty/prompt/reader/mode/echo.rb +43 -0
- data/lib/tty/prompt/reader/mode/raw.rb +43 -0
- data/lib/tty/prompt/result.rb +42 -0
- data/lib/tty/prompt/statement.rb +9 -14
- data/lib/tty/prompt/suggestion.rb +4 -2
- data/lib/tty/prompt/symbols.rb +13 -0
- data/lib/tty/prompt/test.rb +3 -2
- data/lib/tty/prompt/utils.rb +1 -1
- data/lib/tty/prompt/version.rb +1 -1
- data/spec/unit/ask_spec.rb +31 -48
- data/spec/unit/choice/eql_spec.rb +0 -2
- data/spec/unit/choice/from_spec.rb +0 -2
- data/spec/unit/choices/add_spec.rb +0 -2
- data/spec/unit/choices/each_spec.rb +0 -2
- data/spec/unit/choices/new_spec.rb +0 -2
- data/spec/unit/choices/pluck_spec.rb +0 -2
- data/spec/unit/converters/convert_bool_spec.rb +58 -0
- data/spec/unit/{response/read_char_spec.rb → converters/convert_char_spec.rb} +2 -4
- data/spec/unit/converters/convert_custom_spec.rb +14 -0
- data/spec/unit/converters/convert_date_spec.rb +25 -0
- data/spec/unit/converters/convert_file_spec.rb +14 -0
- data/spec/unit/{response/read_number_spec.rb → converters/convert_number_spec.rb} +5 -7
- data/spec/unit/converters/convert_path_spec.rb +15 -0
- data/spec/unit/{response/read_range_spec.rb → converters/convert_range_spec.rb} +3 -5
- data/spec/unit/converters/convert_regex_spec.rb +12 -0
- data/spec/unit/converters/convert_string_spec.rb +21 -0
- data/spec/unit/distance/distance_spec.rb +0 -2
- data/spec/unit/error_spec.rb +0 -6
- data/spec/unit/evaluator_spec.rb +67 -0
- data/spec/unit/keypress_spec.rb +19 -0
- data/spec/unit/mask_spec.rb +95 -0
- data/spec/unit/multi_select_spec.rb +36 -24
- data/spec/unit/multiline_spec.rb +19 -0
- data/spec/unit/new_spec.rb +18 -0
- data/spec/unit/ok_spec.rb +10 -0
- data/spec/unit/question/default_spec.rb +17 -4
- data/spec/unit/question/echo_spec.rb +31 -0
- data/spec/unit/question/in_spec.rb +48 -16
- data/spec/unit/question/initialize_spec.rb +2 -9
- data/spec/unit/question/modifier/apply_to_spec.rb +9 -16
- data/spec/unit/question/modifier/letter_case_spec.rb +0 -2
- data/spec/unit/question/modifier/whitespace_spec.rb +12 -20
- data/spec/unit/question/modify_spec.rb +3 -7
- data/spec/unit/question/required_spec.rb +20 -14
- data/spec/unit/question/validate_spec.rb +20 -19
- data/spec/unit/question/validation/call_spec.rb +15 -6
- data/spec/unit/question/validation/coerce_spec.rb +17 -11
- data/spec/unit/reader/publish_keypress_event_spec.rb +81 -0
- data/spec/unit/reader/read_keypress_spec.rb +22 -0
- data/spec/unit/reader/read_line_spec.rb +31 -0
- data/spec/unit/reader/read_multiline_spec.rb +37 -0
- data/spec/unit/result_spec.rb +40 -0
- data/spec/unit/say_spec.rb +18 -23
- data/spec/unit/select_spec.rb +37 -32
- data/spec/unit/statement/initialize_spec.rb +4 -4
- data/spec/unit/suggest_spec.rb +0 -2
- data/spec/unit/warn_spec.rb +0 -5
- data/spec/unit/yes_no_spec.rb +70 -0
- data/tty-prompt.gemspec +7 -4
- metadata +123 -40
- data/lib/tty/prompt/codes.rb +0 -32
- data/lib/tty/prompt/cursor.rb +0 -131
- data/lib/tty/prompt/error.rb +0 -26
- data/lib/tty/prompt/mode.rb +0 -64
- data/lib/tty/prompt/mode/echo.rb +0 -41
- data/lib/tty/prompt/mode/raw.rb +0 -41
- data/lib/tty/prompt/response.rb +0 -247
- data/lib/tty/prompt/response_delegation.rb +0 -42
- data/spec/unit/cursor/new_spec.rb +0 -74
- data/spec/unit/question/character_spec.rb +0 -13
- data/spec/unit/reader/getc_spec.rb +0 -42
- data/spec/unit/response/read_bool_spec.rb +0 -58
- data/spec/unit/response/read_date_spec.rb +0 -16
- data/spec/unit/response/read_email_spec.rb +0 -45
- data/spec/unit/response/read_multiple_spec.rb +0 -21
- data/spec/unit/response/read_spec.rb +0 -69
- data/spec/unit/response/read_string_spec.rb +0 -14
@@ -1,12 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
3
|
RSpec.describe TTY::Prompt do
|
6
|
-
let(:color) { Pastel.new(enabled: true) }
|
7
|
-
|
8
|
-
before { allow(Pastel).to receive(:new).and_return(color) }
|
9
|
-
|
10
4
|
it "selects nothing when return pressed immediately" do
|
11
5
|
prompt = TTY::TestPrompt.new
|
12
6
|
choices = %w(vodka beer wine whisky bourbon)
|
@@ -19,8 +13,8 @@ RSpec.describe TTY::Prompt do
|
|
19
13
|
" ⬡ beer\n",
|
20
14
|
" ⬡ wine\n",
|
21
15
|
" ⬡ whisky\n",
|
22
|
-
" ⬡ bourbon
|
23
|
-
"\e[
|
16
|
+
" ⬡ bourbon",
|
17
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
24
18
|
"Select drinks? \n\e[?25h"
|
25
19
|
].join)
|
26
20
|
end
|
@@ -37,15 +31,15 @@ RSpec.describe TTY::Prompt do
|
|
37
31
|
" ⬡ beer\n",
|
38
32
|
" ⬡ wine\n",
|
39
33
|
" ⬡ whisky\n",
|
40
|
-
" ⬡ bourbon
|
41
|
-
"\e[
|
34
|
+
" ⬡ bourbon",
|
35
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
42
36
|
"Select drinks? vodka\n",
|
43
37
|
"‣ \e[32m⬢\e[0m vodka\n",
|
44
38
|
" ⬡ beer\n",
|
45
39
|
" ⬡ wine\n",
|
46
40
|
" ⬡ whisky\n",
|
47
|
-
" ⬡ bourbon
|
48
|
-
"\e[
|
41
|
+
" ⬡ bourbon",
|
42
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
49
43
|
"Select drinks? \e[32mvodka\e[0m\n\e[?25h"
|
50
44
|
].join)
|
51
45
|
end
|
@@ -62,15 +56,15 @@ RSpec.describe TTY::Prompt do
|
|
62
56
|
" ⬡ beer\n",
|
63
57
|
" ⬡ wine\n",
|
64
58
|
" ⬡ whisky\n",
|
65
|
-
" ⬡ bourbon
|
66
|
-
"\e[
|
59
|
+
" ⬡ bourbon",
|
60
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
67
61
|
"Select drinks? vodka\n",
|
68
62
|
"‣ \e[32m⬢\e[0m vodka\n",
|
69
63
|
" ⬡ beer\n",
|
70
64
|
" ⬡ wine\n",
|
71
65
|
" ⬡ whisky\n",
|
72
|
-
" ⬡ bourbon
|
73
|
-
"\e[
|
66
|
+
" ⬡ bourbon",
|
67
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
74
68
|
"Select drinks? \e[32mvodka\e[0m\n\e[?25h"
|
75
69
|
].join)
|
76
70
|
end
|
@@ -92,15 +86,15 @@ RSpec.describe TTY::Prompt do
|
|
92
86
|
" ⬡ beer\n",
|
93
87
|
" ⬡ wine\n",
|
94
88
|
" ⬡ whisky\n",
|
95
|
-
" ⬡ bourbon
|
96
|
-
"\e[
|
89
|
+
" ⬡ bourbon",
|
90
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
97
91
|
"Select drinks? vodka\n",
|
98
92
|
"‣ \e[32m⬢\e[0m vodka\n",
|
99
93
|
" ⬡ beer\n",
|
100
94
|
" ⬡ wine\n",
|
101
95
|
" ⬡ whisky\n",
|
102
|
-
" ⬡ bourbon
|
103
|
-
"\e[
|
96
|
+
" ⬡ bourbon",
|
97
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
104
98
|
"Select drinks? \e[32mvodka\e[0m\n\e[?25h"
|
105
99
|
].join)
|
106
100
|
end
|
@@ -125,8 +119,8 @@ RSpec.describe TTY::Prompt do
|
|
125
119
|
" \e[32m⬢\e[0m beer\n",
|
126
120
|
" ⬡ wine\n",
|
127
121
|
" ⬡ whisky\n",
|
128
|
-
"‣ \e[32m⬢\e[0m bourbon
|
129
|
-
"\e[
|
122
|
+
"‣ \e[32m⬢\e[0m bourbon",
|
123
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
130
124
|
"Select drinks? \e[32mbeer, bourbon\e[0m\n\e[?25h",
|
131
125
|
].join)
|
132
126
|
end
|
@@ -135,7 +129,7 @@ RSpec.describe TTY::Prompt do
|
|
135
129
|
prompt = TTY::TestPrompt.new
|
136
130
|
prompt.input << "\r"
|
137
131
|
prompt.input.rewind
|
138
|
-
value = prompt.multi_select("Select drinks?",default: [2, 5]) do |menu|
|
132
|
+
value = prompt.multi_select("Select drinks?", default: [2, 5]) do |menu|
|
139
133
|
menu.choice :vodka, {score: 10}
|
140
134
|
menu.choice :beer, {score: 20}
|
141
135
|
menu.choice :wine, {score: 30}
|
@@ -150,7 +144,7 @@ RSpec.describe TTY::Prompt do
|
|
150
144
|
prompt.input << "\r"
|
151
145
|
prompt.input.rewind
|
152
146
|
expect {
|
153
|
-
prompt.multi_select("Select drinks?",default: [2, 6]) do |menu|
|
147
|
+
prompt.multi_select("Select drinks?", default: [2, 6]) do |menu|
|
154
148
|
menu.choice :vodka, {score: 10}
|
155
149
|
menu.choice :beer, {score: 20}
|
156
150
|
menu.choice :wine, {score: 30}
|
@@ -160,4 +154,22 @@ RSpec.describe TTY::Prompt do
|
|
160
154
|
}.to raise_error(TTY::PromptConfigurationError,
|
161
155
|
/default index `6` out of range \(1 - 5\)/)
|
162
156
|
end
|
157
|
+
|
158
|
+
it "sets prompt prefix" do
|
159
|
+
prompt = TTY::TestPrompt.new(prefix: '[?] ')
|
160
|
+
choices = %w(vodka beer wine whisky bourbon)
|
161
|
+
prompt.input << "\r"
|
162
|
+
prompt.input.rewind
|
163
|
+
expect(prompt.multi_select("Select drinks?", choices)). to eq([])
|
164
|
+
expect(prompt.output.string).to eq([
|
165
|
+
"\e[?25l[?] Select drinks? \e[90m(Use arrow keys, press Space to select and Enter to finish)\e[0m\n",
|
166
|
+
"‣ ⬡ vodka\n",
|
167
|
+
" ⬡ beer\n",
|
168
|
+
" ⬡ wine\n",
|
169
|
+
" ⬡ whisky\n",
|
170
|
+
" ⬡ bourbon",
|
171
|
+
"\e[1000D\e[K\e[1A" * 5, "\e[1000D\e[K",
|
172
|
+
"[?] Select drinks? \n\e[?25h"
|
173
|
+
].join)
|
174
|
+
end
|
163
175
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
RSpec.describe TTY::Prompt::Question, 'ask multiline' do
|
4
|
+
it 'reads multiple lines with :read option' do
|
5
|
+
prompt = TTY::TestPrompt.new
|
6
|
+
prompt.input << "First line\nSecond line\nThird line"
|
7
|
+
prompt.input.rewind
|
8
|
+
answer = prompt.ask("Provide description?", read: :multiline)
|
9
|
+
expect(answer).to eq(['First line', 'Second line', 'Third line'])
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'reads multiple lines with method' do
|
13
|
+
prompt = TTY::TestPrompt.new
|
14
|
+
prompt.input << "First\nSecond\nThird"
|
15
|
+
prompt.input.rewind
|
16
|
+
answer = prompt.multiline("Provide description?")
|
17
|
+
expect(answer).to eq(['First', 'Second', 'Third'])
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
RSpec.describe TTY::Prompt, '#new' do
|
4
|
+
it "sets prefix" do
|
5
|
+
prompt = described_class.new(prefix: "[?]")
|
6
|
+
expect(prompt.prefix).to eq("[?]")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "sets input stream" do
|
10
|
+
prompt = described_class.new(input: :stream1)
|
11
|
+
expect(prompt.input).to eq(:stream1)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "sets output stream" do
|
15
|
+
prompt = described_class.new(output: :stream2)
|
16
|
+
expect(prompt.output).to eq(:stream2)
|
17
|
+
end
|
18
|
+
end
|
@@ -1,19 +1,32 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
3
|
RSpec.describe TTY::Prompt::Question, '#default' do
|
4
|
+
|
5
|
+
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
+
|
6
7
|
it 'uses default value' do
|
7
|
-
prompt = TTY::TestPrompt.new
|
8
8
|
name = 'Anonymous'
|
9
|
+
prompt.input << "\n"
|
10
|
+
prompt.input.rewind
|
9
11
|
answer = prompt.ask('What is your name?', default: name)
|
10
12
|
expect(answer).to eq(name)
|
13
|
+
expect(prompt.output.string).to eq([
|
14
|
+
"What is your name? \e[90m(Anonymous)\e[0m ",
|
15
|
+
"\e[1000D\e[K\e[1A",
|
16
|
+
"\e[1000D\e[K",
|
17
|
+
"What is your name? \e[32mAnonymous\e[0m\n"
|
18
|
+
].join)
|
11
19
|
end
|
12
20
|
|
13
21
|
it 'uses default value in block' do
|
14
|
-
prompt = TTY::TestPrompt.new
|
15
22
|
name = 'Anonymous'
|
16
23
|
answer = prompt.ask('What is your name?') { |q| q.default(name) }
|
17
24
|
expect(answer).to eq(name)
|
25
|
+
expect(prompt.output.string).to eq([
|
26
|
+
"What is your name? \e[90m(Anonymous)\e[0m ",
|
27
|
+
"\e[1000D\e[K\e[1A",
|
28
|
+
"\e[1000D\e[K",
|
29
|
+
"What is your name? \e[32mAnonymous\e[0m\n"
|
30
|
+
].join)
|
18
31
|
end
|
19
32
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
RSpec.describe TTY::Prompt::Question, '#echo' do
|
4
|
+
|
5
|
+
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
+
|
7
|
+
it 'asks with echo on' do
|
8
|
+
prompt.input << "password"
|
9
|
+
prompt.input.rewind
|
10
|
+
answer = prompt.ask("What is your password?") { |q| q.echo(true) }
|
11
|
+
expect(answer).to eql("password")
|
12
|
+
expect(prompt.output.string).to eq([
|
13
|
+
"What is your password? ",
|
14
|
+
"\e[1000D\e[K\e[1A",
|
15
|
+
"\e[1000D\e[K",
|
16
|
+
"What is your password? \e[32mpassword\e[0m\n"
|
17
|
+
].join)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'asks with echo off' do
|
21
|
+
prompt.input << "password"
|
22
|
+
prompt.input.rewind
|
23
|
+
answer = prompt.ask("What is your password?", echo: false)
|
24
|
+
expect(answer).to eql("password")
|
25
|
+
expect(prompt.output.string).to eq([
|
26
|
+
"What is your password? ",
|
27
|
+
"\e[1000D\e[K",
|
28
|
+
"What is your password? \n"
|
29
|
+
].join)
|
30
|
+
end
|
31
|
+
end
|
@@ -1,26 +1,58 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
3
|
RSpec.describe TTY::Prompt::Question, '#in' do
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
|
5
|
+
subject(:prompt) { TTY::TestPrompt.new }
|
6
|
+
|
7
|
+
it "reads range from option" do
|
8
|
+
prompt.input << '8'
|
9
9
|
prompt.input.rewind
|
10
|
-
answer = prompt.ask("How do you like it on scale 1-10",
|
10
|
+
answer = prompt.ask("How do you like it on scale 1-10?", in: '1-10')
|
11
|
+
expect(answer).to eq('8')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'reads number within string range' do
|
15
|
+
prompt.input << '8'
|
16
|
+
prompt.input.rewind
|
17
|
+
answer = prompt.ask("How do you like it on scale 1-10?") do |q|
|
11
18
|
q.in('1-10')
|
12
|
-
|
13
|
-
expect(answer).to eq(8)
|
19
|
+
end
|
20
|
+
expect(answer).to eq('8')
|
21
|
+
expect(prompt.output.string).to eq([
|
22
|
+
"How do you like it on scale 1-10? ",
|
23
|
+
"\e[1000D\e[K\e[1A",
|
24
|
+
"\e[1000D\e[K",
|
25
|
+
"How do you like it on scale 1-10? \e[32m8\e[0m\n",
|
26
|
+
].join)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'reads number within digit range' do
|
30
|
+
prompt.input << '8.1'
|
31
|
+
prompt.input.rewind
|
32
|
+
answer = prompt.ask("How do you like it on scale 1-10?") do |q|
|
33
|
+
q.in(1.0..11.5)
|
34
|
+
end
|
35
|
+
expect(answer).to eq('8.1')
|
36
|
+
expect(prompt.output.string).to eq([
|
37
|
+
"How do you like it on scale 1-10? ",
|
38
|
+
"\e[1000D\e[K\e[1A",
|
39
|
+
"\e[1000D\e[K",
|
40
|
+
"How do you like it on scale 1-10? \e[32m8.1\e[0m\n",
|
41
|
+
].join)
|
14
42
|
end
|
15
43
|
|
16
|
-
it
|
17
|
-
prompt
|
18
|
-
prompt.input << 12
|
44
|
+
it 'reads letters within range' do
|
45
|
+
prompt.input << 'E'
|
19
46
|
prompt.input.rewind
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
47
|
+
answer = prompt.ask("Your favourite vitamin? (A-K)") do |q|
|
48
|
+
q.in('A-K')
|
49
|
+
end
|
50
|
+
expect(answer).to eq('E')
|
51
|
+
expect(prompt.output.string).to eq([
|
52
|
+
"Your favourite vitamin? (A-K) ",
|
53
|
+
"\e[1000D\e[K\e[1A",
|
54
|
+
"\e[1000D\e[K",
|
55
|
+
"Your favourite vitamin? (A-K) \e[32mE\e[0m\n"
|
56
|
+
].join)
|
25
57
|
end
|
26
58
|
end
|
@@ -1,19 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
3
|
RSpec.describe TTY::Prompt::Question, '#initialize' do
|
6
|
-
let(:message) { 'Do you like me?' }
|
7
4
|
|
8
5
|
subject(:question) { described_class.new(TTY::TestPrompt.new)}
|
9
6
|
|
10
7
|
it { expect(question.echo).to eq(true) }
|
11
8
|
|
12
|
-
it { expect(question.
|
13
|
-
|
14
|
-
it { expect(question.character).to eq(false) }
|
15
|
-
|
16
|
-
it { expect(question.modifier).to be_kind_of(TTY::Prompt::Question::Modifier) }
|
9
|
+
it { expect(question.modifier).to eq([]) }
|
17
10
|
|
18
|
-
it { expect(question.validation).to
|
11
|
+
it { expect(question.validation).to eq(TTY::Prompt::Question::UndefinedSetting) }
|
19
12
|
end
|
@@ -1,31 +1,24 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
3
|
RSpec.describe TTY::Prompt::Question::Modifier, '#apply_to' do
|
6
|
-
let(:
|
7
|
-
let(:string) { "Text to be modified"}
|
4
|
+
let(:string) { "text to be modified"}
|
8
5
|
|
9
6
|
it "doesn't apply modifiers" do
|
10
7
|
modifier = described_class.new([])
|
11
8
|
expect(modifier.apply_to(string)).to eq(string)
|
12
9
|
end
|
13
10
|
|
14
|
-
it '
|
15
|
-
modifiers = [:
|
16
|
-
allow(described_class).to receive(:letter_case)
|
11
|
+
it 'combines whitespace & letter case modifications' do
|
12
|
+
modifiers = [:collapse, :capitalize]
|
17
13
|
modifier = described_class.new(modifiers)
|
18
|
-
modifier.apply_to(string)
|
19
|
-
expect(
|
20
|
-
with(modifiers, string)
|
14
|
+
modified = modifier.apply_to(string)
|
15
|
+
expect(modified).to eq('Text to be modified')
|
21
16
|
end
|
22
17
|
|
23
|
-
it '
|
24
|
-
modifiers = [:up, :
|
25
|
-
allow(described_class).to receive(:whitespace)
|
18
|
+
it 'combines letter case & whitespace modifications' do
|
19
|
+
modifiers = [:up, :collapse]
|
26
20
|
modifier = described_class.new(modifiers)
|
27
|
-
modifier.apply_to(string)
|
28
|
-
expect(
|
29
|
-
with(modifiers, string)
|
21
|
+
modified = modifier.apply_to(string)
|
22
|
+
expect(modified).to eq('TEXT TO BE MODIFIED')
|
30
23
|
end
|
31
24
|
end
|
@@ -1,33 +1,25 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
3
|
RSpec.describe TTY::Prompt::Question::Modifier, '#whitespace' do
|
6
4
|
let(:string) { " text\t \n to\t modify\r\n" }
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
let(:modifier) { :trim }
|
12
|
-
|
13
|
-
it { is_expected.to eq("text\t \n to\t modify") }
|
6
|
+
it "trims whitespace" do
|
7
|
+
modified = described_class.whitespace(:trim, string)
|
8
|
+
expect(modified).to eq("text\t \n to\t modify")
|
14
9
|
end
|
15
10
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
it { is_expected.to eq(" text\t \n to\t modify") }
|
11
|
+
it "chomps whitespace" do
|
12
|
+
modified = described_class.whitespace(:chomp, string)
|
13
|
+
expect(modified).to eq(" text\t \n to\t modify")
|
20
14
|
end
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
it { is_expected.to eq(" text to modify ") }
|
16
|
+
it "collapses text" do
|
17
|
+
modified = described_class.whitespace(:collapse, string)
|
18
|
+
expect(modified).to eq(" text to modify ")
|
26
19
|
end
|
27
20
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
it { is_expected.to eq("texttomodify") }
|
21
|
+
it "removes whitespace" do
|
22
|
+
modified = described_class.whitespace(:remove, string)
|
23
|
+
expect(modified).to eq("texttomodify")
|
32
24
|
end
|
33
25
|
end
|