vedeu 0.8.4 → 0.8.5

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/TODO.md +4 -0
  3. data/docs/dsl.md +1 -11
  4. data/docs/dsl/by_method/geometry/align.md +1 -0
  5. data/docs/dsl/by_method/geometry/align_bottom.md +40 -0
  6. data/docs/dsl/by_method/geometry/align_centre.md +40 -0
  7. data/docs/dsl/by_method/geometry/align_left.md +40 -0
  8. data/docs/dsl/by_method/geometry/align_middle.md +40 -0
  9. data/docs/dsl/by_method/geometry/align_right.md +40 -0
  10. data/docs/dsl/by_method/geometry/align_top.md +40 -0
  11. data/docs/dsl/by_method/geometry/columns.md +1 -0
  12. data/docs/dsl/by_method/geometry/height.md +0 -0
  13. data/docs/dsl/by_method/geometry/horizontal_alignment.md +1 -0
  14. data/docs/dsl/by_method/geometry/rows.md +1 -0
  15. data/docs/dsl/by_method/geometry/vertical_alignment.md +1 -0
  16. data/docs/dsl/by_method/geometry/width.md +0 -0
  17. data/docs/dsl/by_method/geometry/x.md +1 -0
  18. data/docs/dsl/by_method/geometry/xn.md +1 -0
  19. data/docs/dsl/by_method/geometry/y.md +1 -0
  20. data/docs/dsl/by_method/geometry/yn.md +1 -0
  21. data/docs/dsl/by_method/render.md +5 -1
  22. data/docs/dsl/by_method/renders.md +31 -1
  23. data/docs/dsl/by_method/view.md +26 -0
  24. data/docs/dsl/by_method/view/stream.md +18 -0
  25. data/docs/dsl/by_method/views.md +32 -1
  26. data/docs/events/by_name/set_border_caption.md +2 -4
  27. data/docs/events/by_name/set_border_title.md +2 -4
  28. data/examples/views/empty_template.rb +0 -4
  29. data/examples/views/full_screen.rb +30 -5
  30. data/examples/views/misc_view.rb +464 -0
  31. data/examples/views/wordwrap.rb +72 -0
  32. data/examples/views/wordwrap.txt +8 -0
  33. data/integrations/dsl_app_021.rb +127 -0
  34. data/integrations/dsl_app_022.rb +133 -0
  35. data/integrations/expected/342_streams.out +1 -1
  36. data/integrations/expected/dsl_app_001.out +1 -1
  37. data/integrations/expected/dsl_app_002.out +1 -1
  38. data/integrations/expected/dsl_app_003.out +1 -1
  39. data/integrations/expected/dsl_app_004.out +1 -1
  40. data/integrations/expected/dsl_app_005.out +1 -1
  41. data/integrations/expected/dsl_app_006.out +1 -1
  42. data/integrations/expected/dsl_app_007.out +1 -1
  43. data/integrations/expected/dsl_app_008.out +1 -1
  44. data/integrations/expected/dsl_app_009.out +1 -1
  45. data/integrations/expected/dsl_app_010.out +1 -1
  46. data/integrations/expected/dsl_app_011.out +1 -1
  47. data/integrations/expected/dsl_app_012.out +1 -1
  48. data/integrations/expected/dsl_app_013.out +1 -1
  49. data/integrations/expected/dsl_app_014.out +1 -1
  50. data/integrations/expected/dsl_app_015.out +1 -1
  51. data/integrations/expected/dsl_app_016.out +1 -1
  52. data/integrations/expected/dsl_app_021.out +1 -0
  53. data/integrations/expected/dsl_app_022.out +1 -0
  54. data/integrations/support/test_interface_021.rb +7 -0
  55. data/integrations/support/test_interface_022.rb +15 -0
  56. data/lib/vedeu/all.rb +4 -2
  57. data/lib/vedeu/borders/border.rb +22 -6
  58. data/lib/vedeu/borders/repository.rb +4 -8
  59. data/lib/vedeu/buffers/buffer.rb +9 -6
  60. data/lib/vedeu/buffers/empty.rb +26 -23
  61. data/lib/vedeu/buffers/view.rb +44 -41
  62. data/lib/vedeu/cells/cursor.rb +0 -2
  63. data/lib/vedeu/cells/empty.rb +0 -1
  64. data/lib/vedeu/cells/escape.rb +0 -2
  65. data/lib/vedeu/coercers/alignment.rb +58 -8
  66. data/lib/vedeu/coercers/horizontal_alignment.rb +13 -9
  67. data/lib/vedeu/coercers/vertical_alignment.rb +13 -8
  68. data/lib/vedeu/common.rb +1 -1
  69. data/lib/vedeu/configuration/configuration.rb +41 -3
  70. data/lib/vedeu/cursors/coordinate.rb +1 -3
  71. data/lib/vedeu/cursors/cursor.rb +2 -6
  72. data/lib/vedeu/dsl/all.rb +1 -2
  73. data/lib/vedeu/dsl/border.rb +6 -6
  74. data/lib/vedeu/dsl/elements.rb +2 -2
  75. data/lib/vedeu/dsl/geometry.rb +7 -7
  76. data/lib/vedeu/dsl/{string → helpers}/align.rb +0 -0
  77. data/lib/vedeu/dsl/helpers/all.rb +17 -0
  78. data/lib/vedeu/dsl/{attributes.rb → helpers/attributes.rb} +0 -0
  79. data/lib/vedeu/dsl/{string → helpers}/text.rb +0 -0
  80. data/lib/vedeu/dsl/{string → helpers}/truncate.rb +0 -0
  81. data/lib/vedeu/dsl/{string → helpers}/wordwrap.rb +0 -0
  82. data/lib/vedeu/dsl/view.rb +11 -19
  83. data/lib/vedeu/dsl/views.rb +16 -106
  84. data/lib/vedeu/geometries/all.rb +0 -1
  85. data/lib/vedeu/geometries/area/area.rb +6 -12
  86. data/lib/vedeu/geometries/area/dimension.rb +21 -44
  87. data/lib/vedeu/geometries/dsl/all.rb +0 -1
  88. data/lib/vedeu/geometries/dsl/dsl.rb +22 -31
  89. data/lib/vedeu/geometries/geometry.rb +6 -0
  90. data/lib/vedeu/geometries/position.rb +6 -3
  91. data/lib/vedeu/geometries/repository.rb +1 -1
  92. data/lib/vedeu/input/mouse.rb +1 -0
  93. data/lib/vedeu/logging/log.rb +3 -6
  94. data/lib/vedeu/menus/dsl.rb +4 -5
  95. data/lib/vedeu/output/compressor.rb +11 -1
  96. data/lib/vedeu/output/viewport.rb +59 -59
  97. data/lib/vedeu/presentation/all.rb +1 -2
  98. data/lib/vedeu/presentation/colour.rb +75 -3
  99. data/lib/vedeu/{geometries/positionable.rb → presentation/position.rb} +4 -4
  100. data/lib/vedeu/presentation/presentation.rb +1 -3
  101. data/lib/vedeu/presentation/styles.rb +16 -1
  102. data/lib/vedeu/repositories/all.rb +0 -1
  103. data/lib/vedeu/sentence.rb +91 -0
  104. data/lib/vedeu/support/point.rb +72 -0
  105. data/lib/vedeu/terminal/terminal.rb +11 -53
  106. data/lib/vedeu/version.rb +1 -1
  107. data/lib/vedeu/views/composition.rb +11 -1
  108. data/lib/vedeu/views/default_attributes.rb +2 -0
  109. data/lib/vedeu/views/line.rb +16 -1
  110. data/lib/vedeu/views/stream.rb +16 -1
  111. data/lib/vedeu/views/view.rb +25 -17
  112. data/test/lib/vedeu/borders/border_test.rb +20 -2
  113. data/test/lib/vedeu/buffers/buffer_test.rb +15 -2
  114. data/test/lib/vedeu/buffers/empty_test.rb +51 -18
  115. data/test/lib/vedeu/buffers/view_test.rb +2 -2
  116. data/test/lib/vedeu/coercers/alignment_test.rb +32 -0
  117. data/test/lib/vedeu/coercers/horizontal_alignment_test.rb +16 -0
  118. data/test/lib/vedeu/coercers/vertical_alignment_test.rb +16 -0
  119. data/test/lib/vedeu/cursors/cursor_test.rb +4 -4
  120. data/test/lib/vedeu/cursors/dsl_test.rb +35 -21
  121. data/test/lib/vedeu/dsl/elements_test.rb +94 -2
  122. data/test/lib/vedeu/dsl/{string → helpers}/align_test.rb +0 -0
  123. data/test/lib/vedeu/dsl/{attributes_test.rb → helpers/attributes_test.rb} +0 -0
  124. data/test/lib/vedeu/dsl/{string → helpers}/text_test.rb +0 -0
  125. data/test/lib/vedeu/dsl/{string → helpers}/truncate_test.rb +0 -0
  126. data/test/lib/vedeu/dsl/{string → helpers}/wordwrap_test.rb +0 -0
  127. data/test/lib/vedeu/dsl/view_test.rb +22 -4
  128. data/test/lib/vedeu/dsl/views_test.rb +8 -5
  129. data/test/lib/vedeu/geometries/dsl/dsl_test.rb +2 -159
  130. data/test/lib/vedeu/geometries/position_test.rb +118 -60
  131. data/test/lib/vedeu/input/mouse_test.rb +1 -6
  132. data/test/lib/vedeu/logging/log_test.rb +14 -3
  133. data/test/lib/vedeu/presentation/colour_test.rb +77 -0
  134. data/test/lib/vedeu/{geometries/positionable_test.rb → presentation/position_test.rb} +4 -4
  135. data/test/lib/vedeu/sentence_test.rb +49 -0
  136. data/test/lib/vedeu/support/point_test.rb +139 -0
  137. data/test/lib/vedeu/terminal/terminal_test.rb +3 -44
  138. data/test/lib/vedeu/views/composition_test.rb +24 -4
  139. data/test/lib/vedeu/views/default_attributes_test.rb +10 -2
  140. data/test/lib/vedeu/views/view_test.rb +8 -15
  141. data/test/support/examples/material_colours_app.rb +0 -6
  142. data/vedeu.gemspec +1 -1
  143. metadata +58 -38
  144. data/examples/views/lines_line_stream.rb +0 -95
  145. data/examples/views/lines_line_streams.rb +0 -75
  146. data/examples/views/lines_line_streams_stream.rb +0 -78
  147. data/examples/views/lines_line_streams_stream_stream.rb +0 -50
  148. data/examples/views/lines_streams.rb +0 -93
  149. data/lib/vedeu/dsl/string/all.rb +0 -16
  150. data/lib/vedeu/geometries/dsl/validator.rb +0 -62
  151. data/lib/vedeu/presentation/background.rb +0 -54
  152. data/lib/vedeu/presentation/foreground.rb +0 -54
  153. data/lib/vedeu/repositories/parent.rb +0 -34
  154. data/test/lib/vedeu/geometries/dsl/validator_test.rb +0 -85
  155. data/test/lib/vedeu/presentation/background_test.rb +0 -74
  156. data/test/lib/vedeu/presentation/foreground_test.rb +0 -75
