vedeu 0.2.11 → 0.2.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/examples/borders_app.rb +171 -0
  3. data/lib/vedeu.rb +1 -1
  4. data/lib/vedeu/api/interface.rb +12 -0
  5. data/lib/vedeu/api/menu.rb +1 -1
  6. data/lib/vedeu/colours/colour.rb +1 -1
  7. data/lib/vedeu/models/border.rb +238 -0
  8. data/lib/vedeu/models/char.rb +1 -1
  9. data/lib/vedeu/models/composition.rb +1 -1
  10. data/lib/vedeu/models/geometry.rb +1 -1
  11. data/lib/vedeu/models/line.rb +1 -1
  12. data/lib/vedeu/models/stream.rb +1 -1
  13. data/lib/vedeu/output/output.rb +1 -1
  14. data/lib/vedeu/output/viewport.rb +34 -3
  15. data/lib/vedeu/repositories/models/cursor.rb +34 -7
  16. data/lib/vedeu/repositories/models/event.rb +1 -1
  17. data/lib/vedeu/repositories/models/group.rb +1 -1
  18. data/lib/vedeu/repositories/models/interface.rb +14 -6
  19. data/lib/vedeu/repositories/models/keymap.rb +1 -1
  20. data/lib/vedeu/repositories/models/offset.rb +1 -1
  21. data/lib/vedeu/support/trace.rb +1 -1
  22. data/test/integration/views/basic_view_test.rb +19 -0
  23. data/test/lib/vedeu/api/api_test.rb +6 -5
  24. data/test/lib/vedeu/api/helpers_test.rb +2 -6
  25. data/test/lib/vedeu/api/interface_test.rb +53 -45
  26. data/test/lib/vedeu/api/menu_test.rb +6 -0
  27. data/test/lib/vedeu/api/stream_test.rb +1 -3
  28. data/test/lib/vedeu/application_test.rb +6 -12
  29. data/test/lib/vedeu/colours/colour_test.rb +16 -5
  30. data/test/lib/vedeu/colours/translator_test.rb +7 -2
  31. data/test/lib/vedeu/configuration/cli_test.rb +9 -0
  32. data/test/lib/vedeu/input/input_test.rb +5 -5
  33. data/test/lib/vedeu/launcher_test.rb +9 -3
  34. data/test/lib/vedeu/models/border_test.rb +197 -0
  35. data/test/lib/vedeu/models/char_test.rb +18 -15
  36. data/test/lib/vedeu/models/composition_test.rb +6 -7
  37. data/test/lib/vedeu/models/geometry_test.rb +43 -49
  38. data/test/lib/vedeu/models/key_test.rb +7 -5
  39. data/test/lib/vedeu/models/line_test.rb +12 -16
  40. data/test/lib/vedeu/models/stream_test.rb +20 -10
  41. data/test/lib/vedeu/models/style_test.rb +9 -10
  42. data/test/lib/vedeu/output/compositor_test.rb +7 -22
  43. data/test/lib/vedeu/output/output_test.rb +34 -33
  44. data/test/lib/vedeu/output/viewport_test.rb +6 -6
  45. data/test/lib/vedeu/repositories/models/buffer_test.rb +13 -18
  46. data/test/lib/vedeu/repositories/models/cursor_test.rb +21 -21
  47. data/test/lib/vedeu/repositories/models/event_test.rb +10 -4
  48. data/test/lib/vedeu/{models → repositories/models}/group_test.rb +8 -9
  49. data/test/lib/vedeu/repositories/models/interface_test.rb +37 -17
  50. data/test/lib/vedeu/repositories/models/keymap_test.rb +6 -6
  51. data/test/lib/vedeu/repositories/models/menu_test.rb +6 -3
  52. data/test/lib/vedeu/repositories/models/offset_test.rb +6 -3
  53. data/test/lib/vedeu/support/bounding_area_test.rb +28 -36
  54. data/test/lib/vedeu/support/grid_test.rb +8 -0
  55. data/test/lib/vedeu/support/keymap_validator_test.rb +5 -8
  56. data/test/lib/vedeu/support/position_test.rb +3 -3
  57. data/test/lib/vedeu/support/registrar_test.rb +13 -7
  58. data/test/lib/vedeu/support/sentence_test.rb +9 -2
  59. data/test/lib/vedeu/support/trace_test.rb +5 -3
  60. data/test/test_helper.rb +12 -0
  61. data/vedeu.gemspec +1 -1
  62. metadata +8 -7
  63. data/lib/vedeu/output/view.rb +0 -64
  64. data/test/lib/vedeu/output/view_test.rb +0 -21
