vedeu 0.7.4 → 0.8.0

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 (277) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/docs/api.md +5 -1
  4. data/docs/borders.md +2 -26
  5. data/docs/dsl.md +4 -4
  6. data/docs/dsl_elements.md +100 -0
  7. data/docs/events/by_name/action.md +3 -0
  8. data/docs/events/by_name/cursor_hide.md +3 -0
  9. data/docs/events/by_name/cursor_reset.md +3 -0
  10. data/docs/events/by_name/cursor_show.md +3 -0
  11. data/docs/events/by_name/geometry_down.md +3 -0
  12. data/docs/events/by_name/geometry_left.md +3 -0
  13. data/docs/events/by_name/geometry_right.md +3 -0
  14. data/docs/events/by_name/geometry_up.md +3 -0
  15. data/docs/events/by_name/hide_view.md +3 -0
  16. data/docs/events/by_name/set_border_caption.md +13 -0
  17. data/docs/events/by_name/set_border_title.md +13 -0
  18. data/docs/events/by_name/show_view.md +3 -0
  19. data/docs/events/by_name/standalone.md +3 -0
  20. data/docs/events/by_name/toggle_view.md +3 -0
  21. data/docs/events/by_name/view_down.md +4 -0
  22. data/docs/events/by_name/view_left.md +4 -0
  23. data/docs/events/by_name/view_right.md +4 -0
  24. data/docs/events/by_name/view_up.md +4 -0
  25. data/examples/views/empty_template.rb +46 -0
  26. data/examples/views/expected/line.out +1 -0
  27. data/examples/views/expected/lines.out +1 -0
  28. data/examples/views/expected/lines_alignment.out +1 -0
  29. data/examples/views/line.rb +220 -0
  30. data/examples/views/lines.rb +281 -0
  31. data/examples/views/lines_alignment.rb +231 -0
  32. data/examples/views/lines_line_stream.rb +99 -0
  33. data/examples/views/lines_line_streams.rb +73 -0
  34. data/examples/views/lines_line_streams_stream.rb +83 -0
  35. data/examples/views/lines_line_streams_stream_stream.rb +53 -0
  36. data/examples/views/lines_streams.rb +50 -0
  37. data/examples/views/lines_streams_stream.rb +51 -0
  38. data/examples/views/runner.sh +27 -0
  39. data/lib/vedeu/all.rb +6 -2
  40. data/lib/vedeu/application/controller.rb +1 -1
  41. data/lib/vedeu/boolean.rb +35 -0
  42. data/lib/vedeu/borders/border.rb +3 -3
  43. data/lib/vedeu/borders/caption.rb +1 -1
  44. data/lib/vedeu/borders/dsl.rb +1 -20
  45. data/lib/vedeu/borders/title.rb +6 -8
  46. data/lib/vedeu/buffers/buffer.rb +2 -2
  47. data/lib/vedeu/buffers/refresh.rb +1 -1
  48. data/lib/vedeu/cells/border.rb +0 -11
  49. data/lib/vedeu/cells/empty.rb +4 -4
  50. data/lib/vedeu/{geometries/alignment → coercers}/alignment.rb +50 -53
  51. data/lib/vedeu/coercers/all.rb +16 -0
  52. data/lib/vedeu/coercers/colour.rb +78 -0
  53. data/lib/vedeu/coercers/colour_attributes.rb +122 -0
  54. data/lib/vedeu/coercers/horizontal_alignment.rb +28 -0
  55. data/lib/vedeu/coercers/vertical_alignment.rb +27 -0
  56. data/lib/vedeu/colours/all.rb +1 -0
  57. data/lib/vedeu/colours/background.rb +13 -2
  58. data/lib/vedeu/colours/colour.rb +16 -31
  59. data/lib/vedeu/colours/foreground.rb +13 -2
  60. data/lib/vedeu/colours/translator.rb +21 -59
  61. data/lib/vedeu/colours/validator.rb +84 -0
  62. data/lib/vedeu/common.rb +52 -0
  63. data/lib/vedeu/configuration/api.rb +4 -10
  64. data/lib/vedeu/configuration/configuration.rb +4 -4
  65. data/lib/vedeu/cursors/coordinate.rb +1 -1
  66. data/lib/vedeu/cursors/cursor.rb +1 -1
  67. data/lib/vedeu/cursors/dsl.rb +1 -28
  68. data/lib/vedeu/dsl/all.rb +7 -7
  69. data/lib/vedeu/dsl/attributes.rb +224 -0
  70. data/lib/vedeu/dsl/border.rb +127 -0
  71. data/lib/vedeu/dsl/cursors.rb +44 -0
  72. data/lib/vedeu/dsl/dsl.rb +9 -0
  73. data/lib/vedeu/dsl/elements.rb +335 -0
  74. data/lib/vedeu/dsl/geometry.rb +113 -0
  75. data/lib/vedeu/dsl/string/align.rb +127 -0
  76. data/lib/vedeu/dsl/string/all.rb +14 -0
  77. data/lib/vedeu/dsl/string/text.rb +107 -0
  78. data/lib/vedeu/dsl/string/truncate.rb +111 -0
  79. data/lib/vedeu/{output → dsl/string}/wordwrap.rb +10 -6
  80. data/lib/vedeu/dsl/view.rb +124 -248
  81. data/lib/vedeu/dsl/views.rb +244 -0
  82. data/lib/vedeu/editor/cursor.rb +1 -1
  83. data/lib/vedeu/editor/delete.rb +3 -1
  84. data/lib/vedeu/editor/insert.rb +22 -6
  85. data/lib/vedeu/editor/line.rb +15 -9
  86. data/lib/vedeu/editor/lines.rb +27 -18
  87. data/lib/vedeu/esc/actions.rb +73 -26
  88. data/lib/vedeu/esc/all.rb +2 -0
  89. data/lib/vedeu/esc/background.rb +219 -0
  90. data/lib/vedeu/esc/borders.rb +72 -26
  91. data/lib/vedeu/esc/colours.rb +26 -27
  92. data/lib/vedeu/esc/esc.rb +4 -4
  93. data/lib/vedeu/esc/foreground.rb +219 -0
  94. data/lib/vedeu/esc/mouse.rb +16 -13
  95. data/lib/vedeu/events/aliases.rb +2 -2
  96. data/lib/vedeu/events/event.rb +1 -1
  97. data/lib/vedeu/geometries/all.rb +0 -1
  98. data/lib/vedeu/geometries/area/dimension.rb +2 -2
  99. data/lib/vedeu/geometries/dsl/dsl.rb +3 -51
  100. data/lib/vedeu/geometries/dsl/validator.rb +4 -4
  101. data/lib/vedeu/geometries/geometry.rb +10 -10
  102. data/lib/vedeu/geometries/move.rb +4 -4
  103. data/lib/vedeu/groups/dsl.rb +1 -0
  104. data/lib/vedeu/groups/group.rb +1 -1
  105. data/lib/vedeu/input/all.rb +1 -0
  106. data/lib/vedeu/input/capture.rb +14 -10
  107. data/lib/vedeu/input/dsl.rb +20 -26
  108. data/lib/vedeu/input/key.rb +0 -6
  109. data/lib/vedeu/input/keymap.rb +4 -9
  110. data/lib/vedeu/input/keys.rb +13 -0
  111. data/lib/vedeu/input/mapper.rb +29 -14
  112. data/lib/vedeu/input/read.rb +4 -2
  113. data/lib/vedeu/interfaces/dsl.rb +23 -22
  114. data/lib/vedeu/interfaces/interface.rb +2 -2
  115. data/lib/vedeu/logging/debug.rb +33 -0
  116. data/lib/vedeu/logging/log.rb +42 -33
  117. data/lib/vedeu/menus/dsl.rb +7 -18
  118. data/lib/vedeu/menus/menu.rb +1 -1
  119. data/lib/vedeu/models/focus.rb +1 -1
  120. data/lib/vedeu/models/toggleable.rb +4 -4
  121. data/lib/vedeu/null/generic.rb +2 -2
  122. data/lib/vedeu/output/all.rb +0 -2
  123. data/lib/vedeu/output/compressor_cache.rb +1 -1
  124. data/lib/vedeu/output/output.rb +5 -20
  125. data/lib/vedeu/presentation/colour.rb +39 -7
  126. data/lib/vedeu/presentation/style.rb +25 -11
  127. data/lib/vedeu/renderers/html.rb +11 -11
  128. data/lib/vedeu/repositories/assemblage.rb +9 -0
  129. data/lib/vedeu/repositories/collection.rb +1 -0
  130. data/lib/vedeu/repositories/defaults.rb +4 -1
  131. data/lib/vedeu/repositories/model.rb +7 -37
  132. data/lib/vedeu/repositories/parent.rb +6 -6
  133. data/lib/vedeu/repositories/registerable.rb +16 -2
  134. data/lib/vedeu/repositories/repositories.rb +1 -1
  135. data/lib/vedeu/repositories/repository.rb +2 -12
  136. data/lib/vedeu/runtime/flags.rb +1 -1
  137. data/lib/vedeu/terminal/terminal.rb +7 -2
  138. data/lib/vedeu/version.rb +1 -1
  139. data/lib/vedeu/views/all.rb +4 -1
  140. data/lib/vedeu/views/char.rb +5 -4
  141. data/lib/vedeu/views/chars.rb +42 -0
  142. data/lib/vedeu/views/composition.rb +15 -30
  143. data/lib/vedeu/views/default_attributes.rb +74 -0
  144. data/lib/vedeu/views/html_char.rb +2 -2
  145. data/lib/vedeu/views/line.rb +27 -53
  146. data/lib/vedeu/views/lines.rb +31 -0
  147. data/lib/vedeu/views/stream.rb +31 -78
  148. data/lib/vedeu/views/streams.rb +42 -0
  149. data/lib/vedeu/views/value.rb +150 -0
  150. data/lib/vedeu/views/view.rb +32 -36
  151. data/lib/vedeu/views/{view_collection.rb → views.rb} +2 -2
  152. data/test/lib/vedeu/application/application_controller_test.rb +5 -0
  153. data/test/lib/vedeu/application/controller_test.rb +22 -28
  154. data/test/lib/vedeu/boolean_test.rb +57 -0
  155. data/test/lib/vedeu/borders/border_test.rb +130 -36
  156. data/test/lib/vedeu/borders/dsl_test.rb +63 -10
  157. data/test/lib/vedeu/borders/title_test.rb +16 -5
  158. data/test/lib/vedeu/buffers/buffer_test.rb +26 -10
  159. data/test/lib/vedeu/buffers/empty_test.rb +1 -1
  160. data/test/lib/vedeu/cells/border_test.rb +0 -6
  161. data/test/lib/vedeu/cells/clear_test.rb +2 -0
  162. data/test/lib/vedeu/cells/empty_test.rb +12 -2
  163. data/test/lib/vedeu/cells/escape_test.rb +7 -2
  164. data/test/lib/vedeu/{geometries/alignment → coercers}/alignment_test.rb +44 -19
  165. data/test/lib/vedeu/coercers/colour_attributes_test.rb +168 -0
  166. data/test/lib/vedeu/coercers/colour_test.rb +75 -0
  167. data/test/lib/vedeu/{geometries/alignment → coercers}/horizontal_alignment_test.rb +6 -6
  168. data/test/lib/vedeu/{geometries/alignment → coercers}/vertical_alignment_test.rb +6 -6
  169. data/test/lib/vedeu/colours/background_test.rb +17 -1
  170. data/test/lib/vedeu/colours/colour_test.rb +74 -2
  171. data/test/lib/vedeu/colours/foreground_test.rb +17 -1
  172. data/test/lib/vedeu/colours/repository_test.rb +1 -1
  173. data/test/lib/vedeu/colours/translator_test.rb +8 -1
  174. data/test/lib/vedeu/colours/validator_test.rb +60 -0
  175. data/test/lib/vedeu/common_test.rb +138 -0
  176. data/test/lib/vedeu/configuration/api_test.rb +96 -51
  177. data/test/lib/vedeu/cursors/coordinate_test.rb +58 -117
  178. data/test/lib/vedeu/cursors/cursor_test.rb +46 -17
  179. data/test/lib/vedeu/cursors/dsl_test.rb +19 -5
  180. data/test/lib/vedeu/distributed/client_test.rb +8 -3
  181. data/test/lib/vedeu/distributed/server_test.rb +8 -0
  182. data/test/lib/vedeu/distributed/test_application_test.rb +62 -19
  183. data/test/lib/vedeu/distributed/uri_test.rb +4 -2
  184. data/test/lib/vedeu/dsl/attributes_test.rb +212 -0
  185. data/test/lib/vedeu/dsl/border_test.rb +51 -0
  186. data/test/lib/vedeu/dsl/{lines_test.rb → cursors_test.rb} +2 -2
  187. data/test/lib/vedeu/dsl/dsl_test.rb +44 -0
  188. data/test/lib/vedeu/dsl/elements_test.rb +118 -0
  189. data/test/lib/vedeu/dsl/geometry_test.rb +35 -0
  190. data/test/lib/vedeu/dsl/presentation_test.rb +52 -11
  191. data/test/lib/vedeu/dsl/string/align_test.rb +147 -0
  192. data/test/lib/vedeu/dsl/string/text_test.rb +213 -0
  193. data/test/lib/vedeu/dsl/string/truncate_test.rb +97 -0
  194. data/test/lib/vedeu/{output → dsl/string}/wordwrap_test.rb +3 -3
  195. data/test/lib/vedeu/dsl/view_test.rb +30 -42
  196. data/test/lib/vedeu/dsl/views_test.rb +61 -0
  197. data/test/lib/vedeu/editor/cursor_test.rb +30 -12
  198. data/test/lib/vedeu/editor/document_test.rb +18 -10
  199. data/test/lib/vedeu/editor/line_test.rb +4 -1
  200. data/test/lib/vedeu/editor/lines_test.rb +11 -3
  201. data/test/lib/vedeu/esc/actions_test.rb +42 -4
  202. data/test/lib/vedeu/esc/background_test.rb +185 -0
  203. data/test/lib/vedeu/esc/borders_test.rb +37 -9
  204. data/test/lib/vedeu/esc/colours_test.rb +0 -59
  205. data/test/lib/vedeu/esc/foreground_test.rb +185 -0
  206. data/test/lib/vedeu/esc/mouse_test.rb +9 -4
  207. data/test/lib/vedeu/geometries/area/area_test.rb +34 -11
  208. data/test/lib/vedeu/geometries/dsl/dsl_test.rb +52 -61
  209. data/test/lib/vedeu/geometries/geometry_test.rb +62 -18
  210. data/test/lib/vedeu/geometries/position_test.rb +14 -7
  211. data/test/lib/vedeu/groups/dsl_test.rb +24 -15
  212. data/test/lib/vedeu/groups/group_test.rb +18 -8
  213. data/test/lib/vedeu/input/dsl_test.rb +33 -16
  214. data/test/lib/vedeu/input/key_test.rb +8 -1
  215. data/test/lib/vedeu/input/keymap_test.rb +4 -1
  216. data/test/lib/vedeu/input/keys_test.rb +16 -0
  217. data/test/lib/vedeu/interfaces/dsl_test.rb +24 -30
  218. data/test/lib/vedeu/interfaces/interface_test.rb +79 -24
  219. data/test/lib/vedeu/logging/ips_test.rb +10 -1
  220. data/test/lib/vedeu/menus/dsl_test.rb +24 -23
  221. data/test/lib/vedeu/menus/menu_test.rb +18 -8
  222. data/test/lib/vedeu/models/page_test.rb +5 -1
  223. data/test/lib/vedeu/models/row_test.rb +4 -0
  224. data/test/lib/vedeu/models/toggleable_test.rb +10 -6
  225. data/test/lib/vedeu/null/generic_test.rb +90 -1
  226. data/test/lib/vedeu/output/viewport_test.rb +11 -10
  227. data/test/lib/vedeu/plugins/plugin_test.rb +22 -9
  228. data/test/lib/vedeu/presentation/colour_test.rb +2 -1
  229. data/test/lib/vedeu/presentation/presentation_test.rb +13 -8
  230. data/test/lib/vedeu/presentation/style_test.rb +28 -13
  231. data/test/lib/vedeu/renderers/file_test.rb +4 -2
  232. data/test/lib/vedeu/renderers/options_test.rb +1 -1
  233. data/test/lib/vedeu/repositories/assemblage_test.rb +18 -0
  234. data/test/lib/vedeu/repositories/collection_test.rb +34 -10
  235. data/test/lib/vedeu/repositories/defaults_test.rb +6 -0
  236. data/test/lib/vedeu/repositories/model_test.rb +4 -13
  237. data/test/lib/vedeu/repositories/repository_test.rb +12 -5
  238. data/test/lib/vedeu/repositories/store_test.rb +9 -0
  239. data/test/lib/vedeu/runtime/flags_test.rb +6 -4
  240. data/test/lib/vedeu/runtime/launcher_test.rb +1 -1
  241. data/test/lib/vedeu/templating/helpers_test.rb +93 -65
  242. data/test/lib/vedeu/templating/view_template_test.rb +26 -26
  243. data/test/lib/vedeu/views/char_test.rb +36 -11
  244. data/test/lib/vedeu/views/chars_test.rb +71 -0
  245. data/test/lib/vedeu/views/composition_test.rb +17 -16
  246. data/test/lib/vedeu/views/default_attributes_test.rb +97 -0
  247. data/test/lib/vedeu/views/line_test.rb +20 -75
  248. data/test/lib/vedeu/views/lines_test.rb +47 -0
  249. data/test/lib/vedeu/views/stream_test.rb +38 -63
  250. data/test/lib/vedeu/views/streams_test.rb +9 -0
  251. data/test/lib/vedeu/views/value_test.rb +112 -0
  252. data/test/lib/vedeu/views/view_test.rb +67 -45
  253. data/test/lib/vedeu/views/views_test.rb +22 -0
  254. data/test/support/examples/material_colours_app.rb +2 -2
  255. data/test/support/helpers/model_test_class.rb +1 -0
  256. data/test/test_helper.rb +3 -1
  257. data/vedeu.gemspec +2 -2
  258. metadata +124 -58
  259. data/lib/vedeu/dsl/composition.rb +0 -150
  260. data/lib/vedeu/dsl/line.rb +0 -119
  261. data/lib/vedeu/dsl/lines.rb +0 -23
  262. data/lib/vedeu/dsl/shared.rb +0 -85
  263. data/lib/vedeu/dsl/stream.rb +0 -40
  264. data/lib/vedeu/dsl/streams.rb +0 -23
  265. data/lib/vedeu/dsl/text.rb +0 -98
  266. data/lib/vedeu/geometries/alignment/all.rb +0 -11
  267. data/lib/vedeu/geometries/alignment/horizontal_alignment.rb +0 -27
  268. data/lib/vedeu/geometries/alignment/vertical_alignment.rb +0 -27
  269. data/lib/vedeu/output/text.rb +0 -275
  270. data/test/lib/vedeu/dsl/composition_test.rb +0 -67
  271. data/test/lib/vedeu/dsl/line_test.rb +0 -85
  272. data/test/lib/vedeu/dsl/shared_test.rb +0 -66
  273. data/test/lib/vedeu/dsl/stream_test.rb +0 -30
  274. data/test/lib/vedeu/dsl/streams_test.rb +0 -13
  275. data/test/lib/vedeu/dsl/text_test.rb +0 -122
  276. data/test/lib/vedeu/output/text_test.rb +0 -156
  277. data/test/lib/vedeu/views/view_collection_test.rb +0 -13
