vedeu 0.4.8 → 0.4.9

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.
@@ -48,17 +48,12 @@ module Vedeu
48
48
  @x = (x.nil? || x < 1) ? 1 : x
49
49
  end
50
50
 
51
- # @param other [Vedeu::Position]
52
- # @return [Boolean]
53
- def ==(other)
54
- eql?(other)
55
- end
56
-
57
51
  # @param other [Vedeu::Position]
58
52
  # @return [Boolean]
59
53
  def eql?(other)
60
54
  self.class == other.class && (x == other.x && y == other.y)
61
55
  end
56
+ alias_method :==, :eql?
62
57
 
63
58
  # Return the escape sequence required to position the cursor at a particular
64
59
  # point on the screen. When passed a block, will do the aforementioned,
@@ -45,12 +45,6 @@ module Vedeu
45
45
  @y = attributes[:y]
46
46
  end
47
47
 
48
- # @param other [Vedeu::Cell]
49
- # @return [Boolean]
50
- def ==(other)
51
- eql?(other)
52
- end
53
-
54
48
  # @param other [Vedeu::Cell]
55
49
  # @return [Boolean]
56
50
  def eql?(other)
@@ -62,6 +56,7 @@ module Vedeu
62
56
  x == other.x &&
63
57
  y == other.y
64
58
  end
59
+ alias_method :==, :eql?
65
60
 
66
61
  end # Cell
67
62
 
@@ -48,12 +48,6 @@ module Vedeu
48
48
  @value = @attributes[:value]
49
49
  end
50
50
 
51
- # @param other [Vedeu::Char]
52
- # @return [Boolean]
53
- def ==(other)
54
- eql?(other)
55
- end
56
-
57
51
  # When {Vedeu::Viewport#padded_lines} has less lines that required to fill
58
52
  # the visible area of the interface, it creates a line that contains a
59
53
  # single {Vedeu::Char} containing a space (0x20); later,
@@ -70,6 +64,7 @@ module Vedeu
70
64
  def eql?(other)
71
65
  self.class == other.class && value == other.value
72
66
  end
67
+ alias_method :==, :eql?
73
68
 
74
69
  # @return [String]
75
70
  def inspect
@@ -30,9 +30,9 @@ module Vedeu
30
30
 
31
31
  # @return [Array<Interface>]
32
32
  def compose
33
- buffer.map do |view|
34
- view.colour = interface.colour unless view.colour
35
- view.style = interface.style unless view.style
33
+ buffer.each do |view|
34
+ view.colour = interface.colour unless view.colour
35
+ view.style = interface.style unless view.style
36
36
 
37
37
  Vedeu::Output.render(view)
38
38
  end
@@ -122,6 +122,9 @@ module Vedeu
122
122
  # Scrolls the content vertically when the stored cursor's y position for the
123
123
  # interface is outside of the visible area.
124
124
  #
125
+ # @note
126
+ # The height is reduced by one as #rows is a range of Array elements.
127
+ #
125
128
  # @return [Range]
126
129
  def rows
127
130
  top..(top + (height - 1))
@@ -132,6 +135,9 @@ module Vedeu
132
135
  # Scrolls the content horizontally when the stored cursor's x position for
133
136
  # the interface is outside of the visible area.
134
137
  #
138
+ # @note
139
+ # The width is reduced by one as #columns is a range of Array elements.
140
+ #
135
141
  # @return [Range]
136
142
  def columns
137
143
  left..(left + (width - 1))
@@ -19,10 +19,14 @@ module Vedeu
19
19
  let(:data) {}
20
20
 
21
21
  subject { described.input(data) }
22
+
23
+ it { Vedeu.expects(:trigger); subject }
22
24
  end
23
25
 
24
26
  describe '.output' do
25
27
  subject { described.output }
28
+
29
+ it { Vedeu.expects(:trigger); subject }
26
30
  end
27
31
 
28
32
  describe '#pid' do
@@ -206,12 +206,16 @@ module Vedeu
206
206
  end
207
207
 
208
208
  describe '#xn' do