@@ -4,33 +4,36 @@ module Vedeu
4
4
 
5
5
  describe Char do
6
6
 
7
- let(:char) { Char.new(attributes) }
7
+ let(:described) { Char.new(attributes) }
8
+ let(:char) { Char.new(attributes) }
9
+ let(:parent) {
10
+ {
11
+ colour: {
12
+ foreground: '#00ff00',
13
+ background: '#ff00ff'
14
+ },
15
+ style: []
16
+ }
17
+ }
8
18
  let(:attributes) {
9
19
  {
10
20
  colour: { foreground: '#ffff00', background: '#0000ff' },
11
- parent: {
12
- colour: {
13
- foreground: '#00ff00',
14
- background: '#ff00ff'
15
- },
16
- style: []
17
- },
21
+ parent: parent,
18
22
  style: [],
19
23
  value: value,
20
24
  }
21
25
  }
22
- let(:value) { 'a' }
26
+ let(:value) { 'a' }
23
27
 
24
28
  describe '#initialize' do
25
- it 'returns a new instance of Char' do
26
- char.must_be_instance_of(Char)
27
- end
29
+ it { return_type_for(described, Char) }
30
+ it { assigns(described, '@attributes', attributes) }
31
+ it { assigns(described, '@parent', parent) }
32
+ it { assigns(described, '@value', value) }
28
33
  end
29
34
 
30
35
  describe '#to_s' do
31
- it 'returns a String' do
32
- char.to_s.must_be_instance_of(String)
33
- end
36
+ it { return_type_for(described.to_s, String) }
34
37
 
35
38
  it 'returns the escape sequences and content' do
36
39
  # - char colours and style as set in Stream#chars.
@@ -5,15 +5,14 @@ require 'json'
5
5
  module Vedeu
6
6
 
7
7
  describe Composition do
8
+ let(:described) { Composition.new(attributes) }
9
+ let(:attributes) { {} }
8
10
 
9
11
  before { Buffers.reset }
10
12
 
11
13
  describe '#initialize' do
12
- it 'returns an instance of itself' do
13
- attributes = {}
14
-
15
- Composition.new(attributes).must_be_instance_of(Composition)
16
- end
14
+ it { return_type_for(described, Composition) }
15
+ it { assigns(described, '@attributes', { interfaces: [] }) }
17
16
  end
18
17
 
19
18
  describe '#interfaces' do
@@ -31,13 +30,13 @@ module Vedeu
31
30
  end
32
31
 
33
32
  it 'returns an empty collection when no interfaces are associated' do
34
- Composition.new.interfaces.must_be_empty
33
+ described.interfaces.must_be_empty
35
34
  end
36
35
  end
37
36
 
38
37
  describe '#method_missing' do
39
38
  it 'returns nil' do
40
- Composition.new.some_missing_method(:test).must_equal(nil)
39
+ described.some_missing_method(:test).must_equal(nil)
41
40
  end
42
41
  end
43
42
 
@@ -4,83 +4,82 @@ module Vedeu
4
4
 
5
5
  describe Geometry do
6
6
 
7
+ let(:described) { Geometry.new(attributes) }
8
+ let(:attributes) { {} }
9
+
10
+ before do
11
+ IO.console.stubs(:winsize).returns([25, 80])
12
+ end
13
+
7
14
  describe '#initialize' do
8
- it 'returns an instance of itself' do
9
- attributes = {}
10
- Geometry.new(attributes).must_be_instance_of(Geometry)
11
- end
15
+ it { return_type_for(described, Geometry) }
16
+ it { assigns(described, '@attributes', {
17
+ centred: false,
18
+ height: 25,
19
+ width: 80,
20
+ x: 1,
21
+ xn: nil,
22
+ y: 1,
23
+ yn: nil,
24
+ })
25
+ }
26
+ it { assigns(described, '@centred', false) }
27
+ it { assigns(described, '@height', 25) }
28
+ it { assigns(described, '@width', 80) }
12
29
  end
