vedeu 0.4.5 → 0.4.6

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 (141) hide show
  1. checksums.yaml +4 -4
  2. data/bin/vedeu +0 -3
  3. data/examples/borders_app.rb +0 -3
  4. data/examples/colours_app.rb +0 -3
  5. data/examples/configuration_app.rb +0 -3
  6. data/examples/cursor_app.rb +0 -3
  7. data/examples/focus_app.rb +0 -3
  8. data/examples/geometry_app.rb +0 -3
  9. data/examples/lines_app.rb +0 -3
  10. data/examples/view_templates_app/template.erb +1 -0
  11. data/examples/view_templates_app/view_templates_app.rb +82 -0
  12. data/lib/vedeu/all.rb +0 -1
  13. data/lib/vedeu/application.rb +7 -6
  14. data/lib/vedeu/bindings.rb +8 -8
  15. data/lib/vedeu/buffers/buffer.rb +14 -4
  16. data/lib/vedeu/buffers/display_buffer.rb +2 -2
  17. data/lib/vedeu/configuration/cli.rb +7 -1
  18. data/lib/vedeu/configuration/configuration.rb +4 -2
  19. data/lib/vedeu/cursor/all.rb +1 -1
  20. data/lib/vedeu/cursor/cursor.rb +29 -2
  21. data/lib/vedeu/cursor/move_cursor.rb +20 -6
  22. data/lib/vedeu/cursor/toggle_cursor.rb +2 -0
  23. data/lib/vedeu/distributed/client.rb +2 -0
  24. data/lib/vedeu/distributed/server.rb +3 -1
  25. data/lib/vedeu/distributed/subprocess.rb +6 -1
  26. data/lib/vedeu/distributed/test_application.rb +32 -9
  27. data/lib/vedeu/distributed/uri.rb +7 -1
  28. data/lib/vedeu/dsl/components/border.rb +2 -0
  29. data/lib/vedeu/dsl/components/geometry.rb +2 -0
  30. data/lib/vedeu/dsl/components/keymap.rb +2 -0
  31. data/lib/vedeu/dsl/components/menu.rb +3 -1
  32. data/lib/vedeu/dsl/composition.rb +31 -2
  33. data/lib/vedeu/dsl/group.rb +2 -0
  34. data/lib/vedeu/dsl/interface.rb +3 -1
  35. data/lib/vedeu/dsl/line.rb +2 -0
  36. data/lib/vedeu/dsl/shared/style.rb +1 -1
  37. data/lib/vedeu/dsl/shared/text.rb +1 -2
  38. data/lib/vedeu/dsl/stream.rb +2 -0
  39. data/lib/vedeu/dsl/view.rb +1 -1
  40. data/lib/vedeu/events/all.rb +1 -1
  41. data/lib/vedeu/events/event.rb +26 -10
  42. data/lib/vedeu/events/trigger.rb +11 -3
  43. data/lib/vedeu/geometry/all.rb +2 -0
  44. data/lib/vedeu/geometry/bounding_area.rb +7 -2
  45. data/lib/vedeu/geometry/content_geometry.rb +2 -0
  46. data/lib/vedeu/geometry/coordinate.rb +15 -6
  47. data/lib/vedeu/geometry/grid.rb +3 -1
  48. data/lib/vedeu/geometry/index_position.rb +77 -0
  49. data/lib/vedeu/geometry/limit.rb +15 -1
  50. data/lib/vedeu/geometry/position.rb +7 -2
  51. data/lib/vedeu/{output → geometry}/position_index.rb +12 -2
  52. data/lib/vedeu/geometry/position_validator.rb +9 -1
  53. data/lib/vedeu/input/all.rb +0 -1
  54. data/lib/vedeu/input/input.rb +2 -0
  55. data/lib/vedeu/input/keymap.rb +5 -3
  56. data/lib/vedeu/input/mapper.rb +7 -1
  57. data/lib/vedeu/launcher.rb +1 -1
  58. data/lib/vedeu/models/all.rb +6 -3
  59. data/lib/vedeu/models/char.rb +157 -0
  60. data/lib/vedeu/models/{view/composition.rb → composition.rb} +1 -4
  61. data/lib/vedeu/models/geometry.rb +36 -12
  62. data/lib/vedeu/models/group.rb +7 -3
  63. data/lib/vedeu/models/{view/interface.rb → interface.rb} +26 -10
  64. data/lib/vedeu/models/{view/line.rb → line.rb} +8 -4
  65. data/lib/vedeu/models/menu.rb +11 -3
  66. data/lib/vedeu/models/{view/stream.rb → stream.rb} +9 -4
  67. data/lib/vedeu/output/all.rb +3 -2
  68. data/lib/vedeu/output/background.rb +2 -2
  69. data/lib/vedeu/output/border.rb +65 -22
  70. data/lib/vedeu/output/char_builder.rb +36 -0
  71. data/lib/vedeu/output/clear.rb +62 -0
  72. data/lib/vedeu/output/colour.rb +15 -7
  73. data/lib/vedeu/output/compositor.rb +3 -1
  74. data/lib/vedeu/output/esc.rb +2 -2
  75. data/lib/vedeu/output/foreground.rb +2 -2
  76. data/lib/vedeu/output/html_char.rb +2 -0
  77. data/lib/vedeu/output/html_renderer.rb +6 -3
  78. data/lib/vedeu/output/output.rb +20 -92
  79. data/lib/vedeu/output/presentation.rb +21 -21
  80. data/lib/vedeu/output/renderer.rb +2 -0
  81. data/lib/vedeu/output/style.rb +4 -2
  82. data/lib/vedeu/output/text.rb +7 -1
  83. data/lib/vedeu/output/translator.rb +4 -2
  84. data/lib/vedeu/output/viewport.rb +4 -2
  85. data/lib/vedeu/output/virtual_buffer.rb +11 -1
  86. data/lib/vedeu/output/virtual_terminal.rb +34 -11
  87. data/lib/vedeu/output/wordwrap.rb +31 -20
  88. data/lib/vedeu/repositories/all.rb +3 -0
  89. data/lib/vedeu/repositories/collection.rb +83 -0
  90. data/lib/vedeu/repositories/collections.rb +35 -0
  91. data/lib/vedeu/{models → repositories}/model.rb +2 -0
  92. data/lib/vedeu/repositories/repository.rb +7 -1
  93. data/lib/vedeu/support/log.rb +1 -1
  94. data/lib/vedeu/support/sentence.rb +7 -1
  95. data/lib/vedeu/support/template.rb +14 -2
  96. data/lib/vedeu/support/terminal.rb +6 -6
  97. data/lib/vedeu/support/trace.rb +4 -4
  98. data/lib/vedeu/support/visible.rb +4 -4
  99. data/test/lib/vedeu/dsl/composition_test.rb +23 -0
  100. data/test/lib/vedeu/geometry/index_position_test.rb +121 -0
  101. data/test/lib/vedeu/{output → geometry}/position_index_test.rb +6 -0
  102. data/test/lib/vedeu/input/keymap_test.rb +2 -2
  103. data/test/lib/vedeu/models/{view/char_test.rb → char_test.rb} +31 -15
  104. data/test/lib/vedeu/models/{view/composition_test.rb → composition_test.rb} +0 -0
  105. data/test/lib/vedeu/models/{view/interface_test.rb → interface_test.rb} +0 -0
  106. data/test/lib/vedeu/models/line_test.rb +156 -0
  107. data/test/lib/vedeu/models/{view/stream_test.rb → stream_test.rb} +1 -16
  108. data/test/lib/vedeu/output/char_builder_test.rb +50 -0
  109. data/test/lib/vedeu/output/clear_test.rb +26 -0
  110. data/test/lib/vedeu/output/compositor_test.rb +0 -10
  111. data/test/lib/vedeu/output/html_renderer_test.rb +8 -3
  112. data/test/lib/vedeu/output/output_test.rb +0 -39
  113. data/test/lib/vedeu/output/viewport_test.rb +10 -66
  114. data/test/lib/vedeu/output/virtual_buffer_test.rb +18 -2
  115. data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -14
  116. data/test/lib/vedeu/output/wordwrap_test.rb +8 -15
  117. data/test/lib/vedeu/repositories/collection_test.rb +108 -0
  118. data/test/lib/vedeu/repositories/collections_test.rb +71 -0
  119. data/test/lib/vedeu/{models → repositories}/model_test.rb +0 -0
  120. data/test/lib/vedeu/support/template_test.rb +21 -1
  121. data/test/support/helpers/model_test_class.rb +1 -1
  122. data/test/test_helper.rb +0 -1
  123. data/vedeu.gemspec +1 -1
  124. metadata +40 -44
  125. data/lib/vedeu/events/events.rb +0 -10
  126. data/lib/vedeu/input/keys.rb +0 -10
  127. data/lib/vedeu/models/collection.rb +0 -81
  128. data/lib/vedeu/models/view/all.rb +0 -12
  129. data/lib/vedeu/models/view/char.rb +0 -99
  130. data/lib/vedeu/models/view/chars.rb +0 -10
  131. data/lib/vedeu/models/view/interfaces.rb +0 -10
  132. data/lib/vedeu/models/view/lines.rb +0 -10
  133. data/lib/vedeu/models/view/streams.rb +0 -10
  134. data/lib/vedeu/output/index_position.rb +0 -35
  135. data/test/lib/vedeu/models/collection_test.rb +0 -112
  136. data/test/lib/vedeu/models/view/chars_test.rb +0 -16
  137. data/test/lib/vedeu/models/view/interfaces_test.rb +0 -16
  138. data/test/lib/vedeu/models/view/line_test.rb +0 -214
  139. data/test/lib/vedeu/models/view/lines_test.rb +0 -16
  140. data/test/lib/vedeu/models/view/streams_test.rb +0 -16
  141. data/test/lib/vedeu/output/index_position_test.rb +0 -64
