vedeu 0.0.32 → 0.0.33

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/application.rb +2 -0
  3. data/lib/vedeu/launcher.rb +1 -1
  4. data/lib/vedeu/models/colour.rb +7 -7
  5. data/lib/vedeu/models/command.rb +2 -0
  6. data/lib/vedeu/models/composition.rb +2 -2
  7. data/lib/vedeu/models/interface.rb +15 -6
  8. data/lib/vedeu/models/line.rb +5 -3
  9. data/lib/vedeu/models/presentation.rb +3 -3
  10. data/lib/vedeu/models/stream.rb +6 -3
  11. data/lib/vedeu/models/style.rb +31 -0
  12. data/lib/vedeu/output/interface_renderer.rb +1 -3
  13. data/lib/vedeu/support/coordinate.rb +21 -7
  14. data/lib/vedeu/support/parsing/json_parser.rb +3 -3
  15. data/test/lib/vedeu/application_test.rb +0 -11
  16. data/test/lib/vedeu/launcher_test.rb +0 -8
  17. data/test/lib/vedeu/models/collection_test.rb +3 -3
  18. data/test/lib/vedeu/models/colour_test.rb +7 -2
  19. data/test/lib/vedeu/models/command_test.rb +0 -6
  20. data/test/lib/vedeu/models/composition_test.rb +127 -37
  21. data/test/lib/vedeu/models/interface_collection_test.rb +8 -9
  22. data/test/lib/vedeu/models/interface_test.rb +64 -18
  23. data/test/lib/vedeu/models/line_test.rb +3 -7
  24. data/test/lib/vedeu/models/presentation_test.rb +7 -5
  25. data/test/lib/vedeu/models/stream_test.rb +21 -11
  26. data/test/lib/vedeu/models/style_test.rb +86 -0
  27. data/test/lib/vedeu/output/interface_renderer_test.rb +32 -5
  28. data/test/lib/vedeu/output/output_test.rb +8 -1
  29. data/test/lib/vedeu/repository/command_repository_test.rb +14 -10
  30. data/test/lib/vedeu/repository/interface_repository_test.rb +9 -9
  31. data/test/lib/vedeu/support/coordinate_test.rb +72 -19
  32. data/test/lib/vedeu/support/menu_test.rb +16 -16
  33. data/test/lib/vedeu/support/parsing/hash_parser_test.rb +7 -7
  34. data/test/lib/vedeu/support/parsing/json_parser_test.rb +1 -1
  35. data/test/lib/vedeu/support/terminal_test.rb +0 -7
  36. data/test/lib/vedeu_test.rb +0 -5
  37. data/test/test_helper.rb +1 -0
  38. data/vedeu.gemspec +2 -3
  39. metadata +7 -25
  40. data/lib/vedeu/models/style_collection.rb +0 -19
  41. data/lib/vedeu/support/geometry.rb +0 -62
  42. data/test/lib/vedeu/models/style_collection_test.rb +0 -13
  43. data/test/lib/vedeu/support/geometry_test.rb +0 -107
@@ -36,11 +36,5 @@ module Vedeu
36
36
  }).execute(:dummy).must_equal(:dummy)
37
37
  end
38
38
  end
39
-
40
- describe '#executable' do
41
- it 'needs a spec, please write one.' do
42
- skip
43
- end
44
- end
45
39
  end
46
40
  end
@@ -9,8 +9,8 @@ module Vedeu
9
9
  Composition.new({
10
10
  interfaces: {
11
11
  name: 'dummy',
12
- width: 40,
13
- height: 25
12
+ width: 5,
13
+ height: 5
14
14
  }
15
15
  }).interfaces.first.must_be_instance_of(Interface)
16
16
  end
@@ -24,8 +24,8 @@ module Vedeu
24
24
  it 'returns a collection of interfaces' do
