vedeu 0.0.25 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -9
  3. data/Rakefile +0 -10
  4. data/bin/composition +1 -1
  5. data/examples/single_interface_app.rb +7 -4
  6. data/lib/vedeu.rb +19 -48
  7. data/lib/vedeu/application.rb +8 -7
  8. data/lib/vedeu/configuration.rb +4 -4
  9. data/lib/vedeu/input/input.rb +3 -0
  10. data/lib/vedeu/launcher.rb +3 -0
  11. data/lib/vedeu/models/background.rb +13 -0
  12. data/lib/vedeu/models/coercions.rb +21 -0
  13. data/lib/vedeu/models/colour.rb +22 -0
  14. data/lib/vedeu/{repository → models}/command.rb +2 -0
  15. data/lib/vedeu/models/composition.rb +30 -0
  16. data/lib/vedeu/models/foreground.rb +13 -0
  17. data/lib/vedeu/models/interface.rb +62 -0
  18. data/lib/vedeu/models/interface_collection.rb +24 -0
  19. data/lib/vedeu/models/line.rb +22 -0
  20. data/lib/vedeu/models/line_collection.rb +27 -0
  21. data/lib/vedeu/models/presentation.rb +13 -0
  22. data/lib/vedeu/models/stream.rb +21 -0
  23. data/lib/vedeu/models/stream_collection.rb +27 -0
  24. data/lib/vedeu/models/style_collection.rb +23 -0
  25. data/lib/vedeu/output/interface_renderer.rb +62 -0
  26. data/lib/vedeu/output/output.rb +6 -5
  27. data/lib/vedeu/process/process.rb +15 -31
  28. data/lib/vedeu/repository/command_repository.rb +13 -14
  29. data/lib/vedeu/repository/interface_repository.rb +12 -13
  30. data/lib/vedeu/repository/repository.rb +2 -0
  31. data/lib/vedeu/{output → support}/cursor.rb +2 -0
  32. data/lib/vedeu/support/esc.rb +112 -0
  33. data/lib/vedeu/support/events.rb +21 -0
  34. data/lib/vedeu/support/geometry.rb +66 -0
  35. data/lib/vedeu/support/parser.rb +27 -0
  36. data/lib/vedeu/support/terminal.rb +31 -134
  37. data/lib/vedeu/{output → support}/translator.rb +12 -8
  38. data/lib/vedeu/{output → support}/wordwrap.rb +2 -4
  39. data/lib/vedeu/version.rb +1 -1
  40. data/test/lib/vedeu/application_test.rb +7 -2
  41. data/test/lib/vedeu/configuration_test.rb +13 -8
  42. data/test/lib/vedeu/input/input_test.rb +2 -1
  43. data/test/lib/vedeu/launcher_test.rb +7 -2
  44. data/test/lib/vedeu/models/background_test.rb +35 -0
  45. data/test/lib/vedeu/models/colour_test.rb +71 -0
  46. data/test/lib/vedeu/models/command_test.rb +109 -0
  47. data/test/lib/vedeu/models/composition_test.rb +187 -0
  48. data/test/lib/vedeu/models/foreground_test.rb +35 -0
  49. data/test/lib/vedeu/models/interface_collection_test.rb +57 -0
  50. data/test/lib/vedeu/models/interface_test.rb +220 -0
  51. data/test/lib/vedeu/models/line_collection_test.rb +69 -0
  52. data/test/lib/vedeu/models/line_test.rb +76 -0
  53. data/test/lib/vedeu/models/presentation_test.rb +8 -0
  54. data/test/lib/vedeu/models/stream_collection_test.rb +57 -0
  55. data/test/lib/vedeu/models/stream_test.rb +76 -0
  56. data/test/lib/vedeu/models/style_collection_test.rb +22 -0
  57. data/test/lib/vedeu/output/interface_renderer_test.rb +12 -0
  58. data/test/lib/vedeu/output/output_test.rb +15 -30
  59. data/test/lib/vedeu/process/process_test.rb +22 -44
  60. data/test/lib/vedeu/repository/command_repository_test.rb +22 -16
  61. data/test/lib/vedeu/repository/interface_repository_test.rb +62 -14
  62. data/test/lib/vedeu/repository/repository_test.rb +1 -0
  63. data/test/lib/vedeu/repository/storage_test.rb +13 -6
  64. data/test/lib/vedeu/{output → support}/cursor_test.rb +1 -0
  65. data/test/lib/vedeu/support/esc_test.rb +348 -0
  66. data/test/lib/vedeu/support/events_test.rb +37 -0
  67. data/test/lib/vedeu/support/exit_test.rb +1 -0
  68. data/test/lib/vedeu/support/geometry_test.rb +131 -0
  69. data/test/lib/vedeu/support/parser_test.rb +56 -0
  70. data/test/lib/vedeu/support/queue_test.rb +1 -0
  71. data/test/lib/vedeu/support/terminal_test.rb +1 -119
  72. data/test/lib/vedeu/{output → support}/translator_test.rb +17 -12
  73. data/test/lib/vedeu/{output → support}/wordwrap_test.rb +1 -0
  74. data/test/lib/vedeu/version_test.rb +1 -0
  75. data/test/lib/vedeu_test.rb +1 -0
  76. data/{lib/vedeu/repository → test/support}/dummy_command.rb +0 -0
  77. data/{lib/vedeu/repository → test/support}/dummy_interface.rb +0 -0
  78. data/test/support/json/int1_lin1_str1.json +10 -0
  79. data/test/support/json/int1_lin1_str3.json +18 -0
  80. data/test/support/json/int1_lin2_str1.json +17 -0
  81. data/test/support/json/int1_lin2_str3.json +33 -0
  82. data/test/support/json/int1_lin2_str3_styles.json +43 -0
  83. data/test/support/json/int2_lin1_str1.json +20 -0
  84. data/test/support/json/int2_lin1_str3.json +36 -0
  85. data/test/support/json/int2_lin2_str1.json +34 -0
  86. data/test/support/json/int2_lin2_str3.json +66 -0
  87. data/test/support/json/int2_lin2_str3_styles.json +158 -0
  88. data/test/support/output_1.json +9 -0
  89. data/test/support/output_1.rb +14 -0
  90. data/test/support/output_2.json +1 -0
  91. data/test/support/output_2.rb +19 -0
  92. data/test/test_helper.rb +0 -2
  93. data/vedeu.gemspec +0 -3
  94. metadata +98 -150
  95. data/config/cucumber.yml +0 -8
  96. data/documentation/composition.ebnf +0 -7
  97. data/documentation/diagram/ColourDirective.png +0 -0
  98. data/documentation/diagram/Directive.png +0 -0
  99. data/documentation/diagram/Interface.png +0 -0
  100. data/documentation/diagram/Output.png +0 -0
  101. data/documentation/diagram/PositionDirective.png +0 -0
  102. data/documentation/diagram/Stream.png +0 -0
  103. data/documentation/diagram/StyleDirective.png +0 -0
  104. data/documentation/diagram/rr-1.35.837.png +0 -0
  105. data/documentation/index.html +0 -325
  106. data/features/getting_started.feature +0 -10
  107. data/features/step_definitions/vedeu_steps.rb +0 -11
  108. data/features/support/env.rb +0 -12
  109. data/lib/vedeu/output/background.rb +0 -27
  110. data/lib/vedeu/output/base.rb +0 -57
  111. data/lib/vedeu/output/buffer/composition.rb +0 -24
  112. data/lib/vedeu/output/buffer/formatting.rb +0 -25
  113. data/lib/vedeu/output/buffer/interface.rb +0 -14
  114. data/lib/vedeu/output/buffer/line.rb +0 -14
  115. data/lib/vedeu/output/buffer/stream.rb +0 -14
  116. data/lib/vedeu/output/buffer/style.rb +0 -11
  117. data/lib/vedeu/output/colour.rb +0 -39
  118. data/lib/vedeu/output/compositor.rb +0 -72
  119. data/lib/vedeu/output/directive.rb +0 -63
  120. data/lib/vedeu/output/esc.rb +0 -61
  121. data/lib/vedeu/output/foreground.rb +0 -27
  122. data/lib/vedeu/output/geometry.rb +0 -71
  123. data/lib/vedeu/output/layer.rb +0 -9
  124. data/lib/vedeu/output/menu.rb +0 -26
  125. data/lib/vedeu/output/position.rb +0 -35
  126. data/lib/vedeu/output/style.rb +0 -38
  127. data/lib/vedeu/repository/interface.rb +0 -62
  128. data/lib/vedeu/support/json_parser.rb +0 -25
  129. data/lib/vedeu/support/options.rb +0 -4
  130. data/test/lib/vedeu/output/background_test.rb +0 -67
  131. data/test/lib/vedeu/output/base_test.rb +0 -8
  132. data/test/lib/vedeu/output/buffer/composition_test.rb +0 -57
  133. data/test/lib/vedeu/output/buffer/formatting_test.rb +0 -9
  134. data/test/lib/vedeu/output/buffer/interface_test.rb +0 -38
  135. data/test/lib/vedeu/output/buffer/line_test.rb +0 -64
  136. data/test/lib/vedeu/output/buffer/stream_test.rb +0 -61
  137. data/test/lib/vedeu/output/buffer/style_test.rb +0 -8
  138. data/test/lib/vedeu/output/colour_test.rb +0 -104
  139. data/test/lib/vedeu/output/compositor_test.rb +0 -247
  140. data/test/lib/vedeu/output/directive_test.rb +0 -82
  141. data/test/lib/vedeu/output/esc_test.rb +0 -175
  142. data/test/lib/vedeu/output/foreground_test.rb +0 -67
  143. data/test/lib/vedeu/output/geometry_test.rb +0 -190
  144. data/test/lib/vedeu/output/layer_test.rb +0 -35
  145. data/test/lib/vedeu/output/menu_test.rb +0 -13
  146. data/test/lib/vedeu/output/position_test.rb +0 -48
  147. data/test/lib/vedeu/output/style_test.rb +0 -132
  148. data/test/lib/vedeu/repository/command_test.rb +0 -73
  149. data/test/lib/vedeu/repository/dummy_command_test.rb +0 -27
  150. data/test/lib/vedeu/repository/dummy_interface_test.rb +0 -7
  151. data/test/lib/vedeu/repository/interface_test.rb +0 -79
  152. data/test/lib/vedeu/support/json_parser_test.rb +0 -45
  153. data/test/support/composition.json +0 -47
  154. data/test/support/composition.rb +0 -5
  155. data/test/support/composition.xml +0 -36
  156. data/test/support/multi_interface.json +0 -34
  157. data/test/support/single_interface.json +0 -19
