vedeu 0.0.25 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -9
  3. data/Rakefile +0 -10
  4. data/bin/composition +1 -1
  5. data/examples/single_interface_app.rb +7 -4
  6. data/lib/vedeu.rb +19 -48
  7. data/lib/vedeu/application.rb +8 -7
  8. data/lib/vedeu/configuration.rb +4 -4
  9. data/lib/vedeu/input/input.rb +3 -0
  10. data/lib/vedeu/launcher.rb +3 -0
  11. data/lib/vedeu/models/background.rb +13 -0
  12. data/lib/vedeu/models/coercions.rb +21 -0
  13. data/lib/vedeu/models/colour.rb +22 -0
  14. data/lib/vedeu/{repository → models}/command.rb +2 -0
  15. data/lib/vedeu/models/composition.rb +30 -0
  16. data/lib/vedeu/models/foreground.rb +13 -0
  17. data/lib/vedeu/models/interface.rb +62 -0
  18. data/lib/vedeu/models/interface_collection.rb +24 -0
  19. data/lib/vedeu/models/line.rb +22 -0
  20. data/lib/vedeu/models/line_collection.rb +27 -0
  21. data/lib/vedeu/models/presentation.rb +13 -0
  22. data/lib/vedeu/models/stream.rb +21 -0
  23. data/lib/vedeu/models/stream_collection.rb +27 -0
  24. data/lib/vedeu/models/style_collection.rb +23 -0
  25. data/lib/vedeu/output/interface_renderer.rb +62 -0
  26. data/lib/vedeu/output/output.rb +6 -5
  27. data/lib/vedeu/process/process.rb +15 -31
  28. data/lib/vedeu/repository/command_repository.rb +13 -14
  29. data/lib/vedeu/repository/interface_repository.rb +12 -13
  30. data/lib/vedeu/repository/repository.rb +2 -0
  31. data/lib/vedeu/{output → support}/cursor.rb +2 -0
  32. data/lib/vedeu/support/esc.rb +112 -0
  33. data/lib/vedeu/support/events.rb +21 -0
  34. data/lib/vedeu/support/geometry.rb +66 -0
  35. data/lib/vedeu/support/parser.rb +27 -0
  36. data/lib/vedeu/support/terminal.rb +31 -134
  37. data/lib/vedeu/{output → support}/translator.rb +12 -8
  38. data/lib/vedeu/{output → support}/wordwrap.rb +2 -4
  39. data/lib/vedeu/version.rb +1 -1
  40. data/test/lib/vedeu/application_test.rb +7 -2
  41. data/test/lib/vedeu/configuration_test.rb +13 -8
  42. data/test/lib/vedeu/input/input_test.rb +2 -1
  43. data/test/lib/vedeu/launcher_test.rb +7 -2
  44. data/test/lib/vedeu/models/background_test.rb +35 -0
  45. data/test/lib/vedeu/models/colour_test.rb +71 -0
  46. data/test/lib/vedeu/models/command_test.rb +109 -0
  47. data/test/lib/vedeu/models/composition_test.rb +187 -0
  48. data/test/lib/vedeu/models/foreground_test.rb +35 -0
  49. data/test/lib/vedeu/models/interface_collection_test.rb +57 -0
  50. data/test/lib/vedeu/models/interface_test.rb +220 -0
  51. data/test/lib/vedeu/models/line_collection_test.rb +69 -0
  52. data/test/lib/vedeu/models/line_test.rb +76 -0
  53. data/test/lib/vedeu/models/presentation_test.rb +8 -0
  54. data/test/lib/vedeu/models/stream_collection_test.rb +57 -0
  55. data/test/lib/vedeu/models/stream_test.rb +76 -0
  56. data/test/lib/vedeu/models/style_collection_test.rb +22 -0
  57. data/test/lib/vedeu/output/interface_renderer_test.rb +12 -0
  58. data/test/lib/vedeu/output/output_test.rb +15 -30
  59. data/test/lib/vedeu/process/process_test.rb +22 -44
  60. data/test/lib/vedeu/repository/command_repository_test.rb +22 -16
  61. data/test/lib/vedeu/repository/interface_repository_test.rb +62 -14
  62. data/test/lib/vedeu/repository/repository_test.rb +1 -0
  63. data/test/lib/vedeu/repository/storage_test.rb +13 -6
  64. data/test/lib/vedeu/{output → support}/cursor_test.rb +1 -0
  65. data/test/lib/vedeu/support/esc_test.rb +348 -0
  66. data/test/lib/vedeu/support/events_test.rb +37 -0
  67. data/test/lib/vedeu/support/exit_test.rb +1 -0
  68. data/test/lib/vedeu/support/geometry_test.rb +131 -0
  69. data/test/lib/vedeu/support/parser_test.rb +56 -0
  70. data/test/lib/vedeu/support/queue_test.rb +1 -0
  71. data/test/lib/vedeu/support/terminal_test.rb +1 -119
  72. data/test/lib/vedeu/{output → support}/translator_test.rb +17 -12
  73. data/test/lib/vedeu/{output → support}/wordwrap_test.rb +1 -0
  74. data/test/lib/vedeu/version_test.rb +1 -0
  75. data/test/lib/vedeu_test.rb +1 -0
  76. data/{lib/vedeu/repository → test/support}/dummy_command.rb +0 -0
  77. data/{lib/vedeu/repository → test/support}/dummy_interface.rb +0 -0
  78. data/test/support/json/int1_lin1_str1.json +10 -0
  79. data/test/support/json/int1_lin1_str3.json +18 -0
  80. data/test/support/json/int1_lin2_str1.json +17 -0
  81. data/test/support/json/int1_lin2_str3.json +33 -0
  82. data/test/support/json/int1_lin2_str3_styles.json +43 -0
  83. data/test/support/json/int2_lin1_str1.json +20 -0
  84. data/test/support/json/int2_lin1_str3.json +36 -0
  85. data/test/support/json/int2_lin2_str1.json +34 -0
  86. data/test/support/json/int2_lin2_str3.json +66 -0
  87. data/test/support/json/int2_lin2_str3_styles.json +158 -0
  88. data/test/support/output_1.json +9 -0
  89. data/test/support/output_1.rb +14 -0
  90. data/test/support/output_2.json +1 -0
  91. data/test/support/output_2.rb +19 -0
  92. data/test/test_helper.rb +0 -2
  93. data/vedeu.gemspec +0 -3
  94. metadata +98 -150
  95. data/config/cucumber.yml +0 -8
  96. data/documentation/composition.ebnf +0 -7
  97. data/documentation/diagram/ColourDirective.png +0 -0
  98. data/documentation/diagram/Directive.png +0 -0
  99. data/documentation/diagram/Interface.png +0 -0
  100. data/documentation/diagram/Output.png +0 -0
  101. data/documentation/diagram/PositionDirective.png +0 -0
  102. data/documentation/diagram/Stream.png +0 -0
  103. data/documentation/diagram/StyleDirective.png +0 -0
  104. data/documentation/diagram/rr-1.35.837.png +0 -0
  105. data/documentation/index.html +0 -325
  106. data/features/getting_started.feature +0 -10
  107. data/features/step_definitions/vedeu_steps.rb +0 -11
  108. data/features/support/env.rb +0 -12
  109. data/lib/vedeu/output/background.rb +0 -27
  110. data/lib/vedeu/output/base.rb +0 -57
  111. data/lib/vedeu/output/buffer/composition.rb +0 -24
  112. data/lib/vedeu/output/buffer/formatting.rb +0 -25
  113. data/lib/vedeu/output/buffer/interface.rb +0 -14
  114. data/lib/vedeu/output/buffer/line.rb +0 -14
  115. data/lib/vedeu/output/buffer/stream.rb +0 -14
  116. data/lib/vedeu/output/buffer/style.rb +0 -11
  117. data/lib/vedeu/output/colour.rb +0 -39
  118. data/lib/vedeu/output/compositor.rb +0 -72
  119. data/lib/vedeu/output/directive.rb +0 -63
  120. data/lib/vedeu/output/esc.rb +0 -61
  121. data/lib/vedeu/output/foreground.rb +0 -27
  122. data/lib/vedeu/output/geometry.rb +0 -71
  123. data/lib/vedeu/output/layer.rb +0 -9
  124. data/lib/vedeu/output/menu.rb +0 -26
  125. data/lib/vedeu/output/position.rb +0 -35
  126. data/lib/vedeu/output/style.rb +0 -38
  127. data/lib/vedeu/repository/interface.rb +0 -62
  128. data/lib/vedeu/support/json_parser.rb +0 -25
  129. data/lib/vedeu/support/options.rb +0 -4
  130. data/test/lib/vedeu/output/background_test.rb +0 -67
  131. data/test/lib/vedeu/output/base_test.rb +0 -8
  132. data/test/lib/vedeu/output/buffer/composition_test.rb +0 -57
  133. data/test/lib/vedeu/output/buffer/formatting_test.rb +0 -9
  134. data/test/lib/vedeu/output/buffer/interface_test.rb +0 -38
  135. data/test/lib/vedeu/output/buffer/line_test.rb +0 -64
  136. data/test/lib/vedeu/output/buffer/stream_test.rb +0 -61
  137. data/test/lib/vedeu/output/buffer/style_test.rb +0 -8
  138. data/test/lib/vedeu/output/colour_test.rb +0 -104
  139. data/test/lib/vedeu/output/compositor_test.rb +0 -247
  140. data/test/lib/vedeu/output/directive_test.rb +0 -82
  141. data/test/lib/vedeu/output/esc_test.rb +0 -175
  142. data/test/lib/vedeu/output/foreground_test.rb +0 -67
  143. data/test/lib/vedeu/output/geometry_test.rb +0 -190
  144. data/test/lib/vedeu/output/layer_test.rb +0 -35
  145. data/test/lib/vedeu/output/menu_test.rb +0 -13
  146. data/test/lib/vedeu/output/position_test.rb +0 -48
  147. data/test/lib/vedeu/output/style_test.rb +0 -132
  148. data/test/lib/vedeu/repository/command_test.rb +0 -73
  149. data/test/lib/vedeu/repository/dummy_command_test.rb +0 -27
  150. data/test/lib/vedeu/repository/dummy_interface_test.rb +0 -7
  151. data/test/lib/vedeu/repository/interface_test.rb +0 -79
  152. data/test/lib/vedeu/support/json_parser_test.rb +0 -45
  153. data/test/support/composition.json +0 -47
  154. data/test/support/composition.rb +0 -5
  155. data/test/support/composition.xml +0 -36
  156. data/test/support/multi_interface.json +0 -34
  157. data/test/support/single_interface.json +0 -19
