vedeu 0.2.12 → 0.3.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 (305) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Guardfile +13 -0
  4. data/README.md +11 -9
  5. data/Rakefile +10 -1
  6. data/bin/vedeu_test +14 -0
  7. data/config/cucumber.yml +8 -0
  8. data/docs/api.md +45 -16
  9. data/docs/events.md +21 -9
  10. data/docs/getting_started.md +16 -0
  11. data/docs/views.md +158 -0
  12. data/examples/borders_app.rb +236 -110
  13. data/examples/colour_support.sh +98 -0
  14. data/examples/colours_app.rb +41 -0
  15. data/examples/configuration_app.rb +11 -6
  16. data/examples/cursor_app.rb +60 -61
  17. data/examples/focus_app.rb +72 -34
  18. data/examples/hello_world.rb +13 -8
  19. data/examples/lines_app.rb +37 -28
  20. data/features/start_stop.feature +27 -0
  21. data/features/support/env.rb +14 -0
  22. data/lib/vedeu/all.rb +29 -0
  23. data/lib/vedeu/api.rb +39 -0
  24. data/lib/vedeu/application.rb +15 -7
  25. data/lib/vedeu/bindings.rb +121 -0
  26. data/lib/vedeu/buffers/all.rb +10 -0
  27. data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
  28. data/lib/vedeu/buffers/display_buffer.rb +118 -0
  29. data/lib/vedeu/configuration/all.rb +6 -0
  30. data/lib/vedeu/configuration/api.rb +3 -1
  31. data/lib/vedeu/configuration/cli.rb +3 -1
  32. data/lib/vedeu/configuration/configuration.rb +23 -2
  33. data/lib/vedeu/cursor/all.rb +23 -0
  34. data/lib/vedeu/cursor/cursor.rb +116 -0
  35. data/lib/vedeu/cursor/move_cursor.rb +137 -0
  36. data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
  37. data/lib/vedeu/dsl/all.rb +28 -0
  38. data/lib/vedeu/dsl/components/all.rb +7 -0
  39. data/lib/vedeu/dsl/components/border.rb +104 -0
  40. data/lib/vedeu/dsl/components/geometry.rb +153 -0
  41. data/lib/vedeu/dsl/components/keymap.rb +93 -0
  42. data/lib/vedeu/dsl/components/menu.rb +82 -0
  43. data/lib/vedeu/dsl/composition.rb +72 -0
  44. data/lib/vedeu/dsl/interface.rb +210 -0
  45. data/lib/vedeu/dsl/line.rb +135 -0
  46. data/lib/vedeu/dsl/shared/all.rb +7 -0
  47. data/lib/vedeu/dsl/shared/colour.rb +85 -0
  48. data/lib/vedeu/dsl/shared/style.rb +38 -0
  49. data/lib/vedeu/dsl/shared/text.rb +102 -0
  50. data/lib/vedeu/dsl/shared/use.rb +47 -0
  51. data/lib/vedeu/dsl/stream.rb +49 -0
  52. data/lib/vedeu/dsl/view.rb +136 -0
  53. data/lib/vedeu/events/all.rb +10 -0
  54. data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
  55. data/lib/vedeu/events/trigger.rb +58 -0
  56. data/lib/vedeu/exceptions.rb +34 -0
  57. data/lib/vedeu/input/all.rb +29 -0
  58. data/lib/vedeu/input/input.rb +26 -0
  59. data/lib/vedeu/{models → input}/key.rb +21 -11
  60. data/lib/vedeu/input/keymap.rb +130 -0
  61. data/lib/vedeu/input/keys.rb +8 -0
  62. data/lib/vedeu/input/mapper.rb +112 -0
  63. data/lib/vedeu/launcher.rb +7 -4
  64. data/lib/vedeu/models/all.rb +12 -0
  65. data/lib/vedeu/models/collection.rb +71 -0
  66. data/lib/vedeu/{repositories → models}/focus.rb +63 -21
  67. data/lib/vedeu/models/geometry.rb +100 -259
  68. data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
  69. data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
  70. data/lib/vedeu/models/model.rb +51 -0
  71. data/lib/vedeu/models/view/all.rb +12 -0
  72. data/lib/vedeu/models/view/char.rb +84 -0
  73. data/lib/vedeu/models/view/chars.rb +8 -0
  74. data/lib/vedeu/models/view/composition.rb +101 -0
  75. data/lib/vedeu/models/view/interface.rb +215 -0
  76. data/lib/vedeu/models/view/interfaces.rb +8 -0
  77. data/lib/vedeu/models/view/line.rb +134 -0
  78. data/lib/vedeu/models/view/lines.rb +8 -0
  79. data/lib/vedeu/models/view/stream.rb +144 -0
  80. data/lib/vedeu/models/view/streams.rb +8 -0
  81. data/lib/vedeu/output/all.rb +8 -0
  82. data/lib/vedeu/output/border.rb +387 -0
  83. data/lib/vedeu/output/compositor.rb +41 -30
  84. data/lib/vedeu/output/output.rb +6 -13
  85. data/lib/vedeu/output/viewport.rb +78 -94
  86. data/lib/vedeu/output/writer.rb +29 -0
  87. data/lib/vedeu/presentation/all.rb +9 -0
  88. data/lib/vedeu/{colours → presentation}/background.rb +1 -9
  89. data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
  90. data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
  91. data/lib/vedeu/presentation/presentation.rb +91 -0
  92. data/lib/vedeu/presentation/style.rb +47 -0
  93. data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
  94. data/lib/vedeu/repositories/all.rb +5 -0
  95. data/lib/vedeu/repositories/menus.rb +5 -42
  96. data/lib/vedeu/{support → repositories}/repository.rb +78 -41
  97. data/lib/vedeu/support/all.rb +22 -0
  98. data/lib/vedeu/support/bounding_area.rb +2 -1
  99. data/lib/vedeu/support/coercions.rb +18 -1
  100. data/lib/vedeu/support/console.rb +73 -0
  101. data/lib/vedeu/support/content_geometry.rb +69 -0
  102. data/lib/vedeu/support/coordinate.rb +246 -0
  103. data/lib/vedeu/support/esc.rb +29 -2
  104. data/lib/vedeu/support/log.rb +36 -2
  105. data/lib/vedeu/support/node.rb +61 -0
  106. data/lib/vedeu/support/position.rb +28 -13
  107. data/lib/vedeu/support/position_validator.rb +79 -0
  108. data/lib/vedeu/support/read.rb +65 -0
  109. data/lib/vedeu/support/refresh.rb +8 -32
  110. data/lib/vedeu/support/terminal.rb +34 -4
  111. data/lib/vedeu/support/text.rb +104 -0
  112. data/lib/vedeu/support/trace.rb +11 -23
  113. data/lib/vedeu/support/visible.rb +75 -0
  114. data/lib/vedeu/support/write.rb +85 -0
  115. data/lib/vedeu/traps.rb +18 -0
  116. data/lib/vedeu.rb +41 -101
  117. data/test/integration/dsl/compositions_test.rb +27 -0
  118. data/test/integration/dsl/interfaces_test.rb +261 -0
  119. data/test/integration/dsl/keymaps_test.rb +42 -0
  120. data/test/integration/dsl/lines_test.rb +146 -0
  121. data/test/integration/dsl/menus_test.rb +59 -0
  122. data/test/integration/dsl/streams_test.rb +129 -0
  123. data/test/integration/dsl/views_test.rb +63 -0
  124. data/test/lib/vedeu/api_test.rb +163 -0
  125. data/test/lib/vedeu/application_test.rb +19 -10
  126. data/test/lib/vedeu/bindings_test.rb +54 -0
  127. data/test/lib/vedeu/buffers/all_test.rb +11 -0
  128. data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
  129. data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
  130. data/test/lib/vedeu/configuration/api_test.rb +42 -58
  131. data/test/lib/vedeu/configuration/cli_test.rb +4 -4
  132. data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
  133. data/test/lib/vedeu/cursor/all_test.rb +33 -0
  134. data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
  135. data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
  136. data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
  137. data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
  138. data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
  139. data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
  140. data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
  141. data/test/lib/vedeu/dsl/composition_test.rb +41 -0
  142. data/test/lib/vedeu/dsl/interface_test.rb +470 -0
  143. data/test/lib/vedeu/dsl/line_test.rb +60 -0
  144. data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
  145. data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
  146. data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
  147. data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
  148. data/test/lib/vedeu/dsl/stream_test.rb +26 -0
  149. data/test/lib/vedeu/dsl/view_test.rb +73 -0
  150. data/test/lib/vedeu/events/all_test.rb +11 -0
  151. data/test/lib/vedeu/events/event_test.rb +109 -0
  152. data/test/lib/vedeu/events/trigger_test.rb +60 -0
  153. data/test/lib/vedeu/input/all_test.rb +11 -0
  154. data/test/lib/vedeu/input/input_test.rb +7 -3
  155. data/test/lib/vedeu/input/key_test.rb +72 -0
  156. data/test/lib/vedeu/input/keymap_test.rb +89 -0
  157. data/test/lib/vedeu/input/mapper_test.rb +94 -0
  158. data/test/lib/vedeu/launcher_test.rb +19 -20
  159. data/test/lib/vedeu/models/collection_test.rb +114 -0
  160. data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
  161. data/test/lib/vedeu/models/geometry_test.rb +35 -39
  162. data/test/lib/vedeu/models/group_test.rb +100 -0
  163. data/test/lib/vedeu/models/menu_test.rb +288 -0
  164. data/test/lib/vedeu/models/model_test.rb +31 -0
  165. data/test/lib/vedeu/models/view/char_test.rb +166 -0
  166. data/test/lib/vedeu/models/view/chars_test.rb +18 -0
  167. data/test/lib/vedeu/models/view/composition_test.rb +41 -0
  168. data/test/lib/vedeu/models/view/interface_test.rb +128 -0
  169. data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
  170. data/test/lib/vedeu/models/view/line_test.rb +214 -0
  171. data/test/lib/vedeu/models/view/lines_test.rb +18 -0
  172. data/test/lib/vedeu/models/view/stream_test.rb +106 -0
  173. data/test/lib/vedeu/models/view/streams_test.rb +18 -0
  174. data/test/lib/vedeu/output/border_test.rb +357 -0
  175. data/test/lib/vedeu/output/compositor_test.rb +61 -15
  176. data/test/lib/vedeu/output/output_test.rb +25 -84
  177. data/test/lib/vedeu/output/viewport_test.rb +171 -45
  178. data/test/lib/vedeu/output/writer_test.rb +45 -0
  179. data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
  180. data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
  181. data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
  182. data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
  183. data/test/lib/vedeu/presentation/style_test.rb +69 -0
  184. data/test/lib/vedeu/presentation/translator_test.rb +63 -0
  185. data/test/lib/vedeu/repositories/all_test.rb +7 -0
  186. data/test/lib/vedeu/repositories/menus_test.rb +3 -156
  187. data/test/lib/vedeu/repositories/repository_test.rb +271 -0
  188. data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
  189. data/test/lib/vedeu/support/coercions_test.rb +39 -0
  190. data/test/lib/vedeu/support/common_test.rb +31 -16
  191. data/test/lib/vedeu/support/console_test.rb +85 -0
  192. data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
  193. data/test/lib/vedeu/support/coordinate_test.rb +190 -0
  194. data/test/lib/vedeu/support/esc_test.rb +18 -0
  195. data/test/lib/vedeu/support/grid_test.rb +15 -10
  196. data/test/lib/vedeu/support/log_test.rb +3 -0
  197. data/test/lib/vedeu/support/position_test.rb +22 -2
  198. data/test/lib/vedeu/support/position_validator_test.rb +11 -0
  199. data/test/lib/vedeu/support/read_test.rb +88 -0
  200. data/test/lib/vedeu/support/refresh_test.rb +44 -12
  201. data/test/lib/vedeu/support/sentence_test.rb +6 -4
  202. data/test/lib/vedeu/support/terminal_test.rb +81 -70
  203. data/test/lib/vedeu/support/text_test.rb +93 -0
  204. data/test/lib/vedeu/support/trace_test.rb +21 -9
  205. data/test/lib/vedeu/support/visible_test.rb +148 -0
  206. data/test/lib/vedeu/support/write_test.rb +136 -0
  207. data/test/lib/vedeu/traps_test.rb +11 -0
  208. data/test/lib/vedeu_test.rb +2 -0
  209. data/test/support/helpers/all.rb +7 -0
  210. data/test/support/helpers/dsl_model_test_class.rb +25 -0
  211. data/test/support/{test_classes → helpers}/helpers.rb +0 -2
  212. data/test/support/helpers/misc.rb +15 -0
  213. data/test/support/helpers/model_test_class.rb +34 -0
  214. data/test/support/{test_classes → helpers}/presentation.rb +0 -0
  215. data/test/support/{test_classes → helpers}/repositories.rb +3 -3
  216. data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
  217. data/test/test_helper.rb +19 -22
  218. data/vedeu.gemspec +11 -6
  219. metadata +322 -181
  220. data/lib/vedeu/api/api.rb +0 -239
  221. data/lib/vedeu/api/composition.rb +0 -38
  222. data/lib/vedeu/api/defined.rb +0 -52
  223. data/lib/vedeu/api/helpers.rb +0 -161
  224. data/lib/vedeu/api/interface.rb +0 -287
  225. data/lib/vedeu/api/keymap.rb +0 -75
  226. data/lib/vedeu/api/line.rb +0 -107
  227. data/lib/vedeu/api/menu.rb +0 -111
  228. data/lib/vedeu/api/stream.rb +0 -96
  229. data/lib/vedeu/models/border.rb +0 -238
  230. data/lib/vedeu/models/char.rb +0 -43
  231. data/lib/vedeu/models/composition.rb +0 -72
  232. data/lib/vedeu/models/line.rb +0 -100
  233. data/lib/vedeu/models/stream.rb +0 -130
  234. data/lib/vedeu/models/style.rb +0 -52
  235. data/lib/vedeu/repositories/buffers.rb +0 -52
  236. data/lib/vedeu/repositories/cursors.rb +0 -64
  237. data/lib/vedeu/repositories/events.rb +0 -147
  238. data/lib/vedeu/repositories/groups.rb +0 -47
  239. data/lib/vedeu/repositories/interfaces.rb +0 -78
  240. data/lib/vedeu/repositories/keymaps.rb +0 -196
  241. data/lib/vedeu/repositories/models/cursor.rb +0 -209
  242. data/lib/vedeu/repositories/models/interface.rb +0 -163
  243. data/lib/vedeu/repositories/models/keymap.rb +0 -111
  244. data/lib/vedeu/repositories/models/offset.rb +0 -91
  245. data/lib/vedeu/repositories/offsets.rb +0 -69
  246. data/lib/vedeu/support/exceptions.rb +0 -34
  247. data/lib/vedeu/support/keymap_validator.rb +0 -100
  248. data/lib/vedeu/support/model.rb +0 -14
  249. data/lib/vedeu/support/presentation.rb +0 -86
  250. data/lib/vedeu/support/registrar.rb +0 -53
  251. data/test/integration/api/api_test.rb +0 -97
  252. data/test/integration/api_dsl/dsl_api_test.rb +0 -4
  253. data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
  254. data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
  255. data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
  256. data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
  257. data/test/integration/api_dsl/dsl_keymap.rb +0 -4
  258. data/test/integration/api_dsl/dsl_line_test.rb +0 -4
  259. data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
  260. data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
  261. data/test/integration/cursors_test.rb +0 -9
  262. data/test/integration/defining_interfaces_test.rb +0 -26
  263. data/test/integration/run_once_test.rb +0 -26
  264. data/test/integration/views/basic_view_test.rb +0 -807
  265. data/test/lib/vedeu/api/api_test.rb +0 -204
  266. data/test/lib/vedeu/api/composition_test.rb +0 -31
  267. data/test/lib/vedeu/api/defined_test.rb +0 -79
  268. data/test/lib/vedeu/api/helpers_test.rb +0 -111
  269. data/test/lib/vedeu/api/interface_test.rb +0 -410
  270. data/test/lib/vedeu/api/keymap_test.rb +0 -65
  271. data/test/lib/vedeu/api/line_test.rb +0 -83
  272. data/test/lib/vedeu/api/menu_test.rb +0 -85
  273. data/test/lib/vedeu/api/stream_test.rb +0 -59
  274. data/test/lib/vedeu/colours/translator_test.rb +0 -22
  275. data/test/lib/vedeu/models/border_test.rb +0 -197
  276. data/test/lib/vedeu/models/char_test.rb +0 -52
  277. data/test/lib/vedeu/models/composition_test.rb +0 -45
  278. data/test/lib/vedeu/models/key_test.rb +0 -43
  279. data/test/lib/vedeu/models/line_test.rb +0 -123
  280. data/test/lib/vedeu/models/stream_test.rb +0 -233
  281. data/test/lib/vedeu/models/style_test.rb +0 -59
  282. data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
  283. data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
  284. data/test/lib/vedeu/repositories/events_test.rb +0 -57
  285. data/test/lib/vedeu/repositories/groups_test.rb +0 -28
  286. data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
  287. data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
  288. data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
  289. data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
  290. data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
  291. data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
  292. data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
  293. data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
  294. data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
  295. data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
  296. data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
  297. data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
  298. data/test/lib/vedeu/support/model_test.rb +0 -23
  299. data/test/lib/vedeu/support/presentation_test.rb +0 -53
  300. data/test/lib/vedeu/support/registrar_test.rb +0 -94
  301. data/test/lib/vedeu/support/repository_test.rb +0 -208
  302. data/test/support/test_classes/all.rb +0 -5
  303. data/test/support/test_classes/coercions.rb +0 -16
  304. data/test/support/test_classes/model.rb +0 -23
  305. data/test/support/test_modules/all.rb +0 -1