@@ -0,0 +1,156 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Line do
6
+
7
+ let(:described) { Vedeu::Line }
8
+ let(:instance) { described.new(attributes) }
9
+ let(:attributes) {
10
+ {
11
+ streams: streams,
12
+ parent: parent,
13
+ colour: colour,
14
+ style: style,
15
+ }
16
+ }
17
+ let(:streams) {
18
+ [
19
+ Stream.new({ value: 'Something interesting ',
20
+ parent: streams_parent,
21
+ colour: Colour.new({ foreground: '#ffff00' }),
22
+ style: Style.new('normal') }),
23
+ Stream.new({ value: 'on this line ',
24
+ parent: streams_parent,
25
+ colour: Colour.new({ foreground: '#00ff00' }),
26
+ style: Style.new('normal') }),
27
+ Stream.new({ value: 'would be cool, eh?',
28
+ parent: streams_parent,
29
+ colour: Colour.new({ foreground: '#0000ff' }),
30
+ style: Style.new('normal') })
31
+ ]
32
+ }
33
+
34
+ let(:streams_parent) { Line.new({ streams: nil, parent: parent, colour: colour, style: style }) }
35
+
36
+ let(:parent) { Vedeu::Interface.new }
37
+ let(:colour) { Colour.new({ foreground: '#ff0000', background: '#000000' }) }
38
+ let(:style) { Style.new('normal') }
39
+
40
+ before do
41
+ parent.stubs(:colour)
42
+ parent.stubs(:style)
43
+ end
44
+
45
+ describe '#initialize' do
46
+ it { instance.must_be_instance_of(described) }
47
+ it { instance.instance_variable_get('@streams').must_equal(streams) }
48
+ it { instance.instance_variable_get('@parent').must_equal(parent) }
49
+ it { instance.instance_variable_get('@colour').must_equal(colour) }
50
+ it { instance.instance_variable_get('@style').must_equal(style) }
51
+ end
52
+
53
+ describe '#chars' do
54
+ subject { instance.chars }
55
+
56
+ it { subject.must_be_instance_of(Array) }
57
+
58
+ context 'when there is no content' do
59
+ let(:streams) { [] }
60
+
61
+ it { subject.must_equal([]) }
62
+ end
63
+
64
+ context 'when there is content' do
65
+ it { subject.size.must_equal(53) }
66
+ end
67
+ end
68
+
69
+ describe '#empty?' do
70
+ subject { instance.empty? }
71
+
72
+ context 'when there is no content' do
73
+ let(:streams) { [] }
74
+
75
+ it { subject.must_be_instance_of(TrueClass) }
76
+ end
77
+
78
+ context 'when there is content' do
79
+ it { subject.must_be_instance_of(FalseClass) }
80
+ end
81
+ end
82
+
83
+ describe '#size' do
84
+ subject { instance.size }
85
+
86
+ it { subject.must_be_instance_of(Fixnum) }
87
+
88
+ it 'returns the size of the line' do
89
+ subject.must_equal(53)
90
+ end
91
+ end
92
+
93
+ describe '#streams' do
94
+ subject { instance.streams }
95
+
96
+ it { subject.must_be_instance_of(Vedeu::Streams) }
97
+ end
98
+
99
+ describe '#to_s' do
100
+ subject { instance.to_s }
101
+
102
+ it { subject.must_be_instance_of(String) }
103
+
104
+ it 'returns the line complete with formatting' do
105
+ # (starts in Line colour)
106
+ # (starts in Line style)
107
+ # Stream 1 colour
108
+ # Stream 1 style
109
+ # Stream 1 value
110
+ # (resets style to Line style)
111
+ # (resets colour to Line colour)
112
+ # Stream 2 colour
113
+ # Stream 2 style
114
+ # Stream 2 value
115
+ # (resets style to Line style)
116
+ # (resets colour to Line colour)
117
+ # Stream 3 colour
118
+ # Stream 3 style
119
+ # Stream 3 value
120
+ # (resets style to Line style)
121
+ # (resets colour to Line colour)
122
+
123
+ subject.must_equal(
124
+ "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
125
+ "\e[24m\e[22m\e[27m" \
126
+ "\e[38;2;255;255;0m" \
127
+ "\e[24m\e[22m\e[27m" \
128
+ "Something interesting " \
129
+ "\e[24m\e[22m\e[27m" \
130
+ "\e[38;2;255;0;0m\e[48;2;0;0;0m" \
131
+ "\e[38;2;0;255;0m" \
132
+ "\e[24m\e[22m\e[27m" \
133
+ "on this line " \
134
+ "\e[24m\e[22m\e[27m" \
135
+ "\e[38;2;255;0;0m" \
136
+ "\e[48;2;0;0;0m\e[38;2;0;0;255m" \
137
+ "\e[24m\e[22m\e[27m" \
138
+ "would be cool, eh?" \
139
+ "\e[24m\e[22m\e[27m" \
140
+ "\e[38;2;255;0;0m\e[48;2;0;0;0m"
141
+ )
142
+ end
143
+ end
144
+
145
+ describe '#width' do
146
+ before { parent.stubs(:width).returns(25) }
147
+
148
+ subject { instance.width }
149
+
150
+ it { subject.must_be_instance_of(Fixnum) }
151
+ it { subject.must_equal(25) }
152
+ end
153
+
154
+ end # Line
155
+
156
+ end # Vedeu
@@ -49,22 +49,7 @@ module Vedeu
49
49
  it { subject.must_be_instance_of(Array) }
