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
@@ -0,0 +1,75 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module Coercers
6
+
7
+ describe Colour do
8
+
9
+ let(:described) { Vedeu::Coercers::Colour }
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 nil' do
22
+ it { subject.must_be_instance_of(Vedeu::Colours::Colour) }
23
+ end
24
+
25
+ context 'when the value is a Hash' do
26
+ let(:_value) {
27
+ {
28
+ background: '#ff0000',
29
+ foreground: '#00ff00',
30
+ }
31
+ }
32
+
33
+ it { subject.must_be_instance_of(Vedeu::Colours::Colour) }
34
+ it do
35
+ subject.background.must_be_instance_of(Vedeu::Colours::Background)
36
+ end
37
+ it do
38
+ subject.foreground.must_be_instance_of(Vedeu::Colours::Foreground)
39
+ end
40
+ end
41
+
42
+ context 'when the value is a Vedeu::Colours::Background' do
43
+ let(:_value) { Vedeu::Colours::Background.new('#aadd00') }
44
+
45
+ it { subject.must_be_instance_of(Vedeu::Colours::Colour) }
46
+ end
47
+
48
+ context 'when the value is a Vedeu::Colours::Colour' do
49
+ let(:_value) { Vedeu::Colours::Colour.new }
50
+
51
+ it { subject.must_be_instance_of(Vedeu::Colours::Colour) }
52
+ end
53
+
54
+ context 'when the value is a Vedeu::Colours::Foreground' do
55
+ let(:_value) { Vedeu::Colours::Foreground.new('#448822') }
56
+
57
+ it { subject.must_be_instance_of(Vedeu::Colours::Colour) }
58
+ end
59
+
60
+ context 'when the value is invalid or unsupported' do
61
+ let(:_value) { :invalid }
62
+
63
+ it { proc { subject }.must_raise(Vedeu::Error::Fatal) }
64
+ end
65
+ end
66
+
67
+ describe '#coerce' do
68
+ it { instance.must_respond_to(:coerce) }
69
+ end
70
+
71
+ end # Colour
72
+
73
+ end # Coercers
74
+
75
+ end # Vedeu
@@ -2,16 +2,16 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- module Geometries
5
+ module Coercers
6
6
 
7
7
  describe HorizontalAlignment do
8
8
 
9
- let(:described) { Vedeu::Geometries::HorizontalAlignment }
9
+ let(:described) { Vedeu::Coercers::HorizontalAlignment }
10
10
  let(:instance) { described.new(_value) }
11
11
  let(:_value) {}
12
12
 
13
- describe '.align' do
14
- subject { described.align(_value) }
13
+ describe '#value' do
14
+ subject { described.coerce(_value).value }
15
15
 
16
16
  context 'when the value is :none' do
17
17
  let(:_value) { :none }
@@ -56,12 +56,12 @@ module Vedeu
56
56
  context 'when the value is :align_invalid' do
57
57
  let(:_value) { :align_invalid }
58
58
 
59
- it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
59
+ it { subject.must_equal(:none) }
60
60
  end
61
61
  end
62
62
 
63
63
  end # HorizontalAlignment
64
64
 
65
- end # Geometries
65
+ end # Coercers
66
66
 
67
67
  end # Vedeu
@@ -2,16 +2,16 @@ require 'test_helper'
2
2
 
3
3
  module Vedeu
4
4
 
5
- module Geometries
5
+ module Coercers
6
6
 
7
7
  describe VerticalAlignment do
8
8
 
9
- let(:described) { Vedeu::Geometries::VerticalAlignment }
9
+ let(:described) { Vedeu::Coercers::VerticalAlignment }
10
10
  let(:instance) { described.new(_value) }
11
11
  let(:_value) {}
12
12
 
13
- describe '.align' do
14
- subject { described.align(_value) }
13
+ describe '#value' do
14
+ subject { described.coerce(_value).value }
15
15
 
16
16
  context 'when the value is :none' do
17
17
  let(:_value) { :none }
@@ -50,12 +50,12 @@ module Vedeu
50
50
  context 'when the value is :align_invalid' do