@@ -76,6 +76,10 @@ module Vedeu
76
76
  end
77
77
  end
78
78
 
79
+ describe '#==' do
80
+ it { instance.must_respond_to(:==) }
81
+ end
82
+
79
83
  describe '#render' do
80
84
  it { instance.must_respond_to(:render) }
81
85
  end
@@ -83,17 +87,16 @@ module Vedeu
83
87
  describe '#to_s' do
84
88
  subject { instance.to_s }
85
89
 
86
- it { instance.must_respond_to(:to_str) }
87
-
88
90
  it { subject.must_equal('Aluminium') }
89
91
  end
90
92
 
93
+ describe '#to_str' do
94
+ it { instance.must_respond_to(:to_str) }
95
+ end
96
+
91
97
  describe '#value' do
92
98
  subject { instance.value }
93
99
 
94
- it { instance.must_respond_to(:title) }
95
- it { instance.must_respond_to(:caption) }
96
-
97
100
  context 'when the value is nil' do
98
101
  let(:_value) {}
99
102
 
@@ -105,6 +108,14 @@ module Vedeu
105
108
  end
106
109
  end
107
110
 
111
+ describe '#title' do
112
+ it { instance.must_respond_to(:title) }
113
+ end
114
+
115
+ describe '#caption' do
116
+ it { instance.must_respond_to(:caption) }
117
+ end
118
+
108
119
  end # Title