25
25
  Composition.enqueue({
26
26
  interfaces: [
27
- { name: 'enq1', lines: { streams: { text: 'Composition.enqueue 1' } } },
28
- { name: 'enq2', lines: { streams: { text: 'Composition.enqueue 2' } } }
27
+ { name: 'enq1', width: 5, height: 5, lines: { streams: { text: 'Composition.enqueue 1' } } },
28
+ { name: 'enq2', width: 5, height: 5, lines: { streams: { text: 'Composition.enqueue 2' } } }
29
29
  ]
30
30
  }).interfaces.first.must_be_instance_of(Interface)
31
31
  end
@@ -33,8 +33,8 @@ module Vedeu
33
33
  it 'enqueues the interfaces for rendering' do
34
34
  Composition.enqueue({
35
35
  interfaces: [
36
- { name: 'enq1', lines: { streams: { text: 'Composition.enqueue 3' } } },
37
- { name: 'enq2', lines: { streams: { text: 'Composition.enqueue 4' } } }
36
+ { name: 'enq1', width: 5, height: 5, lines: { streams: { text: 'Composition.enqueue 3' } } },
37
+ { name: 'enq2', width: 5, height: 5, lines: { streams: { text: 'Composition.enqueue 4' } } }
38
38
  ]
39
39
  }).interfaces.first.enqueued?.must_equal(true)
40
40
  end
@@ -42,9 +42,21 @@ module Vedeu
42
42
 
43
43
  describe '#to_json' do
44
44
  it 'returns the model as JSON' do
45
- attributes = { interfaces: [{ name: 'Composition#to_json', width: 40, height: 25 }] }
45
+ attributes = {
46
+ interfaces: [
47
+ {
48
+ name: 'Composition#to_json',
49
+ width: 5,
50
+ height: 5,
51
+ colour: {
52
+ foreground: '#ffff33',
53
+ background: '#ffff77'
54
+ }
55
+ }
56
+ ]
57
+ }
46
58
 
47
- Composition.new(attributes).to_json.must_equal("{\"interfaces\":[{\"colour\":null,\"style\":\"\",\"name\":\"Composition#to_json\",\"lines\":[],\"y\":1,\"x\":1,\"z\":1,\"width\":40,\"height\":25,\"current\":\"\",\"cursor\":true}]}")
59
+ Composition.new(attributes).to_json.must_equal("{\"interfaces\":[{\"colour\":{\"foreground\":\"\#ffff33\",\"background\":\"\#ffff77\"},\"style\":\"\",\"name\":\"Composition#to_json\",\"lines\":[],\"y\":1,\"x\":1,\"z\":1,\"width\":5,\"height\":5,\"cursor\":true}]}")
48
60
  end
49
61
  end
50
62
 
@@ -52,86 +64,164 @@ module Vedeu
52
64
  it 'returns the stringified content for a single interface, single line, single stream' do
53
65
  InterfaceRepository.create({ name: 'int1_lin1_str1', y: 3, x: 3, width: 10, height: 3 })
54
66
  json = File.read('test/support/json/int1_lin1_str1.json')
55
- attributes = Oj.load(json, symbol_keys: true)
56
-
57
- Composition.new(attributes).to_s.must_equal("\e[3;3H \e[3;3H\e[4;3H \e[4;3H\e[5;3H \e[5;3H\e[3;3HSome text...")
67
+ attributes = JSON.load(json, nil, symbolize_names: true)
68
+
69
+ Composition.new(attributes).to_s.must_equal(
70
+ "\e[3;3H \e[3;3H" \
71
+ "\e[4;3H \e[4;3H" \
72
+ "\e[5;3H \e[5;3H" \
73
+ "\e[3;3HSome text..."
74
+ )
58
75
  end
59
76
 
60
77
  it 'returns the stringified content for a single interface, single line, multiple streams' do
61
78
  InterfaceRepository.create({ name: 'int1_lin1_str3', y: 3, x: 3, width: 10, height: 3 })
62
79
  json = File.read('test/support/json/int1_lin1_str3.json')