50
50
 
51
51
  context 'when there is content' do
52
- it 'returns a collection of strings containing escape sequences and ' \
53
- 'content' do
54
- subject.must_equal(
55
- [
56
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27mS\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
57
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27mo\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
58
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27mm\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
59
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27me\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
60
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27m \e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
61
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27mt\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
62
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27me\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
63
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27mx\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m",
64
- "\e[38;2;0;0;0m\e[48;2;255;0;0m\e[24m\e[22m\e[27mt\e[24m\e[22m\e[27m\e[38;2;255;255;0m\e[48;2;0;0;255m"
65
- ]
66
- )
67
- end
52
+ it { subject.size.must_equal(9) }
68
53
  end
69
54
 
70
55
  context 'when there is no content' do
@@ -0,0 +1,50 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe CharBuilder do
6
+
7
+ let(:described) { Vedeu::CharBuilder }
8
+
9
+ # describe '#origin' do
10
+ # it 'returns the origin for the interface' do
11
+ # geometry = Geometry.new({ width: 5, height: 5 })
12
+ # geometry.origin.must_be_instance_of(Vedeu::Position)
13
+ # geometry.origin.y.must_equal(1)
14
+ # geometry.origin.x.must_equal(1)
15
+ # end
16
+
17
+ # it 'returns the origin for the interface' do
18
+ # geometry = Geometry.new({ width: 5, height: 5, centred: true })
19
+ # geometry.origin.must_be_instance_of(Vedeu::Position)
20
+ # geometry.origin.y.must_equal(10)
21
+ # geometry.origin.x.must_equal(38)
22
+ # end
23
+
24
+ # it 'returns the line position relative to the origin' do
25
+ # geometry = Geometry.new({ width: 5, height: 5 })
26
+ # geometry.origin(3).must_be_instance_of(Vedeu::Position)
27
+ # geometry.origin(3).y.must_equal(4)
28
+ # geometry.origin(3).x.must_equal(1)
29
+ # end
30
+
31
+ # it 'returns the origin for the interface when the interface' \
32
+ # ' is at a custom position' do
33
+ # geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
34
+ # geometry.origin.must_be_instance_of(Vedeu::Position)
35
+ # geometry.origin.y.must_equal(6)
36
+ # geometry.origin.x.must_equal(3)
37
+ # end
38
+
39
+ # it 'returns the line position relative to the origin when the' \
40
+ # ' interface is at a custom position' do
41
+ # geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
42
+ # geometry.origin(3).must_be_instance_of(Vedeu::Position)
43
+ # geometry.origin(3).y.must_equal(9)
44
+ # geometry.origin(3).x.must_equal(3)
45
+ # end
46
+ # end
47
+
48
+ end # CharBuilder
49
+
50
+ end # Vedeu
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Clear do
6
+
7
+ let(:described) { Vedeu::Clear }
8
+ let(:instance) { described.new(interface) }
9
+ let(:interface) { Vedeu::Interface.new({ name: 'xenon' }) }
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::Clear) }
13
+ it { instance.instance_variable_get('@interface').must_equal(interface) }
14
+ end
15
+
16
+ describe '.clear' do
17
+ subject { described.clear(interface) }
18
+ end
19
+
20
+ describe '#write' do
21
+ subject { instance.write }
22
+ end
23
+
24
+ end # Clear
25
+
26
+ end # Vedeu
@@ -39,16 +39,6 @@ module Vedeu
39
39
  describe '.compose' do