@@ -0,0 +1,22 @@
1
+ require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/models/style_collection'
3
+ require_relative '../../../../lib/vedeu/models/stream'
4
+
5
+ module Vedeu
6
+ describe StyleCollection do
7
+ let(:described_class) { StyleCollection }
8
+
9
+ describe '#coerce' do
10
+ let(:subject) { Vedeu::Stream.new({ style: style }).style }
11
+ let(:style) {}
12
+
13
+ it 'returns a String' do
14
+ subject.must_be_instance_of(String)
15
+ end
16
+
17
+ it 'returns an empty string' do
18
+ subject.must_equal('')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/output/interface_renderer'
3
+ require_relative '../../../../lib/vedeu/models/interface'
4
+
5
+ module Vedeu
6
+ describe InterfaceRenderer do
7
+ let(:described_class) { InterfaceRenderer }
8
+ let(:described_instance) { described_class.new(interface) }
9
+ let(:interface) { }
10
+
11
+ end
12
+ end
@@ -1,51 +1,36 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/output/output'
2
3
 
3
4
  module Vedeu
4
5
  describe Output do
5
6
  let(:described_class) { Output }
6
- let(:subject) { described_class.new }
7
7
  let(:output) {}
8
8
 
9
9
  before do
10
- InterfaceRepository.create({ name: 'dummy', width: 15, height: 2, cursor: true })
10
+ InterfaceRepository.create({
11
+ name: 'dummy',
12
+ width: 15,
13
+ height: 2,
14
+ cursor: true
15
+ })
11
16
  Terminal.stubs(:output).returns(output)
