roku_builder 4.25.4 → 4.26.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/intergration/roku_builder/test_helper.rb +2 -3
  3. data/intergration/roku_builder/test_profiler.rb +1 -1
  4. data/lib/roku_builder/config_parser.rb +4 -5
  5. data/lib/roku_builder/device_manager.rb +100 -0
  6. data/lib/roku_builder/plugins/core.rb +3 -1
  7. data/lib/roku_builder/plugins/indentation_inspector.rb +2 -2
  8. data/lib/roku_builder/plugins/inspector.rb +36 -26
  9. data/lib/roku_builder/plugins/line_inspector.rb +27 -6
  10. data/lib/roku_builder/plugins/linker.rb +29 -22
  11. data/lib/roku_builder/plugins/loader.rb +30 -11
  12. data/lib/roku_builder/plugins/monitor.rb +19 -17
  13. data/lib/roku_builder/plugins/navigator.rb +40 -34
  14. data/lib/roku_builder/plugins/packager.rb +109 -92
  15. data/lib/roku_builder/plugins/profiler.rb +24 -15
  16. data/lib/roku_builder/plugins/tester.rb +15 -13
  17. data/lib/roku_builder/util.rb +39 -17
  18. data/lib/roku_builder/version.rb +1 -1
  19. data/lib/roku_builder.rb +3 -19
  20. data/roku_builder.gemspec +3 -2
  21. data/test/roku_builder/plugins/test_analyzer.rb +19 -10
  22. data/test/roku_builder/plugins/test_core.rb +2 -3
  23. data/test/roku_builder/plugins/test_inspector.rb +48 -8
  24. data/test/roku_builder/plugins/test_linker.rb +66 -10
  25. data/test/roku_builder/plugins/test_loader.rb +44 -15
  26. data/test/roku_builder/plugins/test_monitor.rb +33 -16
  27. data/test/roku_builder/plugins/test_navigator.rb +55 -14
  28. data/test/roku_builder/plugins/test_packager.rb +118 -34
  29. data/test/roku_builder/plugins/test_profiler.rb +153 -78
  30. data/test/roku_builder/plugins/test_tester.rb +20 -5
  31. data/test/roku_builder/test_device_manager.rb +187 -0
  32. data/test/roku_builder/test_files/analyzer_test/dont_use_hello_world.json +11 -0
  33. data/test/roku_builder/test_files/analyzer_test/linter_positive_match.json +13 -0
  34. data/test/roku_builder/test_helper.rb +6 -0
  35. data/test/roku_builder/test_roku_builder.rb +5 -42
  36. metadata +27 -6
@@ -36,19 +36,21 @@ module RokuBuilder
36
36
 
37
37
  def package(options:)
38
38
  check_options(options)
39
- #sideload
40
- loader = Loader.new(config: @config)
41
- loader.sideload(options: options)
42
- loader.squash(options: options) if @config.stage[:squash]
43
- #rekey
44
- key(options: options)
45
- #package
46
- sign_package(app_name_version: "", password: @config.key[:password], stage: options[:stage])
47
- #inspect
48
- if options[:inspect_package]
49
- @config.in = @config.out
50
- options[:password] = @config.key[:password]
51
- Inspector.new(config: @config).inspect(options: options)
39
+ get_device do |device|
40
+ #sideload
41
+ loader = Loader.new(config: @config)
42
+ loader.sideload(options: options, device: device)
43
+ loader.squash(options: options, device: device) if @config.stage[:squash]
44
+ #rekey
45
+ key(options: options, device: device)
46
+ #package
47
+ sign_package(app_name_version: "", password: @config.key[:password], stage: options[:stage], device: device)
48
+ #inspect
49
+ if options[:inspect_package]
50
+ @config.in = @config.out
51
+ options[:password] = @config.key[:password]
52
+ Inspector.new(config: @config).inspect(options: options, device: device)
53
+ end
52
54
  end
53
55
  end
54
56
 
@@ -76,31 +78,37 @@ module RokuBuilder
76
78
  # @param keyed_pkg [String] Path for a package signed with the desired key
77
79
  # @param password [String] Password for the package
78
80
  # @return [Boolean] True if key changed, false otherwise
