vedeu 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vedeu.rb +4 -0
- data/lib/vedeu/output/compositor.rb +18 -23
- data/lib/vedeu/output/esc.rb +19 -2
- data/lib/vedeu/output/output.rb +1 -1
- data/lib/vedeu/output/style.rb +6 -0
- data/lib/vedeu/repository/command.rb +2 -0
- data/lib/vedeu/repository/interface.rb +7 -3
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/output/compositor_test.rb +128 -90
- data/test/lib/vedeu/output/esc_test.rb +48 -0
- data/test/lib/vedeu/output/output_test.rb +1 -5
- data/test/lib/vedeu/output/style_test.rb +40 -0
- data/test/lib/vedeu/repository/interface_repository_test.rb +4 -4
- data/test/lib/vedeu/repository/interface_test.rb +6 -5
- data/test/lib/vedeu/support/queue_test.rb +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66de5c561798d7f28dc0aa984dd6e3017bf724ca
|
4
|
+
data.tar.gz: 5b1c164ab6fb207d0443b7d309563654c99132e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 018e9a0652410c0f0fb70e35ee06ba1d4a76557270fd3407a95b90bb4635658d7c739fe62a09950f4b955297b0eb804dc70a60619c8a2772885774925613e892
|
7
|
+
data.tar.gz: 601298baf82a2205887b9e78dcb997270ca502697768c96d7b975cbc607ac703984c0323949156fecf048678a0a24d8df3a9a940de83f098048c861a5f2e9a35
|
data/lib/vedeu.rb
CHANGED
@@ -40,6 +40,7 @@ require_relative 'vedeu/launcher'
|
|
40
40
|
require_relative 'vedeu/version'
|
41
41
|
|
42
42
|
module Vedeu
|
43
|
+
# :nocov:
|
43
44
|
def self.logger
|
44
45
|
@logger ||= Logger.new(root_path + '/logs/vedeu.log').tap do |log|
|
45
46
|
log.formatter = proc do |_, time, _, msg|
|
@@ -47,10 +48,13 @@ module Vedeu
|
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
51
|
+
# :nocov:
|
50
52
|
|
51
53
|
private
|
52
54
|
|
55
|
+
# :nocov:
|
53
56
|
def self.root_path
|
54
57
|
File.expand_path('../..', __FILE__)
|
55
58
|
end
|
59
|
+
# :nocov:
|
56
60
|
end
|
@@ -3,20 +3,17 @@ module Vedeu
|
|
3
3
|
|
4
4
|
class Compositor
|
5
5
|
class << self
|
6
|
-
def arrange(output =
|
7
|
-
|
8
|
-
|
9
|
-
if output.is_a?(Array)
|
10
|
-
new(output, interface).arrange
|
11
|
-
elsif output.is_a?(Hash)
|
12
|
-
output.map { |i, o| new(o, i).arrange }
|
6
|
+
def arrange(output = {})
|
7
|
+
output.map do |interface, stream|
|
8
|
+
new({ interface: interface, stream: stream }).arrange
|
13
9
|
end
|
14
10
|
end
|
15
11
|
end
|
16
12
|
|
17
|
-
def initialize(
|
18
|
-
@
|
19
|
-
@interface
|
13
|
+
def initialize(attributes = {})
|
14
|
+
@attributes = attributes || {}
|
15
|
+
@interface = attributes[:interface]
|
16
|
+
@stream = attributes[:stream]
|
20
17
|
end
|
21
18
|
|
22
19
|
def arrange
|
@@ -25,21 +22,24 @@ module Vedeu
|
|
25
22
|
|
26
23
|
private
|
27
24
|
|
25
|
+
attr_reader :attributes, :stream
|
26
|
+
|
28
27
|
def composition
|
29
28
|
container = []
|
30
29
|
streams = []
|
31
30
|
|
32
31
|
container << colour.set
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
33
|
+
if stream.size < height
|
34
|
+
remaining = height - stream.size
|
35
|
+
remaining.times { |i| stream << [''] }
|
36
|
+
end
|
39
37
|
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
stream.each_with_index do |lines, index|
|
39
|
+
streams << clear(index)
|
40
|
+
|
41
|
+
lines.each do |data|
|
42
|
+
streams << Directive.enact(interface, data)
|
43
43
|
end
|
44
44
|
|
45
45
|
container << streams.join
|
@@ -80,11 +80,6 @@ module Vedeu
|
|
80
80
|
interface.cursor
|
81
81
|
end
|
82
82
|
|
83
|
-
def output
|
84
|
-
return @output.split if @output.is_a?(String)
|
85
|
-
@output
|
86
|
-
end
|
87
|
-
|
88
83
|
def interface
|
89
84
|
@_interface ||= InterfaceRepository.find_by_name(@interface)
|
90
85
|
end
|
data/lib/vedeu/output/esc.rb
CHANGED
@@ -6,11 +6,19 @@ module Vedeu
|
|
6
6
|
[esc, '5m'].join
|
7
7
|
end
|
8
8
|
|
9
|
+
def blink_off
|
10
|
+
[esc, '25m'].join
|
11
|
+
end
|
12
|
+
|
9
13
|
def bold
|
10
14
|
[esc, '1m'].join
|
11
15
|
end
|
12
16
|
alias_method :bright, :bold
|
13
17
|
|
18
|
+
def bold_off
|
19
|
+
[esc, '21m'].join
|
20
|
+
end
|
21
|
+
|
14
22
|
def clear
|
15
23
|
[esc, '2J'].join
|
16
24
|
end
|
@@ -23,10 +31,15 @@ module Vedeu
|
|
23
31
|
[27.chr, '['].join
|
24
32
|
end
|
25
33
|
|
26
|
-
def
|
34
|
+
def negative
|
27
35
|
[esc, '7m'].join
|
28
36
|
end
|
29
|
-
alias_method :reverse, :
|
37
|
+
alias_method :reverse, :negative
|
38
|
+
alias_method :inverse, :negative
|
39
|
+
|
40
|
+
def positive
|
41
|
+
[esc, '27m'].join
|
42
|
+
end
|
30
43
|
|
31
44
|
def normal
|
32
45
|
[esc, '2m'].join
|
@@ -40,5 +53,9 @@ module Vedeu
|
|
40
53
|
def underline
|
41
54
|
[esc, '4m'].join
|
42
55
|
end
|
56
|
+
|
57
|
+
def underline_off
|
58
|
+
[esc, '24m'].join
|
59
|
+
end
|
43
60
|
end
|
44
61
|
end
|
data/lib/vedeu/output/output.rb
CHANGED
data/lib/vedeu/output/style.rb
CHANGED
@@ -12,14 +12,20 @@ module Vedeu
|
|
12
12
|
|
13
13
|
def set
|
14
14
|
case style
|
15
|
+
when :blink then Esc.blink
|
16
|
+
when :blink_off then Esc.blink_off
|
15
17
|
when :bold then Esc.bold
|
18
|
+
when :bold_off then Esc.bold_off
|
16
19
|
when :clear then Esc.clear
|
17
20
|
when :hide_cursor then Cursor.hide
|
18
21
|
when :inverse then Esc.inverse
|
22
|
+
when :negative then Esc.negative
|
23
|
+
when :positive then Esc.positive
|
19
24
|
when :reset then Esc.reset
|
20
25
|
when :normal then Esc.reset
|
21
26
|
when :show_cursor then Cursor.show
|
22
27
|
when :underline then Esc.underline
|
28
|
+
when :underline_off then Esc.underline_off
|
23
29
|
else
|
24
30
|
''
|
25
31
|
end
|
@@ -30,6 +30,7 @@ module Vedeu
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
# :nocov:
|
33
34
|
module ClassMethods
|
34
35
|
def command(name, klass, options = {})
|
35
36
|
command_name = name.is_a?(Symbol) ? name.to_s : name
|
@@ -41,4 +42,5 @@ module Vedeu
|
|
41
42
|
def self.included(receiver)
|
42
43
|
receiver.extend(ClassMethods)
|
43
44
|
end
|
45
|
+
# :nocov:
|
44
46
|
end
|
@@ -22,13 +22,15 @@ module Vedeu
|
|
22
22
|
def create
|
23
23
|
InterfaceRepository.create(self)
|
24
24
|
|
25
|
-
Compositor.arrange(initial_state)
|
26
|
-
|
27
25
|
self
|
28
26
|
end
|
29
27
|
|
30
28
|
def update
|
31
29
|
if enqueued?
|
30
|
+
@current = dequeue
|
31
|
+
elsif @current.empty?
|
32
|
+
Compositor.arrange(initial_state)
|
33
|
+
|
32
34
|
@current = dequeue
|
33
35
|
else
|
34
36
|
@current
|
@@ -50,7 +52,7 @@ module Vedeu
|
|
50
52
|
private
|
51
53
|
|
52
54
|
def initial_state
|
53
|
-
{ name =>
|
55
|
+
{ name => Array.new(geometry.height) { [""] } }
|
54
56
|
end
|
55
57
|
|
56
58
|
def foreground
|
@@ -62,6 +64,7 @@ module Vedeu
|
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
67
|
+
# :nocov:
|
65
68
|
module ClassMethods
|
66
69
|
def interface(name, options = {})
|
67
70
|
interface_name = name.is_a?(Symbol) ? name.to_s : name
|
@@ -73,4 +76,5 @@ module Vedeu
|
|
73
76
|
def self.included(receiver)
|
74
77
|
receiver.extend(ClassMethods)
|
75
78
|
end
|
79
|
+
# :nocov:
|
76
80
|
end
|
data/lib/vedeu/version.rb
CHANGED
@@ -3,15 +3,14 @@ require_relative '../../../test_helper'
|
|
3
3
|
module Vedeu
|
4
4
|
describe Compositor do
|
5
5
|
let(:described_class) { Compositor }
|
6
|
-
let(:described_instance) { described_class.new(
|
6
|
+
let(:described_instance) { described_class.new(attributes) }
|
7
7
|
let(:subject) { described_instance }
|
8
|
-
let(:
|
9
|
-
let(:stream) { [] }
|
10
|
-
let(:
|
8
|
+
let(:attributes) { { interface: 'dummy', stream: stream } }
|
9
|
+
let(:stream) { [[]] }
|
10
|
+
let(:composition) {}
|
11
11
|
|
12
12
|
before do
|
13
13
|
Interface.create({ name: 'dummy', width: 15, height: 2 })
|
14
|
-
Interface.create({ name: 'test_interface', width: 15, height: 2 })
|
15
14
|
end
|
16
15
|
|
17
16
|
after do
|
@@ -23,34 +22,37 @@ module Vedeu
|
|
23
22
|
end
|
24
23
|
|
25
24
|
it 'sets an instance variable' do
|
26
|
-
subject.instance_variable_get('@
|
25
|
+
subject.instance_variable_get('@attributes').must_equal(attributes)
|
27
26
|
end
|
28
27
|
|
29
28
|
it 'sets an instance variable' do
|
30
|
-
subject.instance_variable_get('@interface').must_equal(
|
29
|
+
subject.instance_variable_get('@interface').must_equal(attributes[:interface])
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
|
32
|
+
it 'sets an instance variable' do
|
33
|
+
subject.instance_variable_get('@stream').must_equal(attributes[:stream])
|
34
|
+
end
|
35
35
|
|
36
|
-
|
37
|
-
|
36
|
+
describe '#arrange' do
|
37
|
+
let(:subject) { described_class.new(attributes).arrange }
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
context 'when empty' do
|
40
|
+
let(:stream) { [[]] }
|
41
|
+
let(:composition) {
|
42
|
+
[
|
43
|
+
[
|
44
|
+
"\e[38;2;39m\e[48;2;49m",
|
45
|
+
"\e[1;1H \e[1;1H",
|
46
|
+
"\e[2;1H \e[2;1H",
|
47
|
+
"\e[38;2;39m\e[48;2;49m",
|
48
|
+
"\e[?25h"
|
49
|
+
]
|
50
|
+
]
|
51
|
+
}
|
52
|
+
|
53
|
+
it 'returns the initial state of the interface' do
|
54
|
+
subject.must_equal(composition)
|
41
55
|
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'when an array (single interface)' do
|
45
|
-
let(:output) { [[]] }
|
46
|
-
|
47
|
-
it 'returns an Array' do
|
48
|
-
subject.must_be_instance_of(Array)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'when a hash (multiple interfaces)' do
|
53
|
-
let(:output) { { 'test_interface' => [] } }
|
54
56
|
|
55
57
|
it 'returns an Array' do
|
56
58
|
subject.must_be_instance_of(Array)
|
@@ -59,31 +61,45 @@ module Vedeu
|
|
59
61
|
|
60
62
|
context 'when unstyled' do
|
61
63
|
context 'and a single line' do
|
62
|
-
let(:
|
63
|
-
let(:
|
64
|
-
[
|
64
|
+
let(:stream) { [['Some text...']] }
|
65
|
+
let(:composition) {
|
66
|
+
[
|
67
|
+
[
|
68
|
+
"\e[38;2;39m\e[48;2;49m",
|
69
|
+
"\e[1;1H \e[1;1HSome text...",
|
70
|
+
"\e[2;1H \e[2;1H",
|
71
|
+
"\e[38;2;39m\e[48;2;49m",
|
72
|
+
"\e[?25h"
|
73
|
+
]
|
74
|
+
]
|
65
75
|
}
|
66
76
|
|
67
|
-
it 'returns the
|
68
|
-
subject.must_equal(
|
77
|
+
it 'returns the enqueued composition' do
|
78
|
+
subject.must_equal(composition)
|
69
79
|
end
|
70
80
|
end
|
71
81
|
|
72
82
|
context 'and multi-line' do
|
73
|
-
let(:output) {
|
74
|
-
{
|
75
|
-
'dummy' => [
|
76
|
-
['Some text...'],
|
77
|
-
['Some more text...']
|
78
|
-
]
|
79
|
-
}
|
80
|
-
}
|
81
83
|
let(:stream) {
|
82
|
-
[
|
84
|
+
[
|
85
|
+
['Some text...'],
|
86
|
+
['Some more text...']
|
87
|
+
]
|
88
|
+
}
|
89
|
+
let(:composition) {
|
90
|
+
[
|
91
|
+
[
|
92
|
+
"\e[38;2;39m\e[48;2;49m",
|
93
|
+
"\e[1;1H \e[1;1HSome text...",
|
94
|
+
"\e[2;1H \e[2;1HSome more tex...\e[0m",
|
95
|
+
"\e[38;2;39m\e[48;2;49m",
|
96
|
+
"\e[?25h"
|
97
|
+
]
|
98
|
+
]
|
83
99
|
}
|
84
100
|
|
85
|
-
it 'returns
|
86
|
-
subject.must_equal(
|
101
|
+
it 'returns the enqueued composition' do
|
102
|
+
subject.must_equal(composition)
|
87
103
|
end
|
88
104
|
end
|
89
105
|
end
|
@@ -91,92 +107,114 @@ module Vedeu
|
|
91
107
|
context 'when styled' do
|
92
108
|
context 'with colour pair' do
|
93
109
|
context 'and a single line' do
|
94
|
-
let(:output) {
|
95
|
-
{
|
96
|
-
'dummy' => [
|
97
|
-
[{ colour: [:red, :white] }, 'Some text...']
|
98
|
-
]
|
99
|
-
}
|
100
|
-
}
|
101
110
|
let(:stream) {
|
102
|
-
[
|
111
|
+
[
|
112
|
+
[{ colour: [:red, :white] }, 'Some text...', { colour: :default }]
|
113
|
+
]
|
114
|
+
}
|
115
|
+
let(:composition) {
|
116
|
+
[
|
117
|
+
[
|
118
|
+
"\e[38;2;39m\e[48;2;49m",
|
119
|
+
"\e[1;1H \e[1;1H\e[38;2;31m\e[48;2;47mSome text...\e[38;5;39m\e[48;5;49m",
|
120
|
+
"\e[2;1H \e[2;1H",
|
121
|
+
"\e[38;2;39m\e[48;2;49m",
|
122
|
+
"\e[?25h"
|
123
|
+
]
|
124
|
+
]
|
103
125
|
}
|
104
126
|
|
105
|
-
it 'returns
|
106
|
-
subject.must_equal(
|
127
|
+
it 'returns the enqueued composition' do
|
128
|
+
subject.must_equal(composition)
|
107
129
|
end
|
108
130
|
end
|
109
131
|
|
110
132
|
context 'and multi-line' do
|
111
|
-
let(:output) {
|
112
|
-
{
|
113
|
-
'dummy' => [
|
114
|
-
[{ colour: [:red, :white] }, 'Some text...'],
|
115
|
-
[{ colour: [:blue, :yellow] }, 'Some more text...']
|
116
|
-
]
|
117
|
-
}
|
118
|
-
}
|
119
133
|
let(:stream) {
|
120
|
-
[
|
134
|
+
[
|
135
|
+
[{ colour: [:red, :white] }, 'Some text...'],
|
136
|
+
[{ colour: [:blue, :yellow] }, 'Some more text...']
|
137
|
+
]
|
138
|
+
}
|
139
|
+
let(:composition) {
|
140
|
+
[
|
141
|
+
[
|
142
|
+
"\e[38;2;39m\e[48;2;49m",
|
143
|
+
"\e[1;1H \e[1;1H\e[38;2;31m\e[48;2;47mSome text...",
|
144
|
+
"\e[2;1H \e[2;1H\e[38;2;34m\e[48;2;43mSome more tex...\e[0m",
|
145
|
+
"\e[38;2;39m\e[48;2;49m",
|
146
|
+
"\e[?25h"
|
147
|
+
]
|
148
|
+
]
|
121
149
|
}
|
122
150
|
|
123
|
-
it 'returns
|
124
|
-
subject.must_equal(
|
151
|
+
it 'returns the enqueued composition' do
|
152
|
+
subject.must_equal(composition)
|
125
153
|
end
|
126
154
|
end
|
127
155
|
end
|
128
156
|
|
129
157
|
context 'with a style' do
|
130
158
|
context 'and a single line' do
|
131
|
-
let(:
|
132
|
-
|
133
|
-
|
134
|
-
|
159
|
+
let(:stream) { [[{ style: :bold }, 'Some text...', { style: :bold_off }]] }
|
160
|
+
let(:composition) {
|
161
|
+
[
|
162
|
+
[
|
163
|
+
"\e[38;2;39m\e[48;2;49m",
|
164
|
+
"\e[1;1H \e[1;1H\e[1mSome text...\e[21m",
|
165
|
+
"\e[2;1H \e[2;1H",
|
166
|
+
"\e[38;2;39m\e[48;2;49m",
|
167
|
+
"\e[?25h"
|
135
168
|
]
|
136
|
-
|
137
|
-
}
|
138
|
-
let(:stream) {
|
139
|
-
[[["\e[38;2;39m\e[48;2;49m", "\e[1;1H \e[1;1H\e[1m\e[2;1H \e[2;1HSome text...", "\e[38;2;39m\e[48;2;49m", "\e[?25h"], ["\e[38;2;39m\e[48;2;49m", "\e[1;1H \e[1;1H\e[2;1H \e[2;1H", "\e[38;2;39m\e[48;2;49m", "\e[?25h"]]]
|
169
|
+
]
|
140
170
|
}
|
141
171
|
|
142
|
-
it 'returns
|
143
|
-
subject.must_equal(
|
172
|
+
it 'returns the enqueued composition' do
|
173
|
+
subject.must_equal(composition)
|
144
174
|
end
|
145
175
|
end
|
146
176
|
|
147
177
|
context 'and multi-line' do
|
148
|
-
let(:
|
149
|
-
|
150
|
-
'dummy' => [
|
178
|
+
let(:stream) {
|
179
|
+
[
|
151
180
|
[{ style: :inverse }, 'Some text...'],
|
152
181
|
[{ style: :underline }, 'Some more text...']
|
153
182
|
]
|
154
|
-
}
|
155
183
|
}
|
156
|
-
let(:
|
157
|
-
[
|
184
|
+
let(:composition) {
|
185
|
+
[
|
186
|
+
[
|
187
|
+
"\e[38;2;39m\e[48;2;49m",
|
188
|
+
"\e[1;1H \e[1;1H\e[7mSome text...",
|
189
|
+
"\e[2;1H \e[2;1H\e[4mSome more tex...\e[0m",
|
190
|
+
"\e[38;2;39m\e[48;2;49m",
|
191
|
+
"\e[?25h"
|
192
|
+
]
|
193
|
+
]
|
158
194
|
}
|
159
195
|
|
160
|
-
it 'returns
|
161
|
-
subject.must_equal(
|
196
|
+
it 'returns the enqueued composition' do
|
197
|
+
subject.must_equal(composition)
|
162
198
|
end
|
163
199
|
end
|
164
200
|
end
|
165
201
|
|
166
202
|
context 'with an unknown style' do
|
167
|
-
let(:
|
168
|
-
|
169
|
-
|
170
|
-
|
203
|
+
let(:stream) { [[{ style: :unknown }, 'Some text...']] }
|
204
|
+
let(:composition) {
|
205
|
+
[
|
206
|
+
[
|
207
|
+
"\e[38;2;39m\e[48;2;49m",
|
208
|
+
"\e[1;1H \e[1;1HSome text...",
|
209
|
+
"\e[2;1H \e[2;1H",
|
210
|
+
"\e[38;2;39m\e[48;2;49m",
|
211
|
+
"\e[?25h"
|
171
212
|
]
|
172
|
-
|
173
|
-
}
|
174
|
-
let(:stream) {
|
175
|
-
[[["\e[38;2;39m\e[48;2;49m", "\e[1;1H \e[1;1H\e[2;1H \e[2;1HSome text...", "\e[38;2;39m\e[48;2;49m", "\e[?25h"], ["\e[38;2;39m\e[48;2;49m", "\e[1;1H \e[1;1H\e[2;1H \e[2;1H", "\e[38;2;39m\e[48;2;49m", "\e[?25h"]]]
|
213
|
+
]
|
176
214
|
}
|
177
215
|
|
178
|
-
it '
|
179
|
-
subject.must_equal(
|
216
|
+
it 'returns the enqueued composition' do
|
217
|
+
subject.must_equal(composition)
|
180
218
|
end
|
181
219
|
end
|
182
220
|
end
|
@@ -16,6 +16,18 @@ module Vedeu
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
describe '.blink_off' do
|
20
|
+
let(:subject) { described_class.blink_off }
|
21
|
+
|
22
|
+
it 'returns a String' do
|
23
|
+
subject.must_be_instance_of(String)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'returns an escape sequence' do
|
27
|
+
subject.must_equal("\e[25m")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
19
31
|
describe '.bold' do
|
20
32
|
let(:subject) { described_class.bold }
|
21
33
|
|
@@ -28,6 +40,18 @@ module Vedeu
|
|
28
40
|
end
|
29
41
|
end
|
30
42
|
|
43
|
+
describe '.bold_off' do
|
44
|
+
let(:subject) { described_class.bold_off }
|
45
|
+
|
46
|
+
it 'returns a String' do
|
47
|
+
subject.must_be_instance_of(String)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns an escape sequence' do
|
51
|
+
subject.must_equal("\e[21m")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
31
55
|
describe '.clear' do
|
32
56
|
let(:subject) { described_class.clear }
|
33
57
|
|
@@ -76,6 +100,18 @@ module Vedeu
|
|
76
100
|
end
|
77
101
|
end
|
78
102
|
|
103
|
+
describe '.positive' do
|
104
|
+
let(:subject) { described_class.positive }
|
105
|
+
|
106
|
+
it 'returns a String' do
|
107
|
+
subject.must_be_instance_of(String)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'returns an escape sequence' do
|
111
|
+
subject.must_equal("\e[27m")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
79
115
|
describe '.normal' do
|
80
116
|
let(:subject) { described_class.normal }
|
81
117
|
|
@@ -111,5 +147,17 @@ module Vedeu
|
|
111
147
|
subject.must_equal("\e[4m")
|
112
148
|
end
|
113
149
|
end
|
150
|
+
|
151
|
+
describe '.underline_off' do
|
152
|
+
let(:subject) { described_class.underline_off }
|
153
|
+
|
154
|
+
it 'returns a String' do
|
155
|
+
subject.must_be_instance_of(String)
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'returns an escape sequence' do
|
159
|
+
subject.must_equal("\e[24m")
|
160
|
+
end
|
161
|
+
end
|
114
162
|
end
|
115
163
|
end
|
@@ -4,16 +4,12 @@ module Vedeu
|
|
4
4
|
describe Output do
|
5
5
|
let(:described_class) { Output }
|
6
6
|
let(:subject) { described_class.new }
|
7
|
-
let(:result) {}
|
8
|
-
let(:queued_result) { { 'dummy' => [['queued...']] } }
|
9
7
|
|
10
8
|
before do
|
11
9
|
Interface.create({ name: 'dummy', width: 10, height: 2, cursor: true })
|
12
10
|
end
|
13
11
|
|
14
|
-
after
|
15
|
-
InterfaceRepository.reset
|
16
|
-
end
|
12
|
+
after { InterfaceRepository.reset }
|
17
13
|
|
18
14
|
it 'returns an Output instance' do
|
19
15
|
subject.must_be_instance_of(Output)
|
@@ -16,6 +16,22 @@ module Vedeu
|
|
16
16
|
subject.must_equal('')
|
17
17
|
end
|
18
18
|
|
19
|
+
context 'when the style is blink' do
|
20
|
+
let(:style) { :blink }
|
21
|
+
|
22
|
+
it 'returns an escape sequence' do
|
23
|
+
subject.must_equal("\e[5m")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when the style is blink off' do
|
28
|
+
let(:style) { :blink_off }
|
29
|
+
|
30
|
+
it 'returns an escape sequence' do
|
31
|
+
subject.must_equal("\e[25m")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
19
35
|
context 'when the style is bold' do
|
20
36
|
let(:style) { :bold }
|
21
37
|
|
@@ -24,6 +40,14 @@ module Vedeu
|
|
24
40
|
end
|
25
41
|
end
|
26
42
|
|
43
|
+
context 'when the style is bold off' do
|
44
|
+
let(:style) { :bold_off }
|
45
|
+
|
46
|
+
it 'returns an escape sequence' do
|
47
|
+
subject.must_equal("\e[21m")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
27
51
|
context 'when the style is clear' do
|
28
52
|
let(:style) { :clear }
|
29
53
|
|
@@ -48,6 +72,14 @@ module Vedeu
|
|
48
72
|
end
|
49
73
|
end
|
50
74
|
|
75
|
+
context 'when the style is positive' do
|
76
|
+
let(:style) { :positive }
|
77
|
+
|
78
|
+
it 'returns an escape sequence' do
|
79
|
+
subject.must_equal("\e[27m")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
51
83
|
context 'when the style is reset' do
|
52
84
|
let(:style) { :reset }
|
53
85
|
|
@@ -79,6 +111,14 @@ module Vedeu
|
|
79
111
|
subject.must_equal("\e[4m")
|
80
112
|
end
|
81
113
|
end
|
114
|
+
|
115
|
+
context 'when the style is underline off' do
|
116
|
+
let(:style) { :underline_off }
|
117
|
+
|
118
|
+
it 'returns an escape sequence' do
|
119
|
+
subject.must_equal("\e[24m")
|
120
|
+
end
|
121
|
+
end
|
82
122
|
end
|
83
123
|
end
|
84
124
|
end
|
@@ -3,15 +3,14 @@ require_relative '../../../test_helper'
|
|
3
3
|
module Vedeu
|
4
4
|
describe InterfaceRepository do
|
5
5
|
let(:described_class) { InterfaceRepository }
|
6
|
-
let(:interface) { 'dummy' }
|
7
|
-
let(:value) { 'dummy' }
|
8
6
|
|
9
7
|
before { Interface.create({ name: 'dummy' }) }
|
10
8
|
|
11
|
-
after
|
9
|
+
after { InterfaceRepository.reset }
|
12
10
|
|
13
11
|
describe '.activate' do
|
14
|
-
let(:subject)
|
12
|
+
let(:subject) { described_class.activate(interface) }
|
13
|
+
let(:interface) { 'dummy' }
|
15
14
|
|
16
15
|
it 'returns an Array' do
|
17
16
|
subject.must_be_instance_of(Array)
|
@@ -36,6 +35,7 @@ module Vedeu
|
|
36
35
|
|
37
36
|
describe '.find_by_name' do
|
38
37
|
let(:subject) { described_class.find_by_name(value) }
|
38
|
+
let(:value) { 'dummy' }
|
39
39
|
|
40
40
|
it 'returns an Interface' do
|
41
41
|
subject.must_be_instance_of(Interface)
|
@@ -8,7 +8,7 @@ module Vedeu
|
|
8
8
|
let(:attributes) {
|
9
9
|
{
|
10
10
|
name: 'dummy',
|
11
|
-
width:
|
11
|
+
width: 10,
|
12
12
|
height: 5,
|
13
13
|
x: 1,
|
14
14
|
y: 1,
|
@@ -19,7 +19,8 @@ module Vedeu
|
|
19
19
|
}
|
20
20
|
let(:result) {}
|
21
21
|
|
22
|
-
|
22
|
+
before { Interface.create(attributes) }
|
23
|
+
after { InterfaceRepository.reset }
|
23
24
|
|
24
25
|
it 'returns an Interface instance' do
|
25
26
|
subject.must_be_instance_of(Interface)
|
@@ -48,9 +49,9 @@ module Vedeu
|
|
48
49
|
describe '#update' do
|
49
50
|
let(:subject) { described_instance.update }
|
50
51
|
|
51
|
-
it 'returns a Array' do
|
52
|
-
|
53
|
-
end
|
52
|
+
# it 'returns a Array' do
|
53
|
+
# subject.must_be_instance_of(Array)
|
54
|
+
# end
|
54
55
|
end
|
55
56
|
|
56
57
|
describe '#geometry' do
|
@@ -26,7 +26,8 @@ module Vedeu
|
|
26
26
|
describe '.enqueue' do
|
27
27
|
let(:subject) { described_class.enqueue(:result) }
|
28
28
|
|
29
|
-
|
29
|
+
before { described_class.clear }
|
30
|
+
after { described_class.clear }
|
30
31
|
|
31
32
|
it 'returns an Array' do
|
32
33
|
subject.must_be_instance_of(Array)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vedeu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin Laking
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|