40
40
  subject { described.compose(_name) }
41
41
 
42
- context 'when there is no content' do
43
- end
44
-
45
- context 'when there is content' do
46
- context 'when the view has redefined the geometry' do
47
- end
48
-
49
- context 'when the view has not redefined the geometry' do
50
- end
51
- end
52
42
  end
53
43
 
54
44
  end # Compositor
@@ -19,16 +19,21 @@ module Vedeu
19
19
  it { subject.must_be_instance_of(String) }
20
20
  end
21
21
 
22
- describe '#to_file' do
23
- let(:path) {}
22
+ describe '.to_file' do
23
+ before { File.stubs(:open) }
24
24
 
25
- subject { instance.to_file(path) }
25
+ subject { described.to_file(output, path) }
26
26
 
27
27
  context 'when a path is given' do
28
28
  let(:path) { '/tmp/test_vedeu_html_renderer.html' }
29
+
30
+ #it { subject.must_equal('') }
29
31
  end
30
32
 
31
33
  context 'when a path is not given' do
34
+ let(:path) {}
35
+
36
+
32
37
  end
33
38
  end
34
39
 
@@ -45,45 +45,6 @@ module Vedeu
45
45
  end
46
46
  end
47
47
 
48
- # describe '#origin' do
49
- # it 'returns the origin for the interface' do
50
- # geometry = Geometry.new({ width: 5, height: 5 })
51
- # geometry.origin.must_be_instance_of(Vedeu::Position)
52
- # geometry.origin.y.must_equal(1)
53
- # geometry.origin.x.must_equal(1)
54
- # end
55
-
56
- # it 'returns the origin for the interface' do
57
- # geometry = Geometry.new({ width: 5, height: 5, centred: true })
58
- # geometry.origin.must_be_instance_of(Vedeu::Position)
59
- # geometry.origin.y.must_equal(10)
60
- # geometry.origin.x.must_equal(38)
61
- # end
62
-
63
- # it 'returns the line position relative to the origin' do
64
- # geometry = Geometry.new({ width: 5, height: 5 })
65
- # geometry.origin(3).must_be_instance_of(Vedeu::Position)
66
- # geometry.origin(3).y.must_equal(4)
67
- # geometry.origin(3).x.must_equal(1)
68
- # end
69
-
70
- # it 'returns the origin for the interface when the interface' \
71
- # ' is at a custom position' do
72
- # geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
73
- # geometry.origin.must_be_instance_of(Vedeu::Position)
74
- # geometry.origin.y.must_equal(6)
75
- # geometry.origin.x.must_equal(3)
76
- # end
77
-
78
- # it 'returns the line position relative to the origin when the' \
79
- # ' interface is at a custom position' do
80
- # geometry = Geometry.new({ width: 5, height: 5, x: 3, y: 6 })
81
- # geometry.origin(3).must_be_instance_of(Vedeu::Position)
82
- # geometry.origin(3).y.must_equal(9)
83
- # geometry.origin(3).x.must_equal(3)
84
- # end
85
- # end
86
-
87
48
  end # Output