79
- def key(options:)
80
- oldId = dev_id
81
-
82
- raise ExecutionError, "Missing Key Config" unless @config.key
83
-
84
- # upload new key with password
85
- payload = {
86
- mysubmit: "Rekey",
87
- passwd: @config.key[:password],
88
- archive: Faraday::UploadIO.new(@config.key[:keyed_pkg], 'application/octet-stream')
89
- }
90
- multipart_connection.post "/plugin_inspect", payload
81
+ def key(options:, device: nil)
82
+ get_device(device: device) do |device|
83
+ oldId = dev_id(device: device)
84
+
85
+ raise ExecutionError, "Missing Key Config" unless @config.key
86
+
87
+ # upload new key with password
88
+ payload = {
89
+ mysubmit: "Rekey",
90
+ passwd: @config.key[:password],
91
+ archive: Faraday::UploadIO.new(@config.key[:keyed_pkg], 'application/octet-stream')
92
+ }
93
+ multipart_connection(device: device) do |conn|
94
+ conn.post "/plugin_inspect", payload
95
+ end
91
96
 
92
- # check key
93
- newId = dev_id
94
- @logger.info("Key did not change") unless newId != oldId
95
- @logger.debug(oldId + " -> " + newId)
97
+ # check key
98
+ newId = dev_id(device: device)
99
+ @logger.info("Key did not change") unless newId != oldId
100
+ @logger.debug(oldId + " -> " + newId)
101
+ end
96
102
  end
97
103
 
98
104
  # Get the current dev id
99
105
  # @return [String] The current dev id
100
- def dev_id
106
+ def dev_id(device: nil)
101
107
  path = "/plugin_package"
102
- conn = simple_connection
103
- response = conn.get path
108
+ response = nil
109
+ simple_connection(device: device) do |conn|
110
+ response = conn.get path
111
+ end
104
112
 
105
113
  dev_id = /Your Dev ID:\s*<font[^>]*>([^<]*)<\/font>/.match(response.body)
106
114
  dev_id ||= /Your Dev ID:[^>]*<\/label> ([^<]*)/.match(response.body)
@@ -118,79 +126,88 @@ module RokuBuilder
118
126
  end
119
127
 
120
128
  # Sign and download the currently sideloaded app
121
- def sign_package(app_name_version:, password:, stage: nil)
122
- payload = {
123
- mysubmit: "Package",
124
- app_name: app_name_version,
125
- passwd: password,
126
- pkg_time: Time.now.to_i
127
- }
128
- response = multipart_connection.post "/plugin_package", payload
129
-
130
- # Check for error
131
- failed = /(Failed: [^\.]*\.)/.match(response.body)
132
- raise ExecutionError, failed[1] if failed
133
-
134
- # Download signed package
135
- pkg = /<a href="pkgs[^>]*>([^<]*)</.match(response.body)[1]
136
- path = "/pkgs/#{pkg}"
137
- conn = Faraday.new(url: @url) do |f|
138
- f.request :digest, @dev_username, @dev_password
139
- f.adapter Faraday.default_adapter
140
- end
141
- response = conn.get path
142
- raise ExecutionError, "Failed to download signed package" if response.status != 200
143
- out_file = nil
144
- unless @config.out[:file]
145
- out = @config.out
146
- build_version = Manifest.new(config: @config).build_version
147
- if stage
148
- out[:file] = "#{@config.project[:app_name]}_#{stage}_#{build_version}"
129
+ def sign_package(app_name_version:, password:, stage: nil, device: nil)
130
+ get_device(device: device) do |device|
131
+ payload = {
132
+ mysubmit: make_param("Package"),
133
+ app_name: make_param(app_name_version),
134
+ passwd: make_param(password),
135
+ pkg_time: make_param(Time.now.to_i)
136
+ }
137
+ response = nil
138
+ multipart_connection(device: device) do |conn|
139
+ response = conn.post "/plugin_package", payload
140
+ end
141
+
142
+ # Check for error
143
+ failed = /(Failed: [^\.]*\.)/.match(response.body)
144
+ raise ExecutionError, failed[1] if failed
145
+
146
+ # Download signed package
147
+ pkg = /<a href="pkgs[^>]*>([^<]*)</.match(response.body)[1]
148
+ path = "/pkgs/#{pkg}"
149
+ conn = Faraday.new(url: "http://#{device.ip}") do |f|
150
+ f.request :digest, device.user, device.password
151
+ f.adapter Faraday.default_adapter
152
+ end
153
+ response = conn.get path
154
+ raise ExecutionError, "Failed to download signed package" if response.status != 200
155
+ out_file = nil
156
+ unless @config.out[:file]
157
+ out = @config.out
158
+ build_version = Manifest.new(config: @config).build_version
159
+ if stage
160
+ out[:file] = "#{@config.project[:app_name]}_#{stage}_#{build_version}"
161
+ else
162
+ out[:file] = "#{@config.project[:app_name]}_working_#{build_version}"
163
+ end
164
+ @config.out = out
165
+ end
166
+ out_file = File.join(@config.out[:folder], @config.out[:file])
167
+ out_file = out_file+".pkg" unless out_file.end_with?(".pkg")
168
+ File.open(out_file, 'w+b') {|fp| fp.write(response.body)}
169
+ if File.exist?(out_file)
170
+ pkg_size = File.size(out_file).to_f / 2**20
171
+ raise ExecutionError, "PKG file size is too large (#{pkg_size.round(2)} MB): #{out_file}" if pkg_size > 4.0
172
+ @logger.info("Outfile: #{out_file}")
149
173
  else