@@ -57,12 +57,7 @@ module Vedeu
57
57
  context 'when the mouse input was not recognised' do
58
58
  let(:input) { "\e[Mb0(" }
59
59
 
60
- it do
61
- Vedeu.expects(:trigger).with(:_mouse_event_, input)
62
- subject.
63
- must_equal("\e[93m[input] \e[39m\e[33mVedeu does not " \
64
- "support mouse button '66' yet.\e[39m")
65
- end
60
+ it { subject.must_equal(false) }
66
61
  end
67
62
  end
68
63
 
@@ -20,9 +20,20 @@ module Vedeu
20
20
  describe '.log' do
21
21
  subject { described.log(message: _message, force: force, type: type) }
22
22
 
23
- it { subject.must_equal(
24
- "\e[97m[info] \e[39m\e[37mSome message...\e[39m"
25
- ) }
23
+ context 'when :force is true' do
24
+ let(:force) { true }
25
+ let(:expected) {
26
+ "\e[97m[info] \e[39m\e[37mSome message...\e[39m"
27
+ }
28
+
29
+ it { subject.must_equal(expected) }
30
+ end
31
+
32
+ context 'when :force is false' do
33
+ let(:force) { false }
34
+
35
+ it { subject.must_equal(nil) }
36
+ end
26
37
  end