63
- attributes = Oj.load(json, symbol_keys: true)
64
-
65
- Composition.new(attributes).to_s.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...")
80
+ attributes = JSON.load(json, nil, symbolize_names: true)
81
+
82
+ Composition.new(attributes).to_s.must_equal(
83
+ "\e[3;3H \e[3;3H" \
84
+ "\e[4;3H \e[4;3H" \
85
+ "\e[5;3H \e[5;3H" \
86
+ "\e[3;3HSome text... more text..."
87
+ )
66
88
  end
67
89
 
68
90
  it 'returns the stringified content for a single interface, multiple lines, single stream' do
69
91
  InterfaceRepository.create({ name: 'int1_lin2_str1', y: 3, x: 3, width: 10, height: 3 })
70
92
  json = File.read('test/support/json/int1_lin2_str1.json')
71
- attributes = Oj.load(json, symbol_keys: true)
72
-
73
- Composition.new(attributes).to_s.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...")
93
+ attributes = JSON.load(json, nil, symbolize_names: true)
94
+
95
+ Composition.new(attributes).to_s.must_equal(
96
+ "\e[3;3H \e[3;3H" \
97
+ "\e[4;3H \e[4;3H" \
98
+ "\e[5;3H \e[5;3H" \
99
+ "\e[3;3HSome text..." \
100
+ "\e[4;3HSome text..."
101
+ )
74
102
  end
75
103
 
76
104
  it 'returns the stringified content for a single interface, multiple lines, multiple streams' do
77
105
  InterfaceRepository.create({ name: 'int1_lin2_str3', y: 3, x: 3, width: 10, height: 3 })
78
106
  json = File.read('test/support/json/int1_lin2_str3.json')
79
- attributes = Oj.load(json, symbol_keys: true)
80
-
81
- Composition.new(attributes).to_s.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...")
107
+ attributes = JSON.load(json, nil, symbolize_names: true)
108
+
109
+ Composition.new(attributes).to_s.must_equal(
110
+ "\e[3;3H \e[3;3H" \
111
+ "\e[4;3H \e[4;3H" \
112
+ "\e[5;3H \e[5;3H" \
113
+ "\e[3;3HSome text... more text..." \
114
+ "\e[4;3HSome text... more text..."
115
+ )
82
116
  end
83
117
 
84
118
  it 'returns the stringified content for a single interface, multiple lines, multiple streams, streams contain styles' do
85
119
  json = File.read('test/support/json/int1_lin2_str3_styles.json')
86
- attributes = Oj.load(json, symbol_keys: true)
120
+ attributes = JSON.load(json, nil, symbolize_names: true)
87
121
  InterfaceRepository.create({ name: 'int1_lin2_str3_styles', y: 3, x: 3, width: 10, height: 3 })
88
122
 
89
- Composition.new(attributes).to_s.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...")
123
+ Composition.new(attributes).to_s.must_equal(
124
+ "\e[3;3H \e[3;3H" \
125
+ "\e[4;3H \e[4;3H" \
126
+ "\e[5;3H \e[5;3H" \
127
+ "\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..."
128
+ )
90
129
  end
91
130
 
92
131
  it 'returns the stringified content for multiple interfaces, single line, single stream' do
93
132
  InterfaceRepository.create({ name: 'int2_lin1_str1_1', y: 3, x: 3, width: 10, height: 3 })
94
133
  InterfaceRepository.create({ name: 'int2_lin1_str1_2', y: 6, x: 6, width: 10, height: 3 })
95
134
  json = File.read('test/support/json/int2_lin1_str1.json')
96
- attributes = Oj.load(json, symbol_keys: true)
97
-
98
- Composition.new(attributes).to_s.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...")
135
+ attributes = JSON.load(json, nil, symbolize_names: true)
136
+
137
+ Composition.new(attributes).to_s.must_equal(
138
+ "\e[3;3H \e[3;3H" \
139
+ "\e[4;3H \e[4;3H" \
140
+ "\e[5;3H \e[5;3H" \
141
+ "\e[3;3HSome text..." \
142
+ "\e[6;6H \e[6;6H" \
143
+ "\e[7;6H \e[7;6H" \
144
+ "\e[8;6H \e[8;6H" \
145
+ "\e[6;6HSome text..."
146
+ )
99
147
  end