88
49
 
89
50
  end # Vedeu
@@ -58,17 +58,9 @@ module Vedeu
58
58
  let(:ox) { -4 }
59
59
  let(:oy) { -4 }
60
60
 
61
- it "scrolls the content the correct position" do
62
- subject.must_equal(
63
- [
64
- ["b", "a", "r"],
65
- ["c", "a", "r"],
66
- ["h", "e", "l"]
67
- ]
68
- )
61
+ it 'scrolls the content the correct position' do
62
+ instance.to_s.must_equal("bar\ncar\nhel")
69
63
  end
70
-
71
- it { instance.to_s.must_equal("bar\ncar\nhel") }
72
64
  end
73
65
 
74
66
  context "when the cursor's y position is inside the viewable area" do
@@ -76,17 +68,9 @@ module Vedeu
76
68
  let(:ox) { 3 }
77
69
  let(:oy) { 7 }
78
70
 
79
- it "is padded with spaces" do
80
- subject.must_equal(
81
- [
82
- ["n", "i", "c"],
83
- ["o", "s", "m"],
84
- [" ", " ", " "]
85
- ]
86
- )
71
+ it 'is padded with spaces' do
72
+ instance.to_s.must_equal("nic\nosm\n ")
87
73
  end
88
-
89
- it { instance.to_s.must_equal("nic\nosm\n ") }
90
74
  end