27
38
 
28
39
  describe '.log_stdout' do
@@ -26,6 +26,44 @@ module Vedeu
26
26
  let(:foreground) { '#aadd00' }
27
27
  let(:parent) { Vedeu::ParentPresentationColourTestClass.new }
28
28
 
29
+ describe '#background' do
30
+ subject { includer.background }
31
+
32
+ it { subject.must_be_instance_of(Vedeu::Colours::Background) }
33
+
34
+ context 'when a colour is not set' do
35
+ let(:colour) {}
36
+
37
+ context 'when a parent is not available' do
38
+ let(:parent) {}
39
+
40
+ it { subject.colour.must_equal('') }
41
+ end
42
+
43
+ context 'when a parent is available' do
44
+ it { subject.colour.must_equal('#330000') }
45
+ end
46
+ end
47
+
48
+ context 'when a colour is set' do
49
+ it { subject.colour.must_equal('#000033') }
50
+ end
51
+
52
+ # @todo Add more tests.
53
+ end
54
+
55
+ describe '#background=' do
56
+ subject { includer.background = '#987654' }
57
+
58
+ it do
59
+ includer.colour.background.colour.must_equal('#000033')
60
+ subject
61
+ includer.colour.background.colour.must_equal('#987654')
62
+ end
63
+
64
+ it { subject.must_equal('#987654') }
65
+ end
66
+
29
67
  describe '#colour' do