109
120
 
110
121
  end # Borders
@@ -33,16 +33,32 @@ module Vedeu
33
33
  end
34
34
  end
35
35
 
36
- describe 'accessors' do
37
- it do
38
- instance.must_respond_to(:back)
39
- instance.must_respond_to(:back=)
40
- instance.must_respond_to(:front)
41
- instance.must_respond_to(:front=)
42
- instance.must_respond_to(:previous)
43
- instance.must_respond_to(:previous=)
44
- instance.must_respond_to(:name)
45
- end
36
+ describe '#back' do
37
+ it { instance.must_respond_to(:back) }
38
+ end
39
+
40
+ describe '#back=' do
41
+ it { instance.must_respond_to(:back=) }
42
+ end
43
+
44
+ describe '#front' do
45
+ it { instance.must_respond_to(:front) }
46
+ end
47
+
48
+ describe '#front=' do
49
+ it { instance.must_respond_to(:front=) }
50
+ end
51
+
52
+ describe '#previous' do
53
+ it { instance.must_respond_to(:previous) }
54
+ end
55
+
56
+ describe '#previous=' do
57
+ it { instance.must_respond_to(:previous=) }
58
+ end
59
+
60
+ describe '#name' do
61
+ it { instance.must_respond_to(:name) }
46
62
  end