100
148
 
101
149
  it 'returns the stringified content for multiple interfaces, single line, multiple streams' do
102
150
  InterfaceRepository.create({ name: 'int2_lin1_str3_1', y: 3, x: 3, width: 10, height: 3 })
103
151
  InterfaceRepository.create({ name: 'int2_lin1_str3_2', y: 6, x: 6, width: 10, height: 3 })
104
152
  json = File.read('test/support/json/int2_lin1_str3.json')
105
- attributes = Oj.load(json, symbol_keys: true)
106
-
107
- Composition.new(attributes).to_s.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...")
153
+ attributes = JSON.load(json, nil, symbolize_names: true)
154
+
155
+ Composition.new(attributes).to_s.must_equal(
156
+ "\e[3;3H \e[3;3H" \
157
+ "\e[4;3H \e[4;3H" \
158
+ "\e[5;3H \e[5;3H" \
159
+ "\e[3;3HSome text... more text..." \
160
+ "\e[6;6H \e[6;6H" \
161
+ "\e[7;6H \e[7;6H" \
162
+ "\e[8;6H \e[8;6H" \
163
+ "\e[6;6HSome text... more text..."
164
+ )
108
165
  end
109
166
 
110
167
  it 'returns the stringified content for multiple interfaces, multiple lines, single stream' do
111
168
  InterfaceRepository.create({ name: 'int2_lin2_str1_1', y: 3, x: 3, width: 10, height: 3 })
112
169
  InterfaceRepository.create({ name: 'int2_lin2_str1_2', y: 6, x: 6, width: 10, height: 3 })
113
170
  json = File.read('test/support/json/int2_lin2_str1.json')
114
- attributes = Oj.load(json, symbol_keys: true)
115
-
116
- Composition.new(attributes).to_s.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...")
171
+ attributes = JSON.load(json, nil, symbolize_names: true)
172
+
173
+ Composition.new(attributes).to_s.must_equal(
174
+ "\e[3;3H \e[3;3H" \
175
+ "\e[4;3H \e[4;3H" \
176
+ "\e[5;3H \e[5;3H" \
177
+ "\e[3;3HSome text..." \
178
+ "\e[4;3HSome text..." \
179
+ "\e[3;3H \e[3;3H" \
180
+ "\e[4;3H \e[4;3H" \
181
+ "\e[5;3H \e[5;3H" \
182
+ "\e[3;3HSome text..." \
183
+ "\e[4;3HSome text..."
184
+ )
117
185
  end
118
186
 
119
187
  it 'returns the stringified content for multiple interfaces, multiple lines, multiple streams' do
120
188
  InterfaceRepository.create({ name: 'int2_lin2_str3_1', y: 3, x: 3, width: 10, height: 3 })
121
189
  InterfaceRepository.create({ name: 'int2_lin2_str3_2', y: 6, x: 6, width: 10, height: 3 })
122
190
  json = File.read('test/support/json/int2_lin2_str3.json')
123
- attributes = Oj.load(json, symbol_keys: true)
124
-
125
- Composition.new(attributes).to_s.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...")
191
+ attributes = JSON.load(json, nil, symbolize_names: true)
192
+
193
+ Composition.new(attributes).to_s.must_equal(
194
+ "\e[3;3H \e[3;3H" \
195
+ "\e[4;3H \e[4;3H" \
196
+ "\e[5;3H \e[5;3H" \
197
+ "\e[3;3HSome text... more text..." \
198
+ "\e[4;3HSome text... more text..." \
199
+ "\e[6;6H \e[6;6H" \
200
+ "\e[7;6H \e[7;6H" \
201
+ "\e[8;6H \e[8;6H" \
202
+ "\e[6;6HSome text... more text..." \
203
+ "\e[7;6HSome text... more text..."
204
+ )
126
205
  end
127
206
 