30
68
  subject { includer.colour }
31
69
 
@@ -63,6 +101,45 @@ module Vedeu
63
101
  it { subject.must_be_instance_of(Vedeu::Colours::Colour) }
64
102
  end
65
103
 
104
+ describe '#foreground' do
105
+ subject { includer.foreground }
106
+
107
+ it { subject.must_be_instance_of(Vedeu::Colours::Foreground) }
108
+ it { subject.colour.must_equal('#aadd00') }
109
+
110
+ context 'when a colour is not set' do
111
+ let(:colour) {}
112
+
113
+ context 'when a parent is not available' do
114
+ let(:parent) {}
115
+
116
+ it { subject.colour.must_equal('') }
117
+ end
118
+
119
+ context 'when a parent is available' do
120
+ it { subject.colour.must_equal('#00aadd') }
121
+ end
122
+ end
123
+
124
+ context 'when a colour is set' do
125
+ it { subject.colour.must_equal('#aadd00') }
126
+ end
127
+
128
+ # @todo Add more tests.
129
+ end
130
+
131
+ describe '#foreground=' do
132
+ subject { includer.foreground = '#123456' }
133
+
134
+ it do
135
+ includer.colour.foreground.colour.must_equal('#aadd00')
136
+ subject
137
+ includer.colour.foreground.colour.must_equal('#123456')
138
+ end
139
+
140
+ it { subject.must_equal('#123456') }
141
+ end
142
+
66
143
  end # Colour
67
144
 
68
145
  end # Presentation
@@ -4,9 +4,9 @@ require 'test_helper'
4
4
 
5
5
  module Vedeu
6
6
 
7
- module Geometries
7
+ module Presentation
8
8
 
9
- describe Positionable do
9
+ describe Position do
10
10
 
11
11
  # describe '#position' do
12
12
  # subject { instance.position }
@@ -62,8 +62,8 @@ module Vedeu
62
62
  # end
63
63
  # end
64
64
 
65
- end # Positionable
65
+ end # Position
66
66
 
67
- end # Positionable
67
+ end # Presentation
68
68
 
69
69
  end # Vedeu