150
- out[:file] = "#{@config.project[:app_name]}_working_#{build_version}"
174
+ @logger.warn("Outfile Missing: #{out_file}")
151
175
  end
152
- @config.out = out
153
- end
154
- out_file = File.join(@config.out[:folder], @config.out[:file])
155
- out_file = out_file+".pkg" unless out_file.end_with?(".pkg")
156
- File.open(out_file, 'w+b') {|fp| fp.write(response.body)}
157
- if File.exist?(out_file)
158
- pkg_size = File.size(out_file).to_f / 2**20
159
- raise ExecutionError, "PKG file size is too large (#{pkg_size.round(2)} MB): #{out_file}" if pkg_size > 4.0
160
- @logger.info("Outfile: #{out_file}")
161
- else
162
- @logger.warn("Outfile Missing: #{out_file}")
163
176
  end
164
177
  end
165
178
 
166
179
  # Uses the device to generate a new signing key
167
180
  # @return [Array<String>] Password and dev_id for the new key
168
- def generate_new_key()
169
- telnet_config = {
170
- 'Host' => @roku_ip_address,
171
- 'Port' => 8080
172
- }
173
- connection = Net::Telnet.new(telnet_config)
174
- connection.puts("genkey")
175
- waitfor_config = {
176
- 'Match' => /./,
177
- 'Timeout' => false
178
- }
181
+ def generate_new_key(device: nil)
179
182
  password = nil
180
183
  dev_id = nil
181
- while password.nil? or dev_id.nil?
182
- connection.waitfor(waitfor_config) do |txt|
183
- while line = txt.slice!(/^.*\n/) do
184
- words = line.split
185
- if words[0] == "Password:"
186
- password = words[1]
187
- elsif words[0] == "DevID:"
188
- dev_id = words[1]
184
+ get_device(device: device) do |device|
185
+ telnet_config = {
186
+ 'Host' => device.ip,
187
+ 'Port' => 8080
188
+ }
189
+ connection = Net::Telnet.new(telnet_config)
190
+ connection.puts("genkey")
191
+ waitfor_config = {
192
+ 'Match' => /./,
193
+ 'Timeout' => false
194
+ }
195
+ password = nil
196
+ dev_id = nil
197
+ while password.nil? or dev_id.nil?
198
+ connection.waitfor(waitfor_config) do |txt|
199
+ while line = txt.slice!(/^.*\n/) do
200
+ words = line.split
201
+ if words[0] == "Password:"
202
+ password = words[1]
203
+ elsif words[0] == "DevID:"
204
+ dev_id = words[1]
205
+ end
189
206
  end
190
207
  end
191
208
  end
209
+ connection.close
192
210
  end
193
- connection.close
194
211
  return password, dev_id
195
212
  end
196
213
  end
@@ -62,10 +62,13 @@ module RokuBuilder
62
62
  end
63
63
 
64
64
  def sgperf(options:)
65
- telnet_config ={
66
- 'Host' => @roku_ip_address,
67
- 'Port' => 8080
68
- }
65
+ telnet_config = nil
66
+ get_device(no_lock: true) do |device|
67
+ telnet_config ={
68
+ 'Host' => device.ip,
69
+ 'Port' => 8080
70
+ }
71
+ end
69
72
  @connection = Net::Telnet.new(telnet_config)
70
73
  @connection.puts("sgperf clear\n")
71
74
  @connection.puts("sgperf start\n")
@@ -97,10 +100,13 @@ module RokuBuilder
97
100
  end
98
101
 
99
102
  def devlog(options:)
