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.
- checksums.yaml +4 -4
- data/lib/vedeu/application.rb +2 -0
- data/lib/vedeu/launcher.rb +1 -1
- data/lib/vedeu/models/colour.rb +7 -7
- data/lib/vedeu/models/command.rb +2 -0
- data/lib/vedeu/models/composition.rb +2 -2
- data/lib/vedeu/models/interface.rb +15 -6
- data/lib/vedeu/models/line.rb +5 -3
- data/lib/vedeu/models/presentation.rb +3 -3
- data/lib/vedeu/models/stream.rb +6 -3
- data/lib/vedeu/models/style.rb +31 -0
- data/lib/vedeu/output/interface_renderer.rb +1 -3
- data/lib/vedeu/support/coordinate.rb +21 -7
- data/lib/vedeu/support/parsing/json_parser.rb +3 -3
- data/test/lib/vedeu/application_test.rb +0 -11
- data/test/lib/vedeu/launcher_test.rb +0 -8
- data/test/lib/vedeu/models/collection_test.rb +3 -3
- data/test/lib/vedeu/models/colour_test.rb +7 -2
- data/test/lib/vedeu/models/command_test.rb +0 -6
- data/test/lib/vedeu/models/composition_test.rb +127 -37
- data/test/lib/vedeu/models/interface_collection_test.rb +8 -9
- data/test/lib/vedeu/models/interface_test.rb +64 -18
- data/test/lib/vedeu/models/line_test.rb +3 -7
- data/test/lib/vedeu/models/presentation_test.rb +7 -5
- data/test/lib/vedeu/models/stream_test.rb +21 -11
- data/test/lib/vedeu/models/style_test.rb +86 -0
- data/test/lib/vedeu/output/interface_renderer_test.rb +32 -5
- data/test/lib/vedeu/output/output_test.rb +8 -1
- data/test/lib/vedeu/repository/command_repository_test.rb +14 -10
- data/test/lib/vedeu/repository/interface_repository_test.rb +9 -9
- data/test/lib/vedeu/support/coordinate_test.rb +72 -19
- data/test/lib/vedeu/support/menu_test.rb +16 -16
- data/test/lib/vedeu/support/parsing/hash_parser_test.rb +7 -7
- data/test/lib/vedeu/support/parsing/json_parser_test.rb +1 -1
- data/test/lib/vedeu/support/terminal_test.rb +0 -7
- data/test/lib/vedeu_test.rb +0 -5
- data/test/test_helper.rb +1 -0
- data/vedeu.gemspec +2 -3
- metadata +7 -25
- data/lib/vedeu/models/style_collection.rb +0 -19
- data/lib/vedeu/support/geometry.rb +0 -62
- data/test/lib/vedeu/models/style_collection_test.rb +0 -13
- data/test/lib/vedeu/support/geometry_test.rb +0 -107
@@ -9,17 +9,19 @@ module Vedeu
|
|
9
9
|
describe Presentation do
|
10
10
|
describe '#colour' do
|
11
11
|
it 'returns a Colour instance' do
|
12
|
-
TestPresentation.new({
|
12
|
+
presentation = TestPresentation.new({
|
13
13
|
colour: { foreground: '#ff0000', background: '#333333' }
|
14
|
-
})
|
14
|
+
})
|
15
|
+
presentation.colour.must_be_instance_of(Colour)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
19
|
describe '#style' do
|
19
20
|
it 'has a style attribute' do
|
20
|
-
TestPresentation.new({
|
21
|
-
style:
|
22
|
-
})
|
21
|
+
presentation = TestPresentation.new({
|
22
|
+
style: ['bold', 'underline']
|
23
|
+
})
|
24
|
+
presentation.style.must_equal(['bold', 'underline'])
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -4,37 +4,47 @@ require_relative '../../../../lib/vedeu/models/stream'
|
|
4
4
|
module Vedeu
|
5
5
|
describe Stream do
|
6
6
|
it 'has a colour attribute' do
|
7
|
-
Stream.new({
|
7
|
+
stream = Stream.new({
|
8
8
|
colour: { foreground: '#ff0000', background: '#000000' }
|
9
|
-
})
|
9
|
+
})
|
10
|
+
stream.colour.must_be_instance_of(Colour)
|
10
11
|
end
|
11
12
|
|
12
13
|
it 'has a text attribute' do
|
13
|
-
Stream.new({ text: 'Some text' })
|
14
|
+
stream = Stream.new({ text: 'Some text' })
|
15
|
+
stream.text.must_equal('Some text')
|
14
16
|
end
|
15
17
|
|
16
18
|
it 'has a style attribute' do
|
17
|
-
Stream.new({ style: 'normal' })
|
18
|
-
|
19
|
+
stream = Stream.new({ style: 'normal' })
|
20
|
+
stream.style.must_equal("\e[24m\e[21m\e[27m")
|
19
21
|
end
|
20
22
|
|
21
23
|
describe '#to_s' do
|
22
24
|
it 'returns a String' do
|
23
|
-
Stream.new({
|
24
|
-
style: 'normal',
|
25
|
+
stream = Stream.new({
|
25
26
|
colour: { foreground: '#ff0000', background: '#000000' },
|
27
|
+
style: 'normal',
|
26
28
|
text: 'Some text'
|
27
|
-
})
|
29
|
+
})
|
30
|
+
|
31
|
+
stream.to_s.must_equal(
|
32
|
+
"\e[38;5;196m\e[48;5;16m" \
|
33
|
+
"\e[24m\e[21m\e[27m" \
|
34
|
+
"Some text"
|
35
|
+
)
|
28
36
|
end
|
29
37
|
end
|
30
38
|
|
31
39
|
describe '#to_json' do
|
32
40
|
it 'returns a String' do
|
33
|
-
Stream.new({
|
34
|
-
style: 'normal',
|
41
|
+
stream = Stream.new({
|
35
42
|
colour: { foreground: '#ff0000', background: '#000000' },
|
43
|
+
style: 'normal',
|
36
44
|
text: 'Some text'
|
37
|
-
})
|
45
|
+
})
|
46
|
+
|
47
|
+
stream.to_json.must_equal("{\"colour\":{\"foreground\":\"#ff0000\",\"background\":\"#000000\"},\"style\":[\"normal\"],\"text\":\"Some text\"}")
|
38
48
|
end
|
39
49
|
end
|
40
50
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/models/presentation'
|
3
|
+
require_relative '../../../../lib/vedeu/models/style'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
class TestStyle
|
7
|
+
include Presentation
|
8
|
+
include Style
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Style do
|
12
|
+
describe '#style' do
|
13
|
+
it 'returns an escape sequence for a single style' do
|
14
|
+
test_style = TestStyle.new(style: 'normal')
|
15
|
+
test_style.style.must_equal("\e[24m\e[21m\e[27m")
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns an escape sequence for multiple styles' do
|
19
|
+
test_style = TestStyle.new(style: ['normal', 'underline'])
|
20
|
+
test_style.style.must_equal("\e[24m\e[21m\e[27m\e[4m")
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns an empty string for an unknown style' do
|
24
|
+
test_style = TestStyle.new(style: 'unknown')
|
25
|
+
test_style.style.must_equal('')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'has a style attribute' do
|
29
|
+
test_style = TestStyle.new(style: ['normal'])
|
30
|
+
test_style.style.must_equal("\e[24m\e[21m\e[27m")
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns an empty string for empty or nil' do
|
34
|
+
test_style = TestStyle.new(style: '')
|
35
|
+
test_style.style.must_equal('')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns an empty string for empty or nil' do
|
39
|
+
test_style = TestStyle.new(style: nil)
|
40
|
+
test_style.style.must_equal('')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns an empty string for empty or nil' do
|
44
|
+
test_style = TestStyle.new(style: [])
|
45
|
+
test_style.style.must_equal('')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#style_original' do
|
50
|
+
it 'returns an escape sequence for a single style' do
|
51
|
+
test_style = TestStyle.new(style: 'normal')
|
52
|
+
test_style.style_original.must_equal(['normal'])
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'returns an escape sequence for multiple styles' do
|
56
|
+
test_style = TestStyle.new(style: ['normal', 'underline'])
|
57
|
+
test_style.style_original.must_equal(['normal', 'underline'])
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'returns an empty string for an unknown style' do
|
61
|
+
test_style = TestStyle.new(style: 'unknown')
|
62
|
+
test_style.style_original.must_equal(['unknown'])
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'has a style attribute' do
|
66
|
+
test_style = TestStyle.new(style: ['normal'])
|
67
|
+
test_style.style_original.must_equal(['normal'])
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'returns an empty string for empty or nil' do
|
71
|
+
test_style = TestStyle.new(style: '')
|
72
|
+
test_style.style_original.must_equal([''])
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'returns an empty string for empty or nil' do
|
76
|
+
test_style = TestStyle.new(style: nil)
|
77
|
+
test_style.style_original.must_equal('')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'returns an empty string for empty or nil' do
|
81
|
+
test_style = TestStyle.new(style: [])
|
82
|
+
test_style.style_original.must_equal('')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -1,24 +1,51 @@
|
|
1
1
|
require_relative '../../../test_helper'
|
2
|
+
require_relative '../../../../lib/vedeu/repository/interface_repository'
|
2
3
|
require_relative '../../../../lib/vedeu/output/interface_renderer'
|
3
4
|
require_relative '../../../../lib/vedeu/models/interface'
|
4
5
|
|
5
6
|
module Vedeu
|
6
7
|
describe InterfaceRenderer do
|
8
|
+
before { InterfaceRepository.reset }
|
9
|
+
|
7
10
|
describe '.clear' do
|
8
11
|
it 'returns the escape sequence to clear the whole interface' do
|
9
|
-
interface = Interface.new({
|
10
|
-
|
12
|
+
interface = Interface.new({
|
13
|
+
name: '.clear',
|
14
|
+
width: 5,
|
15
|
+
height: 2
|
16
|
+
})
|
17
|
+
InterfaceRenderer.clear(interface).must_equal(
|
18
|
+
"\e[1;1H \e[1;1H" \
|
19
|
+
"\e[2;1H \e[2;1H"
|
20
|
+
)
|
11
21
|
end
|
12
22
|
|
13
23
|
it 'returns the escape sequence to clear the whole interface with specified colours' do
|
14
|
-
interface = Interface.new({
|
15
|
-
|
24
|
+
interface = Interface.new({
|
25
|
+
name: '.clear',
|
26
|
+
width: 5,
|
27
|
+
height: 2,
|
28
|
+
colour: {
|
29
|
+
foreground: '#00ff00',
|
30
|
+
background: '#ffff00'
|
31
|
+
}
|
32
|
+
})
|
33
|
+
InterfaceRenderer.clear(interface).must_equal(
|
34
|
+
"\e[38;5;46m\e[48;5;226m" \
|
35
|
+
"\e[1;1H \e[1;1H" \
|
36
|
+
"\e[2;1H \e[2;1H"
|
37
|
+
)
|
16
38
|
end
|
17
39
|
end
|
18
40
|
|
19
41
|
describe '.render' do
|
20
42
|
it 'returns the content for the interface' do
|
21
|
-
interface = Interface.new({
|
43
|
+
interface = Interface.new({
|
44
|
+
name: '.render',
|
45
|
+
width: 5,
|
46
|
+
height: 2,
|
47
|
+
lines: 'InterfaceRenderer.render'
|
48
|
+
})
|
22
49
|
InterfaceRenderer.render(interface).must_equal("\e[1;1HInterfaceRenderer.render")
|
23
50
|
end
|
24
51
|
end
|
@@ -1,11 +1,18 @@
|
|
1
1
|
require_relative '../../../test_helper'
|
2
2
|
require_relative '../../../../lib/vedeu/output/output'
|
3
|
+
require_relative '../../../../lib/vedeu/support/terminal'
|
3
4
|
|
4
5
|
module Vedeu
|
5
6
|
describe Output do
|
6
7
|
describe '.render' do
|
7
8
|
it 'returns an Array' do
|
8
|
-
|
9
|
+
output = "\e[3;3H \e[3;3H" \
|
10
|
+
"\e[3;3HSome text...\e[3;3H"
|
11
|
+
InterfaceRepository.stub(:refresh, [output]) do
|
12
|
+
Terminal.stub(:output, output) do
|
13
|
+
Output.render.first.must_equal(output)
|
14
|
+
end
|
15
|
+
end
|
9
16
|
end
|
10
17
|
end
|
11
18
|
end
|
@@ -22,20 +22,24 @@ module Vedeu
|
|
22
22
|
|
23
23
|
describe '.by_input' do
|
24
24
|
it 'returns the correct command when the command was found by keypress' do
|
25
|
-
CommandRepository.by_input('b')
|
26
|
-
|
27
|
-
|
25
|
+
command = CommandRepository.by_input('b')
|
26
|
+
|
27
|
+
command.name.must_equal('banana')
|
28
|
+
command.name.wont_equal('apple')
|
29
|
+
command.keypress.must_equal('b')
|
28
30
|
end
|
29
31
|
|
30
32
|
it 'returns the correct command when the command was found by keyword' do
|
31
|
-
CommandRepository.by_input('apple')
|
32
|
-
|
33
|
-
|
33
|
+
command = CommandRepository.by_input('apple')
|
34
|
+
|
35
|
+
command.keypress.must_equal('a')
|
36
|
+
command.keypress.wont_equal('b')
|
37
|
+
command.name.wont_equal('banana')
|
34
38
|
end
|
35
39
|
|
36
40
|
it 'returns FalseClass when no command was found' do
|
37
|
-
CommandRepository.by_input('not_found')
|
38
|
-
|
41
|
+
command = CommandRepository.by_input('not_found')
|
42
|
+
command.must_be_instance_of(FalseClass)
|
39
43
|
end
|
40
44
|
|
41
45
|
it 'returns FalseClass when there is no input' do
|
@@ -45,8 +49,8 @@ module Vedeu
|
|
45
49
|
|
46
50
|
describe '.create' do
|
47
51
|
it 'returns a Command' do
|
48
|
-
|
49
|
-
|
52
|
+
command = CommandRepository.create({})
|
53
|
+
command.must_be_instance_of(Command)
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
@@ -6,9 +6,9 @@ module Vedeu
|
|
6
6
|
describe '.create' do
|
7
7
|
it 'returns an Interface' do
|
8
8
|
InterfaceRepository.create({
|
9
|
-
name:
|
10
|
-
width:
|
11
|
-
height:
|
9
|
+
name: 'dummy',
|
10
|
+
width: 5,
|
11
|
+
height: 5
|
12
12
|
}).must_be_instance_of(Interface)
|
13
13
|
end
|
14
14
|
end
|
@@ -16,9 +16,9 @@ module Vedeu
|
|
16
16
|
describe '.find' do
|
17
17
|
it 'returns an Interface when the interface exists' do
|
18
18
|
InterfaceRepository.create({
|
19
|
-
name:
|
20
|
-
width:
|
21
|
-
height:
|
19
|
+
name: 'dummy',
|
20
|
+
width: 5,
|
21
|
+
height: 5
|
22
22
|
})
|
23
23
|
InterfaceRepository.find('dummy')
|
24
24
|
.must_be_instance_of(Interface)
|
@@ -57,13 +57,13 @@ module Vedeu
|
|
57
57
|
it 'returns the collection in order they should be drawn' do
|
58
58
|
InterfaceRepository.reset
|
59
59
|
InterfaceRepository.create({
|
60
|
-
name: 'a', width:
|
60
|
+
name: 'a', width: 5, height: 5, z: 2
|
61
61
|
}).enqueue("a")
|
62
62
|
InterfaceRepository.create({
|
63
|
-
name: 'b', width:
|
63
|
+
name: 'b', width: 5, height: 5, z: 1
|
64
64
|
}).enqueue("b")
|
65
65
|
InterfaceRepository.create({
|
66
|
-
name: 'c', width:
|
66
|
+
name: 'c', width: 5, height: 5, z: 3
|
67
67
|
}).enqueue("c")
|
68
68
|
InterfaceRepository.refresh.must_equal(['b', 'a', 'c'])
|
69
69
|
end
|
@@ -11,6 +11,38 @@ module Vedeu
|
|
11
11
|
proc { Coordinate.new({ height: 6 }) }.must_raise(KeyError)
|
12
12
|
end
|
13
13
|
|
14
|
+
describe '#origin' do
|
15
|
+
it 'returns the origin for the interface' do
|
16
|
+
coordinate = Coordinate.new({ width: 5, height: 5, centred: false })
|
17
|
+
coordinate.origin.must_equal("\e[1;1H")
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns the origin for the interface' do
|
21
|
+
console = IO.console
|
22
|
+
console.stub :winsize, [25, 80] do
|
23
|
+
coordinate = Coordinate.new({ width: 5, height: 5 })
|
24
|
+
coordinate.origin.must_equal("\e[10;38H")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns the line position relative to the origin' do
|
29
|
+
coordinate = Coordinate.new({ width: 5, height: 5, centred: false })
|
30
|
+
coordinate.origin(3).must_equal("\e[4;1H")
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns the origin for the interface when the interface' \
|
34
|
+
' is at a custom position' do
|
35
|
+
coordinate = Coordinate.new({ width: 5, height: 5, x: 3, y: 6, centred: false })
|
36
|
+
coordinate.origin.must_equal("\e[6;3H")
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns the line position relative to the origin when the' \
|
40
|
+
' interface is at a custom position' do
|
41
|
+
coordinate = Coordinate.new({ width: 5, height: 5, x: 3, y: 6, centred: false })
|
42
|
+
coordinate.origin(3).must_equal("\e[9;3H")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
14
46
|
describe '#terminal_height' do
|
15
47
|
it 'raises an exception if the value is less than 1' do
|
16
48
|
coordinate = Coordinate.new({ height: 6, width: 18, terminal_height: -2 })
|
@@ -28,16 +60,16 @@ module Vedeu
|
|
28
60
|
it 'returns the value of terminal_height' do
|
29
61
|
console = IO.console
|
30
62
|
console.stub :winsize, [25, 80] do
|
31
|
-
Coordinate.new({ height: 6, width: 18, terminal_height: 20 })
|
32
|
-
|
63
|
+
coordinate = Coordinate.new({ height: 6, width: 18, terminal_height: 20 })
|
64
|
+
coordinate.terminal_height.must_equal(20)
|
33
65
|
end
|
34
66
|
end
|
35
67
|
|
36
68
|
it 'returns the default height if not set' do
|
37
69
|
console = IO.console
|
38
70
|
console.stub :winsize, [25, 80] do
|
39
|
-
Coordinate.new({ height: 6, width: 18 })
|
40
|
-
|
71
|
+
coordinate = Coordinate.new({ height: 6, width: 18 })
|
72
|
+
coordinate.terminal_height.must_equal(25)
|
41
73
|
end
|
42
74
|
end
|
43
75
|
end
|
@@ -56,8 +88,17 @@ module Vedeu
|
|
56
88
|
end
|
57
89
|
end
|
58
90
|
|
91
|
+
# it 'raises an exception if the value combined with y position will cause content wrapping' do
|
92
|
+
# console = IO.console
|
93
|
+
# console.stub :winsize, [25, 80] do
|
94
|
+
# coordinate = Coordinate.new({ height: 20, width: 18, y: 10 })
|
95
|
+
# proc { coordinate.height }.must_raise(OutOfBoundsError)
|
96
|
+
# end
|
97
|
+
# end
|
98
|
+
|
59
99
|
it 'returns the value of height' do
|
60
|
-
Coordinate.new({ height: 6, width: 18 })
|
100
|
+
coordinate = Coordinate.new({ height: 6, width: 18 })
|
101
|
+
coordinate.height.must_equal(6)
|
61
102
|
end
|
62
103
|
end
|
63
104
|
|
@@ -76,11 +117,13 @@ module Vedeu
|
|
76
117
|
end
|
77
118
|
|
78
119
|
it 'returns the value of y' do
|
79
|
-
Coordinate.new({ height: 6, width: 18, y: 6 })
|
120
|
+
coordinate = Coordinate.new({ height: 6, width: 18, y: 6 })
|
121
|
+
coordinate.y.must_equal(6)
|
80
122
|
end
|
81
123
|
|
82
124
|
it 'returns 1 if not set' do
|
83
|
-
Coordinate.new({ height: 6, width: 18 })
|
125
|
+
coordinate = Coordinate.new({ height: 6, width: 18 })
|
126
|
+
coordinate.y.must_equal(1)
|
84
127
|
end
|
85
128
|
end
|
86
129
|
|
@@ -101,16 +144,16 @@ module Vedeu
|
|
101
144
|
it 'returns the value of terminal_width' do
|
102
145
|
console = IO.console
|
103
146
|
console.stub :winsize, [25, 80] do
|
104
|
-
Coordinate.new({ height: 6, width: 18, terminal_width: 40 })
|
105
|
-
|
147
|
+
coordinate = Coordinate.new({ height: 6, width: 18, terminal_width: 40 })
|
148
|
+
coordinate.terminal_width.must_equal(40)
|
106
149
|
end
|
107
150
|
end
|
108
151
|
|
109
152
|
it 'returns the default width if not set' do
|
110
153
|
console = IO.console
|
111
154
|
console.stub :winsize, [25, 80] do
|
112
|
-
Coordinate.new({ height: 6, width: 18 })
|
113
|
-
|
155
|
+
coordinate = Coordinate.new({ height: 6, width: 18 })
|
156
|
+
coordinate.terminal_width.must_equal(80)
|
114
157
|
end
|
115
158
|
end
|
116
159
|
end
|
@@ -129,9 +172,17 @@ module Vedeu
|
|
129
172
|
end
|
130
173
|
end
|
131
174
|
|
175
|
+
# it 'raises an exception if the value combined with x position will cause content wrapping' do
|
176
|
+
# console = IO.console
|
177
|
+
# console.stub :winsize, [25, 80] do
|
178
|
+
# coordinate = Coordinate.new({ height: 20, width: 75, x: 10 })
|
179
|
+
# proc { coordinate.width }.must_raise(OutOfBoundsError)
|
180
|
+
# end
|
181
|
+
# end
|
182
|
+
|
132
183
|
it 'returns the value of width' do
|
133
|
-
Coordinate.new({ height: 6, width: 18, x: 6 })
|
134
|
-
|
184
|
+
coordinate = Coordinate.new({ height: 6, width: 18, x: 6 })
|
185
|
+
coordinate.width.must_equal(18)
|
135
186
|
end
|
136
187
|
end
|
137
188
|
|
@@ -150,23 +201,25 @@ module Vedeu
|
|
150
201
|
end
|
151
202
|
|
152
203
|
it 'returns the value of x' do
|
153
|
-
Coordinate.new({ height: 6, width: 18, x: 6 })
|
204
|
+
coordinate = Coordinate.new({ height: 6, width: 18, x: 6 })
|
205
|
+
coordinate.x.must_equal(6)
|
154
206
|
end
|
155
207
|
|
156
208
|
it 'returns 1 if not set' do
|
157
|
-
Coordinate.new({ height: 6, width: 18 })
|
209
|
+
coordinate = Coordinate.new({ height: 6, width: 18 })
|
210
|
+
coordinate.x.must_equal(1)
|
158
211
|
end
|
159
212
|
end
|
160
213
|
|
161
214
|
describe '#centered' do
|
162
215
|
it 'has a centred attribute' do
|
163
|
-
Coordinate.new({ height: 6, width: 18, centred: false })
|
164
|
-
|
216
|
+
coordinate = Coordinate.new({ height: 6, width: 18, centred: false })
|
217
|
+
coordinate.centred.must_equal(false)
|
165
218
|
end
|
166
219
|
|
167
220
|
it 'sets the centred attribute to true if not set' do
|
168
|
-
Coordinate.new({ height: 6, width: 18 })
|
169
|
-
|
221
|
+
coordinate = Coordinate.new({ height: 6, width: 18 })
|
222
|
+
coordinate.centred.must_equal(true)
|
170
223
|
end
|
171
224
|
end
|
172
225
|
|