13
30
 
14
31
  describe '#y' do
15
32
  it 'returns the value of y when it is a proc' do
16
- IO.console.stub(:winsize, [25, 80]) do
17
- geometry = Geometry.new({ y: proc { 17 } })
18
- geometry.y.must_equal(17)
19
- end
33
+ geometry = Geometry.new({ y: proc { 17 } })
34
+ geometry.y.must_equal(17)
20
35
  end
21
36
 
22
37
  it 'returns the value of y when just an attribute' do
23
- IO.console.stub(:winsize, [25, 80]) do
24
- geometry = Geometry.new({ y: 19 })
25
- geometry.y.must_equal(19)
26
- end
38
+ geometry = Geometry.new({ y: 19 })
39
+ geometry.y.must_equal(19)
27
40
  end
28
41
  end
29
42
 
30
43
  describe '#yn' do
31
44
  it 'returns the value of yn when it is a proc' do
32
- IO.console.stub(:winsize, [25, 80]) do
33
- geometry = Geometry.new({ yn: proc { 17 } })
34
- geometry.yn.must_equal(17)
35
- end
45
+ geometry = Geometry.new({ yn: proc { 17 } })
46
+ geometry.yn.must_equal(17)
36
47
  end
37
48
 
38
49
  it 'returns the value of yn when just an attribute' do
39
- IO.console.stub(:winsize, [25, 80]) do
40
- geometry = Geometry.new({ yn: 19 })
41
- geometry.yn.must_equal(19)
42
- end
50
+ geometry = Geometry.new({ yn: 19 })
51
+ geometry.yn.must_equal(19)
43
52
  end
44
53
  end
45
54
 
46
55
  describe '#x' do
47
56
  it 'returns the value of x when it is a proc' do
48
- IO.console.stub(:winsize, [25, 80]) do
49
- geometry = Geometry.new({ x: proc { 58 } })
50
- geometry.x.must_equal(58)
51
- end
57
+ geometry = Geometry.new({ x: proc { 58 } })
58
+ geometry.x.must_equal(58)
52
59
  end
53
60
 
54
61
  it 'returns the value of x when just an attribute' do
55
- IO.console.stub(:winsize, [25, 80]) do
56
- geometry = Geometry.new({ x: 64 })
57
- geometry.x.must_equal(64)
58
- end
62
+ geometry = Geometry.new({ x: 64 })
63
+ geometry.x.must_equal(64)
59
64
  end
60
65
  end
61
66
 
62
67
  describe '#xn' do
63
68
  it 'returns the value of xn when it is a proc' do
64
- IO.console.stub(:winsize, [25, 80]) do
65
- geometry = Geometry.new({ xn: proc { 58 } })
66
- geometry.xn.must_equal(58)
67
- end
69
+ geometry = Geometry.new({ xn: proc { 58 } })
70
+ geometry.xn.must_equal(58)
68
71
  end
69
72
 
70
73
  it 'returns the value of xn when just an attribute' do
71
- IO.console.stub(:winsize, [25, 80]) do
72
- geometry = Geometry.new({ xn: 64 })
73
- geometry.xn.must_equal(64)
74
- end
74
+ geometry = Geometry.new({ xn: 64 })
75
+ geometry.xn.must_equal(64)
75
76
  end
76
77
  end
77
78
 
78
79
  describe '#width' do
79
80
  it 'returns the viewport width when the interface fits the terminal' do
80
- IO.console.stub(:winsize, [25, 80]) do
81
- geometry = Geometry.new({ width: 60, height: 1, x: 5, y: 1 })
82
- geometry.width.must_equal(60)
83
- end
81
+ geometry = Geometry.new({ width: 60, height: 1, x: 5, y: 1 })
82
+ geometry.width.must_equal(60)
84
83
  end
85
84
 
86
85
  it 'returns the viewport width when the interface does not fit the ' \
@@ -101,10 +100,8 @@ module Vedeu
101
100
 
102
101
  describe '#height' do
