roku_builder 3.12.8 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/CHANGELOG +9 -0
  4. data/Gemfile.lock +17 -11
  5. data/bin/roku +4 -8
  6. data/lib/roku_builder.rb +16 -24
  7. data/lib/roku_builder/config.rb +213 -0
  8. data/lib/roku_builder/config_parser.rb +304 -267
  9. data/lib/roku_builder/config_validator.rb +149 -126
  10. data/lib/roku_builder/controller.rb +34 -184
  11. data/lib/roku_builder/controller_commands.rb +85 -79
  12. data/lib/roku_builder/error_handler.rb +0 -11
  13. data/lib/roku_builder/errors.rb +12 -0
  14. data/lib/roku_builder/inspector.rb +6 -4
  15. data/lib/roku_builder/keyer.rb +1 -1
  16. data/lib/roku_builder/loader.rb +1 -1
  17. data/lib/roku_builder/logger.rb +32 -0
  18. data/lib/roku_builder/manifest_manager.rb +2 -2
  19. data/lib/roku_builder/monitor.rb +1 -1
  20. data/lib/roku_builder/options.rb +113 -0
  21. data/lib/roku_builder/stager.rb +2 -2
  22. data/lib/roku_builder/tester.rb +57 -11
  23. data/lib/roku_builder/util.rb +3 -4
  24. data/lib/roku_builder/version.rb +1 -1
  25. data/roku_builder.gemspec +2 -1
  26. data/test/roku_builder/test_config.rb +168 -0
  27. data/test/roku_builder/test_config_parser.rb +347 -394
  28. data/test/roku_builder/test_config_validator.rb +193 -190
  29. data/test/roku_builder/test_controller.rb +59 -178
  30. data/test/roku_builder/test_controller_commands.rb +407 -394
  31. data/test/roku_builder/test_error_handler.rb +67 -69
  32. data/test/roku_builder/test_files/config_test/bad.json +2 -0
  33. data/test/roku_builder/test_files/config_test/child.json +11 -0
  34. data/test/roku_builder/test_files/config_test/config.json +29 -0
  35. data/test/roku_builder/test_files/config_test/non_json.json +1 -0
  36. data/test/roku_builder/test_files/config_test/parent.json +21 -0
  37. data/test/roku_builder/test_files/config_test/parent_projects.json +35 -0
  38. data/test/roku_builder/test_files/manifest_manager_test/manifest_template_2 +1 -1
  39. data/test/roku_builder/test_helper.rb +55 -45
  40. data/test/roku_builder/test_inspector.rb +278 -213
  41. data/test/roku_builder/test_keyer.rb +144 -147
  42. data/test/roku_builder/test_linker.rb +91 -95
  43. data/test/roku_builder/test_loader.rb +279 -289
  44. data/test/roku_builder/test_logger.rb +47 -0
  45. data/test/roku_builder/test_manifest_manager.rb +92 -94
  46. data/test/roku_builder/test_monitor.rb +101 -103
  47. data/test/roku_builder/test_navigator.rb +240 -245
  48. data/test/roku_builder/test_options.rb +156 -0
  49. data/test/roku_builder/test_packager.rb +108 -108
  50. data/test/roku_builder/test_profiler.rb +20 -19
  51. data/test/roku_builder/test_scripter.rb +83 -81
  52. data/test/roku_builder/test_stager.rb +299 -311
  53. data/test/roku_builder/test_tester.rb +112 -115
  54. data/test/roku_builder/test_util.rb +18 -17
  55. metadata +39 -6
  56. data/lib/roku_builder/config_manager.rb +0 -161
  57. data/test/roku_builder/test_config_manager.rb +0 -372
@@ -2,283 +2,278 @@
2
2
 
3
3
  require_relative "test_helper.rb"
4
4
 
