roku_builder 3.3.2 → 3.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +3 -1
- data/bin/roku +4 -0
- data/lib/roku_builder/controller.rb +19 -9
- data/lib/roku_builder/inspector.rb +1 -1
- data/lib/roku_builder/loader.rb +2 -1
- data/lib/roku_builder/monitor.rb +19 -8
- data/lib/roku_builder/tester.rb +22 -7
- data/lib/roku_builder/version.rb +1 -1
- data/roku_builder.gemspec +2 -0
- data/tests/roku_builder/config_manager_test.rb +13 -0
- data/tests/roku_builder/controller_config_test.rb +19 -0
- data/tests/roku_builder/controller_test.rb +488 -9
- data/tests/roku_builder/inspector_test.rb +75 -0
- data/tests/roku_builder/keyer_test.rb +33 -0
- data/tests/roku_builder/linker_test.rb +15 -0
- data/tests/roku_builder/loader_test.rb +105 -5
- data/tests/roku_builder/manifest_manager_test.rb +12 -0
- data/tests/roku_builder/monitor_test.rb +69 -0
- data/tests/roku_builder/navigator_test.rb +75 -15
- data/tests/roku_builder/test_files/controller_config_test/valid_config.json +28 -0
- data/tests/roku_builder/test_files/loader_test/{source/a → a} +0 -0
- data/tests/roku_builder/test_files/loader_test/{c → source/c/d} +0 -0
- data/tests/roku_builder/test_files/manifest_manager_test/manifest_template_2 +2 -0
- data/tests/roku_builder/tester_test.rb +61 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57d35cf7d34cc1a61441de8f49007204e480238b
|
4
|
+
data.tar.gz: 25124d6fee986c47d3a58cdf0b23c023482c99cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4efb6c2af95286dbadf4ef3f769752908516bdc200785194dc59f35739a2f4bd6b5b70d6f50915ae343dc5ab971711c43ef344a1e910d529129f697ae7c4abda
|
7
|
+
data.tar.gz: 0a431ada9ec91e6bedcf12ceb14ccca7eb70bd841614741b5ce46e41bcc158b881ed3b221f502eebe841687bf71da6673d38cce507b8928f1750083cc5b93fa8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# RokuBuilder
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/roku_builder.svg)](https://badge.fury.io/rb/roku_builder)
|
4
|
+
|
3
5
|
A tool to help with Roku Development. Assists with the following roku
|
4
6
|
development tasks:
|
5
7
|
|
@@ -267,8 +269,8 @@ directory:
|
|
267
269
|
|
268
270
|
## Improvements
|
269
271
|
|
272
|
+
* Account for missing folders or files
|
270
273
|
* Increase testing
|
271
|
-
* More Unit Tests
|
272
274
|
* Intergration Tests
|
273
275
|
* Move RokuBuilder::Controller to RokuBuilder?
|
274
276
|
* Allow start and end delimiter for tests to be configured
|
data/bin/roku
CHANGED
@@ -130,6 +130,10 @@ OptionParser.new do |opts|
|
|
130
130
|
options[:out] = o
|
131
131
|
end
|
132
132
|
|
133
|
+
opts.on("-I", "--in PATH", "Input file for sideloading") do |i|
|
134
|
+
options[:in] = i
|
135
|
+
end
|
136
|
+
|
133
137
|
opts.on("-V", "--verbose", "Print Info message") do |v|
|
134
138
|
options[:verbose] = v
|
135
139
|
end
|
@@ -28,6 +28,9 @@ module RokuBuilder
|
|
28
28
|
# No deeplink options supplied for deeplink
|
29
29
|
BAD_DEEPLINK = 6
|
30
30
|
|
31
|
+
# Incorrect use of the in option
|
32
|
+
BAD_IN_FILE = 7
|
33
|
+
|
31
34
|
|
32
35
|
|
33
36
|
### Device Codes ###
|
@@ -36,7 +39,7 @@ module RokuBuilder
|
|
36
39
|
CHANGED_DEVICE = -1
|
37
40
|
|
38
41
|
# Device is online
|
39
|
-
|
42
|
+
GOOD_DEVICE = 0
|
40
43
|
|
41
44
|
# User defined device was not online
|
42
45
|
BAD_DEVICE = 1
|
@@ -108,11 +111,11 @@ module RokuBuilder
|
|
108
111
|
|
109
112
|
options_code = self.validate_options(options: options, logger: logger)
|
110
113
|
|
111
|
-
self.handle_error_codes(options_code: options_code, logger: logger)
|
114
|
+
self.handle_error_codes(options: options, options_code: options_code, logger: logger)
|
112
115
|
|
113
116
|
handle_code = self.handle_options(options: options, logger: logger)
|
114
117
|
|
115
|
-
self.handle_error_codes(handle_code: handle_code, logger: logger)
|
118
|
+
self.handle_error_codes(options: options, handle_code: handle_code, logger: logger)
|
116
119
|
end
|
117
120
|
|
118
121
|
protected
|
@@ -133,6 +136,9 @@ module RokuBuilder
|
|
133
136
|
if sources.include?(:current)
|
134
137
|
return BAD_CURRENT unless options[:build] or options[:sideload]
|
135
138
|
end
|
139
|
+
if options[:in]
|
140
|
+
return BAD_IN_FILE unless options[:sideload]
|
141
|
+
end
|
136
142
|
if options[:deeplink]
|
137
143
|
return BAD_DEEPLINK if !options[:deeplink_options] or options[:deeplink_options].chomp == ""
|
138
144
|
end
|
@@ -152,7 +158,7 @@ module RokuBuilder
|
|
152
158
|
|
153
159
|
# Check devices
|
154
160
|
device_code, configs = self.check_devices(options: options, config: config, configs: configs, logger: logger)
|
155
|
-
self.handle_error_codes(device_code: device_code, logger: logger)
|
161
|
+
self.handle_error_codes(options: options, device_code: device_code, logger: logger)
|
156
162
|
|
157
163
|
command = (self.commands & options.keys).first
|
158
164
|
case command
|
@@ -193,7 +199,7 @@ module RokuBuilder
|
|
193
199
|
when :build
|
194
200
|
### Build ###
|
195
201
|
loader = Loader.new(**configs[:device_config])
|
196
|
-
build_version = ManifestManager.build_version(**configs[:manifest_config]
|
202
|
+
build_version = ManifestManager.build_version(**configs[:manifest_config])
|
197
203
|
options[:build_version] = build_version
|
198
204
|
configs = self.update_configs(configs: configs, options: options)
|
199
205
|
outfile = loader.build(**configs[:build_config])
|
@@ -245,7 +251,7 @@ module RokuBuilder
|
|
245
251
|
def self.check_devices(options:, config:, configs:, logger:)
|
246
252
|
ping = Net::Ping::External.new
|
247
253
|
host = configs[:device_config][:ip]
|
248
|
-
return [
|
254
|
+
return [GOOD_DEVICE, configs] if ping.ping? host, 1, 0.2, 1
|
249
255
|
return [BAD_DEVICE, nil] if options[:device_given]
|
250
256
|
config[:devices].each_pair {|key, value|
|
251
257
|
unless key == :default
|
@@ -284,7 +290,7 @@ module RokuBuilder
|
|
284
290
|
# @param options_code [Integer] the error code returned by validate_options
|
285
291
|
# @param handle_code [Integer] the error code returned by handle_options
|
286
292
|
# @param logger [Logger] system logger
|
287
|
-
def self.handle_error_codes(options_code: nil, device_code: nil, handle_code: nil, logger:)
|
293
|
+
def self.handle_error_codes(options:, options_code: nil, device_code: nil, handle_code: nil, logger:)
|
288
294
|
if options_code
|
289
295
|
case options_code
|
290
296
|
when EXTRA_COMMANDS
|
@@ -305,6 +311,9 @@ module RokuBuilder
|
|
305
311
|
when BAD_DEEPLINK
|
306
312
|
logger.fatal "Must supply deeplinking options when deeplinking"
|
307
313
|
abort
|
314
|
+
when BAD_IN_FILE
|
315
|
+
logger.fatal "Can only supply in file for building"
|
316
|
+
abort
|
308
317
|
end
|
309
318
|
elsif device_code
|
310
319
|
case device_code
|
@@ -497,7 +506,7 @@ module RokuBuilder
|
|
497
506
|
password: configs[:key][:password],
|
498
507
|
app_name_version: "#{project_config[:app_name]} - #{stage}"
|
499
508
|
}
|
500
|
-
if options[:
|
509
|
+
if options[:out_file]
|
501
510
|
configs[:package_config][:out_file] = File.join(options[:out_folder], options[:out_file])
|
502
511
|
end
|
503
512
|
# Create Inspector Config
|
@@ -516,7 +525,8 @@ module RokuBuilder
|
|
516
525
|
}
|
517
526
|
# Create Manifest Config
|
518
527
|
configs[:manifest_config] = {
|
519
|
-
root_dir: project_config[:directory]
|
528
|
+
root_dir: project_config[:directory],
|
529
|
+
logger: logger
|
520
530
|
}
|
521
531
|
# Create Deeplink Config
|
522
532
|
configs[:deeplink_config] ={
|
@@ -35,7 +35,7 @@ module RokuBuilder
|
|
35
35
|
if app_name
|
36
36
|
app_name = app_name[1]
|
37
37
|
dev_id = /Dev ID:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
|
38
|
-
creation_date = /
|
38
|
+
creation_date = /new Date\(([^)]*)\)/.match(response.body.gsub("\n", ''))[1]
|
39
39
|
dev_zip = /dev.zip:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
|
40
40
|
else
|
41
41
|
app_name = /App Name:[^<]*<div[^>]*>([^<]*)<\/div>/.match(response.body)[1]
|
data/lib/roku_builder/loader.rb
CHANGED
@@ -10,8 +10,9 @@ module RokuBuilder
|
|
10
10
|
# @param fetch [Boolean] Flag to fetch all remotes before sideloading. Default: false
|
11
11
|
# @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
|
12
12
|
# @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
|
13
|
+
# @param infile [String]
|
13
14
|
# @return [String] Build version on success, nil otherwise
|
14
|
-
def sideload(root_dir:, branch: nil, update_manifest: false, fetch: false, folders: nil, files: nil)
|
15
|
+
def sideload(root_dir:, branch: nil, update_manifest: false, fetch: false, folders: nil, files: nil, infile: nil)
|
15
16
|
@root_dir = root_dir
|
16
17
|
result = nil
|
17
18
|
stash = nil
|
data/lib/roku_builder/monitor.rb
CHANGED
@@ -35,14 +35,7 @@ module RokuBuilder
|
|
35
35
|
all_text = ""
|
36
36
|
while true
|
37
37
|
connection.waitfor(waitfor_config) do |txt|
|
38
|
-
all_text
|
39
|
-
while line = all_text.slice!(/^.*\n/) do
|
40
|
-
puts line
|
41
|
-
end
|
42
|
-
if all_text == "BrightScript Debugger> "
|
43
|
-
print all_text
|
44
|
-
all_text = ""
|
45
|
-
end
|
38
|
+
all_text = manage_text(all_text: all_text, txt: txt)
|
46
39
|
end
|
47
40
|
end
|
48
41
|
}
|
@@ -58,5 +51,23 @@ module RokuBuilder
|
|
58
51
|
end
|
59
52
|
end
|
60
53
|
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
# Handel text from telnet
|
58
|
+
# @param all_text [String] remaining partial line text
|
59
|
+
# @param txt [String] current string from telnet
|
60
|
+
# @return [String] remaining partial line text
|
61
|
+
def manage_text(all_text:, txt:)
|
62
|
+
all_text += txt
|
63
|
+
while line = all_text.slice!(/^.*\n/) do
|
64
|
+
puts line
|
65
|
+
end
|
66
|
+
if all_text == "BrightScript Debugger> "
|
67
|
+
print all_text
|
68
|
+
all_text = ""
|
69
|
+
end
|
70
|
+
all_text
|
71
|
+
end
|
61
72
|
end
|
62
73
|
end
|
data/lib/roku_builder/tester.rb
CHANGED
@@ -5,6 +5,11 @@ module RokuBuilder
|
|
5
5
|
# with other testing libraries
|
6
6
|
class Tester < Util
|
7
7
|
|
8
|
+
def init()
|
9
|
+
@end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
|
10
|
+
@start_reg = /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
|
11
|
+
end
|
12
|
+
|
8
13
|
# Run tests and report results
|
9
14
|
# @param sideload_config [Hash] The config for sideloading the app
|
10
15
|
def run_tests(sideload_config:)
|
@@ -18,15 +23,25 @@ module RokuBuilder
|
|
18
23
|
loader.sideload(**sideload_config)
|
19
24
|
|
20
25
|
in_tests = false
|
21
|
-
end_reg
|
22
|
-
|
23
|
-
txt.split("\n").each do |line|
|
24
|
-
in_tests = false if line =~ end_reg
|
25
|
-
@logger.unknown line if in_tests
|
26
|
-
in_tests = true if line =~ /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
|
27
|
-
end
|
26
|
+
connection.waitfor(@end_reg) do |txt|
|
27
|
+
in_tests = handle_text(txt: txt, in_tests: in_tests)
|
28
28
|
end
|
29
29
|
connection.puts("cont\n")
|
30
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# Handel testing text
|
35
|
+
# @param txt [String] current text from telnet
|
36
|
+
# @param in_tests [Boolean] currently parsing test text
|
37
|
+
# @return [Boolean] currently parsing test text
|
38
|
+
def handle_text(txt:, in_tests:)
|
39
|
+
txt.split("\n").each do |line|
|
40
|
+
in_tests = false if line =~ @end_reg
|
41
|
+
@logger.unknown line if in_tests
|
42
|
+
in_tests = true if line =~ @start_reg
|
43
|
+
end
|
44
|
+
in_tests
|
45
|
+
end
|
31
46
|
end
|
32
47
|
end
|
data/lib/roku_builder/version.rb
CHANGED
data/roku_builder.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.required_ruby_version = "~> 2.2"
|
22
|
+
|
21
23
|
spec.add_dependency "rubyzip", "~> 1.1"
|
22
24
|
spec.add_dependency "faraday", "~> 0.9"
|
23
25
|
spec.add_dependency "faraday-digestauth", "~> 0.2"
|
@@ -16,6 +16,19 @@ class ConfigManagerTest < Minitest::Test
|
|
16
16
|
assert_equal :project1, config[:projects][:default], :project1
|
17
17
|
end
|
18
18
|
|
19
|
+
def test_config_manager_read_invalid_config
|
20
|
+
logger = Logger.new("/dev/null")
|
21
|
+
config_path = "config/file/path"
|
22
|
+
io = Minitest::Mock.new
|
23
|
+
io.expect(:read, good_config.to_json+"}}}}}")
|
24
|
+
config = nil
|
25
|
+
File.stub(:open, io) do
|
26
|
+
config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
|
27
|
+
end
|
28
|
+
io.verify
|
29
|
+
assert_nil config
|
30
|
+
end
|
31
|
+
|
19
32
|
def test_config_manager_validate_devices
|
20
33
|
logger = Logger.new("/dev/null")
|
21
34
|
config = good_config
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "test_helper.rb"
|
2
|
+
|
3
|
+
class ControllerConfigTest < Minitest::Test
|
4
|
+
def test_manifest_config
|
5
|
+
logger = Logger.new("/dev/null")
|
6
|
+
options = {
|
7
|
+
config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
|
8
|
+
stage: 'production',
|
9
|
+
update_manifest: false,
|
10
|
+
fetch: false,
|
11
|
+
}
|
12
|
+
code, config, configs = RokuBuilder::Controller.load_config(options: options, logger: logger)
|
13
|
+
|
14
|
+
assert_equal "/dev/null", configs[:manifest_config][:root_dir]
|
15
|
+
assert_equal logger, configs[:manifest_config][:logger]
|
16
|
+
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -1,5 +1,13 @@
|
|
1
1
|
require_relative "test_helper.rb"
|
2
2
|
|
3
|
+
class RokuBuilder::Controller
|
4
|
+
class << self
|
5
|
+
def abort
|
6
|
+
#do nothing
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
3
11
|
class ControllerTest < Minitest::Test
|
4
12
|
def test_controller_validate_options
|
5
13
|
logger = Logger.new("/dev/null")
|
@@ -7,38 +15,50 @@ class ControllerTest < Minitest::Test
|
|
7
15
|
sideload: true,
|
8
16
|
package: true
|
9
17
|
}
|
10
|
-
assert_equal
|
18
|
+
assert_equal RokuBuilder::Controller::EXTRA_COMMANDS, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
11
19
|
options = {}
|
12
|
-
assert_equal
|
20
|
+
assert_equal RokuBuilder::Controller::NO_COMMANDS, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
13
21
|
options = {
|
14
22
|
sideload: true,
|
15
23
|
working: true,
|
16
24
|
current: true
|
17
25
|
}
|
18
|
-
assert_equal
|
26
|
+
assert_equal RokuBuilder::Controller::EXTRA_SOURCES, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
19
27
|
options = {
|
20
28
|
sideload: true,
|
21
29
|
working: true
|
22
30
|
}
|
23
|
-
assert_equal
|
31
|
+
assert_equal RokuBuilder::Controller::VALID, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
24
32
|
options = {
|
25
33
|
package: true
|
26
34
|
}
|
27
|
-
assert_equal
|
35
|
+
assert_equal RokuBuilder::Controller::NO_SOURCE, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
28
36
|
options = {
|
29
37
|
package: true,
|
30
38
|
current: true
|
31
39
|
}
|
32
|
-
assert_equal
|
40
|
+
assert_equal RokuBuilder::Controller::BAD_CURRENT, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
33
41
|
options = {
|
34
42
|
deeplink: true
|
35
43
|
}
|
36
|
-
assert_equal
|
44
|
+
assert_equal RokuBuilder::Controller::BAD_DEEPLINK, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
37
45
|
options = {
|
38
46
|
deeplink: true,
|
39
47
|
deeplink_options: ""
|
40
48
|
}
|
41
|
-
assert_equal
|
49
|
+
assert_equal RokuBuilder::Controller::BAD_DEEPLINK, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
50
|
+
options = {
|
51
|
+
sideload: true,
|
52
|
+
in: "",
|
53
|
+
current: true
|
54
|
+
}
|
55
|
+
assert_equal RokuBuilder::Controller::VALID, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
56
|
+
options = {
|
57
|
+
package: true,
|
58
|
+
in: "",
|
59
|
+
set_stage: true
|
60
|
+
}
|
61
|
+
assert_equal RokuBuilder::Controller::BAD_IN_FILE, RokuBuilder::Controller.validate_options(options: options, logger: logger)
|
42
62
|
end
|
43
63
|
def test_controller_configure
|
44
64
|
logger = Logger.new("/dev/null")
|
@@ -66,6 +86,16 @@ class ControllerTest < Minitest::Test
|
|
66
86
|
assert File.exists?(target_config)
|
67
87
|
config = RokuBuilder::ConfigManager.get_config(config: target_config, logger: logger)
|
68
88
|
assert_equal "111.222.333.444", config[:devices][:roku][:ip]
|
89
|
+
|
90
|
+
options = {
|
91
|
+
configure: true,
|
92
|
+
config: target_config
|
93
|
+
}
|
94
|
+
|
95
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
96
|
+
|
97
|
+
assert_equal RokuBuilder::Controller::CONFIG_OVERWRITE, code
|
98
|
+
|
69
99
|
File.delete(target_config) if File.exists?(target_config)
|
70
100
|
end
|
71
101
|
|
@@ -169,8 +199,99 @@ class ControllerTest < Minitest::Test
|
|
169
199
|
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
170
200
|
File.delete(target_config) if File.exists?(target_config)
|
171
201
|
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
202
|
+
keyer = Minitest::Mock.new
|
172
203
|
loader = Minitest::Mock.new
|
173
|
-
|
204
|
+
packager = Minitest::Mock.new
|
205
|
+
inspector = Minitest::Mock.new
|
206
|
+
|
207
|
+
options = {package: true, inspect: true, stage: 'production', out_folder: "/tmp", config: target_config}
|
208
|
+
configs = {
|
209
|
+
device_config: {},
|
210
|
+
sideload_config: {},
|
211
|
+
key: {},
|
212
|
+
package_config: {
|
213
|
+
app_name_version: "app - production - build_version",
|
214
|
+
out_file: "/tmp/app_production_build_version.pkg"
|
215
|
+
},
|
216
|
+
project_config: {app_name: "app"},
|
217
|
+
inspect_config: {}
|
218
|
+
}
|
219
|
+
info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
|
220
|
+
|
221
|
+
loader.expect(:sideload, "build_version", [configs[:sideload_config]])
|
222
|
+
keyer.expect(:rekey, true, [configs[:key]])
|
223
|
+
packager.expect(:package, true, [configs[:package_config]])
|
224
|
+
inspector.expect(:inspect, info, [configs[:inspect_config]])
|
225
|
+
|
226
|
+
code = nil
|
227
|
+
RokuBuilder::Keyer.stub(:new, keyer) do
|
228
|
+
RokuBuilder::Loader.stub(:new, loader) do
|
229
|
+
RokuBuilder::Packager.stub(:new, packager) do
|
230
|
+
RokuBuilder::Inspector.stub(:new, inspector) do
|
231
|
+
RokuBuilder::Controller.stub(:check_devices, [0, configs]) do
|
232
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
239
|
+
|
240
|
+
keyer.verify
|
241
|
+
loader.verify
|
242
|
+
packager.verify
|
243
|
+
inspector.verify
|
244
|
+
File.delete(target_config) if File.exists?(target_config)
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_controller_package_outfile
|
248
|
+
logger = Logger.new("/dev/null")
|
249
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
250
|
+
File.delete(target_config) if File.exists?(target_config)
|
251
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
252
|
+
keyer = Minitest::Mock.new
|
253
|
+
loader = Minitest::Mock.new
|
254
|
+
packager = Minitest::Mock.new
|
255
|
+
inspector = Minitest::Mock.new
|
256
|
+
|
257
|
+
options = {package: true, inspect: true, stage: 'production', out: "/tmp/out.pkg", config: target_config}
|
258
|
+
configs = {
|
259
|
+
device_config: {},
|
260
|
+
sideload_config: {},
|
261
|
+
key: {},
|
262
|
+
package_config: {
|
263
|
+
app_name_version: "app - production - build_version",
|
264
|
+
out_file: "/tmp/out.pkg"
|
265
|
+
},
|
266
|
+
project_config: {app_name: "app"},
|
267
|
+
inspect_config: {}
|
268
|
+
}
|
269
|
+
info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
|
270
|
+
|
271
|
+
loader.expect(:sideload, "build_version", [configs[:sideload_config]])
|
272
|
+
keyer.expect(:rekey, true, [configs[:key]])
|
273
|
+
packager.expect(:package, true, [configs[:package_config]])
|
274
|
+
inspector.expect(:inspect, info, [configs[:inspect_config]])
|
275
|
+
|
276
|
+
code = nil
|
277
|
+
RokuBuilder::Keyer.stub(:new, keyer) do
|
278
|
+
RokuBuilder::Loader.stub(:new, loader) do
|
279
|
+
RokuBuilder::Packager.stub(:new, packager) do
|
280
|
+
RokuBuilder::Inspector.stub(:new, inspector) do
|
281
|
+
RokuBuilder::Controller.stub(:check_devices, [0, configs]) do
|
282
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
289
|
+
|
290
|
+
keyer.verify
|
291
|
+
loader.verify
|
292
|
+
packager.verify
|
293
|
+
inspector.verify
|
294
|
+
File.delete(target_config) if File.exists?(target_config)
|
174
295
|
end
|
175
296
|
|
176
297
|
def test_controller_build
|
@@ -199,6 +320,8 @@ class ControllerTest < Minitest::Test
|
|
199
320
|
end
|
200
321
|
end
|
201
322
|
assert_equal RokuBuilder::Controller::SUCCESS, code
|
323
|
+
loader.verify
|
324
|
+
File.delete(target_config) if File.exists?(target_config)
|
202
325
|
end
|
203
326
|
def test_controller_update
|
204
327
|
logger = Logger.new("/dev/null")
|
@@ -223,6 +346,7 @@ class ControllerTest < Minitest::Test
|
|
223
346
|
end
|
224
347
|
mock.verify
|
225
348
|
assert_equal RokuBuilder::Controller::SUCCESS, code
|
349
|
+
File.delete(target_config) if File.exists?(target_config)
|
226
350
|
end
|
227
351
|
|
228
352
|
def test_controller_deeplink
|
@@ -245,6 +369,361 @@ class ControllerTest < Minitest::Test
|
|
245
369
|
end
|
246
370
|
mock.verify
|
247
371
|
assert_equal RokuBuilder::Controller::SUCCESS, code
|
372
|
+
File.delete(target_config) if File.exists?(target_config)
|
373
|
+
end
|
374
|
+
def test_controller_delete
|
375
|
+
logger = Logger.new("/dev/null")
|
376
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
377
|
+
File.delete(target_config) if File.exists?(target_config)
|
378
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
379
|
+
loader = Minitest::Mock.new
|
380
|
+
|
381
|
+
options = {delete: true, stage: 'production', config: target_config}
|
382
|
+
loader.expect(:unload, nil)
|
383
|
+
code = nil
|
384
|
+
RokuBuilder::Loader.stub(:new, loader) do
|
385
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
386
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}}]) do
|
387
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
392
|
+
loader.verify
|
393
|
+
File.delete(target_config) if File.exists?(target_config)
|
394
|
+
end
|
395
|
+
def test_controller_monitor
|
396
|
+
logger = Logger.new("/dev/null")
|
397
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
398
|
+
File.delete(target_config) if File.exists?(target_config)
|
399
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
400
|
+
monitor = Minitest::Mock.new
|
401
|
+
|
402
|
+
options = {monitor: "main", stage: 'production', config: target_config}
|
403
|
+
monitor.expect(:monitor, nil, [{}])
|
404
|
+
code = nil
|
405
|
+
RokuBuilder::Monitor.stub(:new, monitor) do
|
406
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
407
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, monitor_config: {}}]) do
|
408
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
409
|
+
end
|
410
|
+
end
|
411
|
+
end
|
412
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
413
|
+
monitor.verify
|
414
|
+
File.delete(target_config) if File.exists?(target_config)
|
415
|
+
end
|
416
|
+
def test_controller_navigate
|
417
|
+
logger = Logger.new("/dev/null")
|
418
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
419
|
+
File.delete(target_config) if File.exists?(target_config)
|
420
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
421
|
+
navigator = Minitest::Mock.new
|
422
|
+
|
423
|
+
options = {navigate: "up", stage: 'production', config: target_config}
|
424
|
+
navigator.expect(:nav, true, [{}])
|
425
|
+
code = nil
|
426
|
+
RokuBuilder::Navigator.stub(:new, navigator) do
|
427
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
428
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, navigate_config: {}}]) do
|
429
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
433
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
434
|
+
navigator.verify
|
435
|
+
File.delete(target_config) if File.exists?(target_config)
|
436
|
+
end
|
437
|
+
def test_controller_navigate_fail
|
438
|
+
logger = Logger.new("/dev/null")
|
439
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
440
|
+
File.delete(target_config) if File.exists?(target_config)
|
441
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
442
|
+
navigator = Minitest::Mock.new
|
443
|
+
|
444
|
+
options = {navigate: "up", stage: 'production', config: target_config}
|
445
|
+
navigator.expect(:nav, nil, [{}])
|
446
|
+
code = nil
|
447
|
+
RokuBuilder::Navigator.stub(:new, navigator) do
|
448
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
449
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, navigate_config: {}}]) do
|
450
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
451
|
+
end
|
452
|
+
end
|
453
|
+
end
|
454
|
+
assert_equal RokuBuilder::Controller::FAILED_NAVIGATING, code
|
455
|
+
navigator.verify
|
456
|
+
File.delete(target_config) if File.exists?(target_config)
|
457
|
+
end
|
458
|
+
def test_controller_screen
|
459
|
+
logger = Logger.new("/dev/null")
|
460
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
461
|
+
File.delete(target_config) if File.exists?(target_config)
|
462
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
463
|
+
navigator = Minitest::Mock.new
|
464
|
+
|
465
|
+
options = {screen: "secret", stage: 'production', config: target_config}
|
466
|
+
navigator.expect(:screen, true, [{}])
|
467
|
+
code = nil
|
468
|
+
RokuBuilder::Navigator.stub(:new, navigator) do
|
469
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
470
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screen_config: {}}]) do
|
471
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|
475
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
476
|
+
navigator.verify
|
477
|
+
File.delete(target_config) if File.exists?(target_config)
|
478
|
+
end
|
479
|
+
def test_controller_screens
|
480
|
+
logger = Logger.new("/dev/null")
|
481
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
482
|
+
File.delete(target_config) if File.exists?(target_config)
|
483
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
484
|
+
navigator = Minitest::Mock.new
|
485
|
+
|
486
|
+
options = {screens: true, stage: 'production', config: target_config}
|
487
|
+
navigator.expect(:screens, true)
|
488
|
+
code = nil
|
489
|
+
RokuBuilder::Navigator.stub(:new, navigator) do
|
490
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
491
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}}]) do
|
492
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
493
|
+
end
|
494
|
+
end
|
495
|
+
end
|
496
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
497
|
+
navigator.verify
|
498
|
+
File.delete(target_config) if File.exists?(target_config)
|
499
|
+
end
|
500
|
+
def test_controller_text
|
501
|
+
logger = Logger.new("/dev/null")
|
502
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
503
|
+
File.delete(target_config) if File.exists?(target_config)
|
504
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
505
|
+
navigator = Minitest::Mock.new
|
506
|
+
|
507
|
+
options = {text: "text string", stage: 'production', config: target_config}
|
508
|
+
navigator.expect(:type, true, [{}])
|
509
|
+
code = nil
|
510
|
+
RokuBuilder::Navigator.stub(:new, navigator) do
|
511
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
512
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, text_config: {}}]) do
|
513
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
514
|
+
end
|
515
|
+
end
|
516
|
+
end
|
517
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
518
|
+
navigator.verify
|
519
|
+
File.delete(target_config) if File.exists?(target_config)
|
520
|
+
end
|
521
|
+
def test_controller_test
|
522
|
+
logger = Logger.new("/dev/null")
|
523
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
524
|
+
File.delete(target_config) if File.exists?(target_config)
|
525
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
526
|
+
tester = Minitest::Mock.new
|
527
|
+
|
528
|
+
options = {test: true, stage: 'production', config: target_config}
|
529
|
+
tester.expect(:run_tests, true, [{}])
|
530
|
+
code = nil
|
531
|
+
RokuBuilder::Tester.stub(:new, tester) do
|
532
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
533
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, test_config: {}}]) do
|
534
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
535
|
+
end
|
536
|
+
end
|
537
|
+
end
|
538
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
539
|
+
tester.verify
|
540
|
+
File.delete(target_config) if File.exists?(target_config)
|
541
|
+
end
|
542
|
+
def test_controller_screencapture
|
543
|
+
logger = Logger.new("/dev/null")
|
544
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
545
|
+
File.delete(target_config) if File.exists?(target_config)
|
546
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
547
|
+
inspector = Minitest::Mock.new
|
548
|
+
|
549
|
+
options = {screencapture: true, stage: 'production', out: "/tmp/capture.jpg", config: target_config}
|
550
|
+
inspector.expect(:screencapture, true, [{}])
|
551
|
+
code = nil
|
552
|
+
RokuBuilder::Inspector.stub(:new, inspector) do
|
553
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
554
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screencapture_config: {}}]) do
|
555
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
end
|
559
|
+
assert_equal RokuBuilder::Controller::SUCCESS, code
|
560
|
+
inspector.verify
|
561
|
+
File.delete(target_config) if File.exists?(target_config)
|
562
|
+
end
|
563
|
+
def test_controller_screencapture_fail
|
564
|
+
logger = Logger.new("/dev/null")
|
565
|
+
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
566
|
+
File.delete(target_config) if File.exists?(target_config)
|
567
|
+
FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
|
568
|
+
inspector = Minitest::Mock.new
|
569
|
+
|
570
|
+
options = {screencapture: true, stage: 'production', out: "/tmp", config: target_config}
|
571
|
+
inspector.expect(:screencapture, false, [{}])
|
572
|
+
code = nil
|
573
|
+
RokuBuilder::Inspector.stub(:new, inspector) do
|
574
|
+
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
575
|
+
RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screencapture_config: {}}]) do
|
576
|
+
code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
|
577
|
+
end
|
578
|
+
end
|
579
|
+
end
|
580
|
+
assert_equal RokuBuilder::Controller::FAILED_SCREENCAPTURE, code
|
581
|
+
inspector.verify
|
582
|
+
File.delete(target_config) if File.exists?(target_config)
|
583
|
+
end
|
584
|
+
|
585
|
+
def test_controller_handel_error_codes
|
586
|
+
errors = {
|
587
|
+
fatal: {
|
588
|
+
options_code: [
|
589
|
+
RokuBuilder::Controller::EXTRA_COMMANDS,
|
590
|
+
RokuBuilder::Controller::NO_COMMANDS,
|
591
|
+
RokuBuilder::Controller::EXTRA_SOURCES,
|
592
|
+
RokuBuilder::Controller::NO_SOURCE,
|
593
|
+
RokuBuilder::Controller::BAD_CURRENT,
|
594
|
+
RokuBuilder::Controller::BAD_DEEPLINK,
|
595
|
+
RokuBuilder::Controller::BAD_IN_FILE
|
596
|
+
],
|
597
|
+
device_code: [
|
598
|
+
RokuBuilder::Controller::BAD_DEVICE,
|
599
|
+
RokuBuilder::Controller::NO_DEVICES,
|
600
|
+
],
|
601
|
+
handle_code: [
|
602
|
+
RokuBuilder::Controller::CONFIG_OVERWRITE,
|
603
|
+
RokuBuilder::Controller::MISSING_CONFIG,
|
604
|
+
RokuBuilder::Controller::INVALID_CONFIG,
|
605
|
+
RokuBuilder::Controller::MISSING_MANIFEST,
|
606
|
+
RokuBuilder::Controller::UNKNOWN_DEVICE,
|
607
|
+
RokuBuilder::Controller::UNKNOWN_PROJECT,
|
608
|
+
RokuBuilder::Controller::UNKNOWN_STAGE,
|
609
|
+
RokuBuilder::Controller::FAILED_SIDELOAD,
|
610
|
+
RokuBuilder::Controller::FAILED_SIGNING,
|
611
|
+
RokuBuilder::Controller::FAILED_DEEPLINKING,
|
612
|
+
RokuBuilder::Controller::FAILED_NAVIGATING,
|
613
|
+
RokuBuilder::Controller::FAILED_SCREENCAPTURE
|
614
|
+
]
|
615
|
+
},
|
616
|
+
info: {
|
617
|
+
device_code: [
|
618
|
+
RokuBuilder::Controller::CHANGED_DEVICE
|
619
|
+
]
|
620
|
+
},
|
621
|
+
warn: {
|
622
|
+
handle_code: [
|
623
|
+
RokuBuilder::Controller::DEPRICATED_CONFIG
|
624
|
+
]
|
625
|
+
}
|
626
|
+
}
|
627
|
+
|
628
|
+
errors.each_pair do |type,errors|
|
629
|
+
errors.each_pair do |key,value|
|
630
|
+
value.each do |code|
|
631
|
+
logger = Minitest::Mock.new
|
632
|
+
options = {options: {}, logger: logger}
|
633
|
+
options[key] = code
|
634
|
+
logger.expect(type, nil) {|string| string.class == String}
|
635
|
+
RokuBuilder::Controller.handle_error_codes(**options)
|
636
|
+
logger.verify
|
637
|
+
end
|
638
|
+
end
|
639
|
+
end
|
640
|
+
end
|
641
|
+
|
642
|
+
def test_controller_check_devices
|
643
|
+
logger = Logger.new("/dev/null")
|
644
|
+
ping = Minitest::Mock.new
|
645
|
+
options = {device_given: false}
|
646
|
+
config = {}
|
647
|
+
config[:devices] = {
|
648
|
+
a: {ip: "2.2.2.2"},
|
649
|
+
b: {ip: "3.3.3.3"}
|
650
|
+
}
|
651
|
+
configs = {
|
652
|
+
device_config: {ip: "1.1.1.1"}
|
653
|
+
}
|
654
|
+
|
655
|
+
Net::Ping::External.stub(:new, ping) do
|
656
|
+
|
657
|
+
ping.expect(:ping?, true, [configs[:device_config][:ip], 1, 0.2, 1])
|
658
|
+
code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
|
659
|
+
assert_equal RokuBuilder::Controller::GOOD_DEVICE, code
|
660
|
+
|
661
|
+
ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
|
662
|
+
ping.expect(:ping?, false, [config[:devices][:a][:ip], 1, 0.2, 1])
|
663
|
+
ping.expect(:ping?, false, [config[:devices][:b][:ip], 1, 0.2, 1])
|
664
|
+
code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
|
665
|
+
assert_equal RokuBuilder::Controller::NO_DEVICES, code
|
666
|
+
|
667
|
+
ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
|
668
|
+
ping.expect(:ping?, true, [config[:devices][:a][:ip], 1, 0.2, 1])
|
669
|
+
code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
|
670
|
+
assert_equal RokuBuilder::Controller::CHANGED_DEVICE, code
|
671
|
+
assert_equal config[:devices][:a][:ip], ret[:device_config][:ip]
|
672
|
+
|
673
|
+
options[:device_given] = true
|
674
|
+
ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
|
675
|
+
code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
|
676
|
+
assert_equal RokuBuilder::Controller::BAD_DEVICE, code
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
680
|
+
def test_controller_run_debug
|
681
|
+
logger = Minitest::Mock.new
|
682
|
+
options = {debug: true}
|
683
|
+
|
684
|
+
logger.expect(:formater=, nil) do |proc_object|
|
685
|
+
proc_object.class == PROC and proc_object.arity == 4
|
686
|
+
end
|
687
|
+
logger.expect(:level=, nil, [Logger::DEBUG])
|
688
|
+
RokuBuilder::Controller.stub(:validate_options, nil) do
|
689
|
+
RokuBuilder::Controller.stub(:handle_options, nil) do
|
690
|
+
RokuBuilder::Controller.stub(:handle_error_codes, nil) do
|
691
|
+
RokuBuilder::Controller.run(options: options)
|
692
|
+
end
|
693
|
+
end
|
694
|
+
end
|
695
|
+
end
|
696
|
+
def test_controller_run_info
|
697
|
+
logger = Minitest::Mock.new
|
698
|
+
options = {verbose: true}
|
699
|
+
|
700
|
+
logger.expect(:formater=, nil) do |proc_object|
|
701
|
+
proc_object.class == PROC and proc_object.arity == 4
|
702
|
+
end
|
703
|
+
logger.expect(:level=, nil, [Logger::INFO])
|
704
|
+
RokuBuilder::Controller.stub(:validate_options, nil) do
|
705
|
+
RokuBuilder::Controller.stub(:handle_options, nil) do
|
706
|
+
RokuBuilder::Controller.stub(:handle_error_codes, nil) do
|
707
|
+
RokuBuilder::Controller.run(options: options)
|
708
|
+
end
|
709
|
+
end
|
710
|
+
end
|
711
|
+
end
|
712
|
+
def test_controller_run_warn
|
713
|
+
logger = Minitest::Mock.new
|
714
|
+
options = {}
|
715
|
+
|
716
|
+
logger.expect(:formater=, nil) do |proc_object|
|
717
|
+
proc_object.class == PROC and proc_object.arity == 4
|
718
|
+
end
|
719
|
+
logger.expect(:level=, nil, [Logger::WARN])
|
720
|
+
RokuBuilder::Controller.stub(:validate_options, nil) do
|
721
|
+
RokuBuilder::Controller.stub(:handle_options, nil) do
|
722
|
+
RokuBuilder::Controller.stub(:handle_error_codes, nil) do
|
723
|
+
RokuBuilder::Controller.run(options: options)
|
724
|
+
end
|
725
|
+
end
|
726
|
+
end
|
248
727
|
end
|
249
728
|
end
|
250
729
|
|