103
102
  it 'returns the viewport height when the interface fits the terminal' do
104
- IO.console.stub(:winsize, [25, 80]) do
105
- geometry = Geometry.new({ width: 5, height: 20, x: 1, y: 5 })
106
- geometry.height.must_equal(20)
107
- end
103
+ geometry = Geometry.new({ width: 5, height: 20, x: 1, y: 5 })
104
+ geometry.height.must_equal(20)
108
105
  end
109
106
 
110
107
  it 'returns the viewport height when the interface does not fit the ' \
@@ -130,11 +127,8 @@ module Vedeu
130
127
  end
131
128
 
132
129
  it 'returns the origin for the interface' do
133
- console = IO.console
134
- console.stub :winsize, [25, 80] do
135
- geometry = Geometry.new({ width: 5, height: 5, centred: true })
136
- geometry.origin.must_equal("\e[10;38H")
137
- end
130
+ geometry = Geometry.new({ width: 5, height: 5, centred: true })
131
+ geometry.origin.must_equal("\e[10;38H")
138
132
  end
139
133
 
140
134
  it 'returns the line position relative to the origin' do
@@ -4,13 +4,15 @@ module Vedeu
4
4
 
5
5
  describe Key do
6
6
 
7
- let(:input) { '' }
8
- let(:output) { proc { :output } }
7
+ let(:described) { Key.new(input, output) }
8
+ let(:input) { '' }
9
+ let(:output) { Proc.new { :output } }
9
10
 
10
11
  describe '#initialize' do
11
- it 'returns a new instance of Key' do
12
- Key.new(input, output).must_be_instance_of(Key)
13
- end
12
+ it { return_type_for(described, Key) }
13
+ it { assigns(described, '@input', input) }
14
+
15
+ it { skip; assigns(described, '@output', output) }
14
16
  end
15
17
 
16
18
  describe '#input' do
@@ -3,6 +3,8 @@ require 'test_helper'
3
3
  module Vedeu
4
4
 
5
5
  describe Line do
6
+
7
+ let(:described) { Line.new(attributes) }
6
8
  let(:line) { Line.new(attributes) }
7
9
  let(:attributes) {
8
10
  {
@@ -27,31 +29,29 @@ module Vedeu
27
29
  }
28
30
 
29
31
  describe '#initialize' do
30
- it 'returns an instance of itself' do
31
- Line.new(attributes).must_be_instance_of(Line)
32
- end
32
+ it { return_type_for(described, Line) }
33
+ it { assigns(described, '@attributes', attributes) }
34
+ it { assigns(described, '@parent', nil) }
33
35
  end
34
36
 
35
37
  describe '#attributes' do
36
38
  it 'returns the attributes' do
37
- line.attributes.must_equal(attributes)
39
+ described.attributes.must_equal(attributes)
38
40
  end
39
41
  end
40
42
 
41
43
  describe '#chars' do
42
- it 'returns an Array' do
43
- line.chars.must_be_instance_of(Array)
44
- end
44
+ it { return_type_for(described.chars, Array) }
45
45
 
46
46
  context 'when there is no content' do
47
- before { line.stubs(:size).returns(0) }
47
+ before { described.stubs(:size).returns(0) }
48
48
 
49
- it { line.chars.must_equal([]) }
49
+ it { described.chars.must_equal([]) }
50
50
  end
51
51
 
52
52
  context 'when there is content' do
53
53
  it 'returns an Array' do
54
- line.chars.must_equal(
54
+ described.chars.must_equal(
55
55
  [
56
56
  "\e[38;2;255;0;0mS", "\e[38;2;255;0;0mo", "\e[38;2;255;0;0mm",
57
57
  "\e[38;2;255;0;0me", "\e[38;2;255;0;0mt", "\e[38;2;255;0;0mh",
@@ -90,9 +90,7 @@ module Vedeu
90
90
  end
91
91
 
92
92
  describe '#size' do
93
- it 'returns a Fixnum' do
94
- line.size.must_be_instance_of(Fixnum)
95
- end
93
+ it { return_type_for(described.size, Fixnum) }
96
94
 
97
95
  it 'returns the size of the line' do
98
96
  line.size.must_equal(53)
@@ -100,9 +98,7 @@ module Vedeu
100
98
  end
101
99
 
102
100
  describe '#streams' do
103
- it 'has a streams attribute' do
104
- line.streams.must_be_instance_of(Array)
105
- end
101
+ it { return_type_for(described.streams, Array) }
106
102
  end
107
103
 
108
104
  describe '#to_s' do
@@ -3,6 +3,18 @@ require 'test_helper'
3
3
  module Vedeu
4
4
 
5
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
+ }
6
18
  let(:stream) {
7
19
  Stream.new({
8
20
  colour: colour,
@@ -26,10 +38,12 @@ module Vedeu
26
38
  let(:width) { 9 }
27
39
 
28
40
  describe '#initialize' do
29
- it 'returns an instance of itself' do
30
- attributes = {}
31
- Stream.new(attributes).must_be_instance_of(Stream)
32
- end
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) }
33
47
  end
34
48
 
35
49
  describe '#chars' do
@@ -43,9 +57,7 @@ module Vedeu
43
57
  }
44
58
  }
45
59
 
46
- it 'returns an Array' do
47
- stream.chars.must_be_instance_of(Array)
48
- end
60
+ it { return_type_for(described.chars, Array) }
49
61
 
50
62
  context 'when there is content' do
51
63
  it 'returns a collection of strings containing escape sequences and ' \
@@ -109,9 +121,7 @@ module Vedeu
109
121
  end
110
122
 
111
123
  describe '#size' do
112
- it 'returns a Fixnum' do
113
- stream.size.must_be_instance_of(Fixnum)
114
- end
124
+ it { return_type_for(described.size, Fixnum) }
115
125
 
116
126
  it 'returns the size of the stream' do
117
127
  stream.size.must_equal(9)
@@ -3,25 +3,24 @@ require 'test_helper'
3
3
  module Vedeu
4
4
 
5
5
  describe Style do
6
- describe '#initialize' do
7
- it 'returns an instance of itself' do
8
- values = ''
9
6
 
10
- Style.new(values).must_be_instance_of(Style)
11
- end
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) }
12
13
  end