91
75
 
92
76
  context "when there is more content than the height" do
@@ -94,16 +78,8 @@ module Vedeu
94
78
  let(:oy) { 3 }
95
79
 
96
80
  it "is cropped to show only that which fits" do
97
- subject.must_equal(
98
- [
99
- ["b", "a", "r"],
100
- ["c", "a", "r"],
101
- ["h", "e", "l"]
102
- ]
103
- )
81
+ instance.to_s.must_equal("bar\ncar\nhel")
104
82
  end
105
-
106
- it { instance.to_s.must_equal("bar\ncar\nhel") }
107
83
  end
108
84
  end
109
85
 
@@ -112,17 +88,9 @@ module Vedeu
112
88
  let(:ox) { 6 }
113
89
  let(:oy) { 6 }
114
90
 
115
- it "scrolls the content the correct position" do
116
- subject.must_equal(
117
- [
118
- ["i", "n", "e"],
119
- ["k", "e", "l"],
120
- ["i", "u", "m"]
121
- ]
122
- )
91
+ it 'scrolls the content the correct position' do
92
+ instance.to_s.must_equal("ine\nkel\nium")
123
93
  end
124
-
125
- it { instance.to_s.must_equal("ine\nkel\nium") }
126
94
  end
127
95
 
128
96
  context "and outside the content" do
