vedeu 0.1.15 → 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +2 -0
- data/README.md +116 -98
- data/lib/vedeu.rb +24 -11
- data/lib/vedeu/api/api.rb +174 -33
- data/lib/vedeu/api/composition.rb +2 -13
- data/lib/vedeu/api/helpers.rb +41 -0
- data/lib/vedeu/api/interface.rb +147 -34
- data/lib/vedeu/api/line.rb +47 -0
- data/lib/vedeu/api/stream.rb +41 -0
- data/lib/vedeu/application.rb +9 -2
- data/lib/vedeu/configuration.rb +66 -8
- data/lib/vedeu/launcher.rb +11 -0
- data/lib/vedeu/models/attributes/background.rb +29 -0
- data/lib/vedeu/models/attributes/coercions.rb +30 -0
- data/lib/vedeu/models/attributes/colour_translator.rb +106 -16
- data/lib/vedeu/models/attributes/foreground.rb +29 -0
- data/lib/vedeu/models/attributes/presentation.rb +15 -0
- data/lib/vedeu/models/colour.rb +12 -7
- data/lib/vedeu/models/composition.rb +23 -5
- data/lib/vedeu/models/geometry.rb +101 -16
- data/lib/vedeu/models/interface.rb +36 -28
- data/lib/vedeu/models/line.rb +16 -14
- data/lib/vedeu/models/stream.rb +17 -25
- data/lib/vedeu/models/style.rb +29 -0
- data/lib/vedeu/support/buffer.rb +36 -21
- data/lib/vedeu/support/buffers.rb +88 -0
- data/lib/vedeu/{output → support}/clear.rb +9 -2
- data/lib/vedeu/support/esc.rb +16 -2
- data/lib/vedeu/support/event.rb +104 -0
- data/lib/vedeu/support/events.rb +61 -0
- data/lib/vedeu/support/focus.rb +69 -0
- data/lib/vedeu/{api → support}/grid.rb +29 -25
- data/lib/vedeu/support/groups.rb +51 -0
- data/lib/vedeu/support/input.rb +5 -0
- data/lib/vedeu/support/log.rb +105 -0
- data/lib/vedeu/support/menu.rb +19 -0
- data/lib/vedeu/support/position.rb +7 -0
- data/lib/vedeu/{output → support}/render.rb +12 -6
- data/lib/vedeu/support/terminal.rb +21 -0
- data/lib/vedeu/support/trace.rb +54 -0
- data/lib/vedeu/{output → support}/view.rb +15 -10
- data/test/lib/vedeu/api/api_test.rb +55 -29
- data/test/lib/vedeu/api/interface_test.rb +3 -49
- data/test/lib/vedeu/api/line_test.rb +71 -0
- data/test/lib/vedeu/api/stream_test.rb +25 -0
- data/test/lib/vedeu/models/attributes/background_test.rb +83 -0
- data/test/lib/vedeu/models/attributes/coercer_test.rb +52 -0
- data/test/lib/vedeu/models/attributes/foreground_test.rb +83 -0
- data/test/lib/vedeu/models/attributes/presentation_test.rb +30 -0
- data/test/lib/vedeu/models/composition_test.rb +6 -6
- data/test/lib/vedeu/models/geometry_test.rb +34 -0
- data/test/lib/vedeu/models/interface_test.rb +0 -12
- data/test/lib/vedeu/models/line_test.rb +1 -13
- data/test/lib/vedeu/models/stream_test.rb +4 -50
- data/test/lib/vedeu/models/style_test.rb +39 -0
- data/test/lib/vedeu/support/buffer_test.rb +7 -3
- data/test/lib/vedeu/support/buffers_test.rb +15 -0
- data/test/lib/vedeu/{output → support}/clear_test.rb +8 -1
- data/test/lib/vedeu/support/esc_test.rb +2 -2
- data/test/lib/vedeu/support/event_test.rb +41 -0
- data/test/lib/vedeu/support/events_test.rb +70 -0
- data/test/lib/vedeu/support/focus_test.rb +114 -0
- data/test/lib/vedeu/support/grid_test.rb +31 -0
- data/test/lib/vedeu/support/groups_test.rb +65 -0
- data/test/lib/vedeu/{output → support}/render_test.rb +8 -1
- data/test/lib/vedeu/{output → support}/view_test.rb +1 -1
- data/test/test_helper.rb +3 -1
- data/vedeu.gemspec +3 -2
- metadata +67 -31
- data/lib/vedeu/api/events.rb +0 -46
- data/lib/vedeu/api/log.rb +0 -84
- data/lib/vedeu/models/attributes/attributes.rb +0 -25
- data/lib/vedeu/models/store.rb +0 -29
- data/lib/vedeu/output/buffers.rb +0 -65
- data/test/lib/vedeu/api/events_test.rb +0 -36
- data/test/lib/vedeu/api/grid_test.rb +0 -33
- data/test/lib/vedeu/models/attributes/attributes_test.rb +0 -39
- data/test/lib/vedeu/models/attributes/colour_translator_test.rb +0 -78
- data/test/lib/vedeu/models/store_test.rb +0 -57
- data/test/lib/vedeu/output/buffers_test.rb +0 -35
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
module API
|
5
|
+
describe Stream do
|
6
|
+
describe '#align' do
|
7
|
+
it 'returns the value assigned' do
|
8
|
+
Stream.new.align(:left).must_equal(:left)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#text' do
|
13
|
+
it 'returns the value assigned' do
|
14
|
+
Stream.new.text('Some text...').must_equal('Some text...')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#width' do
|
19
|
+
it 'returns the value assigned' do
|
20
|
+
Stream.new.text(30).must_equal(30)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
describe Background do
|
5
|
+
describe '.escape_sequence' do
|
6
|
+
describe 'when the colour is empty' do
|
7
|
+
it 'returns an empty String' do
|
8
|
+
Background.escape_sequence('').must_equal('')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'when the colour is named (3-bit / 8 colours)' do
|
13
|
+
{
|
14
|
+
red: "\e[41m",
|
15
|
+
yellow: "\e[43m",
|
16
|
+
magenta: "\e[45m",
|
17
|
+
white: "\e[47m",
|
18
|
+
default: "\e[49m",
|
19
|
+
unknown: "",
|
20
|
+
}.map do |colour, result|
|
21
|
+
it "returns the correct escape sequence for #{colour}" do
|
22
|
+
Background.escape_sequence(colour).must_equal(result)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'when the colour is numbered (8-bit / 256 colours)' do
|
28
|
+
{
|
29
|
+
24 => "\e[48;5;24m",
|
30
|
+
56 => "\e[48;5;56m",
|
31
|
+
82 => "\e[48;5;82m",
|
32
|
+
118 => "\e[48;5;118m",
|
33
|
+
143 => "\e[48;5;143m",
|
34
|
+
219 => "\e[48;5;219m",
|
35
|
+
-2 => "",
|
36
|
+
442 => ""
|
37
|
+
}.map do |colour, result|
|
38
|
+
it "returns the correct escape sequence for #{colour}" do
|
39
|
+
Background.escape_sequence(colour).must_equal(result)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'when the colour is a CSS value (8-bit / 256 colours)' do
|
45
|
+
before { Terminal.stubs(:colour_mode).returns(8) }
|
46
|
+
|
47
|
+
{
|
48
|
+
'#5f0000' => "\e[48;5;52m",
|
49
|
+
'#008700' => "\e[48;5;28m",
|
50
|
+
'#0000d7' => "\e[48;5;20m",
|
51
|
+
'#afafaf' => "\e[48;5;145m",
|
52
|
+
'#afd700' => "\e[48;5;148m",
|
53
|
+
'#af005f' => "\e[48;5;125m",
|
54
|
+
'999999' => '',
|
55
|
+
'#12121' => '',
|
56
|
+
'#h11111' => '',
|
57
|
+
}.map do |colour, result|
|
58
|
+
it "returns the correct escape sequence for #{colour}" do
|
59
|
+
Background.escape_sequence(colour).must_equal(result)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'when the colour is a CSS value (24-bit / 16.8mil colours)' do
|
65
|
+
{
|
66
|
+
'#5f0000' => "\e[48;2;95;0;0m",
|
67
|
+
'#008700' => "\e[48;2;0;135;0m",
|
68
|
+
'#0000d7' => "\e[48;2;0;0;215m",
|
69
|
+
'#afafaf' => "\e[48;2;175;175;175m",
|
70
|
+
'#afd700' => "\e[48;2;175;215;0m",
|
71
|
+
'#af005f' => "\e[48;2;175;0;95m",
|
72
|
+
'999999' => '',
|
73
|
+
'#12121' => '',
|
74
|
+
'#h11111' => '',
|
75
|
+
}.map do |colour, result|
|
76
|
+
it "returns the correct escape sequence for #{colour}" do
|
77
|
+
Background.escape_sequence(colour).must_equal(result)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
class TestClass
|
5
|
+
include Coercions
|
6
|
+
|
7
|
+
def initialize(attributes = {})
|
8
|
+
@attributes = attributes
|
9
|
+
@name = attributes[:name]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Coercions do
|
14
|
+
describe '.coercer' do
|
15
|
+
let(:klass) { mock('TestClass') }
|
16
|
+
|
17
|
+
before do
|
18
|
+
TestClass.stubs(:new).returns(klass)
|
19
|
+
end
|
20
|
+
|
21
|
+
[nil, [], {}].each do |empty_value|
|
22
|
+
it 'returns an empty collection when nil or empty' do
|
23
|
+
TestClass.coercer(empty_value).must_equal([])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'returns when an object' do
|
28
|
+
TestClass.coercer([klass]).must_equal([klass])
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns a collection of models when a single hash' do
|
32
|
+
coerced = TestClass.coercer({ :name => 'test1' })
|
33
|
+
coerced.size.must_equal(1)
|
34
|
+
coerced.must_equal([klass])
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns a collection of models when multiple hashes' do
|
38
|
+
coerced = TestClass.coercer([
|
39
|
+
{ :name => 'test1' }, { :name => 'test2' }
|
40
|
+
])
|
41
|
+
coerced.size.must_equal(2)
|
42
|
+
coerced.must_equal([klass, klass])
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns a collection of models when a single array' do
|
46
|
+
coerced = TestClass.coercer([{ :name => 'test3' }])
|
47
|
+
coerced.size.must_equal(1)
|
48
|
+
coerced.must_equal([klass])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
describe Foreground do
|
5
|
+
describe '.escape_sequence' do
|
6
|
+
describe 'when the colour is empty' do
|
7
|
+
it 'returns an empty String' do
|
8
|
+
Foreground.escape_sequence('').must_equal('')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'when the colour is named (3-bit / 8 colours)' do
|
13
|
+
{
|
14
|
+
red: "\e[31m",
|
15
|
+
yellow: "\e[33m",
|
16
|
+
magenta: "\e[35m",
|
17
|
+
white: "\e[37m",
|
18
|
+
default: "\e[39m",
|
19
|
+
unknown: "",
|
20
|
+
}.map do |colour, result|
|
21
|
+
it "returns the correct escape sequence for #{colour}" do
|
22
|
+
Foreground.escape_sequence(colour).must_equal(result)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'when the colour is numbered (8-bit / 256 colours)' do
|
28
|
+
{
|
29
|
+
24 => "\e[38;5;24m",
|
30
|
+
56 => "\e[38;5;56m",
|
31
|
+
82 => "\e[38;5;82m",
|
32
|
+
118 => "\e[38;5;118m",
|
33
|
+
143 => "\e[38;5;143m",
|
34
|
+
219 => "\e[38;5;219m",
|
35
|
+
-2 => "",
|
36
|
+
442 => ""
|
37
|
+
}.map do |colour, result|
|
38
|
+
it "returns the correct escape sequence for #{colour}" do
|
39
|
+
Foreground.escape_sequence(colour).must_equal(result)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'when the colour is a CSS value (8-bit / 256 colours)' do
|
45
|
+
before { Terminal.stubs(:colour_mode).returns(8) }
|
46
|
+
|
47
|
+
{
|
48
|
+
'#5f0000' => "\e[38;5;52m",
|
49
|
+
'#008700' => "\e[38;5;28m",
|
50
|
+
'#0000d7' => "\e[38;5;20m",
|
51
|
+
'#afafaf' => "\e[38;5;145m",
|
52
|
+
'#afd700' => "\e[38;5;148m",
|
53
|
+
'#af005f' => "\e[38;5;125m",
|
54
|
+
'999999' => '',
|
55
|
+
'#12121' => '',
|
56
|
+
'#h11111' => '',
|
57
|
+
}.map do |colour, result|
|
58
|
+
it "returns the correct escape sequence for #{colour}" do
|
59
|
+
Foreground.escape_sequence(colour).must_equal(result)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'when the colour is a CSS value (24-bit / 16.8mil colours)' do
|
65
|
+
{
|
66
|
+
'#5f0000' => "\e[38;2;95;0;0m",
|
67
|
+
'#008700' => "\e[38;2;0;135;0m",
|
68
|
+
'#0000d7' => "\e[38;2;0;0;215m",
|
69
|
+
'#afafaf' => "\e[38;2;175;175;175m",
|
70
|
+
'#afd700' => "\e[38;2;175;215;0m",
|
71
|
+
'#af005f' => "\e[38;2;175;0;95m",
|
72
|
+
'999999' => '',
|
73
|
+
'#12121' => '',
|
74
|
+
'#h11111' => '',
|
75
|
+
}.map do |colour, result|
|
76
|
+
it "returns the correct escape sequence for #{colour}" do
|
77
|
+
Foreground.escape_sequence(colour).must_equal(result)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
class PresentationTestClass
|
5
|
+
include Presentation
|
6
|
+
|
7
|
+
def attributes
|
8
|
+
{
|
9
|
+
colour: { background: '#000033', foreground: '#aadd00' },
|
10
|
+
style: ['bold']
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Presentation do
|
16
|
+
let(:receiver) { PresentationTestClass.new }
|
17
|
+
|
18
|
+
describe '#colour' do
|
19
|
+
it 'returns a Colour instance' do
|
20
|
+
receiver.colour.must_be_instance_of(Colour)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#style' do
|
25
|
+
it 'returns a Style instance' do
|
26
|
+
receiver.style.must_be_instance_of(Style)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -7,7 +7,7 @@ module Vedeu
|
|
7
7
|
let(:json) { File.read('test/support/model_test_data.json') }
|
8
8
|
let(:attributes) { JSON.load(json, nil, symbolize_names: true) }
|
9
9
|
|
10
|
-
before {
|
10
|
+
before { Buffers.reset }
|
11
11
|
|
12
12
|
describe '#interfaces' do
|
13
13
|
it 'returns a collection of interfaces' do
|
@@ -107,7 +107,7 @@ module Vedeu
|
|
107
107
|
"\e[3;3H \e[3;3H" \
|
108
108
|
"\e[4;3H \e[4;3H" \
|
109
109
|
"\e[5;3H \e[5;3H" \
|
110
|
-
"\e[3;3H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[
|
110
|
+
"\e[3;3H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[22m\e[27m\e[4mSome text...\e[38;2;255;255;0m\e[48;2;0;255;0m\e[24m\e[22m\e[27m \e[38;2;255;255;255m\e[48;2;255;0;255m\e[1mmore text...\e[?25h"
|
111
111
|
)
|
112
112
|
end
|
113
113
|
|
@@ -237,13 +237,13 @@ module Vedeu
|
|
237
237
|
"\e[3;3H \e[3;3H" \
|
238
238
|
"\e[4;3H \e[4;3H" \
|
239
239
|
"\e[5;3H \e[5;3H" \
|
240
|
-
"\e[3;3H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[
|
241
|
-
"\e[4;3H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[
|
240
|
+
"\e[3;3H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[22m\e[27m\e[4mSome text...\e[38;2;255;255;0m\e[48;2;0;255;0m\e[24m\e[22m\e[27m \e[38;2;255;255;255m\e[48;2;255;0;255m\e[1mmore text..." \
|
241
|
+
"\e[4;3H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[22m\e[27m\e[4mSome text...\e[38;2;255;255;0m\e[48;2;0;255;0m\e[24m\e[22m\e[27m \e[38;2;255;255;255m\e[48;2;255;0;255m\e[1mmore text...\e[?25h" \
|
242
242
|
"\e[6;6H \e[6;6H" \
|
243
243
|
"\e[7;6H \e[7;6H" \
|
244
244
|
"\e[8;6H \e[8;6H" \
|
245
|
-
"\e[6;6H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[
|
246
|
-
"\e[7;6H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[
|
245
|
+
"\e[6;6H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[22m\e[27m\e[4mSome text...\e[38;2;255;255;0m\e[48;2;0;255;0m\e[24m\e[22m\e[27m \e[38;2;255;255;255m\e[48;2;255;0;255m\e[1mmore text..." \
|
246
|
+
"\e[7;6H\e[38;2;0;0;0m\e[48;2;0;0;255m\e[24m\e[22m\e[27m\e[4mSome text...\e[38;2;255;255;0m\e[48;2;0;255;0m\e[24m\e[22m\e[27m \e[38;2;255;255;255m\e[48;2;255;0;255m\e[1mmore text...\e[?25h"
|
247
247
|
)
|
248
248
|
end
|
249
249
|
end
|
@@ -2,6 +2,40 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module Vedeu
|
4
4
|
describe Geometry do
|
5
|
+
describe '#viewport_width' do
|
6
|
+
it 'returns the viewport width when the interface fits the terminal' do
|
7
|
+
IO.console.stub(:winsize, [25, 80]) do
|
8
|
+
geometry = Geometry.new({ width: 60, height: 1, x: 5, y: 1 })
|
9
|
+
geometry.viewport_width.must_equal(60)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns the viewport width when the interface does not fit the ' \
|
14
|
+
'terminal' do
|
15
|
+
IO.console.stub(:winsize, [25, 60]) do
|
16
|
+
geometry = Geometry.new({ width: 60, height: 1, x: 5, y: 1 })
|
17
|
+
geometry.viewport_width.must_equal(55)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#viewport_height' do
|
23
|
+
it 'returns the viewport height when the interface fits the terminal' do
|
24
|
+
IO.console.stub(:winsize, [25, 80]) do
|
25
|
+
geometry = Geometry.new({ width: 5, height: 20, x: 1, y: 5 })
|
26
|
+
geometry.viewport_height.must_equal(20)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns the viewport height when the interface does not fit the ' \
|
31
|
+
'terminal' do
|
32
|
+
IO.console.stub(:winsize, [15, 80]) do
|
33
|
+
geometry = Geometry.new({ width: 5, height: 20, x: 1, y: 5 })
|
34
|
+
geometry.viewport_height.must_equal(10)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
5
39
|
describe '#origin' do
|
6
40
|
it 'returns the origin for the interface' do
|
7
41
|
geometry = Geometry.new({ width: 5, height: 5 })
|
@@ -63,18 +63,6 @@ module Vedeu
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
describe '#colour' do
|
67
|
-
it 'returns the value' do
|
68
|
-
interface.colour.must_be_instance_of(Colour)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#style' do
|
73
|
-
it 'returns the value' do
|
74
|
-
interface.style.must_equal('')
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
66
|
describe '#geometry' do
|
79
67
|
it 'returns the value' do
|
80
68
|
interface.geometry.must_be_instance_of(Geometry)
|
@@ -20,29 +20,17 @@ module Vedeu
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
describe '#colour' do
|
24
|
-
it 'has a colour attribute' do
|
25
|
-
line.colour.must_be_instance_of(Colour)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
23
|
describe '#streams' do
|
30
24
|
it 'has a streams attribute' do
|
31
25
|
line.streams.must_equal([])
|
32
26
|
end
|
33
27
|
end
|
34
28
|
|
35
|
-
describe '#style' do
|
36
|
-
it 'has a style attribute' do
|
37
|
-
line.style.must_equal("\e[24m\e[21m\e[27m")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
29
|
describe '#to_s' do
|
42
30
|
it 'returns a String' do
|
43
31
|
line.to_s.must_equal(
|
44
32
|
"\e[38;2;255;0;0m\e[48;2;0;0;0m" \
|
45
|
-
"\e[24m\e[
|
33
|
+
"\e[24m\e[22m\e[27m"
|
46
34
|
)
|
47
35
|
end
|
48
36
|
end
|
@@ -18,24 +18,12 @@ module Vedeu
|
|
18
18
|
let(:align) { :left }
|
19
19
|
let(:width) { 9 }
|
20
20
|
|
21
|
-
describe '#colour' do
|
22
|
-
it 'has a colour attribute' do
|
23
|
-
stream.colour.must_be_instance_of(Colour)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
21
|
describe '#text' do
|
28
22
|
it 'has a text attribute' do
|
29
23
|
stream.text.must_equal('Some text')
|
30
24
|
end
|
31
25
|
end
|
32
26
|
|
33
|
-
describe '#style' do
|
34
|
-
it 'has a style attribute' do
|
35
|
-
stream.style.must_equal("\e[24m\e[21m\e[27m")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
27
|
describe '#width' do
|
40
28
|
it 'has a width attribute' do
|
41
29
|
stream.width.must_equal(9)
|
@@ -48,40 +36,6 @@ module Vedeu
|
|
48
36
|
end
|
49
37
|
end
|
50
38
|
|
51
|
-
describe '#style' do
|
52
|
-
describe 'for a single style' do
|
53
|
-
let(:style) { 'normal' }
|
54
|
-
|
55
|
-
it 'returns an escape sequence' do
|
56
|
-
stream.style.must_equal("\e[24m\e[21m\e[27m")
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe 'for multiple styles' do
|
61
|
-
let(:style) { ['normal', 'underline'] }
|
62
|
-
|
63
|
-
it 'returns an escape sequence for multiple styles' do
|
64
|
-
stream.style.must_equal("\e[24m\e[21m\e[27m\e[4m")
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe 'for an unknown style' do
|
69
|
-
let(:style) { 'unknown' }
|
70
|
-
|
71
|
-
it 'returns an empty string for an unknown style' do
|
72
|
-
stream.style.must_equal('')
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
describe 'for an empty or nil' do
|
77
|
-
let(:style) { '' }
|
78
|
-
|
79
|
-
it 'returns an empty string for empty or nil' do
|
80
|
-
stream.style.must_equal('')
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
39
|
describe '#to_s' do
|
86
40
|
describe 'when a width is set and align is default' do
|
87
41
|
let(:width) { 20 }
|
@@ -89,7 +43,7 @@ module Vedeu
|
|
89
43
|
it 'returns a String' do
|
90
44
|
stream.to_s.must_equal(
|
91
45
|
"\e[38;2;255;0;0m\e[48;2;0;0;0m" \
|
92
|
-
"\e[24m\e[
|
46
|
+
"\e[24m\e[22m\e[27m" \
|
93
47
|
"Some text "
|
94
48
|
)
|
95
49
|
end
|
@@ -100,7 +54,7 @@ module Vedeu
|
|
100
54
|
it 'returns a String' do
|
101
55
|
stream.to_s.must_equal(
|
102
56
|
"\e[38;2;255;0;0m\e[48;2;0;0;0m" \
|
103
|
-
"\e[24m\e[
|
57
|
+
"\e[24m\e[22m\e[27m" \
|
104
58
|
" Some text "
|
105
59
|
)
|
106
60
|
end
|
@@ -112,7 +66,7 @@ module Vedeu
|
|
112
66
|
it 'returns a String' do
|
113
67
|
stream.to_s.must_equal(
|
114
68
|
"\e[38;2;255;0;0m\e[48;2;0;0;0m" \
|
115
|
-
"\e[24m\e[
|
69
|
+
"\e[24m\e[22m\e[27m" \
|
116
70
|
" Some text"
|
117
71
|
)
|
118
72
|
end
|
@@ -123,7 +77,7 @@ module Vedeu
|
|
123
77
|
it 'returns a String' do
|
124
78
|
stream.to_s.must_equal(
|
125
79
|
"\e[38;2;255;0;0m\e[48;2;0;0;0m" \
|
126
|
-
"\e[24m\e[
|
80
|
+
"\e[24m\e[22m\e[27m" \
|
127
81
|
"Some text"
|
128
82
|
)
|
129
83
|
end
|