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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Guardfile +13 -0
- data/README.md +11 -9
- data/Rakefile +10 -1
- data/bin/vedeu_test +14 -0
- data/config/cucumber.yml +8 -0
- data/docs/api.md +45 -16
- data/docs/events.md +21 -9
- data/docs/getting_started.md +16 -0
- data/docs/views.md +158 -0
- data/examples/borders_app.rb +236 -110
- data/examples/colour_support.sh +98 -0
- data/examples/colours_app.rb +41 -0
- data/examples/configuration_app.rb +11 -6
- data/examples/cursor_app.rb +60 -61
- data/examples/focus_app.rb +72 -34
- data/examples/hello_world.rb +13 -8
- data/examples/lines_app.rb +37 -28
- data/features/start_stop.feature +27 -0
- data/features/support/env.rb +14 -0
- data/lib/vedeu/all.rb +29 -0
- data/lib/vedeu/api.rb +39 -0
- data/lib/vedeu/application.rb +15 -7
- data/lib/vedeu/bindings.rb +121 -0
- data/lib/vedeu/buffers/all.rb +10 -0
- data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
- data/lib/vedeu/buffers/display_buffer.rb +118 -0
- data/lib/vedeu/configuration/all.rb +6 -0
- data/lib/vedeu/configuration/api.rb +3 -1
- data/lib/vedeu/configuration/cli.rb +3 -1
- data/lib/vedeu/configuration/configuration.rb +23 -2
- data/lib/vedeu/cursor/all.rb +23 -0
- data/lib/vedeu/cursor/cursor.rb +116 -0
- data/lib/vedeu/cursor/move_cursor.rb +137 -0
- data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
- data/lib/vedeu/dsl/all.rb +28 -0
- data/lib/vedeu/dsl/components/all.rb +7 -0
- data/lib/vedeu/dsl/components/border.rb +104 -0
- data/lib/vedeu/dsl/components/geometry.rb +153 -0
- data/lib/vedeu/dsl/components/keymap.rb +93 -0
- data/lib/vedeu/dsl/components/menu.rb +82 -0
- data/lib/vedeu/dsl/composition.rb +72 -0
- data/lib/vedeu/dsl/interface.rb +210 -0
- data/lib/vedeu/dsl/line.rb +135 -0
- data/lib/vedeu/dsl/shared/all.rb +7 -0
- data/lib/vedeu/dsl/shared/colour.rb +85 -0
- data/lib/vedeu/dsl/shared/style.rb +38 -0
- data/lib/vedeu/dsl/shared/text.rb +102 -0
- data/lib/vedeu/dsl/shared/use.rb +47 -0
- data/lib/vedeu/dsl/stream.rb +49 -0
- data/lib/vedeu/dsl/view.rb +136 -0
- data/lib/vedeu/events/all.rb +10 -0
- data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
- data/lib/vedeu/events/trigger.rb +58 -0
- data/lib/vedeu/exceptions.rb +34 -0
- data/lib/vedeu/input/all.rb +29 -0
- data/lib/vedeu/input/input.rb +26 -0
- data/lib/vedeu/{models → input}/key.rb +21 -11
- data/lib/vedeu/input/keymap.rb +130 -0
- data/lib/vedeu/input/keys.rb +8 -0
- data/lib/vedeu/input/mapper.rb +112 -0
- data/lib/vedeu/launcher.rb +7 -4
- data/lib/vedeu/models/all.rb +12 -0
- data/lib/vedeu/models/collection.rb +71 -0
- data/lib/vedeu/{repositories → models}/focus.rb +63 -21
- data/lib/vedeu/models/geometry.rb +100 -259
- data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
- data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
- data/lib/vedeu/models/model.rb +51 -0
- data/lib/vedeu/models/view/all.rb +12 -0
- data/lib/vedeu/models/view/char.rb +84 -0
- data/lib/vedeu/models/view/chars.rb +8 -0
- data/lib/vedeu/models/view/composition.rb +101 -0
- data/lib/vedeu/models/view/interface.rb +215 -0
- data/lib/vedeu/models/view/interfaces.rb +8 -0
- data/lib/vedeu/models/view/line.rb +134 -0
- data/lib/vedeu/models/view/lines.rb +8 -0
- data/lib/vedeu/models/view/stream.rb +144 -0
- data/lib/vedeu/models/view/streams.rb +8 -0
- data/lib/vedeu/output/all.rb +8 -0
- data/lib/vedeu/output/border.rb +387 -0
- data/lib/vedeu/output/compositor.rb +41 -30
- data/lib/vedeu/output/output.rb +6 -13
- data/lib/vedeu/output/viewport.rb +78 -94
- data/lib/vedeu/output/writer.rb +29 -0
- data/lib/vedeu/presentation/all.rb +9 -0
- data/lib/vedeu/{colours → presentation}/background.rb +1 -9
- data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
- data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
- data/lib/vedeu/presentation/presentation.rb +91 -0
- data/lib/vedeu/presentation/style.rb +47 -0
- data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
- data/lib/vedeu/repositories/all.rb +5 -0
- data/lib/vedeu/repositories/menus.rb +5 -42
- data/lib/vedeu/{support → repositories}/repository.rb +78 -41
- data/lib/vedeu/support/all.rb +22 -0
- data/lib/vedeu/support/bounding_area.rb +2 -1
- data/lib/vedeu/support/coercions.rb +18 -1
- data/lib/vedeu/support/console.rb +73 -0
- data/lib/vedeu/support/content_geometry.rb +69 -0
- data/lib/vedeu/support/coordinate.rb +246 -0
- data/lib/vedeu/support/esc.rb +29 -2
- data/lib/vedeu/support/log.rb +36 -2
- data/lib/vedeu/support/node.rb +61 -0
- data/lib/vedeu/support/position.rb +28 -13
- data/lib/vedeu/support/position_validator.rb +79 -0
- data/lib/vedeu/support/read.rb +65 -0
- data/lib/vedeu/support/refresh.rb +8 -32
- data/lib/vedeu/support/terminal.rb +34 -4
- data/lib/vedeu/support/text.rb +104 -0
- data/lib/vedeu/support/trace.rb +11 -23
- data/lib/vedeu/support/visible.rb +75 -0
- data/lib/vedeu/support/write.rb +85 -0
- data/lib/vedeu/traps.rb +18 -0
- data/lib/vedeu.rb +41 -101
- data/test/integration/dsl/compositions_test.rb +27 -0
- data/test/integration/dsl/interfaces_test.rb +261 -0
- data/test/integration/dsl/keymaps_test.rb +42 -0
- data/test/integration/dsl/lines_test.rb +146 -0
- data/test/integration/dsl/menus_test.rb +59 -0
- data/test/integration/dsl/streams_test.rb +129 -0
- data/test/integration/dsl/views_test.rb +63 -0
- data/test/lib/vedeu/api_test.rb +163 -0
- data/test/lib/vedeu/application_test.rb +19 -10
- data/test/lib/vedeu/bindings_test.rb +54 -0
- data/test/lib/vedeu/buffers/all_test.rb +11 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
- data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
- data/test/lib/vedeu/configuration/api_test.rb +42 -58
- data/test/lib/vedeu/configuration/cli_test.rb +4 -4
- data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
- data/test/lib/vedeu/cursor/all_test.rb +33 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
- data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
- data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
- data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
- data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
- data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
- data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
- data/test/lib/vedeu/dsl/composition_test.rb +41 -0
- data/test/lib/vedeu/dsl/interface_test.rb +470 -0
- data/test/lib/vedeu/dsl/line_test.rb +60 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
- data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
- data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
- data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
- data/test/lib/vedeu/dsl/stream_test.rb +26 -0
- data/test/lib/vedeu/dsl/view_test.rb +73 -0
- data/test/lib/vedeu/events/all_test.rb +11 -0
- data/test/lib/vedeu/events/event_test.rb +109 -0
- data/test/lib/vedeu/events/trigger_test.rb +60 -0
- data/test/lib/vedeu/input/all_test.rb +11 -0
- data/test/lib/vedeu/input/input_test.rb +7 -3
- data/test/lib/vedeu/input/key_test.rb +72 -0
- data/test/lib/vedeu/input/keymap_test.rb +89 -0
- data/test/lib/vedeu/input/mapper_test.rb +94 -0
- data/test/lib/vedeu/launcher_test.rb +19 -20
- data/test/lib/vedeu/models/collection_test.rb +114 -0
- data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
- data/test/lib/vedeu/models/geometry_test.rb +35 -39
- data/test/lib/vedeu/models/group_test.rb +100 -0
- data/test/lib/vedeu/models/menu_test.rb +288 -0
- data/test/lib/vedeu/models/model_test.rb +31 -0
- data/test/lib/vedeu/models/view/char_test.rb +166 -0
- data/test/lib/vedeu/models/view/chars_test.rb +18 -0
- data/test/lib/vedeu/models/view/composition_test.rb +41 -0
- data/test/lib/vedeu/models/view/interface_test.rb +128 -0
- data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
- data/test/lib/vedeu/models/view/line_test.rb +214 -0
- data/test/lib/vedeu/models/view/lines_test.rb +18 -0
- data/test/lib/vedeu/models/view/stream_test.rb +106 -0
- data/test/lib/vedeu/models/view/streams_test.rb +18 -0
- data/test/lib/vedeu/output/border_test.rb +357 -0
- data/test/lib/vedeu/output/compositor_test.rb +61 -15
- data/test/lib/vedeu/output/output_test.rb +25 -84
- data/test/lib/vedeu/output/viewport_test.rb +171 -45
- data/test/lib/vedeu/output/writer_test.rb +45 -0
- data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
- data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
- data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
- data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
- data/test/lib/vedeu/presentation/style_test.rb +69 -0
- data/test/lib/vedeu/presentation/translator_test.rb +63 -0
- data/test/lib/vedeu/repositories/all_test.rb +7 -0
- data/test/lib/vedeu/repositories/menus_test.rb +3 -156
- data/test/lib/vedeu/repositories/repository_test.rb +271 -0
- data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
- data/test/lib/vedeu/support/coercions_test.rb +39 -0
- data/test/lib/vedeu/support/common_test.rb +31 -16
- data/test/lib/vedeu/support/console_test.rb +85 -0
- data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
- data/test/lib/vedeu/support/coordinate_test.rb +190 -0
- data/test/lib/vedeu/support/esc_test.rb +18 -0
- data/test/lib/vedeu/support/grid_test.rb +15 -10
- data/test/lib/vedeu/support/log_test.rb +3 -0
- data/test/lib/vedeu/support/position_test.rb +22 -2
- data/test/lib/vedeu/support/position_validator_test.rb +11 -0
- data/test/lib/vedeu/support/read_test.rb +88 -0
- data/test/lib/vedeu/support/refresh_test.rb +44 -12
- data/test/lib/vedeu/support/sentence_test.rb +6 -4
- data/test/lib/vedeu/support/terminal_test.rb +81 -70
- data/test/lib/vedeu/support/text_test.rb +93 -0
- data/test/lib/vedeu/support/trace_test.rb +21 -9
- data/test/lib/vedeu/support/visible_test.rb +148 -0
- data/test/lib/vedeu/support/write_test.rb +136 -0
- data/test/lib/vedeu/traps_test.rb +11 -0
- data/test/lib/vedeu_test.rb +2 -0
- data/test/support/helpers/all.rb +7 -0
- data/test/support/helpers/dsl_model_test_class.rb +25 -0
- data/test/support/{test_classes → helpers}/helpers.rb +0 -2
- data/test/support/helpers/misc.rb +15 -0
- data/test/support/helpers/model_test_class.rb +34 -0
- data/test/support/{test_classes → helpers}/presentation.rb +0 -0
- data/test/support/{test_classes → helpers}/repositories.rb +3 -3
- data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
- data/test/test_helper.rb +19 -22
- data/vedeu.gemspec +11 -6
- metadata +322 -181
- data/lib/vedeu/api/api.rb +0 -239
- data/lib/vedeu/api/composition.rb +0 -38
- data/lib/vedeu/api/defined.rb +0 -52
- data/lib/vedeu/api/helpers.rb +0 -161
- data/lib/vedeu/api/interface.rb +0 -287
- data/lib/vedeu/api/keymap.rb +0 -75
- data/lib/vedeu/api/line.rb +0 -107
- data/lib/vedeu/api/menu.rb +0 -111
- data/lib/vedeu/api/stream.rb +0 -96
- data/lib/vedeu/models/border.rb +0 -238
- data/lib/vedeu/models/char.rb +0 -43
- data/lib/vedeu/models/composition.rb +0 -72
- data/lib/vedeu/models/line.rb +0 -100
- data/lib/vedeu/models/stream.rb +0 -130
- data/lib/vedeu/models/style.rb +0 -52
- data/lib/vedeu/repositories/buffers.rb +0 -52
- data/lib/vedeu/repositories/cursors.rb +0 -64
- data/lib/vedeu/repositories/events.rb +0 -147
- data/lib/vedeu/repositories/groups.rb +0 -47
- data/lib/vedeu/repositories/interfaces.rb +0 -78
- data/lib/vedeu/repositories/keymaps.rb +0 -196
- data/lib/vedeu/repositories/models/cursor.rb +0 -209
- data/lib/vedeu/repositories/models/interface.rb +0 -163
- data/lib/vedeu/repositories/models/keymap.rb +0 -111
- data/lib/vedeu/repositories/models/offset.rb +0 -91
- data/lib/vedeu/repositories/offsets.rb +0 -69
- data/lib/vedeu/support/exceptions.rb +0 -34
- data/lib/vedeu/support/keymap_validator.rb +0 -100
- data/lib/vedeu/support/model.rb +0 -14
- data/lib/vedeu/support/presentation.rb +0 -86
- data/lib/vedeu/support/registrar.rb +0 -53
- data/test/integration/api/api_test.rb +0 -97
- data/test/integration/api_dsl/dsl_api_test.rb +0 -4
- data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
- data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
- data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
- data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
- data/test/integration/api_dsl/dsl_keymap.rb +0 -4
- data/test/integration/api_dsl/dsl_line_test.rb +0 -4
- data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
- data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
- data/test/integration/cursors_test.rb +0 -9
- data/test/integration/defining_interfaces_test.rb +0 -26
- data/test/integration/run_once_test.rb +0 -26
- data/test/integration/views/basic_view_test.rb +0 -807
- data/test/lib/vedeu/api/api_test.rb +0 -204
- data/test/lib/vedeu/api/composition_test.rb +0 -31
- data/test/lib/vedeu/api/defined_test.rb +0 -79
- data/test/lib/vedeu/api/helpers_test.rb +0 -111
- data/test/lib/vedeu/api/interface_test.rb +0 -410
- data/test/lib/vedeu/api/keymap_test.rb +0 -65
- data/test/lib/vedeu/api/line_test.rb +0 -83
- data/test/lib/vedeu/api/menu_test.rb +0 -85
- data/test/lib/vedeu/api/stream_test.rb +0 -59
- data/test/lib/vedeu/colours/translator_test.rb +0 -22
- data/test/lib/vedeu/models/border_test.rb +0 -197
- data/test/lib/vedeu/models/char_test.rb +0 -52
- data/test/lib/vedeu/models/composition_test.rb +0 -45
- data/test/lib/vedeu/models/key_test.rb +0 -43
- data/test/lib/vedeu/models/line_test.rb +0 -123
- data/test/lib/vedeu/models/stream_test.rb +0 -233
- data/test/lib/vedeu/models/style_test.rb +0 -59
- data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
- data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
- data/test/lib/vedeu/repositories/events_test.rb +0 -57
- data/test/lib/vedeu/repositories/groups_test.rb +0 -28
- data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
- data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
- data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
- data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
- data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
- data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
- data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
- data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
- data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
- data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
- data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
- data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
- data/test/lib/vedeu/support/model_test.rb +0 -23
- data/test/lib/vedeu/support/presentation_test.rb +0 -53
- data/test/lib/vedeu/support/registrar_test.rb +0 -94
- data/test/lib/vedeu/support/repository_test.rb +0 -208
- data/test/support/test_classes/all.rb +0 -5
- data/test/support/test_classes/coercions.rb +0 -16
- data/test/support/test_classes/model.rb +0 -23
- data/test/support/test_modules/all.rb +0 -1
@@ -4,13 +4,18 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Terminal do
|
6
6
|
|
7
|
+
let(:described) { Vedeu::Terminal }
|
8
|
+
|
7
9
|
let(:console) { IO.console }
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
+
before do
|
12
|
+
IO.console.stubs(:winsize).returns([25, 80])
|
13
|
+
IO.console.stubs(:print)
|
14
|
+
end
|
11
15
|
|
12
|
-
|
13
|
-
|
16
|
+
describe '.open' do
|
17
|
+
context 'when a block was not given' do
|
18
|
+
it { proc { Terminal.open }.must_raise(InvalidSyntax) }
|
14
19
|
end
|
15
20
|
|
16
21
|
it 'opens a new terminal console in raw mode' do
|
@@ -34,24 +39,66 @@ module Vedeu
|
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
42
|
+
describe '.input' do
|
43
|
+
context 'when the terminal is in cooked mode' do
|
44
|
+
let(:mode) { :cooked }
|
45
|
+
let(:input) { "Some input\r\n" }
|
46
|
+
|
47
|
+
before do
|
48
|
+
Terminal.stubs(:mode).returns(mode)
|
49
|
+
IO.console.stubs(:gets).returns(input)
|
50
|
+
end
|
51
|
+
|
52
|
+
subject { Terminal.input }
|
53
|
+
|
54
|
+
it { subject.must_equal('Some input') }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when the terminal is in raw mode' do
|
58
|
+
let(:mode) { :raw }
|
59
|
+
let(:input) { "\e" }
|
60
|
+
|
61
|
+
before do
|
62
|
+
Terminal.stubs(:mode).returns(mode)
|
63
|
+
IO.console.stubs(:getch).returns(input)
|
64
|
+
input.stubs(:ord).returns(27)
|
65
|
+
IO.console.stubs(:read_nonblock)
|
66
|
+
end
|
67
|
+
|
68
|
+
subject { Terminal.input }
|
69
|
+
|
70
|
+
it { subject.must_be_instance_of(String) }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
37
74
|
describe '.output' do
|
38
|
-
|
75
|
+
subject { described.output(*value) }
|
76
|
+
|
77
|
+
context 'when the value is a String' do
|
78
|
+
let(:value) { 'Some output...' }
|
39
79
|
|
40
|
-
|
41
|
-
Terminal.output('Some output...').must_equal(['Some output...'])
|
80
|
+
it { subject.must_equal(['Some output...']) }
|
42
81
|
end
|
82
|
+
context 'when there are multiple values' do
|
83
|
+
let(:value) { ['Some output...', 'more output...', 'even more...'] }
|
43
84
|
|
44
|
-
|
45
|
-
Terminal.output('Some output...', 'more output...', 'even more...')
|
46
|
-
.must_equal(['Some output...', 'more output...', 'even more...'])
|
85
|
+
it { subject.must_equal(['Some output...', 'more output...', 'even more...']) }
|
47
86
|
end
|
48
87
|
end
|
49
88
|
|
50
|
-
describe '.
|
89
|
+
describe '.resize' do
|
90
|
+
before { Vedeu.interfaces.reset }
|
91
|
+
|
92
|
+
subject { Terminal.resize }
|
93
|
+
|
94
|
+
it { subject.must_be_instance_of(TrueClass) }
|
95
|
+
end
|
96
|
+
|
97
|
+
describe '.clear' do
|
98
|
+
subject { Terminal.clear }
|
99
|
+
|
51
100
|
it 'clears the screen' do
|
52
|
-
|
53
|
-
Terminal.clear_screen.must_equal(["\e[38;2;39m\e[48;2;49m\e[2J"])
|
54
|
-
end
|
101
|
+
subject.must_equal(["\e[38;2;39m\e[48;2;49m\e[2J"])
|
55
102
|
end
|
56
103
|
end
|
57
104
|
|
@@ -98,13 +145,11 @@ module Vedeu
|
|
98
145
|
|
99
146
|
it 'returns :cooked if previously :raw' do
|
100
147
|
Terminal.raw_mode!
|
101
|
-
|
102
148
|
Terminal.switch_mode!.must_equal(:cooked)
|
103
149
|
end
|
104
150
|
|
105
151
|
it 'returns :raw if previously :cooked' do
|
106
152
|
Terminal.cooked_mode!
|
107
|
-
|
108
153
|
Terminal.switch_mode!.must_equal(:raw)
|
109
154
|
end
|
110
155
|
end
|
@@ -117,61 +162,44 @@ module Vedeu
|
|
117
162
|
|
118
163
|
it 'returns the configured terminal mode' do
|
119
164
|
Terminal.mode.must_be_instance_of(Symbol)
|
120
|
-
|
121
165
|
Terminal.mode.must_equal(:raw)
|
122
166
|
end
|
123
167
|
end
|
124
168
|
|
125
169
|
describe '.centre' do
|
126
170
|
it 'returns the centre point on the terminal' do
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
Terminal.centre.must_equal([12, 40])
|
131
|
-
end
|
171
|
+
Terminal.centre.must_be_instance_of(Array)
|
172
|
+
Terminal.centre.must_equal([12, 40])
|
132
173
|
end
|
133
174
|
end
|
134
175
|
|
135
176
|
describe '.centre_y' do
|
136
177
|
it 'returns the centre `y` point on the terminal' do
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
Terminal.centre_y.must_equal(12)
|
141
|
-
end
|
178
|
+
Terminal.centre_y.must_be_instance_of(Fixnum)
|
179
|
+
Terminal.centre_y.must_equal(12)
|
142
180
|
end
|
143
181
|
end
|
144
182
|
|
145
183
|
describe '.centre_x' do
|
146
184
|
it 'returns the centre `x` point on the terminal' do
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
Terminal.centre_x.must_equal(40)
|
151
|
-
end
|
185
|
+
Terminal.centre_x.must_be_instance_of(Fixnum)
|
186
|
+
Terminal.centre_x.must_equal(40)
|
152
187
|
end
|
153
188
|
end
|
154
189
|
|
155
190
|
describe '.origin' do
|
156
191
|
it 'returns 1' do
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
Terminal.origin.must_equal(1)
|
161
|
-
end
|
192
|
+
Terminal.origin.must_be_instance_of(Fixnum)
|
193
|
+
Terminal.origin.must_equal(1)
|
162
194
|
end
|
163
195
|
|
164
196
|
context 'alias_methods' do
|
165
197
|
it 'returns 1' do
|
166
|
-
|
167
|
-
Terminal.x.must_equal(1)
|
168
|
-
end
|
198
|
+
Terminal.x.must_equal(1)
|
169
199
|
end
|
170
200
|
|
171
201
|
it 'returns 1' do
|
172
|
-
|
173
|
-
Terminal.y.must_equal(1)
|
174
|
-
end
|
202
|
+
Terminal.y.must_equal(1)
|
175
203
|
end
|
176
204
|
end
|
177
205
|
end
|
@@ -179,27 +207,20 @@ module Vedeu
|
|
179
207
|
describe '.width' do
|
180
208
|
context 'via method' do
|
181
209
|
it 'returns the width of the terminal' do
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
Terminal.width.must_equal(80)
|
186
|
-
end
|
210
|
+
Terminal.width.must_be_instance_of(Fixnum)
|
211
|
+
Terminal.width.must_equal(80)
|
187
212
|
end
|
188
213
|
end
|
189
214
|
|
190
215
|
context 'via API' do
|
191
216
|
it 'returns the width of the terminal' do
|
192
|
-
|
193
|
-
Vedeu.width.must_equal(40)
|
194
|
-
end
|
217
|
+
Vedeu.width.must_equal(80)
|
195
218
|
end
|
196
219
|
end
|
197
220
|
|
198
221
|
context 'alias_methods' do
|
199
222
|
it 'returns the xn coordinate of the terminal' do
|
200
|
-
|
201
|
-
Terminal.xn.must_equal(80)
|
202
|
-
end
|
223
|
+
Terminal.xn.must_equal(80)
|
203
224
|
end
|
204
225
|
end
|
205
226
|
end
|
@@ -207,38 +228,28 @@ module Vedeu
|
|
207
228
|
describe '.height' do
|
208
229
|
context 'via method' do
|
209
230
|
it 'returns the height of the terminal' do
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
Terminal.height.must_equal(25)
|
214
|
-
end
|
231
|
+
Terminal.height.must_be_instance_of(Fixnum)
|
232
|
+
Terminal.height.must_equal(25)
|
215
233
|
end
|
216
234
|
end
|
217
235
|
|
218
236
|
context 'via API' do
|
219
237
|
it 'returns the height of the terminal' do
|
220
|
-
|
221
|
-
Vedeu.height.must_equal(24)
|
222
|
-
end
|
238
|
+
Vedeu.height.must_equal(25)
|
223
239
|
end
|
224
240
|
end
|
225
241
|
|
226
242
|
context 'alias_methods' do
|
227
243
|
it 'returns the yn coordinate of the terminal' do
|
228
|
-
|
229
|
-
Terminal.yn.must_equal(25)
|
230
|
-
end
|
244
|
+
Terminal.yn.must_equal(25)
|
231
245
|
end
|
232
246
|
end
|
233
247
|
end
|
234
248
|
|
235
249
|
describe '.size' do
|
236
250
|
it 'returns the width and height of the terminal' do
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
Terminal.size.must_equal([25, 80])
|
241
|
-
end
|
251
|
+
Terminal.size.must_be_instance_of(Array)
|
252
|
+
Terminal.size.must_equal([25, 80])
|
242
253
|
end
|
243
254
|
end
|
244
255
|
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Text do
|
6
|
+
|
7
|
+
let(:value) { 'Testing the Text class with various options' }
|
8
|
+
let(:options) {
|
9
|
+
{
|
10
|
+
anchor: anchor,
|
11
|
+
pad: pad,
|
12
|
+
width: width,
|
13
|
+
}
|
14
|
+
}
|
15
|
+
let(:anchor) { :left }
|
16
|
+
let(:pad) { ' ' }
|
17
|
+
let(:width) { nil }
|
18
|
+
|
19
|
+
describe '.with' do
|
20
|
+
context 'when a width is provided' do
|
21
|
+
context 'when value longer than the width' do
|
22
|
+
let(:width) { 23 }
|
23
|
+
|
24
|
+
it 'returns the value truncated' do
|
25
|
+
Text.with(value, options).must_equal('Testing the Text class ')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when value is shorter or equal to the width' do
|
30
|
+
let(:width) { 48 }
|
31
|
+
|
32
|
+
context 'and an anchor is not set' do
|
33
|
+
it 'returns the value left aligned' do
|
34
|
+
Text.with(value, options)
|
35
|
+
.must_equal('Testing the Text class with various options ')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'and the anchor is set to :left' do
|
40
|
+
it 'returns the value left aligned' do
|
41
|
+
Text.with(value, options)
|
42
|
+
.must_equal('Testing the Text class with various options ')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'and the anchor is set to :align' do
|
47
|
+
let(:anchor) { :align }
|
48
|
+
|
49
|
+
it 'returns the value left aligned' do
|
50
|
+
Text.with(value, options)
|
51
|
+
.must_equal('Testing the Text class with various options ')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'and the anchor is set to centre' do
|
56
|
+
let(:anchor) { :centre }
|
57
|
+
|
58
|
+
it 'returns the value centre aligned' do
|
59
|
+
Text.with(value, options)
|
60
|
+
.must_equal(' Testing the Text class with various options ')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'and the anchor is set to right' do
|
65
|
+
let(:anchor) { :right }
|
66
|
+
|
67
|
+
it 'returns the value right aligned' do
|
68
|
+
Text.with(value, options)
|
69
|
+
.must_equal(' Testing the Text class with various options')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'and the anchor is invalid' do
|
74
|
+
let(:anchor) { :invalid }
|
75
|
+
|
76
|
+
it 'returns the value left aligned' do
|
77
|
+
Text.with(value, options)
|
78
|
+
.must_equal('Testing the Text class with various options ')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when a width is not provided' do
|
85
|
+
it 'returns the value as a string' do
|
86
|
+
Text.with(:some_value).must_equal('some_value')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end # Text
|
92
|
+
|
93
|
+
end # Vedeu
|
@@ -4,20 +4,32 @@ module Vedeu
|
|
4
4
|
|
5
5
|
describe Trace do
|
6
6
|
|
7
|
-
let(:described) { Trace
|
7
|
+
let(:described) { Vedeu::Trace }
|
8
|
+
let(:instance) { described.new(options) }
|
8
9
|
let(:options) { {} }
|
9
10
|
|
10
|
-
describe '.call' do
|
11
|
-
it { skip }
|
12
|
-
end
|
13
|
-
|
14
11
|
describe '#initialize' do
|
15
|
-
|
16
|
-
|
12
|
+
subject { instance }
|
13
|
+
|
14
|
+
it { subject.must_be_instance_of(Trace) }
|
15
|
+
it { subject.instance_variable_get('@options').must_equal(options) }
|
17
16
|
end
|
18
17
|
|
19
|
-
describe '
|
20
|
-
|
18
|
+
describe '.call' do
|
19
|
+
subject { described.call(options) }
|
20
|
+
|
21
|
+
context 'when trace is enabled in the configuration' do
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when trace is disabled in the configuration' do
|
25
|
+
context 'and not enabled via the options' do
|
26
|
+
|
27
|
+
end
|
28
|
+
context 'but enabled via the options' do
|
29
|
+
let(:options) { { trace: true } }
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
21
33
|
end
|
22
34
|
|
23
35
|
end # Trace
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'vedeu/support/visible'
|
4
|
+
|
5
|
+
module Vedeu
|
6
|
+
|
7
|
+
describe Visible do
|
8
|
+
|
9
|
+
let(:described) { Vedeu::Visible }
|
10
|
+
let(:instance) { described.new(visible) }
|
11
|
+
let(:visible) { true }
|
12
|
+
|
13
|
+
describe '#initialize' do
|
14
|
+
subject { instance }
|
15
|
+
|
16
|
+
it { subject.must_be_instance_of(Visible) }
|
17
|
+
|
18
|
+
context 'when visible is :hide' do
|
19
|
+
let(:visible) { :hide }
|
20
|
+
|
21
|
+
it { subject.instance_variable_get('@visible').must_equal(false) }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when visible is :show' do
|
25
|
+
let(:visible) { :show }
|
26
|
+
|
27
|
+
it { subject.instance_variable_get('@visible').must_equal(true) }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when visible is nil' do
|
31
|
+
let(:visible) { nil }
|
32
|
+
|
33
|
+
it { subject.instance_variable_get('@visible').must_equal(false) }
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when visible is false' do
|
37
|
+
let(:visible) { false }
|
38
|
+
|
39
|
+
it { subject.instance_variable_get('@visible').must_equal(false) }
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when visible is anything else that evaluates to true' do
|
43
|
+
let(:visible) { 'yeah show it!' }
|
44
|
+
|
45
|
+
it { subject.instance_variable_get('@visible').must_equal(true) }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.coerce' do
|
50
|
+
subject { described.coerce(value) }
|
51
|
+
|
52
|
+
context 'when the value is a Visible' do
|
53
|
+
let(:value) { described.new }
|
54
|
+
|
55
|
+
it { subject.must_be_instance_of(Visible) }
|
56
|
+
it { subject.visible?.must_equal(false) }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when the value is not a Visible' do
|
60
|
+
let(:value) { :show }
|
61
|
+
|
62
|
+
it { subject.must_be_instance_of(Visible) }
|
63
|
+
it { subject.visible?.must_equal(true) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#inspect' do
|
68
|
+
subject { instance.inspect }
|
69
|
+
|
70
|
+
it { subject.must_equal('<Vedeu::Visible (true)>') }
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#cursor' do
|
74
|
+
subject { instance.cursor }
|
75
|
+
|
76
|
+
it { subject.must_be_instance_of(String) }
|
77
|
+
|
78
|
+
context 'when visible' do
|
79
|
+
it { subject.must_equal("\e[?25h") }
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when not visible' do
|
83
|
+
let(:visible) { false }
|
84
|
+
|
85
|
+
it { subject.must_equal("\e[?25l") }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#visible?' do
|
90
|
+
subject { instance.visible? }
|
91
|
+
|
92
|
+
context 'when visible' do
|
93
|
+
it { subject.must_be_instance_of(TrueClass) }
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when not visible' do
|
97
|
+
let(:visible) { false }
|
98
|
+
|
99
|
+
it { subject.must_be_instance_of(FalseClass) }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#invisible?' do
|
104
|
+
subject { instance.invisible? }
|
105
|
+
|
106
|
+
context 'when not visible' do
|
107
|
+
let(:visible) { false }
|
108
|
+
|
109
|
+
it { subject.must_be_instance_of(TrueClass) }
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'when visible' do
|
113
|
+
it { subject.must_be_instance_of(FalseClass) }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe '#hide' do
|
118
|
+
subject { instance.hide }
|
119
|
+
|
120
|
+
it { subject.must_be_instance_of(Visible) }
|
121
|
+
it { subject.visible?.must_equal(false) }
|
122
|
+
end
|
123
|
+
|
124
|
+
describe '#show' do
|
125
|
+
subject { instance.show }
|
126
|
+
it { subject.must_be_instance_of(Visible) }
|
127
|
+
it { subject.visible?.must_equal(true) }
|
128
|
+
end
|
129
|
+
|
130
|
+
describe '#toggle' do
|
131
|
+
subject { instance.toggle }
|
132
|
+
|
133
|
+
it { subject.must_be_instance_of(Visible) }
|
134
|
+
|
135
|
+
context 'when visible' do
|
136
|
+
it { subject.visible?.must_be_instance_of(FalseClass) }
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'when not visible' do
|
140
|
+
let(:visible) { false }
|
141
|
+
|
142
|
+
it { subject.visible?.must_be_instance_of(TrueClass) }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
end # Visible
|
147
|
+
|
148
|
+
end # Vedeu
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Write do
|
6
|
+
|
7
|
+
let(:described) { Vedeu::Write }
|
8
|
+
let(:instance) { described.new(console, data) }
|
9
|
+
let(:console) { Vedeu::Console.new(height, width) }
|
10
|
+
let(:data) {}
|
11
|
+
let(:height) { 3 }
|
12
|
+
let(:width) { 40 }
|
13
|
+
|
14
|
+
describe '#initialize' do
|
15
|
+
subject { instance }
|
16
|
+
|
17
|
+
it { subject.must_be_instance_of(described) }
|
18
|
+
it { subject.instance_variable_get('@console').must_equal(console) }
|
19
|
+
it { subject.instance_variable_get('@data').must_equal(data) }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.to' do
|
23
|
+
subject { described.to(console, data) }
|
24
|
+
|
25
|
+
it { subject.must_be_instance_of(Array) }
|
26
|
+
|
27
|
+
context 'when the data is larger than the visible area' do
|
28
|
+
context 'when the data is a String' do
|
29
|
+
let(:data) {
|
30
|
+
"Zinc, in commerce also spelter, is a chemical\n" \
|
31
|
+
"element with symbol Zn and atomic number 30.\n" \
|
32
|
+
"It is the first element of group 12 of the\n" \
|
33
|
+
"periodic table."
|
34
|
+
}
|
35
|
+
|
36
|
+
it { subject.must_equal(
|
37
|
+
[
|
38
|
+
"Zinc, in commerce also spelter, is a che",
|
39
|
+
"element with symbol Zn and atomic number",
|
40
|
+
"It is the first element of group 12 of t"
|
41
|
+
])
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when the data is an Array' do
|
46
|
+
# Zinc...
|
47
|
+
# -.Zn.12
|
48
|
+
# Spelter
|
49
|
+
# ..Metal
|
50
|
+
let(:data) {
|
51
|
+
[
|
52
|
+
[
|
53
|
+
Vedeu::Char.new('Z'),Vedeu::Char.new('i'),Vedeu::Char.new('n'),
|
54
|
+
Vedeu::Char.new('c'),Vedeu::Char.new('.'),Vedeu::Char.new('.'),
|
55
|
+
Vedeu::Char.new('.')
|
56
|
+
],[
|
57
|
+
Vedeu::Char.new('-'),Vedeu::Char.new('.'),Vedeu::Char.new('Z'),
|
58
|
+
Vedeu::Char.new('n'),Vedeu::Char.new('.'),Vedeu::Char.new('1'),
|
59
|
+
Vedeu::Char.new('2')
|
60
|
+
],[
|
61
|
+
Vedeu::Char.new('S'),Vedeu::Char.new('p'),Vedeu::Char.new('e'),
|
62
|
+
Vedeu::Char.new('l'),Vedeu::Char.new('t'),Vedeu::Char.new('e'),
|
63
|
+
Vedeu::Char.new('r')
|
64
|
+
],[
|
65
|
+
Vedeu::Char.new('.'),Vedeu::Char.new('.'),Vedeu::Char.new('M'),
|
66
|
+
Vedeu::Char.new('e'),Vedeu::Char.new('t'),Vedeu::Char.new('a'),
|
67
|
+
Vedeu::Char.new('l')
|
68
|
+
],
|
69
|
+
]
|
70
|
+
}
|
71
|
+
let(:height) { 3 }
|
72
|
+
let(:width) { 5 }
|
73
|
+
let(:expected) {
|
74
|
+
data[0, height].map { |line| line[0, width] }
|
75
|
+
}
|
76
|
+
|
77
|
+
it { subject.must_equal(expected) }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'when the data is not larger than the visible area' do
|
82
|
+
context 'when the data is a String' do
|
83
|
+
let(:data) {
|
84
|
+
"Gallium is a chemical element with\n" \
|
85
|
+
"symbol Ga and atomic number 31.\n"
|
86
|
+
}
|
87
|
+
|
88
|
+
it { subject.must_equal(
|
89
|
+
[
|
90
|
+
"Gallium is a chemical element with",
|
91
|
+
"symbol Ga and atomic number 31."
|
92
|
+
])
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when the data is an Array' do
|
97
|
+
# Gallium
|
98
|
+
# -.Ga.31
|
99
|
+
let(:data) {
|
100
|
+
[
|
101
|
+
[
|
102
|
+
Vedeu::Char.new('G'),Vedeu::Char.new('a'),Vedeu::Char.new('l'),
|
103
|
+
Vedeu::Char.new('l'),Vedeu::Char.new('i'),Vedeu::Char.new('u'),
|
104
|
+
Vedeu::Char.new('m')
|
105
|
+
], [
|
106
|
+
Vedeu::Char.new('-'),Vedeu::Char.new('.'),Vedeu::Char.new('G'),
|
107
|
+
Vedeu::Char.new('a'),Vedeu::Char.new('.'),Vedeu::Char.new('3'),
|
108
|
+
Vedeu::Char.new('1')
|
109
|
+
]
|
110
|
+
]
|
111
|
+
}
|
112
|
+
let(:height) { 3 }
|
113
|
+
let(:width) { 10 }
|
114
|
+
|
115
|
+
it { subject.must_equal(data) }
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'when there is no data' do
|
120
|
+
let(:data) {}
|
121
|
+
|
122
|
+
it { subject.must_equal([]) }
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe '#print' do
|
127
|
+
let(:string) {}
|
128
|
+
|
129
|
+
subject { instance.print(string) }
|
130
|
+
|
131
|
+
it { subject.must_be_instance_of(Array) }
|
132
|
+
end
|
133
|
+
|
134
|
+
end # Write
|
135
|
+
|
136
|
+
end # Vedeu
|