51
51
  let(:_value) { :align_invalid }
52
52
 
53
- it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
53
+ it { subject.must_equal(:none) }
54
54
  end
55
55
  end
56
56
 
57
57
  end # VerticalAlignment
58
58
 
59
- end # Geometries
59
+ end # Coercers
60
60
 
61
61
  end # Vedeu
@@ -12,6 +12,22 @@ module Vedeu
12
12
 
13
13
  before { Vedeu.background_colours.reset! }
14
14
 
15
+ describe '#background?' do
16
+ subject { instance.background? }
17
+
18
+ context 'when the colour is empty' do
19
+ let(:colour) {}
20
+
21
+ it { subject.must_equal(false) }
22
+ end
23
+
24
+ context 'when the colour is not empty' do
25
+ let(:colour) { '#afd700' }
26
+
27
+ it { subject.must_equal(true) }
28
+ end
29
+ end
30
+
15
31
  describe '#escape_sequence' do
16
32
  subject { instance.escape_sequence }
17
33
 
@@ -74,7 +90,7 @@ module Vedeu
74
90
  end
75
91
  end
76
92
 
77
- describe '.to_html' do
93
+ describe '#to_html' do
78
94
  subject { instance.to_html }
79
95
 
80
96
  context 'when the colour is empty' do
@@ -19,8 +19,40 @@ module Vedeu
19
19
 
20
20
  describe '#initialize' do
21
21
  it { instance.must_be_instance_of(described) }
22
- it { instance.instance_variable_get('@background').must_equal(background)}
23
- it { instance.instance_variable_get('@foreground').must_equal(foreground)}
22
+
23
+ context 'when a background is given' do
24
+ let(:background) { '#ff0000' }
25
+
26
+ it do
27
+ instance.instance_variable_get('@background').must_equal(background)
28
+ end
29
+ end
30
+
31
+ context 'when a background is not given' do
32
+ let(:background) {}
33
+ let(:expected) { Vedeu::Colours::Background.new }
34
+
35
+ it do
36
+ instance.instance_variable_get('@background').must_equal(expected)
37
+ end
38
+ end
39
+
40
+ context 'when a foreground is given' do
41
+ let(:foreground) { '#ff00ff' }
42
+
43
+ it do
44
+ instance.instance_variable_get('@foreground').must_equal(foreground)
45
+ end
46
+ end
47
+
48
+ context 'when a foreground is not given' do
49
+ let(:foreground) {}
50
+ let(:expected) { Vedeu::Colours::Foreground.new }
51
+
52
+ it do
53
+ instance.instance_variable_get('@foreground').must_equal(expected)
54
+ end
55
+ end
24
56
  end
25
57
 
26
58
  describe '.coerce' do
@@ -173,9 +205,27 @@ module Vedeu
173
205
  end
174
206
 
175
207
  describe '#background' do
208
+ subject { instance.background }
209
+
210
+ it { subject.must_be_instance_of(Vedeu::Colours::Background) }
211
+
176
212
  # @todo Add more tests.
177
213
  end
178
214
 
215
+ describe '#background?' do
216
+ subject { instance.background? }
217
+
218
+ context 'when the background is set' do
219
+ let(:background) { '#ff0000' }
220
+
221
+ it { subject.must_equal(true) }
222
+ end
223
+
224
+ context 'when the background is not set' do
225
+ it { subject.must_equal(false) }
226
+ end
227
+ end
228
+
179
229
  describe '#background=' do
180
230
  let(:_value) { '#000000' }
181
231
 
@@ -198,10 +248,32 @@ module Vedeu
198
248
  end
199
249
  end
200
250
 
251
+ describe '#==' do
252
+ it { instance.must_respond_to(:==) }
253
+ end
254
+
201
255
  describe '#foreground' do
256
+ subject { instance.foreground }
257
+
258
+ it { subject.must_be_instance_of(Vedeu::Colours::Foreground) }
259
+
202
260
  # @todo Add more tests.
203
261
  end
204
262
 