5
- class NavigatorTest < Minitest::Test
6
- def test_navigator_nav
7
- commands = {
8
- up: "Up",
9
- down: "Down",
10
- right: "Right",
11
- left: "Left",
12
- select: "Select",
13
- back: "Back",
14
- home: "Home",
15
- rew: "Rev",
16
- ff: "Fwd",
17
- play: "Play",
18
- replay: "InstantReplay"
19
- }
20
- commands.each {|k,v|
21
- path = "/keypress/#{v}"
22
- navigator_test(path: path, input: k, type: :nav)
23
- }
24
- end
5
+ module RokuBuilder
6
+ class NavigatorTest < Minitest::Test
7
+ def test_navigator_nav
8
+ commands = {
9
+ up: "Up",
10
+ down: "Down",
11
+ right: "Right",
12
+ left: "Left",
13
+ select: "Select",
14
+ back: "Back",
15
+ home: "Home",
16
+ rew: "Rev",
17
+ ff: "Fwd",
18
+ play: "Play",
19
+ replay: "InstantReplay"
20
+ }
21
+ commands.each {|k,v|
22
+ path = "/keypress/#{v}"
23
+ navigator_test(path: path, input: k, type: :nav)
24
+ }
25
+ end
25
26
 
26
- def test_navigator_nav_fail
27
- path = ""
28
- navigator_test(path: path, input: :bad, type: :nav, success: false)
29
- end
27
+ def test_navigator_nav_fail
28
+ path = ""
29
+ navigator_test(path: path, input: :bad, type: :nav, success: false)
30
+ end
30
31
 
31
- def test_navigator_type
32
- path = "keypress/LIT_"
33
- navigator_test(path: path, input: "Type", type: :text)
34
- end
32
+ def test_navigator_type
33
+ path = "keypress/LIT_"
34
+ navigator_test(path: path, input: "Type", type: :text)
35
+ end
35
36
 