209
+ before { Terminal.stubs(:size).returns([25, 80]) }
210
+
209
211
  subject { Vedeu::Geometry.build({}) { xn 15 } }
210
212
 
211
213
  it { subject.xn.must_equal(15) }
212
214
  end
213
215
 
214
216
  describe '#yn' do
217
+ before { Terminal.stubs(:size).returns([25, 80]) }
218
+
215
219
  subject { Vedeu::Geometry.build({}) { yn 8 } }
216
220
 
217
221
  it { subject.yn.must_equal(8) }
@@ -10,6 +10,7 @@ module Vedeu
10
10
  let(:yn) { 9 }
11
11
  let(:x) { 6 }
12
12
  let(:xn) { 21 }
13
+ let(:offset) { 1 }
13
14
 
14
15
  describe 'accessors and aliases' do
15
16
  it { instance.must_respond_to(:y) }
@@ -66,32 +67,119 @@ module Vedeu
66
67
  it { subject.instance_variable_get('@xn').must_equal(xn) }
67
68
  end
68
69
 
69
- describe '#centre' do
70
- subject { instance.centre }
70
+ describe '#eql?' do
71
+ let(:other) { described.new(y: 4, yn: 9, x: 6, xn: 21) }
71
72
 
72
- it { subject.must_be_instance_of(Array) }
73
- it { subject.must_equal([6, 13]) }
73
+ subject { instance.eql?(other) }
74
+
75
+ it { subject.must_equal(true) }
76
+
77
+ context 'when different to other' do
78
+ let(:other) { described.new(y: 1, yn: 25, x: 1, xn: 40) }
79
+
80
+ it { subject.must_equal(false) }
81
+ end
74
82
  end
75
83
 
76
84
  describe '#centre' do
77
85
  subject { instance.centre }
78
86
 
79
87
  it { subject.must_be_instance_of(Array) }
80
- it { subject.must_equal([6, 13]) }
88
+ it { subject.must_equal([7, 14]) }
81
89
  end
82
90
 
83
91
  describe '#centre_y' do
84
92
  subject { instance.centre_y }
85
93
 
86
94
  it { subject.must_be_instance_of(Fixnum) }
87
- it { subject.must_equal(6) }
95
+ it { subject.must_equal(7) }
88
96
  end
89
97
 
90
98
  describe '#centre_x' do
91
99
  subject { instance.centre_x }
92
100
 
93
101
  it { subject.must_be_instance_of(Fixnum) }
94
- it { subject.must_equal(13) }
102
+ it { subject.must_equal(14) }
103
+ end
104
+
105
+ describe '#north' do
106
+ subject { instance.north(offset) }
107
+
108
+ context 'with the default offset' do
109
+ it { subject.must_equal(3) }
110
+ end
111
+
112
+ context 'with a negative offset' do
113
+ let(:offset) { -2 }
114
+
115
+ it { subject.must_equal(6) }
116
+ end
117
+
118
+ context 'with a positive offset' do
119
+ let(:offset) { 2 }
120
+
121
+ it { subject.must_equal(2) }
122
+ end
123
+ end
124
+
125
+ describe '#east' do
126
+ subject { instance.east(offset) }
127
+
128
+ context 'with the default offset' do
129
+ it { subject.must_equal(22) }
130
+ end
131
+
132
+ context 'with a negative offset' do
133
+ let(:offset) { -2 }
134
+
135
+ it { subject.must_equal(19) }
136
+ end
137
+
138
+ context 'with a positive offset' do
139
+ let(:offset) { 2 }
140
+
141
+ it { subject.must_equal(23) }
142
+ end
143
+ end
144
+
145
+ describe '#south' do
146
+ subject { instance.south(offset) }
147
+
148
+ context 'with the default offset' do
149
+ it { subject.must_equal(10) }
150
+ end
151
+
152
+ context 'with a negative offset' do
153
+ let(:offset) { -2 }
154
+
155
+ it { subject.must_equal(7) }
156
+ end
157
+
158
+ context 'with a positive offset' do
159
+ let(:offset) { 2 }
160
+
161
+ it { subject.must_equal(11) }
162
+ end
163
+ end
164
+
165
+ describe '#west' do
166
+ subject { instance.west(offset) }
167
+
168
+ context 'with the default offset' do
169
+ it { subject.must_equal(5) }
170
+ end
171
+
172
+ context 'with a negative offset' do
173
+ let(:offset) { -2 }
174
+
175
+ it { subject.must_equal(8) }
176
+ end
177
+
178
+ context 'with a positive offset' do
179
+ let(:offset) { 2 }
180
+
181
+ it { subject.must_equal(4) }
182
+ end
95
183
  end