@@ -0,0 +1,49 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Sentence do
6
+
7
+ let(:described) { Vedeu::Sentence }
8
+ let(:elements) { ['Hydrogen'] }
9
+ let(:label) { 'elements' }
10
+
11
+ describe '.construct' do
12
+ subject { described.construct(elements, label) }
13
+
14
+ context 'when there is one element' do
15
+ let(:elements) { ['Hydrogen'] }
16
+
17
+ it 'returns the element as a string' do
18
+ subject.must_equal('Hydrogen')
19
+ end
20
+ end
21
+
22
+ context 'when there are two elements' do
23
+ let(:elements) { %w(Hydrogen Helium) }
24
+
25
+ it "returns the elements joined with 'and'" do
26
+ subject.must_equal('Hydrogen and Helium')
27
+ end
28
+ end
29
+
30
+ context 'when there are more than two elements' do
31
+ let(:elements) { %w(Hydrogen Helium Lithium) }
32
+
33
+ it 'returns the elements as a sentence list' do
34
+ subject.must_equal('Hydrogen, Helium and Lithium')
35
+ end
36
+ end
37
+
38
+ context 'when there are no elements' do
39
+ let(:elements) { [] }
40
+
41
+ it 'returns a polite message' do
42
+ subject.must_equal('No elements have been assigned.')
43
+ end
44
+ end
45
+ end
46
+
47
+ end # Sentence
48
+
49
+ end # Vedeu
@@ -0,0 +1,139 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Point do
6
+
7
+ let(:described) { Vedeu::Point }
8
+ let(:instance) { described.new(value: _value, min: min, max: max) }
9
+ let(:_value) { 5 }
10
+ let(:min) { 2 }
11
+ let(:max) { 9 }
12
+
13
+ describe '#initialize' do
14
+ it { instance.must_be_instance_of(described) }
15
+ it { instance.instance_variable_get('@min').must_equal(min) }
16
+ it { instance.instance_variable_get('@max').must_equal(max) }
17
+ it { instance.instance_variable_get('@value').must_equal(_value) }
18
+ end
19
+
20
+ describe '.coerce' do
21
+ subject { described.coerce(value: _value, min: min, max: max) }
22
+
23
+ context 'when :min is not a Fixnum' do
24
+ let(:min) { :invalid }
25
+
26
+ it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
27
+ end
28
+
29
+ context 'when :max is not a Fixnum' do
30
+ let(:max) { :invalid }
31
+
32
+ it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
33
+ end
34
+
35
+ context 'when :min > :max' do
36
+ let(:max) { 4 }
37
+ let(:min) { 7 }
38
+
39
+ it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
40
+ end
41
+
42
+ context 'when :value is nil' do
43
+ let(:_value) {}
44
+
45
+ it {
46
+ subject.must_be_instance_of(Vedeu::Point)
47
+ subject.value.must_equal(min)
48
+ }
49
+ end
50
+
51
+ context 'when :value is not nil' do
52
+ context 'when :value is less than min' do
53
+ let(:_value) { 1 }
54
+
55
+ it {
56
+ subject.must_be_instance_of(Vedeu::Point)
57
+ subject.value.must_equal(min)
58
+ }
59
+ end
60
+
61
+ context 'when :value is greater than max' do
62
+ let(:_value) { 11 }
63
+
64
+ it {
65
+ subject.must_be_instance_of(Vedeu::Point)
66
+ subject.value.must_equal(max)
67
+ }
68
+ end
69
+
70
+ context 'when :value > :min and :value < :max' do
71
+ it {
72
+ subject.must_be_instance_of(Vedeu::Point)
73
+ subject.value.must_equal(_value)
74
+ }
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '.valid?' do
80
+ subject { described.valid?(value: _value, min: min, max: max) }
81
+
82
+ context 'when the value is not a Fixnum' do
83
+ let(:_value) { :invalid }
84
+
85
+ it { subject.must_equal(false) }
86
+ end
87
+
88
+ context 'when the value is a Fixnum' do
89
+ context 'but the value < min' do
90
+ let(:_value) { 1 }
91
+
92
+ it { subject.must_equal(false) }
93
+ end
94
+
95
+ context 'but the value >= min' do
96
+ let(:_value) { 5 }
97
+
98
+ it { subject.must_equal(true) }
99
+ end
100
+
101
+ context 'but the value > max' do
102
+ let(:_value) { 11 }
103
+
104
+ it { subject.must_equal(false) }
105
+ end
106
+
107
+ context 'but the value <= max' do
108
+ let(:_value) { 7 }
109
+
110
+ it { subject.must_equal(true) }
111
+ end
112
+ end
113
+ end
114
+
115
+ describe '#coerce' do
116
+ it { instance.must_respond_to(:coerce) }
117
+ end
118
+
119
+ describe '#valid?' do
120
+ it { instance.must_respond_to(:valid?) }
121
+ end
122
+
123
+ describe '#value' do
124
+ subject { instance.value }
125
+
126
+ context 'when :value is nil' do
127
+ let(:_value) {}
128
+
129
+ it { subject.must_equal(min) }
130
+ end
131
+
132
+ context 'when :value is not nil' do
133
+ it { subject.must_equal(_value) }
134
+ end
135
+ end
136
+
137
+ end # Point
138
+
139
+ end # Vedeu
@@ -112,20 +112,12 @@ module Vedeu
112
112
  subject.must_equal(["\e[?25h"])