47
63
 
48
64
  describe '#add' do
@@ -50,7 +50,7 @@ module Vedeu
50
50
  end
51
51
  end
52
52
 
53
- describe 'accessors' do
53
+ describe '#name' do
54
54
  it { instance.must_respond_to(:name) }
55
55
  end
56
56
 
@@ -33,12 +33,6 @@ module Vedeu
33
33
  # @todo Add more tests.
34
34
  end
35
35
 
36
- describe '#named_parent' do
37
- subject { instance.named_parent }
38
-
39
- # @todo Add more tests.
40
- end
41
-
42
36
  describe '#value' do
43
37
  subject { instance.value }
44
38
 
@@ -25,7 +25,9 @@ module Vedeu
25
25
  subject { instance.value }
26
26
 
27
27
  it { subject.must_equal(' ') }
28
+ end
28
29
 
30
+ describe '#text' do
29
31
  it { instance.must_respond_to(:text) }
30
32
  end
31
33
 
@@ -23,8 +23,11 @@ module Vedeu
23
23
  let(:style) { '' }
24
24
  let(:_value) { '' }
25
25
 
26
- describe 'accessors' do
26
+ describe '#name' do
27
27
  it { instance.must_respond_to(:name) }
28
+ end
29
+
30
+ describe '#value' do
28
31
  it { instance.must_respond_to(:value) }