128
207
  it 'returns the stringified content for multiple interfaces, multiple lines, multiple streams, streams contain styles' do
129
208
  InterfaceRepository.create({ name: 'int2_lin2_str3_styles_1', y: 3, x: 3, width: 10, height: 3 })
130
209
  InterfaceRepository.create({ name: 'int2_lin2_str3_styles_2', y: 6, x: 6, width: 10, height: 3 })
131
210
  json = File.read('test/support/json/int2_lin2_str3_styles.json')
132
- attributes = Oj.load(json, symbol_keys: true)
133
-
134
- Composition.new(attributes).to_s.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...")
211
+ attributes = JSON.load(json, nil, symbolize_names: true)
212
+
213
+ Composition.new(attributes).to_s.must_equal(
214
+ "\e[3;3H \e[3;3H" \
215
+ "\e[4;3H \e[4;3H" \
216
+ "\e[5;3H \e[5;3H" \
217
+ "\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..." \
218
+ "\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..." \
219
+ "\e[6;6H \e[6;6H" \
220
+ "\e[7;6H \e[7;6H" \
221
+ "\e[8;6H \e[8;6H" \
222
+ "\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..." \
223
+ "\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..."
224
+ )
135
225
  end
136
226
  end
137
227
  end
@@ -5,25 +5,24 @@ require_relative '../../../../lib/vedeu/models/composition'
5
5
  module Vedeu
6
6
  describe InterfaceCollection do
7
7
  describe '#coerce' do
8
- it 'returns a Array' do
9
- Composition.new.interfaces.must_be_instance_of(Array)
10
- end
8
+ before { InterfaceRepository.reset }
11
9
 
12
10
  it 'returns an empty collection when there are no interfaces' do
13
- Composition.new.interfaces.must_equal([])
11
+ composition = Composition.new
12
+ composition.interfaces.must_equal([])
14
13
  end
15
14
 
16
15
  it 'returns a collection when there is a single interface' do
17
- skip
18
- Composition.new({ name: 'dummy' }).interfaces.first
19
- .must_be_instance_of(Interface)
16
+ composition = Composition.new({ interfaces: { name: 'InterfaceCollection#coerce' } })
17
+ composition.interfaces.first.must_be_instance_of(Interface)
20
18
  end
21
19
 
22
20
  it 'returns a collection when there are multiple interfaces' do
23
- Composition.new({ interfaces: [
21
+ composition = Composition.new({ interfaces: [
24
22
  { name: 'dumb' },
25
23
  { name: 'dumber' }
26
- ]}).interfaces.size.must_equal(2)
24
+ ]})
25
+ composition.interfaces.size.must_equal(2)
27
26
  end
28
27
  end
29
28
  end
@@ -21,12 +21,12 @@ module Vedeu
21
21
  end
22
22
 
23
23
  it 'has a y attribute' do
24
- Interface.new({ y: 17 }).y.must_equal(17)
24
+ Interface.new({ y: 3 }).y.must_equal(3)
25
25
  Interface.new.y.must_equal(1)
26
26
  end
27
27
 
28
28
  it 'has an x attribute' do
29
- Interface.new({ x: 33 }).x.must_equal(33)
29
+ Interface.new({ x: 5 }).x.must_equal(5)
30
30
  Interface.new.x.must_equal(1)
31
31
  end
32
32
 
@@ -36,11 +36,11 @@ module Vedeu
36
36
  end
37
37
 
38
38
  it 'has a width attribute' do
39
- Interface.new({ width: 50 }).width.must_equal(50)
39
+ Interface.new({ width: 10 }).width.must_equal(10)
40
40
  end
41
41
 
42
42
  it 'has a height attribute' do
43
- Interface.new({ height: 20 }).height.must_equal(20)
43
+ Interface.new({ height: 15 }).height.must_equal(15)
44
44
  end
45
45
 
46
46
  it 'has a current attribute' do
@@ -48,15 +48,31 @@ module Vedeu
48
48
  end
49
49
 
50
50
  it 'has a cursor attribute' do