100
- telnet_config ={
101
- 'Host' => @roku_ip_address,
102
- 'Port' => 8080
103
- }
103
+ telnet_config = nil
104
+ get_device(no_lock: true) do |device|
105
+ telnet_config ={
106
+ 'Host' => device.ip,
107
+ 'Port' => 8080
108
+ }
109
+ end
104
110
  connection = Net::Telnet.new(telnet_config)
105
111
  connection.puts("enhanced_dev_log #{options[:devlog]} #{options[:devlog_function]}\n")
106
112
  end
@@ -172,7 +178,7 @@ module RokuBuilder
172
178
  def handle_node(stats:, node:)
173
179
  if node
174
180
  node.element_children.each do |element|
175
- attributes = element.attributes.map{|attr| {"#{attr.name}": attr.value}}.reduce({}, :merge)
181
+ attributes = element.attributes.map{|key,attr| {"#{key}": attr.value}}.reduce({}, :merge)
176
182
  stats[element.name] ||= {count: 0, ids: []}
177
183
  stats[element.name][:count] += 1
178
184
  stats[element.name][:ids].push(attributes[:name]) if attributes[:name]
@@ -217,8 +223,8 @@ module RokuBuilder
217
223
  lines.each {|line| print line}
218
224
  end
219
225
  def print_nodes_by_id(id)
220
- start_reg = /<#{id}>/
221
- end_reg = /<\/#{id}>/
226
+ start_reg = /#{id}/
227
+ end_reg = /#{id}/
222
228
  lines = get_command_response(command: "sgnodes #{id}", start_reg: start_reg, end_reg: end_reg)
223
229
  lines.each {|line| print line}
224
230
  end
@@ -259,10 +265,13 @@ module RokuBuilder
259
265
  'Timeout' => 1
260
266
  }
261
267
  unless @connection
262
- telnet_config ={
263
- 'Host' => @roku_ip_address,
264
- 'Port' => 8080
265
- }
268
+ telnet_config = nil
269
+ get_device(no_lock: true) do |device|
270
+ telnet_config ={
271
+ 'Host' => device.ip,
272
+ 'Port' => 8080
273
+ }
274
+ end
266
275
  @connection = Net::Telnet.new(telnet_config)
267
276
  end
268
277
 
@@ -38,21 +38,23 @@ module RokuBuilder
38
38
  # Run tests and report results
39
39
  # @param sideload_config [Hash] The config for sideloading the app
40
40
  def test(options:)
41
- loader = Loader.new(config: @config)
42
- loader.sideload(options: options)
43
- linker = Linker.new(config: @config)
44
- linker.deeplink(options: Options.new(options: {deeplink: "RunTests:true"}))
41
+ get_device do |device|
42
+ loader = Loader.new(config: @config)
43
+ loader.sideload(options: options, device: device)
44
+ linker = Linker.new(config: @config)
45
+ linker.deeplink(options: Options.new(options: {deeplink: "RunTests:true"}), device: device)
45
46
 
46
- telnet_config ={
47
- 'Host' => @roku_ip_address,
48
- 'Port' => 8085
49
- }
50
- connection = Net::Telnet.new(telnet_config)
51
- connection.waitfor(@end_reg) do |txt|
52
- handle_text(txt: txt)
47
+ telnet_config ={
48
+ 'Host' => device.ip,
49
+ 'Port' => 8085
50
+ }
51
+ connection = Net::Telnet.new(telnet_config)
52
+ connection.waitfor(@end_reg) do |txt|
53
+ handle_text(txt: txt)
54
+ end
55
+ print_logs
56
+ connection.puts("cont\n")
53
57
  end
54
- print_logs
55
- connection.puts("cont\n")
56
58
  end
57
59
 
58
60
  private
@@ -11,10 +11,6 @@ module RokuBuilder
11
11
  def initialize(config: )
12
12
  @logger = Logger.instance
13
13
  @config = config
14
- @roku_ip_address = @config.device_config[:ip]
15
- @dev_username = @config.device_config[:user]
16
- @dev_password = @config.device_config[:password]
17
- @url = "http://#{@roku_ip_address}"
18
14
  init
19
15
  end
20
16
 
@@ -27,25 +23,51 @@ module RokuBuilder
27
23
 
28
24
  # Generates a simpe Faraday connection with digest credentials
29
25
  # @return [Faraday] The faraday connection