@@ -1,233 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Stream do
6
-
7
- let(:described) { Stream.new(attributes) }
8
- let(:attributes) {
9
- {
10
- colour: colour,
11
- parent: parent,
12
- text: text,
13
- style: style,
14
- width: width,
15
- align: align
16
- }
17
- }
18
- let(:stream) {
19
- Stream.new({
20
- colour: colour,
21
- parent: parent,
22
- text: text,
23
- style: style,
24
- width: width,
25
- align: align
26
- })
27
- }
28
- let(:colour) {
29
- {
30
- foreground: '#ff0000',
31
- background: '#000000'
32
- }
33
- }
34
- let(:parent) { nil }
35
- let(:style) { 'normal' }
36
- let(:text) { 'Some text'}
37
- let(:align) { :left }
38
- let(:width) { 9 }
39
-
40
- describe '#initialize' do
41
- it { described.must_be_instance_of(Stream) }
42
- it { assigns(described, '@attributes', attributes) }
43
- it { assigns(described, '@align', align) }
44
- it { assigns(described, '@text', text) }
45
- it { assigns(described, '@width', width) }
46
- it { assigns(described, '@parent', parent) }
47
- end
48
-
49
- describe '#chars' do
50
- let(:parent) {
51
- {
52
- colour: {
53
- foreground: '#ffff00',
54
- background: '#0000ff'
55
- },
56
- style: []
57
- }
58
- }
59
-
60
- it { return_type_for(described.chars, Array) }
61
-
62
- context 'when there is content' do
63
- it 'returns a collection of strings containing escape sequences and ' \
64
- 'content' do
65
- stream.chars.must_equal(
66
- [
67
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27mS\e[38;2;255;255;0m\e[48;2;0;0;255m",
68
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27mo\e[38;2;255;255;0m\e[48;2;0;0;255m",
69
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27mm\e[38;2;255;255;0m\e[48;2;0;0;255m",
70
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27me\e[38;2;255;255;0m\e[48;2;0;0;255m",
71
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
72
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27mt\e[38;2;255;255;0m\e[48;2;0;0;255m",
73
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27me\e[38;2;255;255;0m\e[48;2;0;0;255m",
74
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27mx\e[38;2;255;255;0m\e[48;2;0;0;255m",
75
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27mt\e[38;2;255;255;0m\e[48;2;0;0;255m"
76
- ]
77
- )
78
- end
79
- end
80
-
81
- context 'when there is no content' do
82
- let(:text) { '' }
83
- let(:width) { nil }
84
-
85
- it 'returns an empty collection' do
86
- stream.chars.must_equal([])
87
- end
88
- end
89
-
90
- context 'when there is no content but a width is set' do
91
- let(:text) { '' }
92
-
93
- it 'returns style and colours as appropriate' do
94
- stream.chars.must_equal(
95
- [
96
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
97
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
98
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
99
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
100
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
101
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
102
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
103
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m",
104
- "\e[38;2;255;0;0m\e[48;2;0;0;0m\e[24m\e[22m\e[27m \e[38;2;255;255;0m\e[48;2;0;0;255m"
105
- ]
106
- )
107
- end
108
- end
109
- end
110
-
111
- describe '#empty?' do
112
- context 'when there is no content' do
113
- before { stream.stubs(:size).returns(0) }
114
-
115
- it { stream.empty?.must_equal(true) }
116
- end
117
-
118
- it 'returns false when there is content' do
119
- stream.empty?.must_equal(false)
120
- end
121
- end
122
-
123
- describe '#size' do
124
- it { return_type_for(described.size, Fixnum) }
125
-
126
- it 'returns the size of the stream' do
127
- stream.size.must_equal(9)
128
- end
129
- end
130
-
131
- describe '#text' do
132
- it 'has a text attribute' do
133
- stream.text.must_equal('Some text')
134
- end
135
- end
136
-
137
- describe '#width' do
138
- it 'has a width attribute' do
139
- stream.width.must_equal(9)
140
- end
141
- end
142
-
143
- describe '#align' do
144
- it 'has an align attribute' do
145
- stream.align.must_equal(:left)
146
- end
147
- end
148
-
149
- describe '#to_s' do
150
- it 'reverts to the colours of the line after rendering itself' do
151
- line = Line.new({
152
- colour: {
153
- foreground: '#00ff00',
154
- background: '#000000'
155
- },
156
- style: 'normal'
157
- })
158
- stream = Stream.new({
159
- colour: {
160
- foreground: '#ff0000',
161
- background: '#000000'
162
- },
163
- text: 'Some text',
164
- style: 'underline',
165
- width: nil,
166
- align: :left,
167
- parent: line.view_attributes,
168
- })
169
- stream.to_s.must_equal(
170
- "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
171
- "\e[4m" \
172
- "Some text" \
173
- "\e[24m\e[22m\e[27m" \
174
- "\e[38;2;0;255;0m\e[48;2;0;0;0m"
175
- )
176
- end
177
-
178
- describe 'when a width is set and align is default' do
179
- let(:width) { 20 }
180
-
181
- it 'returns a String' do
182
- stream.to_s.must_equal(
183
- "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
184
- "\e[24m\e[22m\e[27m" \
185
- "Some text "
186
- )
187
- end
188
-
189
- describe 'and align is :centre' do
190
- let(:align) { :centre }
191
-
192
- it 'returns a String' do
193
- stream.to_s.must_equal(
194
- "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
195
- "\e[24m\e[22m\e[27m" \
196
- " Some text "
197
- )
198
- end
199
- end
200
-
201
- describe 'and align is :right' do
202
- let(:align) { :right }
203
-
204
- it 'returns a String' do
205
- stream.to_s.must_equal(
206
- "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
207
- "\e[24m\e[22m\e[27m" \
208
- " Some text"
209
- )
210
- end
211
- end
212
- end
213
-
214
- describe 'when a width is not set' do
215
- it 'returns a String' do
216
- stream.to_s.must_equal(
217
- "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
218
- "\e[24m\e[22m\e[27m" \
219
- "Some text"
220
- )
221
- end
222
- end
223
- end
224
-
225
- describe '#method_missing' do
226
- it 'returns nil' do
227
- Composition.new.some_missing_method(:test).must_equal(nil)
228
- end
229
- end
230
-
231
- end # Stream
232
-
233
- end # Vedeu
@@ -1,59 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Style do
6
-
7
- let(:described) { Style.new(values) }
8
- let(:values) { ['bold'] }
9
-
10
- describe '#initialize' do
11
- it { described.must_be_instance_of(Style) }
12
- it { assigns(described, '@values', values) }
13
- end
14
-
15
- describe '#attributes' do
16
- it 'returns an attributes hash for this instance' do
17
- described.attributes.must_equal({ style: ['bold'] })
18
- end
19
- end
20
-
21
- describe '#to_s' do
22
- it { return_type_for(described.to_s, String) }
23
-
24
- describe 'for a single style' do
25
- let(:values) { 'normal' }
26
-
27
- it 'returns an escape sequence' do
28
- Style.new(values).to_s.must_equal("\e[24m\e[22m\e[27m")
29
- end
30
- end
31
-
32
- describe 'for multiple styles' do
33
- let(:values) { ['normal', 'underline'] }
34
-
35
- it 'returns an escape sequence for multiple styles' do
36
- Style.new(values).to_s.must_equal("\e[24m\e[22m\e[27m\e[4m")
37
- end
38
- end
39
-
40
- describe 'for an unknown style' do
41
- let(:values) { 'unknown' }
42
-
43
- it 'returns an empty string for an unknown style' do
44
- Style.new(values).to_s.must_equal('')
45
- end
46
- end
47
-
48
- describe 'for an empty or nil' do
49
- let(:values) { '' }
50
-
51
- it 'returns an empty string for empty or nil' do
52
- Style.new(values).to_s.must_equal('')
53
- end
54
- end
55
- end
56
-
57
- end # Style
58
-
59
- end # Vedeu
@@ -1,37 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Buffers do
6
-
7
- before { Buffers.reset }
8
-
9
- describe '.add' do
10
- it 'returns the name of the buffer added to storage' do
11
- Buffers.add({ name: 'molybdenum' }).must_equal('molybdenum')
12
- end
13
-
14
- it 'raises an exception if the attributes does not have a :name key' do
15
- attributes = { no_name_key: '' }
16
-
17
- proc { Buffers.add(attributes) }.must_raise(MissingRequired)
18
- end
19
-
20
- context 'when the buffer is already registered' do
21
- it 'retrieves the buffer in storage, and adds the attributes to the ' \
22
- 'back buffer, preserving the front which may already have content' do
23
- skip
24
- end
25
- end
26
-
27
- context 'when the buffer was not registered' do
28
- it 'stores a new buffer by name, and adds the attributes to the back ' \
29
- 'buffer' do
30
- skip
31
- end
32
- end
33
- end
34
-
35
- end # Buffers
36
-
37
- end # Vedeu
@@ -1,62 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Cursors do
6
-
7
- before do
8
- Cursors.reset
9
- Offsets.reset
10
- Registrar.record({ name: 'chromium' })
11
- end
12
-
13
- describe '#add' do
14
- let(:attributes) { { name: 'chromium' } }
15
-
16
- it 'raises an exception if a :name attribute is not provided' do
17
- proc { Offsets.add({ no_name: 'no_name' }) }
18
- .must_raise(MissingRequired)
19
- end
20
-
21
- it 'returns a new instance of Offset once stored' do
22
- Offsets.add({ name: 'praseodymium' }).must_be_instance_of(Offset)
23
- end
24
-
25
- it 'returns a new Cursor after registering' do
26
- Cursors.add(attributes).must_be_instance_of(Cursor)
27
- end
28
-
29
- it 'returns a new Cursor after updating' do
30
- Cursors.update(attributes).must_be_instance_of(Cursor)
31
- end
32
-
33
- context 'when the attributes do not have the :name key' do
34
- let(:attributes) { { no_name_key: 'some_value' } }
35
-
36
- it 'raises an exception' do
37
- proc { Cursors.update(attributes) }.must_raise(MissingRequired)
38
- end
39
-
40
- it 'raises an exception' do
41
- proc { Cursors.add(attributes) }.must_raise(MissingRequired)
42
- end
43
- end
44
- end
45
-
46
- describe '#hide' do
47
- it 'sets the state attribute of the Cursor to :hide' do
48
- cursor = Cursors.hide
49
- cursor.state.must_equal(:hide)
50
- end
51
- end
52
-
53
- describe '#show' do
54
- it 'sets the state attribute of the Cursor to :show' do
55
- cursor = Cursors.show
56
- cursor.state.must_equal(:show)
57
- end
58
- end
59
-
60
- end # Cursors
61
-
62
- end # Vedeu
@@ -1,57 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Events do
6
-
7
- describe '#add' do
8
- it 'adds the event' do
9
- Events.add(:sulphur) { proc { |x| x } }
10
- Events.registered.must_include(:sulphur)
11
- end
12
- end
13
-
14
- describe '#remove' do
15
- it 'removes the event by name' do
16
- Events.add(:chlorine) { proc { |x| x } }
17
- Events.add(:argon) { proc { |y| y } }
18
- Events.remove(:chlorine)
19
-
20
- Events.registered.wont_include(:chlorine)
21
- end
22
-
23
- it 'removes the event by name only if the name exists' do
24
- Events.add(:chlorine) { proc { |x| x } }
25
- Events.add(:argon) { proc { |y| y } }
26
-
27
- Events.remove(:potassium).must_equal(false)
28
- end
29
-
30
- context 'alias method: #unevent' do
31
- it 'removes the event by name' do
32
- Events.add(:chlorine) { proc { |x| x } }
33
- Events.add(:argon) { proc { |y| y } }
34
- Events.unevent(:chlorine)
35
-
36
- Events.registered.wont_include(:chlorine)
37
- end
38
- end
39
- end
40
-
41
- describe '#trigger' do
42
- it 'returns the result of triggering the event' do
43
- NastyException = Class.new(StandardError)
44
-
45
- Events.add(:_nasty_exception_) { fail NastyException }
46
-
47
- proc { Events.use(:_nasty_exception_) }.must_raise(NastyException)
48
- end
49
-
50
- it 'returns an empty collection when the event has not been registered' do
51
- Events.use(:_not_found_).must_be_empty
52
- end
53
- end
54
-
55
- end # Events
56
-
57
- end # Vedeu
@@ -1,28 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Groups do
6
-
7
- describe '#add' do
8
- before { Groups.reset }
9
-
10
- it 'returns false if the group name is empty' do
11
- Groups.add({ group: '', name: 'gallium', delay: 0.0 }).must_equal(false)
12
- end
13
-
14
- it 'adds the interface name to the group in storage' do
15
- Groups.add({ group: 'elements', name: 'germanium', delay: 0.0 })
16
- Groups.all.must_equal({ 'elements' => Set['germanium'] })
17
- end
18
-
19
- it 'raises an exception if the attributes does not have a :name key' do
20
- attributes = { no_name_key: '' }
21
-
22
- proc { Groups.add(attributes) }.must_raise(MissingRequired)
23
- end
24
- end
25
-
26
- end # Groups
27
-
28
- end # Vedeu
@@ -1,51 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Vedeu
4
-
5
- describe Interfaces do
6
-
7
- describe '#add' do
8
- before { Interfaces.reset }
9
-
10
- it 'adds the interface to the storage' do
11
- Interfaces.add({ name: 'germanium' })
12
- Interfaces.all.must_equal({ 'germanium' => { name: 'germanium' } })
13
- end
14
-
15
- it 'raises an exception if the attributes does not have a :name key' do
16
- attributes = { no_name_key: '' }
17
-
18
- proc { Interfaces.add(attributes) }.must_raise(MissingRequired)
19
- end
20
- end
21
-
22
- describe '#build' do
23
- let(:attributes) { { name: 'rhenium' } }
24
-
25
- before { Interfaces.add(attributes) }
26
- after { Interfaces.reset }
27
-
28
- it 'returns a new instance of Interface based on the stored attributes' do
29
- Interfaces.build('rhenium').must_be_instance_of(Interface)
30
- end
31
-
32
- context 'when the interface cannot be found' do
33
- it 'raises an exception' do
34
- proc { Interfaces.build('manganese') }.must_raise(ModelNotFound)
35
- end
36
- end
37
- end
38
-
39
- describe '#reset' do
40
- before { Interfaces.reset }
41
-
42
- it 'removes all known interfaces from the storage' do
43
- Interfaces.add({ name: 'bromine' })
44
- Interfaces.all.must_equal({ 'bromine' => { name: 'bromine' } })
45
- Interfaces.reset.must_be_empty
46
- end
47
- end
48
-
49
- end # Interfaces
50
-
51
- end # Vedeu