29
32
  end
30
33
 
@@ -48,6 +51,10 @@ module Vedeu
48
51
  end
49
52
  end
50
53
 
54
+ describe '#==' do
55
+ it { instance.must_respond_to(:==) }
56
+ end
57
+
51
58
  describe '#text' do
52
59
  subject { instance.text }
53
60
 
@@ -82,11 +89,14 @@ module Vedeu
82
89
  describe '#to_s' do
83
90
  subject { instance.to_s }
84
91
 
85
- it { instance.must_respond_to(:to_str) }
86
92
  it { subject.must_be_instance_of(String) }
87
93
  it { subject.must_equal('') }
88
94
  end
89
95
 
96
+ describe '#to_str' do
97
+ it { instance.must_respond_to(:to_str) }
98
+ end
99
+
90
100
  end # Empty
91
101
 
92
102
  end # Cells
@@ -47,10 +47,12 @@ module Vedeu
47
47
 
48
48
  # it { subject.must_equal(false) }
49
49
  # end
50
-
51
- # it { instance.must_respond_to(:==) }
52
50
  # end
53
51
 
52
+ describe '#==' do
53
+ it { instance.must_respond_to(:==) }
54
+ end
55
+
54
56
  describe '#value' do
55
57
  subject { instance.value }
56
58
 