30
- def simple_connection
31
- Faraday.new(url: @url) do |f|
32
- f.request :digest, @dev_username, @dev_password
33
- f.adapter Faraday.default_adapter
26
+ def simple_connection(device: nil, no_lock: false, &block)
27
+ raise ImplementationError, "No block given to simple_connection" unless block_given?
28
+ get_device(device: device, no_lock: no_lock) do |device|
29
+ url = "http://#{device.ip}"
30
+ connection = Faraday.new(url: url) do |f|
31
+ f.request :digest, device.user, device.password
32
+ f.adapter Faraday.default_adapter
33
+ end
34
+ block.call(connection)
34
35
  end
35
36
  end
36
37
 
37
38
  # Generates a multipart Faraday connection with digest credentials
38
39
  # @param port [Integer] optional port to connect to
39
40
  # @return [Faraday] The faraday connection
40
- def multipart_connection(port: nil)
41
- url = @url
42
- url = "#{url}:#{port}" if port
43
- Faraday.new(url: url) do |f|
44
- f.headers['Content-Type'] = Faraday::Request::Multipart.mime_type
45
- f.request :digest, @dev_username, @dev_password
46
- f.request :multipart
47
- f.request :url_encoded
48
- f.adapter Faraday.default_adapter
41
+ def multipart_connection(port: nil, device: nil, no_lock: false, &block)
42
+ raise ImplementationError, "No block given to multipart_connection" unless block_given?
43
+ get_device(device: device, no_lock: no_lock) do |device|
44
+ url = "http://#{device.ip}"
45
+ url += ":#{port}" if port
46
+ connection = Faraday.new(url: url) do |f|
47
+ f.request :digest, device.user, device.password
48
+ f.request :multipart
49
+ f.request :url_encoded
50
+ f.adapter Faraday.default_adapter
51
+ end
52
+ block.call(connection)
53
+ end
54
+ end
55
+
56
+ def make_param(value, contentType = nil)
57
+ Faraday::Multipart::ParamPart.new(value, contentType)
58
+ end
59
+
60
+ def get_device(device: nil, no_lock: false, &block)
61
+ raise ImplementationError, "No block given to get_device" unless block_given?
62
+ device_given = true
63
+ unless device
64
+ device_given = false
65
+ device = RokuBuilder.device_manager.reserve_device(no_lock: no_lock)
66
+ end
67
+ begin
68
+ block.call(device)
69
+ ensure
70
+ RokuBuilder.device_manager.release_device(device) unless device_given
49
71
  end
50
72
  end
51
73
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "4.25.4"
5
+ VERSION = "4.26.0"
6
6
  end
data/lib/roku_builder.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "logger"
4
4
  require "faraday"
5
+ require "faraday/multipart"
5
6
  require "faraday/digestauth"
6
7
  require "pathname"
7
8
  require "optparse"
@@ -68,7 +69,6 @@ module RokuBuilder
68
69
 
69
70
  def self.execute
70
71
  load_config
71
- check_devices
72
72
  execute_command
73
73
  end
74
74
 
@@ -171,24 +171,8 @@ module RokuBuilder
171
171
  end
172
172
  end
173
173
 
174
- def self.check_devices
175
- if @@options.device_command?
176
- ping = Net::Ping::External.new
177
- host = @@config.parsed[:device_config][:ip]
178
- return if ping.ping? host, 1, 0.2, 1
179
- raise DeviceError, "Device not online" if @@options[:device_given]
180
- @@config.raw[:devices].each_pair {|key, value|
181
- unless key == :default
182
- host = value[:ip]
183
- if ping.ping? host, 1, 0.2, 1
184
- @@config.parsed[:device_config] = value
185
- Logger.instance.warn("Default device offline, choosing Alternate")
186
- return
187
- end
188
- end
189
- }
190
- raise DeviceError, "No devices found"
191
- end
174
+ def self.device_manager
175
+ @@device_manager ||= DeviceManager.new(config: @@config, options: @@options)
192
176
  end
193
177
 
194
178
  def self.execute_command
data/roku_builder.gemspec CHANGED
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = "~> 3.0"
22
22
 
23
23
  spec.add_dependency "rubyzip", "~> 1.2"
24
- spec.add_dependency "faraday", "~> 0.13"
24
+ spec.add_dependency "faraday", "~> 2.3"
25
+ spec.add_dependency "faraday-multipart", "~> 1.0"
25
26
  spec.add_dependency "faraday-digestauth", "~> 0.2"
26
27
  spec.add_dependency "git", "~> 1.3"