96
184
 
97
185
  end # Area
@@ -20,7 +20,7 @@ module Vedeu
20
20
  end
21
21
 
22
22
  describe '#c' do
23
- it { instance.c.must_equal([13, 40]) }
23
+ it { instance.c.must_equal([13, 41]) }
24
24
  it { instance.must_respond_to(:centre) }
25
25
  end
26
26
 
@@ -30,7 +30,7 @@ module Vedeu
30
30
  end
31
31
 
32
32
  describe '#cx' do
33
- it { instance.cx.must_equal(40) }
33
+ it { instance.cx.must_equal(41) }
34
34
  it { instance.must_respond_to(:centre_x) }
35
35
  end
36
36
 
@@ -39,6 +39,14 @@ module Vedeu
39
39
  it { instance.must_respond_to(:origin) }
40
40
  end
41
41
 
42
+ describe '#height' do
43
+ it { instance.height.must_equal(25) }
44
+ end
45
+
46
+ describe '#width' do
47
+ it { instance.width.must_equal(80) }
48
+ end
49
+
42
50
  describe '#y' do
43
51
  it { instance.y.must_equal(1) }
44
52
  it { instance.must_respond_to(:top) }
@@ -11,13 +11,15 @@ module Vedeu
11
11
  d: d,
12
12
  dn: dn,
13
13
  d_dn: d_dn,
14
- default: default
14
+ default: default,
15
+ options: options,
15
16
  }
16
17
  }
17
18
  let(:d) {}
18
19
  let(:dn) {}
19
20
  let(:d_dn) {}
20
21
  let(:default) {}
22
+ let(:options) { {} }
21
23
 
22
24
  describe '#initialize' do
23
25
  it { instance.must_be_instance_of(Vedeu::Dimension) }
@@ -25,16 +27,39 @@ module Vedeu
25
27
  it { instance.instance_variable_get('@dn').must_equal(dn) }
26
28
  it { instance.instance_variable_get('@d_dn').must_equal(d_dn) }
27
29
  it { instance.instance_variable_get('@default').must_equal(default) }
30
+ it { instance.instance_variable_get('@options').must_equal(options) }
28
31
  end
29
32
 
30
33
  describe '.pair' do
31
- let(:d) { 5 }
32
- let(:dn) { 8 }
34
+ let(:d) { 15 }
35
+ let(:dn) { 38 }
33
36
 
34
37
  subject { described.pair(attributes) }
35
38
 
36
39
  it { subject.must_be_instance_of(Array) }
37
- it { subject.must_equal([5, 8]) }
40
+ it { subject.must_equal([15, 38]) }
41
+
42
+ context 'when centred and a length can be determined' do
43
+ let(:options) { { centred: true } }
44
+ let(:default) { 80 }
45
+
46
+ context 'when d and dn are given' do
47
+ let(:d) { 7 }
48
+ let(:dn) { 47 }
49
+
50
+ it { subject.must_equal([20, 60]) }
51
+ end
52
+
53
+ context 'when only a d_dn is given' do
54
+ let(:d_dn) { 30 }
55
+
56
+ it { subject.must_equal([28, 52]) }
57
+ end
58
+
59
+ context 'when only a default is given' do
60
+ it { subject.must_equal([28, 52]) }
61
+ end
62
+ end
38
63
  end
39
64
 
40
65
  describe '#d1' do
@@ -42,55 +67,109 @@ module Vedeu
42
67
 
43
68
  it { subject.must_be_instance_of(Fixnum) }
44
69
 