@@ -1,9 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Vedeu
4
- module Buffer
5
- describe Formatting do
6
- let(:described_class) { Formatting }
7
- end
8
- end
9
- end
@@ -1,38 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Vedeu
4
- module Buffer
5
- describe Interface do
6
- let(:described_class) { Interface }
7
- let(:described_instance) { described_class.new(attributes) }
8
- let(:subject) { described_instance }
9
- let(:attributes) { { name: 'dummy', line: [] } }
10
-
11
- it 'returns a Interface instance' do
12
- subject.must_be_instance_of(Interface)
13
- end
14
-
15
- it 'has a name attribute' do
16
- subject.name.must_be_instance_of(String)
17
-
18
- subject.name.must_equal('dummy')
19
- end
20
-
21
- it 'has a line attribute' do
22
- subject.line.must_be_instance_of(Array)
23
-
24
- subject.line.must_equal([])
25
- end
26
-
27
- describe '#to_compositor' do
28
- let(:subject) { described_instance.to_compositor }
29
-
30
- it 'returns an Array' do
31
- subject.must_be_instance_of(Array)
32
-
33
- subject.must_equal([])
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,64 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Vedeu
4
- module Buffer
5
- describe Line do
6
- let(:described_class) { Line }
7
- let(:described_instance) { described_class.new(attributes) }
8
- let(:subject) { described_instance }
9
- let(:attributes) {
10
- {
11
- style: 'normal',
12
- foreground: :red,
13
- background: :black,
14
- stream: []
15
- }
16
- }
17
-
18
- it 'returns a Line instance' do
19
- subject.must_be_instance_of(Line)
20
- end
21
-
22
- it 'has a style attribute' do
23
- subject.style.must_be_instance_of(Array)
24
-
25
- subject.style.must_equal([:normal])
26
- end
27
-
28
- it 'has a foreground attribute' do
29
- subject.foreground.must_be_instance_of(Symbol)
30
-
31
- subject.foreground.must_equal(:red)
32
- end
33
-
34
- it 'has a background attribute' do
35
- subject.background.must_be_instance_of(Symbol)
36
-
37
- subject.background.must_equal(:black)
38
- end
39
-
40
- it 'has a stream attribute' do
41
- subject.stream.must_be_instance_of(Array)
42
-
43
- subject.stream.must_equal([])
44
- end
45
-
46
- describe '#to_compositor' do
47
- let(:subject) { described_instance.to_compositor }
48
-
49
- it 'returns an Array' do
50
- subject.must_be_instance_of(Array)
51
-
52
- subject.must_equal(
53
- [
54
- {
55
- style: [:normal],
56
- colour: [:red, :black]
57
- }
58
- ]
59
- )
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,61 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Vedeu
4
- module Buffer
5
- describe Stream do
6
- let(:described_class) { Stream }
7
- let(:described_instance) { described_class.new(attributes) }
8
- let(:subject) { described_instance }
9
- let(:attributes) {
10
- {
11
- style: 'normal',
12
- foreground: :red,
13
- background: :black,
14
- text: 'Some text'
15
- }
16
- }
17
-
18
- it 'returns a Stream instance' do
19
- subject.must_be_instance_of(Stream)
20
- end
21
-
22
- it 'has a foreground attribute' do
23
- subject.foreground.must_be_instance_of(Symbol)
24
-
25
- subject.foreground.must_equal(:red)
26
- end
27
-
28
- it 'has a background attribute' do
29
- subject.background.must_be_instance_of(Symbol)
30
-
31
- subject.background.must_equal(:black)
32
- end
33
-
34
- it 'has a text attribute' do
35
- subject.text.must_be_instance_of(String)
36
-
37
- subject.text.must_equal('Some text')
38
- end
39
-
40
- it 'has a style attribute' do
41
- subject.style.must_be_instance_of(Array)
42
-
43
- subject.style.must_equal([:normal])
44
- end
45
-
46
- describe '#to_compositor' do
47
- let(:subject) { described_instance.to_compositor }
48
-
49
- it 'returns a Hash' do
50
- subject.must_be_instance_of(Hash)
51
-
52
- subject.must_equal({
53
- style: [:normal],
54
- colour: [:red, :black],
55
- text: "Some text"
56
- })
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,8 +0,0 @@
1
- require_relative '../../../../test_helper'
2
-
3
- module Vedeu
4
- module Buffer
5
- describe Style do
6
- end
7
- end
8
- end
@@ -1,104 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- module Vedeu
4
- describe Colour do
5
- let(:described_class) { Colour }
6
- let(:described_instance) { described_class.new }
7
- let(:subject) { described_instance }
8
- let(:pair) { [] }
9
-
10
- it 'returns a Colour instance' do
11
- subject.must_be_instance_of(Colour)
12
- end
13
-
14
- it 'sets an instance variable' do
15
- subject.instance_variable_get('@pair').must_equal([])
16
- end
17
-
18
- describe '.set' do
19
- let(:subject) { described_class.set(pair) }
20
-
21
- it 'returns a String' do
22
- subject.must_be_instance_of(String)
23
- end
24
-
25
- context 'when the foreground and background are specified as symbols' do
26
- context 'when both the foreground and background is specified' do
27
- let(:pair) { [:red, :yellow] }
28
-
29
- it 'returns the code for red on yellow' do
30
- subject.must_equal("\e[38;2;31m\e[48;2;43m")
31
- end
32
- end
33
-
34
- context 'when a foreground is specified' do
35
- let(:pair) { [:blue] }
36
-
37
- it 'returns the code for blue on default' do
38
- subject.must_equal("\e[38;2;34m\e[48;2;49m")
39
- end
40
- end
41
-
42
- context 'when a background is specified' do
43
- let(:pair) { [nil, :cyan] }
44
-
45
- it 'returns the code for default with cyan background' do
46
- subject.must_equal("\e[38;2;39m\e[48;2;46m")
47
- end
48
- end
49
-
50
- context 'when an invalid foreground/background is specified' do
51
- let(:pair) { [:melon, :raspberry] }
52
-
53
- it 'returns the default code' do
54
- subject.must_equal("\e[38;2;39m\e[48;2;49m")
55
- end
56
- end
57
-
58
- context 'when no foreground/background is specified' do
59
- let(:pair) { [] }
60
-
61
- it 'return an empty string' do
62
- subject.must_equal('')
63
- end
64
- end
65
- end
66
-
67
- context 'when the foreground and background are specified as strings' do
68
- let(:pair) { ['#ff0000', '#0000ff'] }
69
-
70
- it 'returns the default code' do
71
- subject.must_equal("\e[38;5;196m\e[48;5;21m")
72
- end
73
- end
74
- end
75
-
76
- describe '.reset' do
77
- let(:subject) { described_class.reset }
78
-
79
- it 'returns a String' do
80
- subject.must_be_instance_of(String)
81
- end
82
-
83
- it 'returns an escape sequence' do
84
- subject.must_equal("\e[38;2;39m\e[48;2;49m")
85
- end
86
- end
87
-
88
- describe '#foreground' do
89
- let(:subject) { described_instance.foreground }
90
-
91
- it 'returns a String' do
92
- subject.must_be_instance_of(String)
93
- end
94
- end
95
-
96
- describe '#background' do
97
- let(:subject) { described_instance.background }
98
-
99
- it 'returns a String' do
100
- subject.must_be_instance_of(String)
101
- end
102
- end
103
- end
104
- end
@@ -1,247 +0,0 @@
1
- require_relative '../../../test_helper'
2
-
3
- module Vedeu
4
- describe Compositor do
5
- let(:described_class) { Compositor }
6
- let(:described_instance) { described_class.new(attributes) }
7
- let(:subject) { described_instance }
8
- let(:attributes) { { interface: 'dummy', stream: stream } }
9
- let(:stream) { [[]] }
10
- let(:composition) {}
11
-
12
- before do
13
- InterfaceRepository.create({ name: 'dummy', width: 15, height: 2 })
14
- end
15
-
16
- after do
17
- InterfaceRepository.reset
18
- end
19
-
20
- it 'returns a Compositor instance' do
21
- subject.must_be_instance_of(Compositor)
22
- end
23
-
24
- it 'sets an instance variable' do
25
- subject.instance_variable_get('@attributes').must_equal(attributes)
26
- end
27
-
28
- it 'sets an instance variable' do
29
- subject.instance_variable_get('@interface').must_equal(attributes[:interface])
30
- end
31
-
32
- it 'sets an instance variable' do
33
- subject.instance_variable_get('@stream').must_equal(attributes[:stream])
34
- end
35
-
36
- describe '#arrange' do
37
- let(:subject) { described_class.new(attributes).arrange }
38
-
39
- context 'when empty' do
40
- let(:stream) { [[]] }
41
- let(:composition) {
42
- [
43
- [
44
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[38;2;39m\e[48;2;49m\e[?25h",
45
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
46
- ]
47
- ]
48
- }
49
-
50
- it 'returns the initial state of the interface' do
51
- subject.must_equal(composition)
52
- end
53
-
54
- it 'returns an Array' do
55
- subject.must_be_instance_of(Array)
56
- end
57
- end
58
-
59
- context 'when unstyled' do
60
- context 'and a single line' do
61
- let(:stream) { [[{ text: 'Some text...' }]] }
62
- let(:composition) {
63
- [
64
- [
65
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1HSome text...\e[38;2;39m\e[48;2;49m\e[?25h",
66
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
67
- ]
68
- ]
69
- }
70
-
71
- it 'returns the enqueued composition' do
72
- subject.must_equal(composition)
73
- end
74
- end
75
-
76
- context 'and multi-line' do
77
- let(:stream) {
78
- [
79
- [{ text: 'Some text...' }],
80
- [{ text: 'Some more text...' }]
81
- ]
82
- }
83
- let(:composition) {
84
- [
85
- [
86
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1HSome text...\e[38;2;39m\e[48;2;49m\e[?25h",
87
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1HSome more tex...\e[38;2;39m\e[48;2;49m\e[?25h"
88
- ]
89
- ]
90
- }
91
-
92
- it 'returns the enqueued composition' do
93
- subject.must_equal(composition)
94
- end
95
- end
96
-
97
- context 'but is a string containing new-lines' do
98
- let(:stream) { [[{ text: "Some text...\nSome more text..." }]] }
99
- let(:composition) {
100
- [
101
- [
102
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1HSome text...
103
- ...\e[38;2;39m\e[48;2;49m\e[?25h",
104
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
105
- ]
106
- ]
107
- }
108
-
109
- it 'returns the enqueued composition' do
110
- skip # The newline in the composition is not the desired behaviour. Wordwrap is the culprit.
111
- subject.must_equal(composition)
112
- end
113
- end
114
- end
115
-
116
- context 'when styled' do
117
- context 'with colour pair' do
118
- context 'and a single line' do
119
- let(:stream) {
120
- [
121
- [{ colour: [:red, :white], text: 'Some text...' }, { colour: :default }]
122
- ]
123
- }
124
- let(:composition) {
125
- [
126
- [
127
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[38;2;31m\e[48;2;47mSome text...\e[38;5;39m\e[48;5;49m\e[38;2;39m\e[48;2;49m\e[?25h",
128
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
129
- ]
130
- ]
131
- }
132
-
133
- it 'returns the enqueued composition' do
134
- subject.must_equal(composition)
135
- end
136
- end
137
-
138
- context 'and multi-line' do
139
- let(:stream) {
140
- [
141
- [{ colour: [:red, :white], text: 'Some text...' }],
142
- [{ colour: [:blue, :yellow], text: 'Some more text...' }]
143
- ]
144
- }
145
- let(:composition) {
146
- [
147
- [
148
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[38;2;31m\e[48;2;47mSome text...\e[38;2;39m\e[48;2;49m\e[?25h",
149
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;34m\e[48;2;43mSome more tex...\e[38;2;39m\e[48;2;49m\e[?25h"
150
- ]
151
- ]
152
- }
153
-
154
- it 'returns the enqueued composition' do
155
- subject.must_equal(composition)
156
- end
157
- end
158
- end
159
-
160
- context 'with a style' do
161
- context 'and a single line' do
162
- let(:stream) {
163
- [
164
- [{ style: :bold, text: 'Some text...' }, { style: :bold_off }]
165
- ]
166
- }
167
- let(:composition) {
168
- [
169
- [
170
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[1mSome text...\e[21m\e[38;2;39m\e[48;2;49m\e[?25h",
171
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
172
- ]
173
- ]
174
- }
175
-
176
- it 'returns the enqueued composition' do
177
- subject.must_equal(composition)
178
- end
179
- end
180
-
181
- context 'and multi-line' do
182
- let(:stream) {
183
- [
184
- [{ style: :negative, text: 'Some text...' }],
185
- [{ style: :underline, text: 'Some more text...' }]
186
- ]
187
- }
188
- let(:composition) {
189
- [
190
- [
191
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[7mSome text...\e[38;2;39m\e[48;2;49m\e[?25h",
192
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[4mSome more tex...\e[38;2;39m\e[48;2;49m\e[?25h"
193
- ]
194
- ]
195
- }
196
-
197
- it 'returns the enqueued composition' do
198
- subject.must_equal(composition)
199
- end
200
- end
201
- end
202
-
203
- context 'with an unknown style' do
204
- let(:stream) {
205
- [
206
- [{ style: :unknown, text: 'Some text...' }]
207
- ]
208
- }
209
- let(:composition) {
210
- [
211
- [
212
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1HSome text...\e[38;2;39m\e[48;2;49m\e[?25h",
213
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
214
- ]
215
- ]
216
- }
217
-
218
- it 'returns the enqueued composition' do
219
- subject.must_equal(composition)
220
- end
221
- end
222
-
223
- context 'with a complicated stream' do
224
- let(:stream) {
225
- [
226
- [{:style=>[:normal], :colour=>[:red, :black]}, {:style=>[:underline, :negative], :colour=>[:yellow, :black], :text=>"Some text..."}, {:style=>[:normal], :colour=>[:green, :black], :text=>"Some more text..."}],
227
- [{:style=>[], :colour=>[]}, {:style=>[], :colour=>[], :text=>"Even more text..."}]
228
- ]
229
- }
230
-
231
- let(:composition) {
232
- [
233
- [
234
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[38;2;31m\e[48;2;40m\e[24m\e[21m\e[27m\e[38;2;33m\e[48;2;40m\e[4m\e[7mSome text...\e[38;2;32m\e[48;2;40m\e[24m\e[21m\e[27mSome more tex...\e[38;2;39m\e[48;2;49m\e[?25h",
235
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1HEven more tex...\e[38;2;39m\e[48;2;49m\e[?25h"
236
- ]
237
- ]
238
- }
239
-
240
- it 'returns the enqueued composition' do
241
- subject.must_equal(composition)
242
- end
243
- end
244
- end
245
- end
246
- end
247
- end