@@ -130,16 +98,8 @@ module Vedeu
130
98
  let(:oy) { 7 }
131
99
 
132
100
  it "scrolls the content the correct position" do
133
- subject.must_equal(
134
- [
135
- ["e", "l", " "],
136
- ["u", "m", " "],
137
- [" ", " ", " "]
138
- ]
139
- )
101
+ instance.to_s.must_equal("el \num \n ")
140
102
  end
141
-
142
- it { instance.to_s.must_equal("el \num \n ") }
143
103
  end
144
104
  end
145
105
 
@@ -149,16 +109,8 @@ module Vedeu
149
109
  let(:oy) { 3 }
150
110
 
151
111
  it "is padded with spaces" do
152
- subject.must_equal(
153
- [
154
- ["u", "m", " "],
155
- ["o", "n", " "],
156
- ["u", "m", " "]
157
- ]
158
- )
112
+ instance.to_s.must_equal("um \non \num ")
159
113
  end
160
-
161
- it { instance.to_s.must_equal("um \non \num ") }
162
114
  end
163
115
 
164
116
  context "when there is more content than the width" do
@@ -166,16 +118,8 @@ module Vedeu
166
118
  let(:oy) { 3 }
167
119
 
168
120
  it "is cropped to show only that which fits" do
169
- subject.must_equal(
170
- [
171
- ["b", "a", "r"],
172
- ["c", "a", "r"],
173
- ["h", "e", "l"]
174
- ]
175
- )
121
+ instance.to_s.must_equal("bar\ncar\nhel")
176
122
  end
177
-
178
- it { instance.to_s.must_equal("bar\ncar\nhel") }
179
123
  end
180
124
  end
181
125
  end
@@ -16,9 +16,19 @@ module Vedeu
16
16
  end
17
17
 
18
18
  context 'when buffers are stored' do
19
- before { described.store([[Vedeu::Char.new]]) }
19
+ let(:buffer) { [[Vedeu::Char.new]] }
20
+
21
+ before { described.store(buffer) }
20
22
 
21
23
  it { subject.must_be_instance_of(Array) }
24
+
25
+ it { subject.must_equal(buffer) }
26
+
27
+ it 'removes the stored buffer from the storage' do
28
+ described.size.must_equal(1)
29
+ subject
30
+ described.size.must_equal(0)
31
+ end
22
32
  end
23
33
  end
24
34
 
@@ -29,7 +39,13 @@ module Vedeu
29
39
 
30
40
  it { subject.must_be_instance_of(Array) }
31
41
 
32
- it { subject.wont_be_empty }
42
+ it { subject.must_equal([:data]) }
43
+
44
+ it 'adds the buffer (data) to the storage' do
45
+ described.size.must_equal(0)
46
+ subject
47
+ described.size.must_equal(1)
48
+ end
33
49
  end
