vedeu 0.0.25 → 0.0.26
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/README.md +10 -9
- data/Rakefile +0 -10
- data/bin/composition +1 -1
- data/examples/single_interface_app.rb +7 -4
- data/lib/vedeu.rb +19 -48
- data/lib/vedeu/application.rb +8 -7
- data/lib/vedeu/configuration.rb +4 -4
- data/lib/vedeu/input/input.rb +3 -0
- data/lib/vedeu/launcher.rb +3 -0
- data/lib/vedeu/models/background.rb +13 -0
- data/lib/vedeu/models/coercions.rb +21 -0
- data/lib/vedeu/models/colour.rb +22 -0
- data/lib/vedeu/{repository → models}/command.rb +2 -0
- data/lib/vedeu/models/composition.rb +30 -0
- data/lib/vedeu/models/foreground.rb +13 -0
- data/lib/vedeu/models/interface.rb +62 -0
- data/lib/vedeu/models/interface_collection.rb +24 -0
- data/lib/vedeu/models/line.rb +22 -0
- data/lib/vedeu/models/line_collection.rb +27 -0
- data/lib/vedeu/models/presentation.rb +13 -0
- data/lib/vedeu/models/stream.rb +21 -0
- data/lib/vedeu/models/stream_collection.rb +27 -0
- data/lib/vedeu/models/style_collection.rb +23 -0
- data/lib/vedeu/output/interface_renderer.rb +62 -0
- data/lib/vedeu/output/output.rb +6 -5
- data/lib/vedeu/process/process.rb +15 -31
- data/lib/vedeu/repository/command_repository.rb +13 -14
- data/lib/vedeu/repository/interface_repository.rb +12 -13
- data/lib/vedeu/repository/repository.rb +2 -0
- data/lib/vedeu/{output → support}/cursor.rb +2 -0
- data/lib/vedeu/support/esc.rb +112 -0
- data/lib/vedeu/support/events.rb +21 -0
- data/lib/vedeu/support/geometry.rb +66 -0
- data/lib/vedeu/support/parser.rb +27 -0
- data/lib/vedeu/support/terminal.rb +31 -134
- data/lib/vedeu/{output → support}/translator.rb +12 -8
- data/lib/vedeu/{output → support}/wordwrap.rb +2 -4
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/application_test.rb +7 -2
- data/test/lib/vedeu/configuration_test.rb +13 -8
- data/test/lib/vedeu/input/input_test.rb +2 -1
- data/test/lib/vedeu/launcher_test.rb +7 -2
- data/test/lib/vedeu/models/background_test.rb +35 -0
- data/test/lib/vedeu/models/colour_test.rb +71 -0
- data/test/lib/vedeu/models/command_test.rb +109 -0
- data/test/lib/vedeu/models/composition_test.rb +187 -0
- data/test/lib/vedeu/models/foreground_test.rb +35 -0
- data/test/lib/vedeu/models/interface_collection_test.rb +57 -0
- data/test/lib/vedeu/models/interface_test.rb +220 -0
- data/test/lib/vedeu/models/line_collection_test.rb +69 -0
- data/test/lib/vedeu/models/line_test.rb +76 -0
- data/test/lib/vedeu/models/presentation_test.rb +8 -0
- data/test/lib/vedeu/models/stream_collection_test.rb +57 -0
- data/test/lib/vedeu/models/stream_test.rb +76 -0
- data/test/lib/vedeu/models/style_collection_test.rb +22 -0
- data/test/lib/vedeu/output/interface_renderer_test.rb +12 -0
- data/test/lib/vedeu/output/output_test.rb +15 -30
- data/test/lib/vedeu/process/process_test.rb +22 -44
- data/test/lib/vedeu/repository/command_repository_test.rb +22 -16
- data/test/lib/vedeu/repository/interface_repository_test.rb +62 -14
- data/test/lib/vedeu/repository/repository_test.rb +1 -0
- data/test/lib/vedeu/repository/storage_test.rb +13 -6
- data/test/lib/vedeu/{output → support}/cursor_test.rb +1 -0
- data/test/lib/vedeu/support/esc_test.rb +348 -0
- data/test/lib/vedeu/support/events_test.rb +37 -0
- data/test/lib/vedeu/support/exit_test.rb +1 -0
- data/test/lib/vedeu/support/geometry_test.rb +131 -0
- data/test/lib/vedeu/support/parser_test.rb +56 -0
- data/test/lib/vedeu/support/queue_test.rb +1 -0
- data/test/lib/vedeu/support/terminal_test.rb +1 -119
- data/test/lib/vedeu/{output → support}/translator_test.rb +17 -12
- data/test/lib/vedeu/{output → support}/wordwrap_test.rb +1 -0
- data/test/lib/vedeu/version_test.rb +1 -0
- data/test/lib/vedeu_test.rb +1 -0
- data/{lib/vedeu/repository → test/support}/dummy_command.rb +0 -0
- data/{lib/vedeu/repository → test/support}/dummy_interface.rb +0 -0
- data/test/support/json/int1_lin1_str1.json +10 -0
- data/test/support/json/int1_lin1_str3.json +18 -0
- data/test/support/json/int1_lin2_str1.json +17 -0
- data/test/support/json/int1_lin2_str3.json +33 -0
- data/test/support/json/int1_lin2_str3_styles.json +43 -0
- data/test/support/json/int2_lin1_str1.json +20 -0
- data/test/support/json/int2_lin1_str3.json +36 -0
- data/test/support/json/int2_lin2_str1.json +34 -0
- data/test/support/json/int2_lin2_str3.json +66 -0
- data/test/support/json/int2_lin2_str3_styles.json +158 -0
- data/test/support/output_1.json +9 -0
- data/test/support/output_1.rb +14 -0
- data/test/support/output_2.json +1 -0
- data/test/support/output_2.rb +19 -0
- data/test/test_helper.rb +0 -2
- data/vedeu.gemspec +0 -3
- metadata +98 -150
- data/config/cucumber.yml +0 -8
- data/documentation/composition.ebnf +0 -7
- data/documentation/diagram/ColourDirective.png +0 -0
- data/documentation/diagram/Directive.png +0 -0
- data/documentation/diagram/Interface.png +0 -0
- data/documentation/diagram/Output.png +0 -0
- data/documentation/diagram/PositionDirective.png +0 -0
- data/documentation/diagram/Stream.png +0 -0
- data/documentation/diagram/StyleDirective.png +0 -0
- data/documentation/diagram/rr-1.35.837.png +0 -0
- data/documentation/index.html +0 -325
- data/features/getting_started.feature +0 -10
- data/features/step_definitions/vedeu_steps.rb +0 -11
- data/features/support/env.rb +0 -12
- data/lib/vedeu/output/background.rb +0 -27
- data/lib/vedeu/output/base.rb +0 -57
- data/lib/vedeu/output/buffer/composition.rb +0 -24
- data/lib/vedeu/output/buffer/formatting.rb +0 -25
- data/lib/vedeu/output/buffer/interface.rb +0 -14
- data/lib/vedeu/output/buffer/line.rb +0 -14
- data/lib/vedeu/output/buffer/stream.rb +0 -14
- data/lib/vedeu/output/buffer/style.rb +0 -11
- data/lib/vedeu/output/colour.rb +0 -39
- data/lib/vedeu/output/compositor.rb +0 -72
- data/lib/vedeu/output/directive.rb +0 -63
- data/lib/vedeu/output/esc.rb +0 -61
- data/lib/vedeu/output/foreground.rb +0 -27
- data/lib/vedeu/output/geometry.rb +0 -71
- data/lib/vedeu/output/layer.rb +0 -9
- data/lib/vedeu/output/menu.rb +0 -26
- data/lib/vedeu/output/position.rb +0 -35
- data/lib/vedeu/output/style.rb +0 -38
- data/lib/vedeu/repository/interface.rb +0 -62
- data/lib/vedeu/support/json_parser.rb +0 -25
- data/lib/vedeu/support/options.rb +0 -4
- data/test/lib/vedeu/output/background_test.rb +0 -67
- data/test/lib/vedeu/output/base_test.rb +0 -8
- data/test/lib/vedeu/output/buffer/composition_test.rb +0 -57
- data/test/lib/vedeu/output/buffer/formatting_test.rb +0 -9
- data/test/lib/vedeu/output/buffer/interface_test.rb +0 -38
- data/test/lib/vedeu/output/buffer/line_test.rb +0 -64
- data/test/lib/vedeu/output/buffer/stream_test.rb +0 -61
- data/test/lib/vedeu/output/buffer/style_test.rb +0 -8
- data/test/lib/vedeu/output/colour_test.rb +0 -104
- data/test/lib/vedeu/output/compositor_test.rb +0 -247
- data/test/lib/vedeu/output/directive_test.rb +0 -82
- data/test/lib/vedeu/output/esc_test.rb +0 -175
- data/test/lib/vedeu/output/foreground_test.rb +0 -67
- data/test/lib/vedeu/output/geometry_test.rb +0 -190
- data/test/lib/vedeu/output/layer_test.rb +0 -35
- data/test/lib/vedeu/output/menu_test.rb +0 -13
- data/test/lib/vedeu/output/position_test.rb +0 -48
- data/test/lib/vedeu/output/style_test.rb +0 -132
- data/test/lib/vedeu/repository/command_test.rb +0 -73
- data/test/lib/vedeu/repository/dummy_command_test.rb +0 -27
- data/test/lib/vedeu/repository/dummy_interface_test.rb +0 -7
- data/test/lib/vedeu/repository/interface_test.rb +0 -79
- data/test/lib/vedeu/support/json_parser_test.rb +0 -45
- data/test/support/composition.json +0 -47
- data/test/support/composition.rb +0 -5
- data/test/support/composition.xml +0 -36
- data/test/support/multi_interface.json +0 -34
- data/test/support/single_interface.json +0 -19
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/models/background'
|
3
|
+
require_relative '../../../../lib/vedeu/models/colour'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
describe Background do
|
7
|
+
let(:described_class) { Background }
|
8
|
+
let(:described_instance) { Vedeu::Colour.new(attributes) }
|
9
|
+
let(:attributes) {
|
10
|
+
{
|
11
|
+
background: '#00ff00'
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
describe '#background' do
|
16
|
+
let(:subject) { described_instance.background }
|
17
|
+
|
18
|
+
it 'returns a String' do
|
19
|
+
subject.must_be_instance_of(String)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns an escape sequence' do
|
23
|
+
subject.must_equal("\e[48;5;46m")
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when the foreground is missing' do
|
27
|
+
let(:attributes) { {} }
|
28
|
+
|
29
|
+
it 'returns an escape sequence' do
|
30
|
+
subject.must_equal('')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/models/colour'
|
3
|
+
|
4
|
+
module Vedeu
|
5
|
+
describe Colour do
|
6
|
+
let(:described_class) { Colour }
|
7
|
+
let(:described_instance) { described_class.new(attributes) }
|
8
|
+
let(:attributes) {
|
9
|
+
{
|
10
|
+
foreground: '#ff0000',
|
11
|
+
background: '#000000'
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
describe '#initialize' do
|
16
|
+
let(:subject) { described_instance }
|
17
|
+
|
18
|
+
it 'returns a Colour instance' do
|
19
|
+
subject.must_be_instance_of(Colour)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#to_json' do
|
24
|
+
let(:subject) { described_instance.to_json }
|
25
|
+
|
26
|
+
it 'returns a String' do
|
27
|
+
subject.must_be_instance_of(String)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns the model as JSON' do
|
31
|
+
subject.must_equal("{\"foreground\":\"\\u001b[38;5;196m\",\"background\":\"\\u001b[48;5;16m\"}")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#to_s' do
|
36
|
+
let(:subject) { described_instance.to_s }
|
37
|
+
|
38
|
+
it 'returns a String' do
|
39
|
+
subject.must_be_instance_of(String)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns an escape sequence' do
|
43
|
+
subject.must_equal("\e[38;5;196m\e[48;5;16m")
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when the foreground is missing' do
|
47
|
+
let(:attributes) { { background: '#000000' } }
|
48
|
+
|
49
|
+
it 'returns an escape sequence' do
|
50
|
+
subject.must_equal("\e[48;5;16m")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when the background is missing' do
|
55
|
+
let(:attributes) { { foreground: '#ff0000' } }
|
56
|
+
|
57
|
+
it 'returns an escape sequence' do
|
58
|
+
subject.must_equal("\e[38;5;196m")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'when both are missing' do
|
63
|
+
let(:attributes) { {} }
|
64
|
+
|
65
|
+
it 'returns an empty string' do
|
66
|
+
subject.must_equal('')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../support/dummy_command'
|
3
|
+
require_relative '../../../../lib/vedeu/models/command'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
describe Command do
|
7
|
+
let(:described_class) { Command }
|
8
|
+
let(:described_instance) { described_class.new(attributes) }
|
9
|
+
let(:subject) { described_instance }
|
10
|
+
let(:attributes) {
|
11
|
+
{
|
12
|
+
name: 'dummy',
|
13
|
+
entity: DummyCommand,
|
14
|
+
keyword: "dummy",
|
15
|
+
keypress: "d",
|
16
|
+
arguments: []
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
describe '#initialize' do
|
21
|
+
let(:subject) { described_instance }
|
22
|
+
|
23
|
+
it 'returns a Command instance' do
|
24
|
+
subject.must_be_instance_of(Command)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#name' do
|
29
|
+
let(:subject) { described_instance.name }
|
30
|
+
|
31
|
+
it 'returns a String' do
|
32
|
+
subject.must_be_instance_of(String)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'has a name attribute' do
|
36
|
+
subject.must_equal('dummy')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#entity' do
|
41
|
+
let(:subject) { described_instance.entity }
|
42
|
+
|
43
|
+
it 'returns a Class' do
|
44
|
+
subject.must_be_instance_of(Class)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'has an entity attribute' do
|
48
|
+
subject.must_equal(DummyCommand)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#keypress' do
|
53
|
+
let(:subject) { described_instance.keypress }
|
54
|
+
|
55
|
+
it 'returns a String' do
|
56
|
+
subject.must_be_instance_of(String)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'has a keypress attribute' do
|
60
|
+
subject.must_equal('d')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#keyword' do
|
65
|
+
let(:subject) { described_instance.keyword }
|
66
|
+
|
67
|
+
it 'returns a String' do
|
68
|
+
subject.must_be_instance_of(String)
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'has an keyword attribute' do
|
72
|
+
subject.must_equal('dummy')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#arguments' do
|
77
|
+
let(:subject) { described_instance.arguments }
|
78
|
+
|
79
|
+
it 'returns a String' do
|
80
|
+
subject.must_be_instance_of(Array)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'has an arguments attribute' do
|
84
|
+
subject.must_equal([])
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#execute' do
|
89
|
+
let(:subject) { described_instance.execute(args) }
|
90
|
+
let(:args) { [] }
|
91
|
+
|
92
|
+
it 'returns a Symbol' do
|
93
|
+
subject.must_be_instance_of(Symbol)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'returns the result of execution' do
|
97
|
+
subject.must_equal(:dummy)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe '#executable' do
|
102
|
+
let(:subject) { described_instance.executable }
|
103
|
+
|
104
|
+
it 'returns a proc' do
|
105
|
+
subject.class.to_s.must_equal('Proc')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/models/composition'
|
3
|
+
require_relative '../../../../lib/vedeu/repository/interface_repository'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
describe Composition do
|
7
|
+
let(:described_class) { Composition }
|
8
|
+
let(:described_instance) { described_class.new(attributes) }
|
9
|
+
let(:attributes) { { interfaces: interfaces } }
|
10
|
+
let(:interfaces) { { name: 'dummy', width: 40, height: 25 } }
|
11
|
+
|
12
|
+
describe '#initialize' do
|
13
|
+
let(:subject) { described_instance }
|
14
|
+
|
15
|
+
it 'returns a Composition instance' do
|
16
|
+
subject.must_be_instance_of(Composition)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#enqueue' do
|
21
|
+
let(:subject) { described_instance.enqueue }
|
22
|
+
|
23
|
+
before do
|
24
|
+
InterfaceRepository.create({ name: 'dummy', width: 10, height: 2 })
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'creates a composition and enqueues the interface for rendering' do
|
28
|
+
skip
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#to_json' do
|
33
|
+
let(:subject) { described_instance.to_json }
|
34
|
+
|
35
|
+
it 'returns a String' do
|
36
|
+
subject.must_be_instance_of(String)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns the model as JSON' do
|
40
|
+
subject.must_equal("{\"interfaces\":[{\"colour\":null,\"style\":\"\",\"name\":\"dummy\",\"lines\":[],\"y\":1,\"x\":1,\"z\":1,\"width\":40,\"height\":25,\"current\":\"\",\"cursor\":true}]}")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#to_s' do
|
45
|
+
let(:subject) { described_instance.to_s }
|
46
|
+
|
47
|
+
it 'returns a String' do
|
48
|
+
subject.must_be_instance_of(String)
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'single interface, single line, single stream' do
|
52
|
+
let(:json) { File.read('test/support/json/int1_lin1_str1.json') }
|
53
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
54
|
+
|
55
|
+
before do
|
56
|
+
InterfaceRepository.create({ name: 'int1_lin1_str1', y: 3, x: 3, width: 10, height: 3 })
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'returns the stringified content' do
|
60
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text...")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'single interface, single line, multiple streams' do
|
65
|
+
let(:json) { File.read('test/support/json/int1_lin1_str3.json') }
|
66
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
67
|
+
|
68
|
+
before do
|
69
|
+
InterfaceRepository.create({ name: 'int1_lin1_str3', y: 3, x: 3, width: 10, height: 3 })
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'returns the stringified content' do
|
73
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text... more text...")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'single interface, multiple lines, single stream' do
|
78
|
+
let(:json) { File.read('test/support/json/int1_lin2_str1.json') }
|
79
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
80
|
+
|
81
|
+
before do
|
82
|
+
InterfaceRepository.create({ name: 'int1_lin2_str1', y: 3, x: 3, width: 10, height: 3 })
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'returns the stringified content' do
|
86
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text...\e[4;3HSome text...")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'single interface, multiple lines, multiple streams' do
|
91
|
+
let(:json) { File.read('test/support/json/int1_lin2_str3.json') }
|
92
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
93
|
+
|
94
|
+
before do
|
95
|
+
InterfaceRepository.create({ name: 'int1_lin2_str3', y: 3, x: 3, width: 10, height: 3 })
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'returns the stringified content' do
|
99
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text... more text...\e[4;3HSome text... more text...")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'single interface, multiple lines, multiple streams, streams contain styles' do
|
104
|
+
let(:json) { File.read('test/support/json/int1_lin2_str3_styles.json') }
|
105
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
106
|
+
|
107
|
+
before do
|
108
|
+
InterfaceRepository.create({ name: 'int1_lin2_str3_styles', y: 3, x: 3, width: 10, height: 3 })
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns the stringified content' do
|
112
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text...")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'multiple interfaces, single line, single stream' do
|
117
|
+
let(:json) { File.read('test/support/json/int2_lin1_str1.json') }
|
118
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
119
|
+
|
120
|
+
before do
|
121
|
+
InterfaceRepository.create({ name: 'int2_lin1_str1_1', y: 3, x: 3, width: 10, height: 3 })
|
122
|
+
InterfaceRepository.create({ name: 'int2_lin1_str1_2', y: 6, x: 6, width: 10, height: 3 })
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'returns the stringified content' do
|
126
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text...\e[6;6H \e[6;6H\e[7;6H \e[7;6H\e[8;6H \e[8;6H\e[6;6HSome text...")
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'multiple interfaces, single line, multiple streams' do
|
131
|
+
let(:json) { File.read('test/support/json/int2_lin1_str3.json') }
|
132
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
133
|
+
|
134
|
+
before do
|
135
|
+
InterfaceRepository.create({ name: 'int2_lin1_str3_1', y: 3, x: 3, width: 10, height: 3 })
|
136
|
+
InterfaceRepository.create({ name: 'int2_lin1_str3_2', y: 6, x: 6, width: 10, height: 3 })
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'returns the stringified content' do
|
140
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text... more text...\e[6;6H \e[6;6H\e[7;6H \e[7;6H\e[8;6H \e[8;6H\e[6;6HSome text... more text...")
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'multiple interfaces, multiple lines, single stream' do
|
145
|
+
let(:json) { File.read('test/support/json/int2_lin2_str1.json') }
|
146
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
147
|
+
|
148
|
+
before do
|
149
|
+
InterfaceRepository.create({ name: 'int2_lin2_str1_1', y: 3, x: 3, width: 10, height: 3 })
|
150
|
+
InterfaceRepository.create({ name: 'int2_lin2_str1_2', y: 6, x: 6, width: 10, height: 3 })
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'returns the stringified content' do
|
154
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text...\e[4;3HSome text...\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text...\e[4;3HSome text...")
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context 'multiple interfaces, multiple lines, multiple streams' do
|
159
|
+
let(:json) { File.read('test/support/json/int2_lin2_str3.json') }
|
160
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
161
|
+
|
162
|
+
before do
|
163
|
+
InterfaceRepository.create({ name: 'int2_lin2_str3_1', y: 3, x: 3, width: 10, height: 3 })
|
164
|
+
InterfaceRepository.create({ name: 'int2_lin2_str3_2', y: 6, x: 6, width: 10, height: 3 })
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'returns the stringified content' do
|
168
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text... more text...\e[4;3HSome text... more text...\e[6;6H \e[6;6H\e[7;6H \e[7;6H\e[8;6H \e[8;6H\e[6;6HSome text... more text...\e[7;6HSome text... more text...")
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context 'multiple interfaces, multiple lines, multiple streams, streams contain styles' do
|
173
|
+
let(:json) { File.read('test/support/json/int2_lin2_str3_styles.json') }
|
174
|
+
let(:attributes) { Oj.load(json, symbol_keys: true) }
|
175
|
+
|
176
|
+
before do
|
177
|
+
InterfaceRepository.create({ name: 'int2_lin2_str3_styles_1', y: 3, x: 3, width: 10, height: 3 })
|
178
|
+
InterfaceRepository.create({ name: 'int2_lin2_str3_styles_2', y: 6, x: 6, width: 10, height: 3 })
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'returns the stringified content' do
|
182
|
+
subject.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text...\e[4;3H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text...\e[6;6H \e[6;6H\e[7;6H \e[7;6H\e[8;6H \e[8;6H\e[6;6H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text...\e[7;6H\e[38;5;16m\e[48;5;21m\e[24m\e[21m\e[27m\e[4mSome text...\e[38;5;226m\e[48;5;46m\e[24m\e[21m\e[27m \e[38;5;231m\e[48;5;201m\e[1mmore text...")
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/models/foreground'
|
3
|
+
require_relative '../../../../lib/vedeu/models/colour'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
describe Foreground do
|
7
|
+
let(:described_class) { Foreground }
|
8
|
+
let(:described_instance) { Vedeu::Colour.new(attributes) }
|
9
|
+
let(:attributes) {
|
10
|
+
{
|
11
|
+
foreground: '#ff0000'
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
describe '#foreground' do
|
16
|
+
let(:subject) { described_instance.foreground }
|
17
|
+
|
18
|
+
it 'returns a String' do
|
19
|
+
subject.must_be_instance_of(String)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns an escape sequence' do
|
23
|
+
subject.must_equal("\e[38;5;196m")
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'when the foreground is missing' do
|
27
|
+
let(:attributes) { {} }
|
28
|
+
|
29
|
+
it 'returns an escape sequence' do
|
30
|
+
subject.must_equal('')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/models/interface_collection'
|
3
|
+
require_relative '../../../../lib/vedeu/models/composition'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
describe InterfaceCollection do
|
7
|
+
let(:described_class) { InterfaceCollection }
|
8
|
+
|
9
|
+
describe '#coerce' do
|
10
|
+
let(:subject) { Vedeu::Composition.new({ interfaces: interfaces }).interfaces }
|
11
|
+
let(:interfaces) {}
|
12
|
+
|
13
|
+
context 'when there are no interfaces' do
|
14
|
+
it 'returns a Array' do
|
15
|
+
subject.must_be_instance_of(Array)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns an empty array' do
|
19
|
+
subject.must_equal([])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when there is a single interface' do
|
24
|
+
let(:interfaces) { { name: 'dummy' } }
|
25
|
+
|
26
|
+
it 'returns an Interface' do
|
27
|
+
subject.must_be_instance_of(Array)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'contains a single Interface object' do
|
31
|
+
subject.size.must_equal(1)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when there are multiple interfaces' do
|
36
|
+
let(:interfaces) {
|
37
|
+
[
|
38
|
+
{ name: 'dumb' },
|
39
|
+
{ name: 'dumber' }
|
40
|
+
]
|
41
|
+
}
|
42
|
+
|
43
|
+
it 'returns an Array' do
|
44
|
+
subject.must_be_instance_of(Array)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns a collection of Interface objects' do
|
48
|
+
subject.first.must_be_instance_of(Interface)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'contains multiple Line objects' do
|
52
|
+
subject.size.must_equal(2)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|