51
- Interface.new({ cursor: true }).cursor.must_be :==, true
52
- Interface.new({ cursor: false }).cursor.must_be :==, false
53
- Interface.new.cursor.must_be :==, true
51
+ Interface.new({ cursor: true }).cursor.must_equal(true)
52
+ Interface.new({ cursor: false }).cursor.must_equal(false)
53
+ Interface.new.cursor.must_equal(true)
54
+ end
55
+
56
+ it 'has a centred attribute' do
57
+ Interface.new.centred.must_equal(false)
58
+ Interface.new({ centred: true }).centred.must_equal(true)
59
+ end
60
+
61
+ describe '#origin' do
62
+ it 'delegates to the Coordinate class to get the origin' do
63
+ interface = Interface.new({
64
+ name: '#origin',
65
+ width: 5,
66
+ height: 5
67
+ })
68
+ interface.origin.must_equal("\e[1;1H")
69
+ end
54
70
  end
55
71
 
56
72
  describe '#refresh' do
57
73
  let(:attributes) {
58
74
  {
59
- name: 'dummy',
75
+ name: '#refresh',
60
76
  lines: [],
61
77
  colour: {
62
78
  foreground: '#ff0000',
@@ -68,25 +84,50 @@ module Vedeu
68
84
  }
69
85
 
70
86
  it 'returns a blank interface when there is no content to display (initial state)' do
71
- Interface.new(attributes).refresh.must_equal("\e[38;5;196m\e[48;5;16m\e[1;1H \e[1;1H\e[2;1H \e[2;1H\e[3;1H \e[3;1H")
87
+ Interface.new(attributes).refresh.must_equal(
88
+ "\e[38;5;196m\e[48;5;16m" \
89
+ "\e[1;1H \e[1;1H" \
90
+ "\e[2;1H \e[2;1H" \
91
+ "\e[3;1H \e[3;1H"
92
+ )
72
93
  end
73
94
 
74
95
  it 'returns the fresh content when content is queued up to be displayed' do
75
- @interface = Interface.new(attributes).enqueue("\e[38;5;196m\e[48;5;16m\e[1;1HContent\e[1;1H\e[2;1HContent\e[2;1H\e[3;1HContent\e[3;1H")
76
- @interface.refresh.must_equal("\e[38;5;196m\e[48;5;16m\e[1;1HContent\e[1;1H\e[2;1HContent\e[2;1H\e[3;1HContent\e[3;1H")
96
+ interface = Interface.new(attributes).enqueue(
97
+ "\e[38;5;196m\e[48;5;16m" \
98
+ "\e[1;1HContent\e[1;1H" \
99
+ "\e[2;1HContent\e[2;1H" \
100
+ "\e[3;1HContent\e[3;1H"
101
+ )
102
+
103
+ interface.refresh.must_equal(
104
+ "\e[38;5;196m\e[48;5;16m" \
105
+ "\e[1;1HContent\e[1;1H" \
106
+ "\e[2;1HContent\e[2;1H" \
107
+ "\e[3;1HContent\e[3;1H"
108
+ )
77
109
  end
78
110
 
79
111
  it 'returns the previously shown content when there is stale content from last run' do
80
- @interface = Interface.new(attributes)
81
- @interface.current = "\e[38;5;196m\e[48;5;16m\e[1;1HOld\e[1;1H\e[2;1HContent\e[2;1H\e[3;1Here\e[3;1H"
82
- @interface.refresh.must_equal("\e[38;5;196m\e[48;5;16m\e[1;1HOld\e[1;1H\e[2;1HContent\e[2;1H\e[3;1Here\e[3;1H")
112
+ interface = Interface.new(attributes)
113
+ interface.current = "\e[38;5;196m\e[48;5;16m" \
114
+ "\e[1;1HOld\e[1;1H" \
115
+ "\e[2;1HContent\e[2;1H" \
116
+ "\e[3;1Here\e[3;1H"
117
+
118
+ interface.refresh.must_equal(
119
+ "\e[38;5;196m\e[48;5;16m" \
120
+ "\e[1;1HOld\e[1;1H" \
121
+ "\e[2;1HContent\e[2;1H" \
122
+ "\e[3;1Here\e[3;1H"
123
+ )
83
124
  end
84
125
  end
85
126
 
86
127
  describe '#to_s' do
87
128
  it 'returns an String' do
88
129
  Interface.new({
89
- name: 'dummy',
130
+ name: '#to_s',
90
131
  lines: [],
91
132
  colour: {
92
133
  foreground: '#ff0000',
@@ -94,14 +135,19 @@ module Vedeu
94
135
  },
95
136
  width: 3,
96
137
  height: 3
97
- }).to_s.must_equal("\e[38;5;196m\e[48;5;16m\e[1;1H \e[1;1H\e[2;1H \e[2;1H\e[3;1H \e[3;1H")
138
+ }).to_s.must_equal(
139
+ "\e[38;5;196m\e[48;5;16m" \
140
+ "\e[1;1H \e[1;1H" \
141
+ "\e[2;1H \e[2;1H" \
142
+ "\e[3;1H \e[3;1H"
143
+ )
98
144
  end