263
+ describe '#foreground?' do
264
+ subject { instance.foreground? }
265
+
266
+ context 'when the foreground is set' do
267
+ let(:foreground) { '#ff00ff' }
268
+
269
+ it { subject.must_equal(true) }
270
+ end
271
+
272
+ context 'when the foreground is not set' do
273
+ it { subject.must_equal(false) }
274
+ end
275
+ end
276
+
205
277
  describe '#foreground=' do
206
278
  let(:_value) { '#ff0000' }
207
279
 
@@ -74,7 +74,23 @@ module Vedeu
74
74
  end
75
75
  end
76
76
 
77
- describe '.to_html' do
77
+ describe '#foreground?' do
78
+ subject { instance.foreground? }
79
+
80
+ context 'when the colour is empty' do
81
+ let(:colour) {}
82
+
83
+ it { subject.must_equal(false) }
84
+ end
85
+
86
+ context 'when the colour is not empty' do
87
+ let(:colour) { '#afd700' }
88
+
89
+ it { subject.must_equal(true) }
90
+ end
91
+ end
92
+
93
+ describe '#to_html' do
78
94
  subject { instance.to_html }
79
95
 
80
96
  context 'when the colour is empty' do
@@ -15,7 +15,7 @@ module Vedeu
15
15
  it { instance.instance_variable_get('@storage').must_equal(storage) }
16
16
  end
17
17
 
18
- describe 'accessors' do
18
+ describe '#storage' do
19
19
  it { instance.must_respond_to(:storage) }
20
20
  end
21
21
 
@@ -15,8 +15,11 @@ module Vedeu
15
15
  it { instance.instance_variable_get('@colour').must_equal(colour) }
16
16
  end
17
17
 
18
- describe 'accessors' do
18
+ describe '#colour' do
19
19
  it { instance.must_respond_to(:colour) }
20
+ end
21
+
22
+ describe '#value' do
20
23
  it { instance.must_respond_to(:value) }
21
24
  end
22
25
 
@@ -87,6 +90,10 @@ module Vedeu
87
90
  end
88
91
  end
89
92
 
93
+ describe '#==' do
94
+ it { instance.must_respond_to(:==) }
95
+ end
96
+
90
97
  describe '#escape_sequence' do
91
98
  subject { instance.escape_sequence }
92
99
 
@@ -0,0 +1,60 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module Colours
6
+
7
+ describe Validator do
8
+
9
+ let(:described) { Vedeu::Colours::Validator }
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 '.valid?' do
19
+ subject { described.valid?(_value) }
20
+
21
+ context 'when the value is a HTML/CSS formatted hexidecimal string' do
22
+ let(:_value) { '#654321' }
23
+
24
+ it { subject.must_equal(true) }
25
+ end
26
+
27
+ context 'when the value is a Vedeu::Colours::Background' do
28
+ let(:_value) { Vedeu::Colours::Background.new('#654321') }
29
+
30
+ it { subject.must_equal(true) }
31
+ end
32
+
33
+ context 'when the value is a Vedeu::Colours::Colour' do
34
+ let(:_value) { Vedeu::Colours::Colour.new }
35
+
36
+ it { subject.must_equal(true) }
37
+ end
38
+
39
+ context 'when the value is a Vedeu::Colours::Foreground' do
40
+ let(:_value) { Vedeu::Colours::Foreground.new('#654321') }
41
+
42
+ it { subject.must_equal(true) }
43
+ end
44
+
45
+ context 'when the value is invalid' do
46
+ let(:_value) { '#123' }
47
+
48
+ it { subject.must_equal(false) }
49
+ end
50
+ end
51
+
52
+ describe '#valid?' do
53
+ it { instance.must_respond_to(:valid?) }
54
+ end
55
+
56
+ end # Validator
57
+
58
+ end # Colours
59
+
60
+ end # Vedeu
@@ -60,6 +60,100 @@ module Vedeu
60
60
  it { subject.must_be_instance_of(Vedeu::Cells::Char) }
61
61
  end
62
62
 