@@ -77,6 +79,9 @@ module Vedeu
77
79
 
78
80
  it { subject.must_be_instance_of(String) }
79
81
  it { subject.must_equal("\e[2;6H\e[?25h") }
82
+ end
83
+
84
+ describe '#to_str' do
80
85
  it { instance.must_respond_to(:to_str) }
81
86
  end
82
87
 
@@ -2,30 +2,33 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- module Geometries
5
+ module Coercers
6
6
 
7
7
  describe Alignment do
8
8
 
9
- let(:described) { Vedeu::Geometries::Alignment }
9
+ let(:described) { Vedeu::Coercers::Alignment }
10
10
  let(:instance) { described.new(_value) }
11
- let(:_value) {}
11
+ let(:_value) { :left }
12
12
 
13
13
  describe '#initialize' do
14
14
  it { instance.must_be_instance_of(described) }
15
- it { instance.instance_variable_get('@value').must_equal(_value) }
16
- end
17
15
 
18
- describe '.align' do
19
- subject { described.align(_value) }
16
+ context 'when the value is not given' do
17
+ let(:_value) {}
18
+
19
+ it { instance.instance_variable_get('@value').must_equal(:none) }
20
+ end
20
21
 
21
- it { proc { subject }.must_raise(Vedeu::Error::NotImplemented) }
22
+ context 'when the value is given' do
23
+ it { instance.instance_variable_get('@value').must_equal(_value) }
24
+ end
22
25
  end
