roku_builder 3.3.2 → 3.3.3
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.
- 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
|
+
[](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
|
|