113
113
  end
114
114
 
115
- it 'hides the cursor in raw mode' do
115
+ it 'leaves the cursor hidden in raw mode' do
116
116
  described.raw_mode!
117
117
  subject.must_equal(nil)
118
118
  end
119
119
  end
120
120
 
121
-
122
- describe '.cursor' do
123
- subject { described.cursor }
124
-
125
- #it { subject.must_be_instance_of(Array) }
126
- #it { subject.must_be_instance_of(Vedeu::Geometries::Position) }
127
- end
128
-
129
121
  describe '.centre' do
130
122
  subject { described.centre }
131
123
 
@@ -161,50 +153,17 @@ module Vedeu
161
153
 
162
154
  it { subject.must_be_instance_of(Fixnum) }
163
155
  it { subject.must_equal(1) }
164
- it { described.must_respond_to(:x) }
165
- it { described.must_respond_to(:y) }
166
156
  it { described.must_respond_to(:tx) }
167
157
  it { described.must_respond_to(:ty) }
168
158
  end
169
159
 
170
- describe '.width' do
171
- subject { Vedeu::Terminal.width }
172
-
173
- it { subject.must_be_instance_of(Fixnum) }
174
- it { described.must_respond_to(:xn) }
175
- it { described.must_respond_to(:txn) }
176
-
177
- context 'when the terminal is an odd number of characters in width' do
178
- it 'returns the width' do
179
- subject.must_equal(40)
180
- end
181
- end
182
- end
183
-
184
- describe '.height' do
185
- subject { Vedeu::Terminal.height }
186
-
187
- it { subject.must_be_instance_of(Fixnum) }
188
- it { described.must_respond_to(:yn) }
189
- it { described.must_respond_to(:tyn) }
190
-
191
- context 'when the terminal is an odd number of characters in height' do
192
- it 'returns the height' do
193
- subject.must_equal(24)
194
- end
195
- end
196
- end
197
-
198
160
  describe '.size' do
199
161
  subject { Vedeu::Terminal.size }
200
162
 
201
163
  it { subject.must_be_instance_of(Array) }
202
164
 
203
- context 'when the terminal is an odd number of characters in height or ' \
204
- 'width' do
205
- it 'returns the width and height' do
206
- subject.must_equal([24, 40])
207
- end
165
+ it 'returns the width and height' do
166
+ subject.must_equal([25, 40])
208
167
  end
209
168
  end
210
169
 
@@ -44,10 +44,6 @@ module Vedeu
44
44
  it { instance.instance_variable_get('@value').must_equal(_value) }
45
45
  end
46
46
 
47
- describe '#attributes' do
48
- it { instance.must_respond_to(:attributes) }
49
- end
50
-
51
47
  describe '#parent' do
52
48
  it { instance.must_respond_to(:parent) }
53
49
  end
@@ -72,6 +68,30 @@ module Vedeu
72
68
  it { instance.must_respond_to(:<<) }
73
69
  end
74
70
 
71
+ describe '#attributes' do
72
+ subject { instance.attributes }
73
+
74
+ it { subject.must_be_instance_of(Hash) }
75
+ end
76
+
77
+ describe '#update_buffers' do
78
+ let(:refresh) {}
79
+
80
+ before { Vedeu.stubs(:trigger) }
81
+
82
+ subject { instance.update_buffers(refresh) }
83
+
84
+ it { subject.must_be_instance_of(described) }
85
+
86
+ context 'when the instance has views defined' do
87
+ # @todo Add more tests.
88
+ end
89
+
90
+ context 'when the instance has no views defined' do
91
+ # @todo Add more tests.
92
+ end
93
+ end
94
+
75
95
  end # Composition
76
96
 
77
97
  end # Views