63
+ describe '#boolean' do
64
+ subject { instance.boolean(_value) }
65
+
66
+ context 'when the value is a TrueClass' do
67
+ let(:_value) { true }
68
+
69
+ it { subject.must_equal(true) }
70
+ end
71
+
72
+ context 'when the value is a FalseClass' do
73
+ let(:_value) { false }
74
+
75
+ it { subject.must_equal(false) }
76
+ end
77
+
78
+ context 'when the value is nil' do
79
+ let(:_value) {}
80
+
81
+ it { subject.must_equal(false) }
82
+ end
83
+
84
+ context 'when the value is anything else' do
85
+ let(:_value) { 'anything' }
86
+
87
+ it { subject.must_equal(true) }
88
+ end
89
+ end
90
+
91
+ describe '#boolean?' do
92
+ subject { instance.boolean?(_value) }
93
+
94
+ context 'when the value is a TrueClass' do
95
+ let(:_value) { true }
96
+
97
+ it { subject.must_equal(true) }
98
+ end
99
+
100
+ context 'when the value is a FalseClass' do
101
+ let(:_value) { false }
102
+
103
+ it { subject.must_equal(true) }
104
+ end
105
+
106
+ context 'when the value is anything else' do
107
+ let(:_value) { 'anything' }
108
+
109
+ it { subject.must_equal(false) }
110
+ end
111
+ end
112
+
113
+ describe '#falsy?' do
114
+ subject { instance.falsy?(_value) }
115
+
116
+ context 'when the value is a TrueClass' do
117
+ let(:_value) { true }
118
+
119
+ it { subject.must_equal(false) }
120
+ end
121
+
122
+ context 'when the value is a FalseClass' do
123
+ let(:_value) { false }
124
+
125
+ it { subject.must_equal(true) }
126
+ end
127
+
128
+ context 'when the value is nil' do
129
+ let(:_value) {}
130
+
131
+ it { subject.must_equal(true) }
132
+ end
133
+
134
+ context 'when the value is anything else' do
135
+ let(:_value) { 'anything' }
136
+
137
+ it { subject.must_equal(false) }
138
+ end
139
+ end
140
+
141
+ describe '#hash?' do
142
+ let(:_value) {}
143
+
144
+ subject { instance.hash?(_value) }
145
+
146
+ context 'when the value is a Hash' do
147
+ let(:_value) { { element: :hydrogen } }
148
+
149
+ it { subject.must_equal(true) }
150
+ end
151
+
152
+ context 'when the value is not a Hash' do
153
+ it { subject.must_equal(false) }
154
+ end
155
+ end
156
+
63
157
  describe '#numeric?' do
64
158
  let(:_value) {}
65
159
 
@@ -125,6 +219,50 @@ module Vedeu
125
219
  end
126
220
  end
127
221
 
222
+ describe '#string?' do
223
+ let(:_value) {}
224
+
225
+ subject { instance.string?(_value) }
226
+
227
+ context 'when the value is string' do
228
+ let(:_value) { 'test' }
229
+
230
+ it { subject.must_equal(true) }
231
+ end
232
+
233
+ context 'when the value is not string' do
234
+ it { subject.must_equal(false) }
235
+ end
236
+ end
237
+
238
+ describe '#truthy?' do
239
+ subject { instance.truthy?(_value) }
240
+
241
+ context 'when the value is a TrueClass' do
242
+ let(:_value) { true }
243
+
244
+ it { subject.must_equal(true) }
245
+ end
246
+
247
+ context 'when the value is a FalseClass' do
248
+ let(:_value) { false }
249
+
250
+ it { subject.must_equal(false) }
251
+ end
252
+
253
+ context 'when the value is nil' do
254
+ let(:_value) {}
255
+
256
+ it { subject.must_equal(false) }
257
+ end
258
+
259
+ context 'when the value is anything else' do
260
+ let(:_value) { 'anything' }
261
+
262
+ it { subject.must_equal(true) }
263
+ end
264
+ end
265
+
128
266
  end # Common
129
267
 
130
268
  end # Vedeu