23
26
 
24
27
  describe '.coerce' do
25
28
  subject { described.coerce(_value) }
26
29
 
27
- context 'when the value is a Vedeu::Geometries::Alignment' do
28
- let(:_value) { Vedeu::Geometries::Alignment.new(:none) }
30
+ context 'when the value is a Vedeu::Coercers::Alignment' do
31
+ let(:_value) { described.new(:none) }
29
32
 
30
33
  it { subject.must_equal(_value) }
31
34
  end
@@ -37,16 +40,12 @@ module Vedeu
37
40
  end
38
41
 
39
42
  context 'when the value is nil or something else' do
43
+ let(:_value) {}
44
+
40
45
  it { subject.must_be_instance_of(described) }
41
46
  end
42
47
  end
43
48
 
44
- describe '#align' do
45
- subject { instance.align }
46
-
47
- it { proc { subject }.must_raise(Vedeu::Error::NotImplemented) }
48
- end
49
-
50
49
  describe '#bottom_aligned?' do
51
50
  subject { instance.bottom_aligned? }
52
51
 
@@ -75,16 +74,34 @@ module Vedeu
75
74
  end
76
75
  end
77
76
 
77
+ describe '#eql?' do
78
+ let(:other) { instance }
79
+
80
+ subject { instance.eql?(other) }
81
+
82
+ it { subject.must_equal(true) }
83
+
84
+ context 'when different to other' do
85
+ let(:other) { described.new(:center) }
86
+
87
+ it { subject.must_equal(false) }
88
+ end
89
+ end
90
+
91
+ describe '#==' do
92
+ it { instance.must_respond_to(:==) }
93
+ end
94
+
78
95
  describe '#left_aligned?' do
79
96
  subject { instance.left_aligned? }
80
97
 
81
98
  context 'when the value is :left' do
82
- let(:_value) { :left }
83
-
84
99
  it { subject.must_equal(true) }
85
100
  end
86
101
 
87
102
  context 'when the value is not :left' do
103
+ let(:_value) { :right }
104
+
88
105
  it { subject.must_equal(false) }
89
106
  end
90
107
  end
@@ -135,6 +152,8 @@ module Vedeu
135
152
  subject { instance.unaligned? }
136
153
 
137
154
  context 'when the value is :none' do
155
+ let(:_value) { :none }
156
+
138
157
  it { subject.must_equal(true) }
139
158
  end
140
159
 
@@ -145,8 +164,14 @@ module Vedeu
145
164
  end
146
165
  end
147
166
 
167
+ describe '#value' do
168
+ subject { instance.value }
169
+
170
+ it { subject.must_equal(:left) }
171
+ end
172
+
148
173
  end # Alignment
149
174
 
150
- end # Geometries
175
+ end # Coercers
151
176
 
152
177
  end # Vedeu