99
145
  end
100
146
 
101
147
  describe '#to_json' do
102
148
  it 'returns an String' do
103
149
  Interface.new({
104
- name: 'dummy',
150
+ name: '#to_json',
105
151
  lines: [],
106
152
  colour: {
107
153
  foreground: '#ff0000',
@@ -109,7 +155,7 @@ module Vedeu
109
155
  },
110
156
  width: 3,
111
157
  height: 3
112
- }).to_json.must_equal("{\"colour\":{\"foreground\":\"\\u001b[38;5;196m\",\"background\":\"\\u001b[48;5;16m\"},\"style\":\"\",\"name\":\"dummy\",\"lines\":[],\"y\":1,\"x\":1,\"z\":1,\"width\":3,\"height\":3,\"cursor\":true}")
158
+ }).to_json.must_equal("{\"colour\":{\"foreground\":\"#ff0000\",\"background\":\"#000000\"},\"style\":\"\",\"name\":\"#to_json\",\"lines\":[],\"y\":1,\"x\":1,\"z\":1,\"width\":3,\"height\":3,\"cursor\":true}")
113
159
  end
114
160
  end
115
161
  end
@@ -3,10 +3,6 @@ require_relative '../../../../lib/vedeu/models/line'
3
3
 
4
4
  module Vedeu
5
5
  describe Line do
6
- it 'has a style attribute' do
7
- Line.new(style: 'normal').style.must_be_instance_of(String)
8
- end
9
-
10
6
  it 'has a colour attribute' do
11
7
  Line.new({
12
8
  colour: { foreground: '#ff0000', background: '#000000' }
@@ -24,18 +20,18 @@ module Vedeu
24
20
  describe '#to_json' do
25
21
  it 'returns an String' do
26
22
  Line.new({
27
- style: 'normal',
28
23
  colour: { foreground: '#ff0000', background: '#000000' },
24
+ style: 'normal',
29
25
  streams: [],
30
- }).to_json.must_equal("{\"colour\":{\"foreground\":\"\\u001b[38;5;196m\",\"background\":\"\\u001b[48;5;16m\"},\"style\":\"\\u001b[24m\\u001b[21m\\u001b[27m\",\"streams\":[]}")
26
+ }).to_json.must_equal("{\"colour\":{\"foreground\":\"#ff0000\",\"background\":\"#000000\"},\"style\":[\"normal\"],\"streams\":[]}")
31
27
  end
32
28
  end
33
29
 
34
30
  describe '#to_s' do
35
31
  it 'returns an String' do
36
32
  Line.new({
37
- style: 'normal',
38
33
  colour: { foreground: '#ff0000', background: '#000000' },
34
+ style: 'normal',
39
35
  }).to_s.must_equal("\e[38;5;196m\e[48;5;16m\e[24m\e[21m\e[27m")
40
36
  end
41
37
  end