27
28
  spec.add_dependency "net-ping", "~> 2.0"
@@ -33,7 +34,7 @@ Gem::Specification.new do |spec|
33
34
  spec.add_development_dependency "bundler", "~> 2.0"
34
35
  spec.add_development_dependency "rake", "~> 12.0"
35
36
  spec.add_development_dependency "byebug", "~> 10.0"
36
- spec.add_development_dependency "minitest", "~> 5.10"
37
+ spec.add_development_dependency "minitest", "~> 5.16"
37
38
  spec.add_development_dependency "minitest-autotest", "~> 1.0"
38
39
  spec.add_development_dependency "minitest-server", "~> 1.0"
39
40
  spec.add_development_dependency "minitest-utils", "~> 0.3"
@@ -26,6 +26,8 @@ module RokuBuilder
26
26
  def teardown
27
27
  manifest = File.join(@root_dir, "manifest")
28
28
  FileUtils.rm(manifest) if File.exist?(manifest)
29
+ linter_config = File.join(@root_dir, ".roku_builder_linter.json")
30
+ FileUtils.rm(linter_config) if File.exist?(linter_config)
29
31
  @request_stubs.each {|req| remove_request_stub(req)}
30
32
  end
31
33
  def test_analyzer_parse_commands
@@ -41,16 +43,6 @@ module RokuBuilder
41
43
  assert_equal Array, warnings.class
42
44
  assert_equal 0, warnings.count
43
45
  end
44
- def test_performance_function_return_types
45
- warnings = test_file(text: "function test() as String\n? \"test\"\nend function")
46
- assert_equal 1, warnings.count
47
- assert_match(/function return/, warnings[0][:message])
48
- end
49
- def test_performance_function_return_types_lowercase
50
- warnings = test_file(text: "function test() as string\n? \"test\"\nend function")
51
- assert_equal 1, warnings.count
52
- assert_match(/function return/, warnings[0][:message])
53
- end
54
46
  def test_performance_aa_does_exist
55
47
  warnings = test_file(text: "exists = aa.doesExist(\"test\")")
56
48
  assert_equal 1, warnings.count
@@ -110,10 +102,27 @@ module RokuBuilder
110
102
  warnings = test_file(text: "For each button in buttons\n ? button\nEND FOR")
111
103
  assert_equal 0, warnings.count
112
104
  end
105
+ def test_linter_checks
106
+ set_linter_config("dont_use_hello_world.json")
107
+ warnings = test_file(text: "hello world")
108
+ assert_equal 1, warnings.count
109
+ end
110
+ def test_linter_positive_match
111
+ set_linter_config("linter_positive_match.json")
112
+ warnings = test_file(text: "hello world\nhello moon")
113
+ assert_equal 1, warnings.count
114
+ assert_equal 1, warnings.first[:line]
115
+ end
113
116
 
114
117
 
115
118
  private
116
119
 
120
+ def set_linter_config(config_file = nil)
121
+ if config_file
122
+ FileUtils.cp(File.join(@root_dir, config_file), File.join(@root_dir, ".roku_builder_linter.json"))
123
+ end
124
+ end
125
+
117
126
  def test_manifest(manifest_file = nil)
118
127
  if manifest_file
119
128
  use_manifest(manifest_file)
@@ -18,7 +18,7 @@ module RokuBuilder
18
18
  "--do-unstage", "--edit", "params", "--config", "config-path",
19
19
  "--ref", "ref", "--working", "--current", "--stage", "stage", "--project",
20
20
  "project", "--out", "out", "--in", "in", "--device", "device",
21
- "--verbose", "--debug"]
21
+ "--device-blocking", "--verbose", "--debug"]
22
22
  parser.parse! argv
23
23
  assert options[:configure]
24
24
  assert options[:validate]
@@ -35,7 +35,7 @@ module RokuBuilder
35
35
  assert_equal "out", options[:out]
36
36
  assert_equal "in", options[:in]
37
37
  assert_equal "device", options[:device]
38
- assert options[:device_given]
38
+ assert options[:device_blocking]
39
39
  assert options[:verbose]
40
40
  assert options[:debug]
41
41
  end
@@ -56,7 +56,6 @@ module RokuBuilder
56
56
  assert_equal "out", options[:out]
57
57
  assert_equal "in", options[:in]
58
58
  assert_equal "device", options[:device]
59
- assert options[:device_given]
60
59
  assert options[:verbose]
61
60
  end
62
61
  def test_core_configure