@@ -0,0 +1,168 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module Coercers
6
+
7
+ describe ColourAttributes do
8
+
9
+ let(:described) { Vedeu::Coercers::ColourAttributes }
10
+ let(:instance) { described.new(_value) }
11
+ let(:_value) {}
12
+
13
+ describe '#initialize' do
14
+ it { instance.must_be_instance_of(described) }
15
+ it { instance.instance_variable_get('@value').must_equal(_value) }
16
+ end
17
+
18
+ describe '.coerce' do
19
+ subject { described.coerce(_value) }
20
+
21
+ context 'when the value is a Hash' do
22
+ context 'when the value is empty' do
23
+ let(:_value) { {} }
24
+
25
+ it { subject.must_equal({}) }
26
+ end
27
+
28
+ context 'when the value has a background key' do
29
+ let(:_value) { { background: background } }
30
+ let(:background) { '#123456' }
31
+
32
+ it { subject.must_equal(_value) }
33
+
34
+ context 'but the background is invalid' do
35
+ let(:background) { :invalid }
36
+
37
+ it { subject.must_equal({}) }
38
+ end
39
+ end
40
+
41
+ context 'when the value has a foreground key' do
42
+ let(:_value) { { foreground: foreground } }
43
+ let(:foreground) { '#654321' }
44
+
45
+ it { subject.must_equal(_value) }
46
+
47
+ context 'but the foreground is invalid' do
48
+ let(:foreground) { :invalid }
49
+
50
+ it { subject.must_equal({}) }
51
+ end
52
+ end
53
+
54
+ context 'when the value has both background and foreground keys' do
55
+ let(:_value) {
56
+ {
57
+ background: background,
58
+ foreground: foreground,
59
+ }
60
+ }
61
+ let(:background) { '#123456' }
62
+ let(:foreground) { '#654321' }
63
+
64
+ it { subject.must_equal(_value) }
65
+
66
+ context 'but the foreground is invalid' do
67
+ let(:foreground) { :invalid }
68
+ let(:expected) { { background: background } }
69
+
70
+ it { subject.must_equal(expected) }
71
+ end
72
+
73
+ context 'but the background is invalid' do
74
+ let(:background) { :invalid }
75
+ let(:expected) { { foreground: foreground } }
76
+
77
+ it { subject.must_equal(expected) }
78
+ end
79
+ end
80
+
81
+ context 'when the value has a colour key' do
82
+ let(:_value) { { colour: colour } }
83
+
84
+ context 'but the colour is invalid' do
85
+ let(:colour) { :invalid }
86
+
87
+ it { subject.must_equal({}) }
88
+ end
89
+
90
+ context 'and the colour has a background key' do
91
+ let(:_value) { { colour: { background: background } } }
92
+ let(:background) { '#7890ab' }
93
+ let(:expected) { { background: background } }
94
+
95
+ it { subject.must_equal(expected) }
96
+
97
+ context 'but the background is invalid' do
98
+ let(:background) { :invalid }
99
+
100
+ it { subject.must_equal({}) }
101
+ end
102
+ end
103
+
104
+ context 'and the colour has a foreground key' do
105
+ let(:_value) { { colour: { foreground: foreground } } }
106
+ let(:foreground) { '#ba0987' }
107
+ let(:expected) { { foreground: foreground } }
108
+
109
+ it { subject.must_equal(expected) }
110
+
111
+ context 'but the foreground is invalid' do
112
+ let(:foreground) { :invalid }
113
+
114
+ it { subject.must_equal({}) }
115
+ end
116
+ end
117
+
118
+ context 'and the colour has both background and foreground keys' do
119
+ let(:_value) {
120
+ {
121
+ colour: {
122
+ background: background,
123
+ foreground: foreground,
124
+ }
125
+ }
126
+ }
127
+ let(:background) { '#fed456' }
128
+ let(:foreground) { '#654def' }
129
+ let(:expected) {
130
+ {
131
+ background: background,
132
+ foreground: foreground,
133
+ }
134
+ }
135
+
136
+ it { subject.must_equal(expected) }
137
+
138
+ context 'but the foreground is invalid' do
139
+ let(:foreground) { :invalid }
140
+ let(:expected) { { background: background } }
141
+
142
+ it { subject.must_equal(expected) }
143
+ end
144
+
145
+ context 'but the background is invalid' do
146
+ let(:background) { :invalid }
147
+ let(:expected) { { foreground: foreground } }
148
+
149
+ it { subject.must_equal(expected) }
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+ context 'when the value is not a Hash' do
156
+ it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
157
+ end
158
+ end
159
+
160
+ describe '#coerce' do
161
+ it { instance.must_respond_to(:coerce) }
162
+ end
163
+
164
+ end # ColourAttributes
165
+
166
+ end # Coercers
167
+
168
+ end # Vedeu