34
50
 
35
51
  describe '#size' do
@@ -14,8 +14,6 @@ module Vedeu
14
14
 
15
15
  describe '#initialize' do
16
16
  it { instance.must_be_instance_of(Vedeu::VirtualTerminal) }
17
- it { instance.instance_variable_get('@cell_height').must_equal(4) }
18
- it { instance.instance_variable_get('@cell_width').must_equal(9) }
19
17
  it { instance.instance_variable_get('@height').must_equal(5) }
20
18
  it { instance.instance_variable_get('@width').must_equal(10) }
21
19
  it { instance.instance_variable_get('@renderer').must_equal(Vedeu::HTMLRenderer) }
@@ -33,19 +31,8 @@ module Vedeu
33
31
  it { subject.must_equal(Vedeu::FakeRenderer) }
34
32
  end
35
33
  end
36
- describe 'attr_reader' do
37
- context '#cell_height' do
38
- subject { instance.cell_height }
39
-
40
- it { subject.must_equal(4) }
41
- end
42
-
43
- context '#cell_width' do
44
- subject { instance.cell_width }
45
-
46
- it { subject.must_equal(9) }
47
- end
48
34
 
35
+ describe 'attr_reader' do
49
36
  context '#height' do
50
37
  subject { instance.height }
51
38
 
@@ -63,6 +50,8 @@ module Vedeu
63
50
  subject { instance.cells }
64
51
 
65
52
  it { subject.must_be_instance_of(Array) }
53
+ it { subject.size.must_equal(5) }
54
+ it { subject.flatten.size.must_equal(50) }
66
55
  end
67
56
 
68
57
  describe '#read' do
@@ -10,9 +10,11 @@ module Vedeu
10
10
  let(:options) {
11
11
  {
12
12
  ellipsis: '...',
13
+ mode: mode,
13
14
  width: width,
14
15
  }
15
16
  }
17
+ let(:mode) { :default }
16
18
  let(:width) { 30 }
17
19
 
18
20
  let(:text_line) {
@@ -44,11 +46,6 @@ module Vedeu
44
46
  ]
45
47
  }
46
48
 
47
- describe 'alias methods' do
48
- it { instance.must_respond_to(:prune_as_lines) }
49
- it { instance.must_respond_to(:wrap_as_lines) }
50
- end
51
-
52
49
  describe '#initialize' do
53
50
  it { instance.must_be_instance_of(described) }
54
51
  it { instance.instance_variable_get('@text').must_equal(text) }
@@ -174,8 +171,8 @@ module Vedeu
174
171
  end
175
172
  end
176
173
 
177
- describe '#as_lines' do
178
- subject { instance.as_lines }
174
+ describe '#content' do
175
+ subject { instance.content }
179
176
 
180
177
  it { subject.must_be_instance_of(Vedeu::Lines) }
181
178
 
@@ -203,10 +200,8 @@ module Vedeu
203
200
  it { subject.size.must_equal(6) }
204
201
  end
205
202
 
206
- context 'alias method #prune_as_lines' do
207
- subject { instance.prune_as_lines }
208
-
209
- it { subject.must_be_instance_of(Vedeu::Lines) }
203
+ context 'when mode: :prune' do
204
+ let(:mode) { :prune }
210
205
 
211
206
  context 'with a single line of text' do
212
207
  let(:text) { text_line }
@@ -233,10 +228,8 @@ module Vedeu
233
228
  end
234
229
  end
235
230
 
236
- context 'alias method #wrap_as_lines' do
237
- subject { instance.wrap_as_lines }
238
-
239
- it { subject.must_be_instance_of(Vedeu::Lines) }
231
+ context 'when mode: :wrap' do
232
+ let(:mode) { :wrap }
240
233
 
241
234
  context 'with a single line of text' do
242
235
  let(:text) { text_line }