strings 0.1.8 → 0.2.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/CHANGELOG.md +8 -0
- data/README.md +4 -2
- data/lib/strings.rb +7 -7
- data/lib/strings/align.rb +6 -5
- data/lib/strings/extensions.rb +1 -1
- data/lib/strings/fold.rb +1 -1
- data/lib/strings/pad.rb +7 -7
- data/lib/strings/padder.rb +2 -2
- data/lib/strings/truncate.rb +6 -6
- data/lib/strings/version.rb +1 -1
- data/lib/strings/wrap.rb +24 -23
- metadata +15 -51
- data/Rakefile +0 -8
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/spec/spec_helper.rb +0 -39
- data/spec/unit/align/align_left_spec.rb +0 -71
- data/spec/unit/align/align_right_spec.rb +0 -71
- data/spec/unit/align/align_spec.rb +0 -95
- data/spec/unit/align_spec.rb +0 -18
- data/spec/unit/ansi_spec.rb +0 -7
- data/spec/unit/extensions_spec.rb +0 -77
- data/spec/unit/fold/fold_spec.rb +0 -28
- data/spec/unit/fold_spec.rb +0 -7
- data/spec/unit/pad/pad_spec.rb +0 -74
- data/spec/unit/pad_spec.rb +0 -12
- data/spec/unit/padder/parse_spec.rb +0 -35
- data/spec/unit/sanitize_spec.rb +0 -7
- data/spec/unit/truncate/truncate_spec.rb +0 -74
- data/spec/unit/truncate_spec.rb +0 -8
- data/spec/unit/wrap/insert_ansi_spec.rb +0 -65
- data/spec/unit/wrap/wrap_spec.rb +0 -207
- data/spec/unit/wrap_spec.rb +0 -15
- data/strings.gemspec +0 -34
- data/tasks/console.rake +0 -9
- data/tasks/coverage.rake +0 -11
- data/tasks/spec.rake +0 -29
data/spec/unit/fold_spec.rb
DELETED
data/spec/unit/pad/pad_spec.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe Strings::Pad, '#pad' do
|
4
|
-
it "pads content with padding as a single value" do
|
5
|
-
text = "Ignorance is the parent of fear."
|
6
|
-
expect(Strings::Pad.pad(text, 1)).to eq([
|
7
|
-
" ",
|
8
|
-
" Ignorance is the parent of fear. ",
|
9
|
-
" ",
|
10
|
-
].join("\n"))
|
11
|
-
end
|
12
|
-
|
13
|
-
it "pads content with specific padding as an array" do
|
14
|
-
text = "Ignorance is the parent of fear."
|
15
|
-
expect(Strings::Pad.pad(text, [1,1,1,1])).to eq([
|
16
|
-
" ",
|
17
|
-
" Ignorance is the parent of fear. ",
|
18
|
-
" ",
|
19
|
-
].join("\n"))
|
20
|
-
end
|
21
|
-
|
22
|
-
it "pads with custom character" do
|
23
|
-
text = "Ignorance is the parent of fear."
|
24
|
-
expect(Strings::Pad.pad(text, [1, 2], fill: "*")).to eq([
|
25
|
-
"************************************",
|
26
|
-
"**Ignorance is the parent of fear.**",
|
27
|
-
"************************************",
|
28
|
-
].join("\n"))
|
29
|
-
end
|
30
|
-
|
31
|
-
it "pads unicode content" do
|
32
|
-
text = "ラドクリフ、マラソン"
|
33
|
-
expect(Strings::Pad.pad(text, [1,1,1,1])).to eq([
|
34
|
-
" ",
|
35
|
-
" ラドクリフ、マラソン ",
|
36
|
-
" "
|
37
|
-
].join("\n"))
|
38
|
-
end
|
39
|
-
|
40
|
-
it "pads multiline content" do
|
41
|
-
text = "It is the easiest thing\nin the world for a man\nto look as if he had \na great secret in him."
|
42
|
-
expect(Strings::Pad.pad(text, [1,2])).to eq([
|
43
|
-
" ",
|
44
|
-
" It is the easiest thing ",
|
45
|
-
" in the world for a man ",
|
46
|
-
" to look as if he had ",
|
47
|
-
" a great secret in him. ",
|
48
|
-
" ",
|
49
|
-
].join("\n"))
|
50
|
-
end
|
51
|
-
|
52
|
-
it "pads ANSI codes inside content" do
|
53
|
-
text = "It is \e[35mthe easiest\e[0m thing\nin the \e[34mworld\e[0m for a man\nto look as if he had \na great \e[33msecret\e[0m in him."
|
54
|
-
expect(Strings::Pad.pad(text, [1,1,1,1])).to eq([
|
55
|
-
" ",
|
56
|
-
" It is \e[35mthe easiest\e[0m thing ",
|
57
|
-
" in the \e[34mworld\e[0m for a man ",
|
58
|
-
" to look as if he had ",
|
59
|
-
" a great \e[33msecret\e[0m in him. ",
|
60
|
-
" ",
|
61
|
-
].join("\n"))
|
62
|
-
end
|
63
|
-
|
64
|
-
it "handles \r\n line separator" do
|
65
|
-
text = "Closes #360\r\n\r\nCloses !217"
|
66
|
-
expect(Strings::Pad.pad(text, [1,1,1,1])).to eq([
|
67
|
-
" ",
|
68
|
-
" Closes #360 ",
|
69
|
-
" ",
|
70
|
-
" Closes !217 ",
|
71
|
-
" "
|
72
|
-
].join("\r\n"))
|
73
|
-
end
|
74
|
-
end
|
data/spec/unit/pad_spec.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal:true
|
2
|
-
|
3
|
-
RSpec.describe Strings::Padder, '#parse' do
|
4
|
-
it "parses nil" do
|
5
|
-
instance = Strings::Padder.parse(nil)
|
6
|
-
expect(instance.padding).to eq([])
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'parses self' do
|
10
|
-
value = Strings::Padder.new([])
|
11
|
-
instance = Strings::Padder.parse(value)
|
12
|
-
expect(instance.padding).to eq([])
|
13
|
-
end
|
14
|
-
|
15
|
-
it "parses digit" do
|
16
|
-
instance = Strings::Padder.parse(5)
|
17
|
-
expect(instance.padding).to eq([5,5,5,5])
|
18
|
-
end
|
19
|
-
|
20
|
-
it "parses 2-element array" do
|
21
|
-
instance = Strings::Padder.parse([2,3])
|
22
|
-
expect(instance.padding).to eq([2,3,2,3])
|
23
|
-
end
|
24
|
-
|
25
|
-
it "parses 4-element array" do
|
26
|
-
instance = Strings::Padder.parse([1,2,3,4])
|
27
|
-
expect(instance.padding).to eq([1,2,3,4])
|
28
|
-
end
|
29
|
-
|
30
|
-
it "fails to parse unknown value" do
|
31
|
-
expect {
|
32
|
-
Strings::Padder.parse(:unknown)
|
33
|
-
}.to raise_error(Strings::Padder::ParseError)
|
34
|
-
end
|
35
|
-
end
|
data/spec/unit/sanitize_spec.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe Strings::Truncate, '#truncate' do
|
4
|
-
let(:text) { 'ラドクリフ、マラソン五輪代表に1万m出場にも含み' }
|
5
|
-
|
6
|
-
it "doesn't change text for 0 length" do
|
7
|
-
expect(Strings::Truncate.truncate(text, 0)).to eq(text)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "doensn't change text for nil length" do
|
11
|
-
expect(Strings::Truncate.truncate(text, nil)).to eq(text)
|
12
|
-
end
|
13
|
-
|
14
|
-
it "truncate length of 1 results in just the trailing character" do
|
15
|
-
expect(Strings::Truncate.truncate(text, 1)).to eq(Strings::Truncate::DEFAULT_TRAILING)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "doesn't change text for equal length" do
|
19
|
-
truncation = Strings::Truncate.truncate(text, text.length * 2)
|
20
|
-
expect(truncation).to eq(text)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'truncates text and displays omission' do
|
24
|
-
trailing = '…'
|
25
|
-
expect(Strings::Truncate.truncate(text, 12)).to eq("ラドクリフ#{trailing}")
|
26
|
-
end
|
27
|
-
|
28
|
-
it "estimates total width correctly " do
|
29
|
-
text = '太丸ゴシック体'
|
30
|
-
trailing = '…'
|
31
|
-
expect(Strings::Truncate.truncate(text, 8)).to eq("太丸ゴ#{trailing}")
|
32
|
-
end
|
33
|
-
|
34
|
-
it "doesn't truncate text when length exceeds content" do
|
35
|
-
expect(Strings::Truncate.truncate(text, 100)).to eq(text)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "doesn't truncate whole words" do
|
39
|
-
text = "I know not all that may be coming, but be it what it will, I'll go to it laughing."
|
40
|
-
trailing = '…'
|
41
|
-
truncation = Strings::Truncate.truncate(text, separator: ' ')
|
42
|
-
expect(truncation).to eq("I know not all that may be#{trailing}")
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'truncates text with string separator' do
|
46
|
-
trailing = '…'
|
47
|
-
truncation = Strings::Truncate.truncate(text, 12, separator: '')
|
48
|
-
expect(truncation).to eq("ラドクリフ#{trailing}")
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'truncates text with regex separator' do
|
52
|
-
trailing = '…'
|
53
|
-
truncation = Strings::Truncate.truncate(text, 12, separator: /\s/)
|
54
|
-
expect(truncation).to eq("ラドクリフ#{trailing}")
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'truncates text with custom trailing' do
|
58
|
-
trailing = '... (see more)'
|
59
|
-
truncation = Strings::Truncate.truncate(text, 20, trailing: trailing)
|
60
|
-
expect(truncation).to eq("ラド#{trailing}")
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'correctly truncates with ANSI characters' do
|
64
|
-
text = "I try \e[34mall things\e[0m, I achieve what I can"
|
65
|
-
truncation = Strings::Truncate.truncate(text, 18)
|
66
|
-
expect(truncation).to eq("I try \e[34mall things\e[0m…")
|
67
|
-
end
|
68
|
-
|
69
|
-
it "finishes on word boundary" do
|
70
|
-
text = "for there is no folly of the beast of the earth"
|
71
|
-
truncation = Strings::Truncate.truncate(text, 20, separator: ' ')
|
72
|
-
expect(truncation).to eq('for there is no…')
|
73
|
-
end
|
74
|
-
end
|
data/spec/unit/truncate_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe "#insert_ansi" do
|
4
|
-
it "doesn't do anything when empty stack" do
|
5
|
-
text = "Ignorance is the parent of fear."
|
6
|
-
|
7
|
-
val = Strings::Wrap.insert_ansi(text, [])
|
8
|
-
|
9
|
-
expect(val).to eq(text)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "inserts ANSI strings in a single line" do
|
13
|
-
text = "Ignorance is the parent of fear."
|
14
|
-
stack = [["\e[32;44m", 0], ["\e[0m", text.size]]
|
15
|
-
|
16
|
-
val = Strings::Wrap.insert_ansi(text, stack)
|
17
|
-
|
18
|
-
expect(val).to eq("\e[32;44mIgnorance is the parent of fear.\e[0m")
|
19
|
-
expect(stack).to eq([])
|
20
|
-
end
|
21
|
-
|
22
|
-
it "inserts ANSI strings with missing reset in a single line" do
|
23
|
-
text = "Ignorance is the parent of fear."
|
24
|
-
stack = [["\e[32;44m", 0]]
|
25
|
-
|
26
|
-
val = Strings::Wrap.insert_ansi(text, stack)
|
27
|
-
|
28
|
-
expect(val).to eq("\e[32;44mIgnorance is the parent of fear.\e[0m")
|
29
|
-
expect(stack).to eq([["\e[32;44m", 0]])
|
30
|
-
end
|
31
|
-
|
32
|
-
it "inserts 3 ansi strings in a single line" do
|
33
|
-
text = "Ignorance is the parent of fear."
|
34
|
-
stack = [
|
35
|
-
["\e[32m", 0], ["\e[0m", 9],
|
36
|
-
["\e[33m", 13], ["\e[0m", 16],
|
37
|
-
["\e[34m", 27], ["\e[0m", 31]
|
38
|
-
]
|
39
|
-
|
40
|
-
val = Strings::Wrap.insert_ansi(text, stack)
|
41
|
-
|
42
|
-
expect(val).to eq("\e[32mIgnorance\e[0m is \e[33mthe\e[0m parent of \e[34mfear\e[0m.")
|
43
|
-
expect(stack).to eq([])
|
44
|
-
end
|
45
|
-
|
46
|
-
it "inserts nested ANSI strings in a single line" do
|
47
|
-
text = "Ignorance is the parent of fear."
|
48
|
-
stack = [["\e[32m", 10], ["\e[33m", 17], ["\e[0m", 23], ["\e[0m", 26]]
|
49
|
-
|
50
|
-
val = Strings::Wrap.insert_ansi(text, stack)
|
51
|
-
|
52
|
-
expect(val).to eq("Ignorance \e[32mis the \e[33mparent\e[0m of\e[0m fear.")
|
53
|
-
expect(stack).to eq([])
|
54
|
-
end
|
55
|
-
|
56
|
-
it "removes matching pairs of ANSI codes only" do
|
57
|
-
text = "one"
|
58
|
-
stack = [["\e[32m", 0], ["\e[0m", 3], ["\e[33m", 3]]
|
59
|
-
|
60
|
-
val = Strings::Wrap.insert_ansi(text, stack)
|
61
|
-
|
62
|
-
expect(val).to eq("\e[32mone\e[0m")
|
63
|
-
expect(stack).to eq([["\e[33m", 3]])
|
64
|
-
end
|
65
|
-
end
|
data/spec/unit/wrap/wrap_spec.rb
DELETED
@@ -1,207 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe Strings::Wrap, '.wrap' do
|
4
|
-
context 'when unicode' do
|
5
|
-
let(:text) { 'ラドクリフ、マラソン五輪代表に1万m出場にも含み' }
|
6
|
-
|
7
|
-
it "doesn't wrap at zero length" do
|
8
|
-
expect(Strings::Wrap.wrap(text, 0)).to eq(text)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "doesn't wrap at nil length" do
|
12
|
-
expect(Strings::Wrap.wrap(text, nil)).to eq(text)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "doesn't wrap at length exceeding content length" do
|
16
|
-
expect(Strings::Wrap.wrap(text, 100)).to eq(text)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "wraps minimal width" do
|
20
|
-
str = "#?%"
|
21
|
-
|
22
|
-
val = Strings::Wrap.wrap(str, 1)
|
23
|
-
|
24
|
-
expect(val).to eq([
|
25
|
-
"#",
|
26
|
-
"?",
|
27
|
-
"%"
|
28
|
-
].join("\n"))
|
29
|
-
end
|
30
|
-
|
31
|
-
it "wraps correctly unbreakable words" do
|
32
|
-
expect(Strings::Wrap.wrap('foobar1', 3)).to eq([
|
33
|
-
"foo",
|
34
|
-
"bar",
|
35
|
-
"1"
|
36
|
-
].join("\n"))
|
37
|
-
end
|
38
|
-
|
39
|
-
it "collapses multiple line breaks " do
|
40
|
-
text = "some \r\n\n\n\nunbreakable\n\n\n\n \r\r\rcontent \t"
|
41
|
-
expect(Strings::Wrap.wrap(text, 5)).to eq([
|
42
|
-
"some ",
|
43
|
-
"unbre",
|
44
|
-
"akabl",
|
45
|
-
"e",
|
46
|
-
" ",
|
47
|
-
"conte",
|
48
|
-
"nt "
|
49
|
-
].join("\r\n"))
|
50
|
-
end
|
51
|
-
|
52
|
-
it "preserves newlines" do
|
53
|
-
text = "It is not down\n on any map;\n true places never are."
|
54
|
-
expect(Strings::Wrap.wrap(text, 10)).to eq([
|
55
|
-
"It is not ",
|
56
|
-
"down",
|
57
|
-
" on any ",
|
58
|
-
"map;",
|
59
|
-
" true ",
|
60
|
-
"places ",
|
61
|
-
"never are."
|
62
|
-
].join("\n"))
|
63
|
-
end
|
64
|
-
|
65
|
-
it "wraps ascii text" do
|
66
|
-
text = "for there is no folly of the beast of the earth which is not infinitely outdone by the madness of men "
|
67
|
-
expect(Strings::Wrap.wrap(text, 16)).to eq([
|
68
|
-
"for there is no ",
|
69
|
-
"folly of the ",
|
70
|
-
"beast of the ",
|
71
|
-
"earth which is ",
|
72
|
-
"not infinitely ",
|
73
|
-
"outdone by the ",
|
74
|
-
"madness of men "
|
75
|
-
].join("\n"))
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'wraps at 8 characters' do
|
79
|
-
expect(Strings::Wrap.wrap(text, 8)).to eq([
|
80
|
-
"ラドクリ",
|
81
|
-
"フ、マラ",
|
82
|
-
"ソン五輪",
|
83
|
-
"代表に1",
|
84
|
-
"万m出場",
|
85
|
-
"にも含み"
|
86
|
-
].join("\n"))
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'preserves whitespace' do
|
90
|
-
text = " As for me, I am tormented with an everlasting itch for things remote. "
|
91
|
-
expect(Strings::Wrap.wrap(text, 10)).to eq([
|
92
|
-
" As for ",
|
93
|
-
"me, I ",
|
94
|
-
"am ",
|
95
|
-
"tormented ",
|
96
|
-
"with an ",
|
97
|
-
"e",
|
98
|
-
"verlasting",
|
99
|
-
" itch ",
|
100
|
-
"for ",
|
101
|
-
"things ",
|
102
|
-
"remote. "
|
103
|
-
].join("\n"))
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context 'when long text' do
|
108
|
-
it "wraps long text at 45 characters" do
|
109
|
-
text =
|
110
|
-
"What of it, if some old hunks of a sea-captain orders me to get a broom and sweep down the decks? What does that indignity amount to, weighed, I mean, in the scales of the New Testament? Do you think the archangel Gabriel thinks anything the less of me, because I promptly and respectfully obey that old hunks in that particular instance? Who ain't a slave? Tell me that. Well, then, however the old sea-captains may order me about--however they may thump and punch me about, I have the satisfaction of knowing that it is all right;"
|
111
|
-
expect(Strings::Wrap.wrap(text, 45)).to eq unindent <<-EOS
|
112
|
-
What of it, if some old hunks of a \nsea-captain orders me to get a broom and \n sweep down the decks? What does that \nindignity amount to, weighed, I mean, in the \n scales of the New Testament? Do you think \nthe archangel Gabriel thinks anything the \nless of me, because I promptly and \nrespectfully obey that old hunks in that \nparticular instance? Who ain't a slave? Tell \nme that. Well, then, however the old \nsea-captains may order me about--however \nthey may thump and punch me about, I have \nthe satisfaction of knowing that it is all \nright;
|
113
|
-
EOS
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
context 'with newlines' do
|
118
|
-
it "preserves newlines for both prefix and postfix" do
|
119
|
-
text = "\n\nラドクリフ、マラソン五輪代表に1万m出場にも含み\n\n\n"
|
120
|
-
expect(Strings::Wrap.wrap(text, 10)).to eq([
|
121
|
-
"\nラドクリフ",
|
122
|
-
"、マラソン",
|
123
|
-
"五輪代表に",
|
124
|
-
"1万m出場に",
|
125
|
-
"も含み\n"
|
126
|
-
].join("\n"))
|
127
|
-
end
|
128
|
-
|
129
|
-
it "handles \r\n line separator" do
|
130
|
-
text = "Closes #360\r\n\r\nCloses !217"
|
131
|
-
expect(Strings::Wrap.wrap(text, 15)).to eq(text)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
context 'with ANSI codes' do
|
136
|
-
it "wraps ANSI chars" do
|
137
|
-
text = "\e[32;44mIgnorance is the parent of fear.\e[0m"
|
138
|
-
expect(Strings::Wrap.wrap(text, 14)).to eq([
|
139
|
-
"\e[32;44mIgnorance is \e[0m",
|
140
|
-
"\e[32;44mthe parent of \e[0m",
|
141
|
-
"\e[32;44mfear.\e[0m",
|
142
|
-
].join("\n"))
|
143
|
-
end
|
144
|
-
|
145
|
-
it "wraps ANSI in the middle of text" do
|
146
|
-
text = "Ignorance is the \e[32mparent\e[0m of fear."
|
147
|
-
expect(Strings::Wrap.wrap(text, 14)).to eq([
|
148
|
-
"Ignorance is ",
|
149
|
-
"the \e[32mparent\e[0m of ",
|
150
|
-
"fear.",
|
151
|
-
].join("\n"))
|
152
|
-
end
|
153
|
-
|
154
|
-
it "wraps multline ANSI codes" do
|
155
|
-
text = "\e32;44mMulti\nLine\nContent.\e[0m"
|
156
|
-
expect(Strings::Wrap.wrap(text, 14)).to eq([
|
157
|
-
"\e32;44mMulti\e[0m",
|
158
|
-
"\e32;44mLine\e[0m",
|
159
|
-
"\e32;44mContent.\e[0m",
|
160
|
-
].join("\n"))
|
161
|
-
end
|
162
|
-
|
163
|
-
it "wraps multiple ANSI codes in a single line" do
|
164
|
-
text = "Talk \e[32mnot\e[0m to me of \e[33mblasphemy\e[0m, man; I'd \e[35mstrike the sun\e[0m if it insulted me."
|
165
|
-
expect(Strings::Wrap.wrap(text, 30)).to eq([
|
166
|
-
"Talk \e[32mnot\e[0m to me of \e[33mblasphemy\e[0m, ",
|
167
|
-
"man; I'd \e[35mstrike the sun\e[0m if it ",
|
168
|
-
"insulted me."
|
169
|
-
].join("\n"))
|
170
|
-
end
|
171
|
-
|
172
|
-
it "applies ANSI codes when below wrap width" do
|
173
|
-
str = "\e[32mone\e[0m\e[33mtwo\e[0m"
|
174
|
-
|
175
|
-
val = Strings::Wrap.wrap(str, 6)
|
176
|
-
|
177
|
-
expect(val).to eq("\e[32mone\e[0m\e[33mtwo\e[0m")
|
178
|
-
end
|
179
|
-
|
180
|
-
xit "splits ANSI codes matching wrap width with space between codes" do
|
181
|
-
str = "\e[32mone\e[0m \e[33mtwo\e[0m"
|
182
|
-
|
183
|
-
val = Strings::Wrap.wrap(str, 3)
|
184
|
-
|
185
|
-
expect(val).to eq("\e[32mone\e[0m\n\e[33mtwo\e[0m")
|
186
|
-
end
|
187
|
-
|
188
|
-
xit "splits ANSI codes matching wrap width" do
|
189
|
-
str = "\e[32mone\e[0m\e[33mtwo\e[0m"
|
190
|
-
|
191
|
-
val = Strings::Wrap.wrap(str, 3)
|
192
|
-
|
193
|
-
expect(val).to eq("\e[32mone\e[0m\n\e[33mtwo\e[0m")
|
194
|
-
end
|
195
|
-
|
196
|
-
xit "wraps deeply nested ANSI codes correctly" do
|
197
|
-
str = "\e[32mone\e[33mtwo\e[0m\e[0m"
|
198
|
-
|
199
|
-
val = Strings::Wrap.wrap(str, 3)
|
200
|
-
|
201
|
-
expect(val).to eq([
|
202
|
-
"\e[32mone\e[0m",
|
203
|
-
"\e[33mtwo\e[0m",
|
204
|
-
].join("\n"))
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|