12
17
  end
13
18
 
14
19
  after { InterfaceRepository.reset }
15
20
 
16
- it 'returns an Output instance' do
17
- subject.must_be_instance_of(Output)
21
+ describe '#initialize' do
22
+ let(:subject) { described_class.new }
23
+
24
+ it 'returns an Output instance' do
25
+ subject.must_be_instance_of(Output)
26
+ end
18
27
  end
19
28
 
20
29
  describe '.render' do
21
30
  let(:subject) { described_class.render }
22
31
 
23
- context 'when the interfaces have content' do
24
- let(:output) {
25
- [
26
- [
27
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1HTesting Outpu...\e[38;2;39m\e[48;2;49m\e[?25h",
28
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
29
- ]
30
- ]
31
- }
32
-
33
- before { Compositor.arrange({ 'dummy' => [[{ text: 'Testing Output.render' }]] }) }
34
-
35
- it { subject.must_equal(output) }
36
- end
37
-
38
- context 'when the interfaces have no content' do
39
- let(:output) {
40
- [
41
- [
42
- "\e[38;2;39m\e[48;2;49m\e[1;1H \e[1;1H\e[38;2;39m\e[48;2;49m\e[?25h",
43
- "\e[38;2;39m\e[48;2;49m\e[2;1H \e[2;1H\e[38;2;39m\e[48;2;49m\e[?25h"
44
- ]
45
- ]
46
- }
47
-
48
- it { subject.must_equal(output) }
32
+ it 'returns an Array' do
33
+ subject.must_be_instance_of(Array)
49
34
  end
50
35
  end
51
36
  end
@@ -1,27 +1,37 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/process/process'
3
+ require_relative '../../../../lib/vedeu/repository/interface_repository'
2
4
 
3
5
  module Vedeu
4
6
  describe Process do
5
7
  let(:described_class) { Process }
6
8
  let(:input) { nil }
7
9
  let(:result) {}
8
- let(:subject) { described_class.new }
9
10
 
10
- it 'returns a Process instance' do
11
- subject.must_be_instance_of(Process)
11
+ describe '#initialize' do
12
+ let(:subject) { described_class.new }
13
+
14
+ it 'returns a Process instance' do
15
+ subject.must_be_instance_of(Process)
16
+ end
12
17
  end
13
18
 
14
19
  describe '.evaluate' do
15
20
  let(:subject) { described_class.evaluate }
16
21
  let(:command) { Command.new }
22
+ let(:json) { {} }
17
23
 
18
24
  before do
19
- InterfaceRepository.create({ name: 'dummy', width: 15, height: 2 })
25
+ InterfaceRepository.create({
26
+ name: 'dummy',
27
+ width: 15,
28
+ height: 2
29
+ })
20
30
  Queue.stubs(:dequeue).returns(input)
21
- CommandRepository.stubs(:by_keypress).returns(command)
22
- CommandRepository.stubs(:by_keyword).returns(command)
31
+ CommandRepository.stubs(:by_input).returns(command)
23
32
  command.stubs(:execute).returns(result)
24
- Compositor.stubs(:arrange).returns([])
33
+ Parser.stubs(:parse).returns(json)
34
+ Composition.stubs(:enqueue).returns([])
25
35
  end
26
36
 
27
37
  after do
@@ -30,61 +40,29 @@ module Vedeu
30
40
  end
31
41
 
32
42
  context 'when there is no input' do
33
- it 'returns a NilClass' do
34
- subject.must_be_instance_of(NilClass)
43
+ it 'raises an exception' do
44
+ proc { subject }.must_raise(StopIteration)
35
45
  end
36
46
  end
37
47
 
38
- context 'when the input is a keypress' do
48
+ context 'when there is input' do
39
49
  let(:input) { "q" }
40
50
 
41
- context 'but there is no result' do
42
- it 'returns a NilClass' do
43
- subject.must_be_instance_of(NilClass)
44
- end
45
- end
46
-
47
- context 'or the result is :stop' do
48
- let(:result) { :stop }
49
-
50
- it 'raises an exception' do
51
- proc { subject }.must_raise(StopIteration)
52
- end
53
- end
54
-
55
- context 'or the result is anything else' do
51
+ context 'and there is a result' do
56
52
  let(:result) { { 'dummy' => [['output...']] } }
57
53
 
58
54
  it 'returns an Array' do
59
55
  subject.must_be_instance_of(Array)
60
56
  end
61
57
  end
62
- end
63
-
64
- context 'when the input is a keyword' do
65
- let(:input) { "quit" }
66
-
67
- context 'but there is no result' do
68
- it 'returns a NilClass' do
69
- subject.must_be_instance_of(NilClass)
70
- end
71
- end
72
58
 
73
- context 'or the result is :stop' do
59
+ context 'or there is no result or the result is :stop' do
74
60
  let(:result) { :stop }
75
61
 
76
62
  it 'raises an exception' do
77
63
  proc { subject }.must_raise(StopIteration)
78
64
  end
79
65
  end
80
-
81
- context 'or the result is anything else' do
82
- let(:result) { { 'dummy' => [['output...']] } }
83
-
84
- it 'returns an Array' do
85
- subject.must_be_instance_of(Array)
86
- end
87
- end
88
66
  end
89
67
  end
90
68
  end
@@ -1,4 +1,6 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../support/dummy_command'
3
+ require_relative '../../../../lib/vedeu/repository/command_repository'
2
4
 
3
5
  module Vedeu
4
6
  describe CommandRepository do
@@ -22,16 +24,15 @@ module Vedeu
22
24
 
23
25
  after { CommandRepository.reset }
24
26
 
25
- describe '.by_keypress' do
26
- let(:subject) { described_class.by_keypress(input) }
27
+ describe '.by_input' do
28
+ let(:subject) { described_class.by_input(input) }
29
+ let(:input) { 'b' }
27
30
 
28
- context 'when the command was found by keypress' do
29
- let(:input) { 'b' }
30
-
31
- it 'returns the Command instance' do
32
- subject.must_be_instance_of(Command)
33
- end
31
+ it 'returns the Command instance' do
32
+ subject.must_be_instance_of(Command)
33
+ end
34
34
 
35
+ context 'when the command was found by keypress' do
35
36
  it 'returns the correct command' do
36
37
  subject.name.must_equal('banana')
37
38
  end
@@ -44,18 +45,10 @@ module Vedeu
44
45
  subject.keypress.must_equal('b')
45
46
  end
46
47
  end
47
- end
48
-
49
- describe '.by_keyword' do
50
- let(:subject) { described_class.by_keyword(input) }
51
48
 
52
49
  context 'when the command was found by keyword' do
53
50
  let(:input) { 'apple' }
54
51
 
55
- it 'returns the Command instance' do
56
- subject.must_be_instance_of(Command)
57
- end
58
-
59
52
  it 'returns the correct command' do
60
53
  subject.keypress.must_equal('a')
61
54
  end
@@ -70,9 +63,22 @@ module Vedeu
70
63
  end
71
64
  end
72
65
 
66
+ describe '.create' do
67
+ let(:subject) { described_class.create(attributes) }
68
+ let(:attributes) { {} }
69
+
70
+ it 'returns a Command' do
71
+ subject.must_be_instance_of(Command)
72
+ end
73
+ end
74
+
73
75
  describe '.entity' do
74
76
  let(:subject) { described_class.entity }
75
77
 
78
+ it 'returns a Class instance' do
79
+ subject.must_be_instance_of(Class)
80
+ end
81
+
76
82
  it 'returns Command' do
77
83
  subject.must_equal(Command)
78
84
  end
@@ -1,11 +1,33 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/repository/interface_repository'
2
3
 
3
4
  module Vedeu
4
5
  describe InterfaceRepository do
5
6
  let(:described_class) { InterfaceRepository }
6
7
 
7
- before { InterfaceRepository.create({ name: 'dummy', width: 15, height: 2 }) }
8
- after { InterfaceRepository.reset }
8
+ before do
9
+ InterfaceRepository.create({
10
+ name: 'dummy',
11
+ width: 15,
12
+ height: 2
13
+ })
14
+ end
15
+ after { InterfaceRepository.reset }
16
+
17
+ describe '.create' do
18
+ let(:subject) { described_class.create(attributes) }
19
+ let(:attributes) {
20
+ {
21
+ name: 'dummy',
22
+ width: 15,
23
+ height: 2
24
+ }
25
+ }
26
+
27
+ it 'returns an Interface' do
28
+ subject.must_be_instance_of(Interface)
29
+ end
30
+ end
9
31
 
10
32
  describe '.find' do
11
33
  let(:subject) { described_class.find(value) }
@@ -26,21 +48,35 @@ module Vedeu
26
48
  end
27
49
  end
28
50
 
29
- describe '.refresh' do
30
- let(:subject) { described_class.refresh }
51
+ describe '.update' do
52
+ let(:subject) { described_class.update(value, attributes) }
53
+ let(:value) { 'dummy' }
54
+ let(:attributes) { { name: 'dumber' } }
31
55
 
32
- before { Compositor.stubs(:arrange) }
56
+ it 'returns an Interface' do
57
+ subject.must_be_instance_of(Interface)
58
+ end
33
59
 
34
- it 'returns an Array' do
35
- subject.must_be_instance_of(Array)
60
+ context 'when the interface exists' do
61
+ it 'updates and returns the existing interface' do
62
+ subject.name.must_equal('dumber')
63
+ end
64
+ end
65
+
66
+ context 'when the interface does not exist' do
67
+ before { InterfaceRepository.reset }
68
+
69
+ it 'returns the created interface' do
70
+ subject.name.must_equal('dumber')
71
+ end
36
72
  end
37
73
  end
38
74
 
39
- describe '.entity' do
40
- let(:subject) { described_class.entity }
75
+ describe '.refresh' do
76
+ let(:subject) { described_class.refresh }
41
77
 
42
- it 'returns an Interface' do
43
- subject.must_equal(Interface)
78
+ it 'returns an Array' do
79
+ subject.must_be_instance_of(Array)
44
80
  end
45
81
  end
46
82
 
@@ -49,9 +85,9 @@ module Vedeu
49
85
 
50
86
  before do
51
87
  InterfaceRepository.reset
52
- @case_a = InterfaceRepository.create({ name: 'a', width: 15, height: 2, layer: 1 })
53
- @case_b = InterfaceRepository.create({ name: 'b', width: 15, height: 2, layer: 0 })
54
- @case_c = InterfaceRepository.create({ name: 'c', width: 15, height: 2, layer: 2 })
88
+ @case_a = InterfaceRepository.create({ name: 'a', width: 15, height: 2, z: 2 })
89
+ @case_b = InterfaceRepository.create({ name: 'b', width: 15, height: 2, z: 1 })
90
+ @case_c = InterfaceRepository.create({ name: 'c', width: 15, height: 2, z: 3 })
55
91
  end
56
92
  after { InterfaceRepository.reset }
57
93
 
@@ -63,5 +99,17 @@ module Vedeu
63
99
  subject.must_equal([@case_b, @case_a, @case_c])
64
100
  end
65
101
  end
102
+
103
+ describe '.entity' do
104
+ let(:subject) { described_class.entity }
105
+
106
+ it 'returns a Class instance' do
107
+ subject.must_be_instance_of(Class)
108
+ end
109
+
110
+ it 'returns Interface' do
111
+ subject.must_equal(Interface)
112
+ end
113
+ end
66
114
  end
67
115
  end
@@ -1,4 +1,5 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/repository/repository'
2
3
 
3
4
  module Vedeu
4
5
  class Dummy
@@ -1,18 +1,25 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../support/dummy_command'
3
+ require_relative '../../../../lib/vedeu/repository/storage'
4
+
2
5
 
3
6
  module Vedeu
4
7
  describe Storage do
5
8
  let(:described_class) { Storage }
6
9
  let(:subject) { described_class.new }
7
10
  let(:record) { DummyCommand.new }
8
- let(:entity) {}
11
+ let(:entity) {}
9
12
 
10
- it 'returns a Storage instance' do
11
- subject.must_be_instance_of(Storage)
12
- end
13
+ describe '#initialize' do
14
+ let(:subject) { described_class.new }
13
15
 
14
- it 'sets an instance variable' do
15
- subject.instance_variable_get('@map').must_equal({})
16
+ it 'returns a Storage instance' do
17
+ subject.must_be_instance_of(Storage)
18
+ end
19
+
20
+ it 'sets an instance variable' do
21
+ subject.instance_variable_get('@map').must_equal({})
22
+ end
16
23
  end
17
24
 
18
25
  describe '#create' do
@@ -1,4 +1,5 @@
1
1
  require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/support/cursor'
2
3
 
3
4
  module Vedeu
4
5
  describe Cursor do
@@ -0,0 +1,348 @@
1
+ require_relative '../../../test_helper'
2
+ require_relative '../../../../lib/vedeu/support/esc'
3
+
4
+ module Vedeu
5
+ describe Esc do
6
+ let(:described_class) { Esc }
7
+
8
+ describe '.background_colour' do
9
+ let(:subject) { described_class.background_colour }
10
+
11
+ it 'returns a String' do
12
+ subject.must_be_instance_of(String)
13
+ end
14
+
15
+ it 'returns an escape sequence' do
16
+ subject.must_equal("\e[48;5;16m")
17
+ end
18
+ end
19
+
20
+ describe '.blink' do
21
+ let(:subject) { described_class.blink }
22
+
23
+ it 'returns a String' do
24
+ subject.must_be_instance_of(String)
25
+ end
26
+
27
+ it 'returns an escape sequence' do
28
+ subject.must_equal("\e[5m")
29
+ end
30
+ end
31
+
32
+ describe '.blink_off' do
33
+ let(:subject) { described_class.blink_off }
34
+
35
+ it 'returns a String' do
36
+ subject.must_be_instance_of(String)
37
+ end
38
+
39
+ it 'returns an escape sequence' do
40
+ subject.must_equal("\e[25m")
41
+ end
42
+ end
43
+
44
+ describe '.bold' do
45
+ let(:subject) { described_class.bold }
46
+
47
+ it 'returns a String' do
48
+ subject.must_be_instance_of(String)
49
+ end
50
+
51
+ it 'returns an escape sequence' do
52
+ subject.must_equal("\e[1m")
53
+ end
54
+ end
55
+
56
+ describe '.bold_off' do
57
+ let(:subject) { described_class.bold_off }
58
+
59
+ it 'returns a String' do
60
+ subject.must_be_instance_of(String)
61
+ end
62
+
63
+ it 'returns an escape sequence' do
64
+ subject.must_equal("\e[21m")
65
+ end
66
+ end
67
+
68
+ describe '.clear' do
69
+ let(:subject) { described_class.clear }
70
+
71
+ it 'returns a String' do
72
+ subject.must_be_instance_of(String)
73
+ end
74
+
75
+ it 'returns an escape sequence' do
76
+ subject.must_equal("\e[2J")
77
+ end
78
+ end
79
+
80
+ describe '.clear_line' do
81
+ let(:subject) { described_class.clear_line }
82
+
83
+ it 'returns a String' do
84
+ subject.must_be_instance_of(String)
85
+ end
86
+
87
+ it 'returns an escape sequence' do
88
+ subject.must_equal("\e[2K")
89
+ end
90
+ end
91
+
92
+ describe '.esc' do
93
+ let(:subject) { described_class.esc }
94
+
95
+ it 'returns a String' do
96
+ subject.must_be_instance_of(String)
97
+ end
98
+
99
+ it 'returns an escape sequence' do
100
+ subject.must_equal("\e[")
101
+ end
102
+ end
103
+
104
+ describe '.foreground_colour' do
105
+ let(:subject) { described_class.foreground_colour }
106
+
107
+ it 'returns a String' do
108
+ subject.must_be_instance_of(String)
109
+ end
110
+
111
+ it 'returns an escape sequence' do
112
+ subject.must_equal("\e[38;5;231m")
113
+ end
114
+ end
115
+
116
+ describe '.negative' do
117
+ let(:subject) { described_class.negative }
118
+
119
+ it 'returns a String' do
120
+ subject.must_be_instance_of(String)
121
+ end
122
+
123
+ it 'returns an escape sequence' do
124
+ subject.must_equal("\e[7m")
125
+ end
126
+ end
127
+
128
+ describe '.positive' do
129
+ let(:subject) { described_class.positive }
130
+
131
+ it 'returns a String' do
132
+ subject.must_be_instance_of(String)
133
+ end
134
+
135
+ it 'returns an escape sequence' do
136
+ subject.must_equal("\e[27m")
137
+ end
138
+ end
139
+
140
+ describe '.normal' do
141
+ let(:subject) { described_class.normal }
142
+
143
+ it 'returns a String' do
144
+ subject.must_be_instance_of(String)
145
+ end
146
+
147
+ it 'returns an escape sequence' do
148
+ subject.must_equal("\e[24m\e[21m\e[27m")
149
+ end
150
+ end
151
+
152
+ describe '.dim' do
153
+ let(:subject) { described_class.dim }
154
+
155
+ it 'returns a String' do
156
+ subject.must_be_instance_of(String)
157
+ end
158
+
159
+ it 'returns an escape sequence' do
160
+ subject.must_equal("\e[2m")
161
+ end
162
+ end
163
+
164
+ describe '.reset' do
165
+ let(:subject) { described_class.reset }
166
+
167
+ it 'returns a String' do
168
+ subject.must_be_instance_of(String)
169
+ end
170
+
171
+ it 'returns an escape sequence' do
172
+ subject.must_equal("\e[0m")
173
+ end
174
+ end
175
+
176
+ describe '.set_position' do
177
+ let(:subject) { described_class.set_position(y, x) }
178
+ let(:y) {}
179
+ let(:x) {}
180
+
181
+ context 'when no coordinates are provided' do
182
+ it 'returns a position escape sequence' do
183
+ subject.must_equal("\e[1;1H")
184
+ end
185
+ end
186
+
187
+ context 'when coordinates are provided' do
188
+ let(:y) { 12 }
189
+ let(:x) { 19 }
190
+
191
+ it 'returns a position escape sequence' do
192
+ subject.must_equal("\e[12;19H")
193
+ end
194
+ end
195
+ end
196
+
197
+ describe '.stylize' do
198
+ let(:subject) { described_class.stylize(style) }
199
+ let(:style) {}
200
+
201
+ it 'returns a String' do
202
+ subject.must_be_instance_of(String)
203
+ end
204
+
205
+ context 'when the style is not provided' do
206
+ it 'returns an empty string' do
207
+ subject.must_equal('')
208
+ end
209
+ end
210
+
211
+ context 'when the style is blink' do
212
+ let(:style) { 'blink' }
213
+
214
+ it 'returns an escape sequence' do
215
+ subject.must_equal("\e[5m")
216
+ end
217
+ end
218
+
219
+ context 'when the style is blink off' do
220
+ let(:style) { 'blink_off' }
221
+
222
+ it 'returns an escape sequence' do
223
+ subject.must_equal("\e[25m")
224
+ end
225
+ end
226
+
227
+ context 'when the style is bold' do
228
+ let(:style) { 'bold' }
229
+
230
+ it 'returns an escape sequence' do
231
+ subject.must_equal("\e[1m")
232
+ end
233
+ end
234
+
235
+ context 'when the style is bold off' do
236
+ let(:style) { 'bold_off' }
237
+
238
+ it 'returns an escape sequence' do
239
+ subject.must_equal("\e[21m")
240
+ end
241
+ end
242
+
243
+ context 'when the style is clear' do
244
+ let(:style) { 'clear' }
245
+
246
+ it 'returns an escape sequence' do
247
+ subject.must_equal("\e[2J")
248
+ end
249
+ end
250
+
251
+ context 'when the style is hide_cursor' do
252
+ let(:style) { 'hide_cursor' }
253
+
254
+ it 'returns an escape sequence' do
255
+ subject.must_equal("\e[?25l")
256
+ end
257
+ end
258
+
259
+ context 'when the style is negative' do
260
+ let(:style) { 'negative' }
261
+
262
+ it 'returns an escape sequence' do
263
+ subject.must_equal("\e[7m")
264
+ end
265
+ end
266
+
267
+ context 'when the style is positive' do
268
+ let(:style) { 'positive' }
269
+
270
+ it 'returns an escape sequence' do
271
+ subject.must_equal("\e[27m")
272
+ end
273
+ end
274
+
275
+ context 'when the style is reset' do
276
+ let(:style) { 'reset' }
277
+
278
+ it 'returns an escape sequence' do
279
+ subject.must_equal("\e[0m")
280
+ end
281
+ end
282
+
283
+ context 'when the style is normal' do
284
+ let(:style) { 'normal' }
285
+
286
+ it 'returns an escape sequence' do
287
+ subject.must_equal("\e[24m\e[21m\e[27m")
288
+ end
289
+ end
290
+
291
+ context 'when the style is dim' do
292
+ let(:style) { 'dim' }
293
+
294
+ it 'returns an escape sequence' do
295
+ subject.must_equal("\e[2m")
296
+ end
297
+ end
298
+
299
+ context 'when the style is show_cursor' do
300
+ let(:style) { 'show_cursor' }
301
+
302
+ it 'returns an escape sequence' do
303
+ subject.must_equal("\e[?25h")
304
+ end
305
+ end
306
+
307
+ context 'when the style is underline' do
308
+ let(:style) { 'underline' }
309
+
310
+ it 'returns an escape sequence' do
311
+ subject.must_equal("\e[4m")
312
+ end
313
+ end
314
+
315
+ context 'when the style is underline off' do
316
+ let(:style) { 'underline_off' }
317
+
318
+ it 'returns an escape sequence' do
319
+ subject.must_equal("\e[24m")
320
+ end
321
+ end
322
+ end
323
+
324
+ describe '.underline' do
325
+ let(:subject) { described_class.underline }
326
+
327
+ it 'returns a String' do
328
+ subject.must_be_instance_of(String)
329
+ end
330
+
331
+ it 'returns an escape sequence' do
332
+ subject.must_equal("\e[4m")
333
+ end
334
+ end
335
+
336
+ describe '.underline_off' do
337
+ let(:subject) { described_class.underline_off }
338
+
339
+ it 'returns a String' do
340
+ subject.must_be_instance_of(String)
341
+ end
342
+
343
+ it 'returns an escape sequence' do
344
+ subject.must_equal("\e[24m")
345
+ end
346
+ end
347
+ end
348
+ end