36
- def navigator_test(path:, input:, type:, success: true)
37
- connection = Minitest::Mock.new
38
- faraday = Minitest::Mock.new
39
- io = Minitest::Mock.new
40
- response = Minitest::Mock.new
41
-
42
- device_config = {
43
- ip: "111.222.333",
44
- user: "user",
45
- password: "password",
46
- logger: Logger.new("/dev/null"),
47
- init_params: {mappings: {}}
48
- }
49
- if success
50
- if type == :nav
51
- connection.expect(:post, response, [path])
52
- response.expect(:success?, true)
53
- elsif type == :text
54
- input.split(//).each do |c|
55
- path = "/keypress/LIT_#{CGI::escape(c)}"
37
+ def navigator_test(path:, input:, type:, success: true)
38
+ connection = Minitest::Mock.new
39
+ faraday = Minitest::Mock.new
40
+ io = Minitest::Mock.new
41
+ response = Minitest::Mock.new
42
+
43
+ device_config = {
44
+ ip: "111.222.333",
45
+ user: "user",
46
+ password: "password",
47
+ init_params: {mappings: {}}
48
+ }
49
+ if success
50
+ if type == :nav
56
51
  connection.expect(:post, response, [path])
57
52
  response.expect(:success?, true)
53
+ elsif type == :text
54
+ input.split(//).each do |c|
55
+ path = "/keypress/LIT_#{CGI::escape(c)}"
56
+ connection.expect(:post, response, [path])
57
+ response.expect(:success?, true)
58
+ end
59
+ end
60
+ faraday.expect(:headers, {})
61
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
62
+ faraday.expect(:request, nil, [:multipart])
63
+ faraday.expect(:request, nil, [:url_encoded])
64
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
65
+ end if
66
+
67
+ navigator = Navigator.new(**device_config)
68
+ result = nil
69
+ Faraday.stub(:new, connection, faraday) do
70
+ if type == :nav
71
+ result = navigator.nav(commands: [input])
72
+ elsif type == :text
73
+ result = navigator.type(text: input)
58
74
  end
59
75
  end
60
- faraday.expect(:headers, {})
61
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
62
- faraday.expect(:request, nil, [:multipart])
63
- faraday.expect(:request, nil, [:url_encoded])
64
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
65
- end if
66
-
67
- navigator = RokuBuilder::Navigator.new(**device_config)
68
- result = nil
69
- Faraday.stub(:new, connection, faraday) do
70
- if type == :nav
71
- result = navigator.nav(commands: [input])
72
- elsif type == :text
73
- result = navigator.type(text: input)
74
- end
75
- end
76
76
 
77
- assert_equal success, result
77
+ assert_equal success, result
78
78
 
79
- connection.verify
80
- faraday.verify
81
- io.verify
82
- response.verify
83
- end
84
-
85
- def test_navigator_screen
86
- logger = Minitest::Mock.new
87
- device_config = {
88
- ip: "111.222.333",
89
- user: "user",
90
- password: "password",
91
- logger: logger,
92
- init_params: {mappings: {}}
93
- }
94
- navigator = RokuBuilder::Navigator.new(**device_config)
95
-
96
- logger.expect(:info, nil, ["Home x 5, Fwd x 3, Rev x 2,"])
97
- logger.expect(:unknown, nil, ["Cannot run command automatically"])
98
- logger.expect(:unknown, nil, ["Home x 5, Up, Rev x 2, Fwd x 2,"])
99
-
100
- navigator.stub(:nav, nil) do
101
- navigator.screen(type: :secret)
102
- navigator.screen(type: :reboot)
79
+ connection.verify
80
+ faraday.verify
81
+ io.verify
82
+ response.verify
103
83
  end
104
84
 
105
- logger.verify
106
- end
85
+ def test_navigator_screen
86
+ logger = Minitest::Mock.new
87
+ device_config = {
88
+ ip: "111.222.333",
89
+ user: "user",
90
+ password: "password",
91
+ init_params: {mappings: {}}
92
+ }
93
+ Logger.class_variable_set(:@@instance, logger)
94
+ navigator = Navigator.new(**device_config)
95
+
96
+ logger.expect(:info, nil, ["Home x 5, Fwd x 3, Rev x 2,"])
97
+ logger.expect(:unknown, nil, ["Cannot run command automatically"])
98
+ logger.expect(:unknown, nil, ["Home x 5, Up, Rev x 2, Fwd x 2,"])
99
+
100
+ navigator.stub(:nav, nil) do
101
+ navigator.screen(type: :secret)
102
+ navigator.screen(type: :reboot)
103
+ end
107
104
 
108
- def test_navigator_screen_fail
109
- logger = Minitest::Mock.new
110
- device_config = {
111
- ip: "111.222.333",
112
- user: "user",
113
- password: "password",
114
- logger: logger,
115
- init_params: {mappings: {}}
116
- }
117
- navigator = RokuBuilder::Navigator.new(**device_config)
105
+ logger.verify
106
+ Logger.set_testing
107
+ end
118
108
 
119
- assert !navigator.screen(type: :bad)
109
+ def test_navigator_screen_fail
110
+ device_config = {
111
+ ip: "111.222.333",
112
+ user: "user",
113
+ password: "password",
114
+ init_params: {mappings: {}}
115
+ }
116
+ navigator = Navigator.new(**device_config)
120
117
 
121
- logger.verify
122
- end
118
+ assert !navigator.screen(type: :bad)
123
119
 
124
- def test_navigator_screens
125
- logger = Minitest::Mock.new
126
- device_config = {
127
- ip: "111.222.333",
128
- user: "user",
129
- password: "password",
130
- logger: logger,
131
- init_params: {mappings: {}}
132
- }
133
- navigator = RokuBuilder::Navigator.new(**device_config)
134
-
135
- navigator.instance_variable_get("@screens").each_key do |key|
136
- logger.expect(:unknown, nil, [key])
137
120
  end
138
121
 
139
- navigator.screens
122
+ def test_navigator_screens
123
+ logger = Minitest::Mock.new
124
+ device_config = {
125
+ ip: "111.222.333",
126
+ user: "user",
127
+ password: "password",
128
+ init_params: {mappings: {}}
129
+ }
130
+ Logger.class_variable_set(:@@instance, logger)
131
+ navigator = Navigator.new(**device_config)
132
+
133
+ navigator.instance_variable_get("@screens").each_key do |key|
134
+ logger.expect(:unknown, nil, [key])
135
+ end
140
136
 
141
- logger.verify
142
- end
137
+ navigator.screens
143
138
 
144
- def test_navigator_read_char
145
- getc = Minitest::Mock.new
146
- chr = Minitest::Mock.new
147
-
148
- getc.expect(:call, chr)
149
- chr.expect(:chr, "a")
150
-
151
- device_config = {
152
- ip: "111.222.333",
153
- user: "user",
154
- password: "password",
155
- logger: Logger.new("/dev/null"),
156
- init_params: {mappings: {}}
157
- }
158
-
159
- navigator = RokuBuilder::Navigator.new(**device_config)
160
- STDIN.stub(:echo=, nil) do
161
- STDIN.stub(:raw!, nil) do
162
- STDIN.stub(:getc, getc) do
163
- assert_equal "a", navigator.read_char
164
- end
165
- end
139
+ logger.verify
140
+ Logger.set_testing
166
141
  end
167
- getc.verify
168
- chr.verify
169
- end
170
142
 
171
- def test_navigator_read_char_multichar
172
- getc = Minitest::Mock.new
173
- chr = Minitest::Mock.new
174
- read_nonblock = Minitest::Mock.new
175
-
176
- getc.expect(:call, chr)
177
- chr.expect(:chr, "\e")
178
- read_nonblock.expect(:call, "a", [3])
179
- read_nonblock.expect(:call, "b", [2])
180
-
181
- device_config = {
182
- ip: "111.222.333",
183
- user: "user",
184
- password: "password",
185
- logger: Logger.new("/dev/null"),
186
- init_params: {mappings: {}}
187
- }
188
-
189
- navigator = RokuBuilder::Navigator.new(**device_config)
190
- STDIN.stub(:echo=, nil) do
191
- STDIN.stub(:raw!, nil) do
192
- STDIN.stub(:getc, getc) do
193
- STDIN.stub(:read_nonblock, read_nonblock) do
194
- assert_equal "\eab", navigator.read_char
143
+ def test_navigator_read_char
144
+ getc = Minitest::Mock.new
145
+ chr = Minitest::Mock.new
146
+
147
+ getc.expect(:call, chr)
148
+ chr.expect(:chr, "a")
149
+
150
+ device_config = {
151
+ ip: "111.222.333",
152
+ user: "user",
153
+ password: "password",
154
+ init_params: {mappings: {}}
155
+ }
156
+
157
+ navigator = Navigator.new(**device_config)
158
+ STDIN.stub(:echo=, nil) do
159
+ STDIN.stub(:raw!, nil) do
160
+ STDIN.stub(:getc, getc) do
161
+ assert_equal "a", navigator.read_char
195
162
  end
196
163
  end
197
164
  end
165
+ getc.verify
166
+ chr.verify
198
167
  end
199
- getc.verify
200
- chr.verify
201
- end
202
-
203
- def test_navigator_interactive
204
- device_config = {
205
- ip: "111.222.333",
206
- user: "user",
207
- password: "password",
208
- logger: Logger.new("/dev/null"),
209
- init_params: {mappings: {}}
210
- }
211
- navigator = RokuBuilder::Navigator.new(**device_config)
212
- navigator.stub(:read_char, "\u0003") do
213
- navigator.interactive
214
- end
215
- end
216
168
 
217
- def test_navigator_interactive_nav
218
-
219
- device_config = {
220
- ip: "111.222.333",
221
- user: "user",
222
- password: "password",
223
- logger: Logger.new("/dev/null"),
224
- init_params: {mappings: {}}
225
- }
226
-
227
- read_char = lambda {
228
- @i ||= 0
229
- char = nil
230
- case(@i)
231
- when 0
232
- char = "<"
233
- when 1
234
- char = "\u0003"
169
+ def test_navigator_read_char_multichar
170
+ getc = Minitest::Mock.new
171
+ chr = Minitest::Mock.new
172
+ read_nonblock = Minitest::Mock.new
173
+
174
+ getc.expect(:call, chr)
175
+ chr.expect(:chr, "\e")
176
+ read_nonblock.expect(:call, "a", [3])
177
+ read_nonblock.expect(:call, "b", [2])
178
+
179
+ device_config = {
180
+ ip: "111.222.333",
181
+ user: "user",
182
+ password: "password",
183
+ init_params: {mappings: {}}
184
+ }
185
+
186
+ navigator = Navigator.new(**device_config)
187
+ STDIN.stub(:echo=, nil) do
188
+ STDIN.stub(:raw!, nil) do
189
+ STDIN.stub(:getc, getc) do
190
+ STDIN.stub(:read_nonblock, read_nonblock) do
191
+ assert_equal "\eab", navigator.read_char
192
+ end
193
+ end
194
+ end
235
195
  end
236
- @i += 1
237
- char
238
- }
239
-
240
- nav = lambda { |args|
241
- assert_equal :rev, args[:commands][0]
242
- }
196
+ getc.verify
197
+ chr.verify
198
+ end
243
199
 
244
- navigator = RokuBuilder::Navigator.new(**device_config)
245
- navigator.stub(:read_char, read_char) do
246
- navigator.stub(:nav, nav) do
200
+ def test_navigator_interactive
201
+ device_config = {
202
+ ip: "111.222.333",
203
+ user: "user",
204
+ password: "password",
205
+ init_params: {mappings: {}}
206
+ }
207
+ navigator = Navigator.new(**device_config)
208
+ navigator.stub(:read_char, "\u0003") do
247
209
  navigator.interactive
248
210
  end
249
211
  end
250
- end
251
- def test_navigator_interactive_text
252
-
253
- device_config = {
254
- ip: "111.222.333",
255
- user: "user",
256
- password: "password",
257
- logger: Logger.new("/dev/null"),
258
- init_params: {mappings: {}}
259
- }
260
-
261
- read_char = lambda {
262
- @i ||= 0
263
- char = nil
264
- case(@i)
265
- when 0
266
- char = "a"
267
- when 1
268
- char = "\u0003"
269
- end
270
- @i += 1
271
- char
272
- }
273
-
274
- type = lambda { |args|
275
- assert_equal "a", args[:text]
276
- }
277
212
 
278
- navigator = RokuBuilder::Navigator.new(**device_config)
279
- navigator.stub(:read_char, read_char) do
280
- navigator.stub(:type, type) do
281
- navigator.interactive
213
+ def test_navigator_interactive_nav
214
+
215
+ device_config = {
216
+ ip: "111.222.333",
217
+ user: "user",
218
+ password: "password",
219
+ init_params: {mappings: {}}
220
+ }
221
+
222
+ read_char = lambda {
223
+ @i ||= 0
224
+ char = nil
225
+ case(@i)
226
+ when 0
227
+ char = "<"
228
+ when 1
229
+ char = "\u0003"
230
+ end
231
+ @i += 1
232
+ char
233
+ }
234
+
235
+ nav = lambda { |args|
236
+ assert_equal :rev, args[:commands][0]
237
+ }
238
+
239
+ navigator = Navigator.new(**device_config)
240
+ navigator.stub(:read_char, read_char) do
241
+ navigator.stub(:nav, nav) do
242
+ navigator.interactive
243
+ end
244
+ end
245
+ end
246
+ def test_navigator_interactive_text
247
+
248
+ device_config = {
249
+ ip: "111.222.333",
250
+ user: "user",
251
+ password: "password",
252
+ init_params: {mappings: {}}
253
+ }
254
+
255
+ read_char = lambda {
256
+ @i ||= 0
257
+ char = nil
258
+ case(@i)
259
+ when 0
260
+ char = "a"
261
+ when 1
262
+ char = "\u0003"
263
+ end
264
+ @i += 1
265
+ char
266
+ }
267
+
268
+ type = lambda { |args|
269
+ assert_equal "a", args[:text]
270
+ }
271
+
272
+ navigator = Navigator.new(**device_config)
273
+ navigator.stub(:read_char, read_char) do
274
+ navigator.stub(:type, type) do
275
+ navigator.interactive
276
+ end
282
277
  end
283
278
  end
284
279
  end