13
14
 
14
15
  describe '#attributes' do
15
16
  it 'returns an attributes hash for this instance' do
16
- Style.new(['bold']).attributes.must_equal(
17
- {
18
- style: ['bold']
19
- }
20
- )
17
+ described.attributes.must_equal({ style: ['bold'] })
21
18
  end
22
19
  end
23
20
 
24
21
  describe '#to_s' do
22
+ it { return_type_for(described.to_s, String) }
23
+
25
24
  describe 'for a single style' do
26
25
  let(:values) { 'normal' }
27
26
 
@@ -3,6 +3,8 @@ require 'test_helper'
3
3
  module Vedeu
4
4
 
5
5
  describe Compositor do
6
+
7
+ let(:described) { Compositor.new(interface, buffer) }
6
8
  let(:interface) {
7
9
  {
8
10
  name: 'indium'
@@ -18,31 +20,14 @@ module Vedeu
18
20
  end
19
21
 
20
22
  describe '#initialize' do
21
- subject { Compositor.new(interface, buffer) }
22
-
23
- it 'returns an instance of Compositor' do
24
- subject.must_be_instance_of(Compositor)
25
- end
26
-
27
- it 'assigns the interface' do
28
- subject.instance_variable_get("@interface").must_equal(interface)
29
- end
30
-
31
- it 'assigns the buffer' do
32
- subject.instance_variable_get("@buffer").must_equal(buffer)
33
- end
23
+ it { return_type_for(described, Compositor) }
24
+ it { assigns(described, '@interface', interface) }
25
+ it { assigns(described, '@buffer', buffer) }
34
26
  end
35
27
 
36
28
  describe '#compose' do
37
- subject { Compositor.new(interface, buffer).compose }
38
-
39
- it 'returns an Array' do
40
- subject.must_be_instance_of(Array)
41
- end
42
-
43
- it 'returns the updated interface attributes' do
44
- subject.must_equal([{}])
45
- end
29
+ it { return_type_for(described.compose, Array) }
30
+ it { return_value_for(described.compose, [{}]) }
46
31
  end
47
32
 
48
33
  end # Compositor