45
- context 'when d is given' do
46
- let(:d) { 5 }
70
+ context 'when not centred and/or a length cannot be determined' do
71
+ context 'when d is given' do
72
+ let(:d) { 5 }
47
73
 
48
- it { subject.must_equal(5) }
74
+ it { subject.must_equal(5) }
75
+ end
76
+
77
+ context 'when d is not given' do
78
+ it { subject.must_equal(1) }
79
+ end
49
80
  end
50
81
 
51
- context 'when d is not given' do
52
- it { subject.must_equal(1) }
82
+ context 'when centred and a length can be determined' do
83
+ let(:options) { { centred: true } }
84
+ let(:default) { 80 }
85
+
86
+ context 'when d and dn are given' do
87
+ let(:d) { 7 }
88
+ let(:dn) { 47 }
89
+
90
+ it { subject.must_equal(20) }
91
+ end
92
+
93
+ context 'when only a d_dn is given' do
94
+ let(:d_dn) { 30 }
95
+
96
+ it { subject.must_equal(25) }
97
+ end
98
+
99
+ context 'when only a default is given' do
100
+ it { subject.must_equal(1) }
101
+ end
53
102
  end
54
103
  end
55
104
 
56
105
  describe '#d2' do
57
106
  subject { instance.d2 }
58
107
 
59
- context 'when d and dn is given' do
60
- let(:d) { 5 }
61
- let(:dn) { 8 }
108
+ context 'when not centred and/or a length cannot be determined' do
109
+ context 'when d and dn are given' do
110
+ let(:d) { 5 }
111
+ let(:dn) { 8 }
62
112
 
63
- it { subject.must_equal(8) }
64
- end
113
+ it { subject.must_equal(8) }
114
+ end
65
115
 
66
- context 'when d and d_dn is given' do
67
- let(:d) { 5 }
68
- let(:d_dn) { 2 }
116
+ context 'when d and d_dn are given' do
117
+ let(:d) { 5 }
118
+ let(:d_dn) { 2 }
69
119
 
70
- it { subject.must_equal(7) }
71
- end
120
+ it { subject.must_equal(7) }
121
+ end
72
122
 
73
- context 'when only d_dn is given' do
74
- let(:d_dn) { 6 }
123
+ context 'when only d_dn is given' do
124
+ let(:d_dn) { 6 }
75
125
 
76
- it { subject.must_equal(6) }
77
- end
126
+ it { subject.must_equal(6) }
127
+ end
78
128
 
79
- context 'when d and a default is given' do
80
- let(:d) { 1 }
81
- let(:default) { 40 }
129
+ context 'when only dn is given' do
130
+ let(:dn) { 8 }
82
131
 
83
- it { subject.must_equal(40) }
84
- end
132
+ it { subject.must_equal(8) }
133
+ end
134
+
135
+ context 'when d and a default is given' do
136
+ let(:d) { 1 }
137
+ let(:default) { 40 }
138
+
139
+ it { subject.must_equal(40) }
140
+ end
85
141
 
86
- context 'when only a default is given' do
87
- let(:default) { 25 }
142
+ context 'when only a default is given' do
143
+ let(:default) { 25 }
88
144
 
89
- it { subject.must_equal(25) }
145
+ it { subject.must_equal(25) }
146
+ end
147
+
148
+ context 'when no default is given' do
149
+ it { subject.must_equal(nil) }
150
+ end
90
151
  end
91
152
 
92
- context 'when no default is given' do
93
- it { subject.must_equal(nil) }
153
+ context 'when centred and a length can be determined' do
154
+ let(:options) { { centred: true } }
155
+ let(:default) { 80 }
156
+
157
+ context 'when d and dn are given' do
158
+ let(:d) { 7 }
159
+ let(:dn) { 47 }
160
+
161
+ it { subject.must_equal(60) }
162
+ end
163
+
164
+ context 'when only a d_dn is given' do
165
+ let(:d_dn) { 30 }
166
+
167
+ it { subject.must_equal(55) }
168
+ end
169
+
170
+ context 'when only a default is given' do
171
+ it { subject.must_equal(80) }
172
+ end
94
173
  end
95
174
  end
96
175