roku_builder 4.0.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 33fa38c6199690feab407c87bc8e40aa6730fd2d
4
- data.tar.gz: 4de2fea7a14133bc097b237e2abe67b100817e80
3
+ metadata.gz: 573c78252bcce4dea40430de90789acd0d4f3a05
4
+ data.tar.gz: 8c96b5bfa0b1f2dcab2c8b19f47fe477f972e604
5
5
  SHA512:
6
- metadata.gz: 68fb497fad73c2fddc8542fb5af678c490f960ef90b1182581527669ccd0705d2653df150279c74d19bc34c0847a605e09206e3b832d9f00e9e03ca9d6a38fa8
7
- data.tar.gz: ef303ca73941a41ecaae6ebe891e5aafa110374ac35435f03d1860c78d2cd9490e368cc0c9c8c88939d361beab918fdad8d20b49cb0a2ac5f33a627dbcaf98a5
6
+ metadata.gz: 4e144ca75cb797bbe36846cdcfc17512ac6c13333712d7e3862e4d90e0d0d455d28f1c83c308fc2a91bdc66efaed910024199db0158e691c1a579d23a0f75597
7
+ data.tar.gz: d41bb3e7113cd436cc2418e9c2f7c9a1288565bf140e373ccaf89c9da76c5a4464c1d34532d2be2de592804bcd18519e96a19df77808768da3b34a1afe45ea06
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ = 4.1.0 =
2
+
3
+ - Remove unnecessary default manifest values
4
+ - Print PKG path when packaging with --verbose
5
+ - Add build number to default out file name for packager
6
+ - Fail with useful message when packaging without configured key
7
+ - Monitor will check for used connection
8
+ - Screens command now prints all key combinations
9
+ - Replace nokogiri with oga
10
+
1
11
  = 4.0.1 =
2
12
 
3
13
  - Fix sideload bug
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roku_builder (4.0.1)
4
+ roku_builder (4.1.0)
5
5
  faraday (~> 0.12)
6
6
  faraday-digestauth (~> 0.2)
7
7
  git (~> 1.3)
8
8
  net-ping (~> 2.0)
9
9
  net-telnet (~> 0.1)
10
- nokogiri (~> 1.7)
10
+ oga (~> 2.10)
11
11
  rubyzip (~> 1.2)
12
12
  win32-security (~> 0.5)
13
13
 
@@ -16,6 +16,8 @@ GEM
16
16
  specs:
17
17
  addressable (2.5.1)
18
18
  public_suffix (~> 2.0, >= 2.0.2)
19
+ ansi (1.5.0)
20
+ ast (2.3.0)
19
21
  byebug (9.0.6)
20
22
  coderay (1.1.1)
21
23
  coveralls (0.8.21)
@@ -61,7 +63,6 @@ GEM
61
63
  method_source (>= 0.6.7)
62
64
  rake (>= 0.9.2.2)
63
65
  method_source (0.8.2)
64
- mini_portile2 (2.2.0)
65
66
  minitest (5.10.2)
66
67
  minitest-autotest (1.0.3)
67
68
  minitest-server (~> 1.0)
@@ -74,11 +75,12 @@ GEM
74
75
  net-http-digest_auth (1.4.1)
75
76
  net-ping (2.0.1)
76
77
  net-telnet (0.1.1)
77
- nokogiri (1.8.0)
78
- mini_portile2 (~> 2.2.0)
79
78
  notiffany (0.1.1)
80
79
  nenv (~> 0.1)
81
80
  shellany (~> 0.0)
81
+ oga (2.10)
82
+ ast
83
+ ruby-ll (~> 2.1)
82
84
  pry (0.10.4)
83
85
  coderay (~> 1.1.0)
84
86
  method_source (~> 0.8.1)
@@ -88,6 +90,9 @@ GEM
88
90
  rb-fsevent (0.9.8)
89
91
  rb-inotify (0.9.8)
90
92
  ffi (>= 0.5.0)
93
+ ruby-ll (2.1.2)
94
+ ansi
95
+ ast
91
96
  ruby_dep (1.5.0)
92
97
  rubyzip (1.2.1)
93
98
  safe_yaml (1.0.4)
data/README.md CHANGED
@@ -62,8 +62,6 @@ directory:
62
62
 
63
63
  * Fix file naming when building from a referance
64
64
  * Add configuration option for build_version format
65
- * Check if keying with bad password
66
- * Check if missing key config when required
67
65
 
68
66
  ## Contributing
69
67
 
@@ -15,6 +15,8 @@ require "minitest/autorun"
15
15
  require "minitest/utils"
16
16
  require "securerandom"
17
17
 
18
+ ROKU_IP = "192.168.1.114"
19
+
18
20
  module Minitest
19
21
  module Assertions
20
22
  def wait_assert(timeout = 10, msg = nil)
@@ -103,7 +105,7 @@ module Helpers
103
105
  devices: {
104
106
  default: :roku,
105
107
  roku: {
106
- ip: "192.168.1.127",
108
+ ip: ROKU_IP,
107
109
  user: "rokudev",
108
110
  password: "aaaa"
109
111
  }
@@ -17,14 +17,14 @@ module RokuBuilder
17
17
  def test_sideload
18
18
  output = `#{roku} --sideload --stage production`
19
19
  assert_log @uuid
20
- refute(/WARN: Missing File/.match(output))
20
+ refute_match(/WARN: Missing File/, output)
21
21
  end
22
22
  def test_delete
23
23
  `#{roku} --sideload --working`
24
24
  assert_log @uuid
25
25
  `#{roku} --delete`
26
26
  output = `#{roku} --app-list`
27
- refute(/\|\s*dev\s*\|/.match(output))
27
+ refute_match(/\|\s*dev\s*\|/, output)
28
28
  end
29
29
  def test_build
30
30
  target = File.join(testfiles_path(LoaderIntergrationTest), "out.zip")
@@ -18,10 +18,29 @@ module RokuBuilder
18
18
  target = File.join(testfiles_path(PackagerIntergrationTest), "pkg.pkg")
19
19
  FileUtils.rm(target) if File.exist?(target)
20
20
  output = `#{roku} --package --stage production --out #{target}`
21
- refute(/WARN: Missing File/.match(output))
21
+ refute_match(/WARN: Missing File/, output)
22
22
  wait_assert {File.exist?(target)}
23
+ refute File.exist?(target+".zip")
23
24
  FileUtils.rm(target) if File.exist?(target)
24
- FileUtils.rm(target+".zip") if File.exist?(target+".zip")
25
+ end
26
+ def test_package_output
27
+ target = File.join(testfiles_path(PackagerIntergrationTest), "pkg.pkg")
28
+ FileUtils.rm(target) if File.exist?(target)
29
+ output = `#{roku} --package --stage production --out #{target} -V`
30
+ refute_match(/WARN: Missing File/, output)
31
+ assert_match(/#{target}/, output)
32
+ wait_assert {File.exist?(target)}
33
+ refute File.exist?(target+".zip")
34
+ FileUtils.rm(target) if File.exist?(target)
35
+ end
36
+ def test_package_no_key
37
+ config = good_config(PackagerIntergrationTest)
38
+ config[:projects][:project1][:stages][:production].delete(:key)
39
+ @config = build_config(PackagerIntergrationTest, nil, config)
40
+ target = File.join(testfiles_path(PackagerIntergrationTest), "pkg.pkg")
41
+ FileUtils.rm(target) if File.exist?(target)
42
+ output = `#{roku} --package --stage production --out #{target}`
43
+ assert_match(/FATAL:.*Missing Key/, output)
25
44
  end
26
45
  def test_key
27
46
  target = File.join(testfiles_path(PackagerIntergrationTest), "pkg.pkg")
@@ -18,31 +18,31 @@ module RokuBuilder
18
18
  `#{roku} --sideload --working`
19
19
  assert_log @uuid
20
20
  output = `#{roku} --profile stats`
21
- assert output =~ /Name \| Count/
22
- assert output =~ /Total \|\s*5/
23
- assert output =~ /Default \|\s*1/
24
- assert output =~ /RectangleExample \|\s*1/
25
- assert output =~ /Poster \|\s*1/
26
- assert output =~ /Node \|\s*1/
27
- assert output =~ /Rectangle \|\s*1/
21
+ assert_match(/Name \| Count/, output)
22
+ assert_match(/Total \|\s*5/, output)
23
+ assert_match(/Default \|\s*1/, output)
24
+ assert_match(/RectangleExample \|\s*1/, output)
25
+ assert_match(/Poster \|\s*1/, output)
26
+ assert_match(/Node \|\s*1/, output)
27
+ assert_match(/Rectangle \|\s*1/, output)
28
28
  end
29
29
  def test_profile_all
30
30
  `#{roku} --sideload --working`
31
31
  assert_log @uuid
32
32
  output = `#{roku} --profile all`
33
- assert output =~ /RectangleExample/
33
+ assert_match(/RectangleExample/, output)
34
34
  end
35
35
  def test_profile_images
36
36
  `#{roku} --sideload --working`
37
37
  assert_log @uuid
38
38
  output = `#{roku} --profile images`
39
- assert output =~ /Available memory/
39
+ assert_match(/Available memory/, output)
40
40
  end
41
41
  def test_profile_textures
42
42
  `#{roku} --sideload --working`
43
43
  assert_log @uuid
44
44
  output = `#{roku} --profile textures`
45
- assert output =~ /System textures/
45
+ assert_match(/System textures/, output)
46
46
  end
47
47
  end
48
48
  end
data/lib/roku_builder.rb CHANGED
@@ -14,7 +14,7 @@ require 'json'
14
14
  require 'pstore'
15
15
  require "git"
16
16
  #profiler
17
- require 'nokogiri'
17
+ require 'oga'
18
18
  #navigator
19
19
  require 'io/console'
20
20
  #monitor
@@ -111,9 +111,8 @@ module RokuBuilder
111
111
  major_version: 1,
112
112
  minor_version: 0,
113
113
  build_version: "010101.0001",
114
- mm_icon_focus_fhd: "<insert fhd focus icon url>",
115
114
  mm_icon_focus_hd: "<insert hd focus icon url>",
116
- mm_icon_focus_sd: "<insert sd focus icon url>"
115
+ splash_screen_fhd: "<insert fhd splash screen url>"
117
116
  }
118
117
  end
119
118
  end
@@ -43,9 +43,10 @@ module RokuBuilder
43
43
  did_build = true
44
44
  build(options: options)
45
45
  end
46
+ keep_build_file = is_build_command(options) and options[:out]
46
47
  upload
47
48
  # Cleanup
48
- File.delete(file_path(:in)) if did_build and not options[:out]
49
+ File.delete(file_path(:in)) if did_build and not keep_build_file
49
50
  end
50
51
 
51
52
 
@@ -67,6 +68,10 @@ module RokuBuilder
67
68
 
68
69
  private
69
70
 
71
+ def is_build_command(options)
72
+ [:sideload, :build].include? options.command
73
+ end
74
+
70
75
  def upload
71
76
  payload = {
72
77
  mysubmit: "Replace",
@@ -47,6 +47,7 @@ module RokuBuilder
47
47
  end
48
48
  end
49
49
  }
50
+ thread.abort_on_exception = true
50
51
 
51
52
  init_readline()
52
53
 
@@ -112,6 +113,9 @@ module RokuBuilder
112
113
  # @param regexp [Regexp] regular expression to filter text on
113
114
  # @return [String] remaining partial line text
114
115
  def manage_text(all_text:, txt:, regexp: nil)
116
+ if /connection is already in use/ =~ txt
117
+ raise ExecutionError, "Connection is in use"
118
+ end
115
119
  all_text += txt
116
120
  while line = all_text.slice!(/^.*\n/) do
117
121
  if !line.strip.empty?
@@ -129,13 +129,21 @@ module RokuBuilder
129
129
  nav(options: {nav: @screens[type].join(", ")})
130
130
  else
131
131
  @logger.unknown("Cannot run command automatically")
132
+ display_screen_command(type)
132
133
  end
133
- display_screen_command(type)
134
134
  end
135
135
 
136
136
  # Show avaiable roku secret screens
137
137
  def screens(options:)
138
- @screens.keys.each {|screen| @logger.unknown(screen)}
138
+ logger = ::Logger.new(STDOUT)
139
+ logger.formatter = proc {|_severity, _datetime, _progname, msg|
140
+ "%s\n\r" % [msg]
141
+ }
142
+ logger.unknown("----------------------------------------------------------------------")
143
+ @screens.keys.each {|screen|
144
+ logger.unknown(sprintf("%10s: %s", screen.to_s, get_screen_command(screen)))
145
+ logger.unknown("----------------------------------------------------------------------")
146
+ }
139
147
  end
140
148
 
141
149
  private
@@ -208,6 +216,14 @@ module RokuBuilder
208
216
  end
209
217
 
210
218
  def display_screen_command(type)
219
+ logger = ::Logger.new(STDOUT)
220
+ logger.formatter = proc {|_severity, _datetime, _progname, msg|
221
+ "%s\n\r" % [msg]
222
+ }
223
+ logger.unknown(get_screen_command(type))
224
+ end
225
+
226
+ def get_screen_command(type)
211
227
  display, count, string = [], [], ""
212
228
  @screens[type].each do |command|
213
229
  if display.count > 0 and display[-1] == command
@@ -224,11 +240,7 @@ module RokuBuilder
224
240
  string = string + @commands[display[i]]+", "
225
241
  end
226
242
  end
227
- if @runable.include?(type)
228
- @logger.info(string.strip)
229
- else
230
- @logger.unknown(string.strip)
231
- end
243
+ string.strip
232
244
  end
233
245
  end
234
246
  RokuBuilder.register_plugin(Navigator)
@@ -84,6 +84,8 @@ module RokuBuilder
84
84
  def key(options:)
85
85
  oldId = dev_id
86
86
 
87
+ raise ExecutionError, "Missing Key Config" unless @config.key
88
+
87
89
  # upload new key with password
88
90
  payload = {
89
91
  mysubmit: "Rekey",
@@ -146,17 +148,18 @@ module RokuBuilder
146
148
  out_file = nil
147
149
  unless @config.out[:file]
148
150
  out = @config.out
151
+ build_version = Manifest.new(config: @config).build_version
149
152
  if stage
150
- out[:file] = "#{@config.project[:app_name]}_#{stage}"
153
+ out[:file] = "#{@config.project[:app_name]}_#{stage}_#{build_version}"
151
154
  else
152
- out[:file] = "#{@config.project[:app_name]}_working"
155
+ out[:file] = "#{@config.project[:app_name]}_working_#{build_version}"
153
156
  end
154
157
  @config.out = out
155
158
  end
156
159
  out_file = File.join(@config.out[:folder], @config.out[:file])
157
160
  out_file = out_file+".pkg" unless out_file.end_with?(".pkg")
158
161
  File.open(out_file, 'w+') {|fp| fp.write(response.body)}
159
- true
162
+ @logger.info("Outfile: #{out_file}")
160
163
  end
161
164
 
162
165
  # Uses the device to generate a new signing key
@@ -41,8 +41,8 @@ module RokuBuilder
41
41
  lines = get_command_response(command: "sgnodes all", start_reg: start_reg, end_reg: end_reg)
42
42
  xml_string = lines.join("\n")
43
43
  stats = {"Total" => 0}
44
- doc = Nokogiri::XML(xml_string)
45
- handle_node(stats: stats, node: doc.root)
44
+ doc = Oga.parse_xml(xml_string)
45
+ handle_node(stats: stats, node: doc.children.first)
46
46
  stats = stats.to_a
47
47
  stats = stats.sort {|a, b| b[1] <=> a[1]}
48
48
  printf "%30s | %5s\n", "Name", "Count"
@@ -52,7 +52,8 @@ module RokuBuilder
52
52
  end
53
53
 
54
54
  def handle_node(stats:, node:)
55
- node.element_children.each do |element|
55
+ node.children.each do |element|
56
+ next unless element.class == Oga::XML::Element
56
57
  stats[element.name] ||= 0
57
58
  stats[element.name] += 1
58
59
  stats["Total"] += 1
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "4.0.1"
5
+ VERSION = "4.1.0"
6
6
  end
data/roku_builder.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "git", "~> 1.3"
27
27
  spec.add_dependency "net-ping", "~> 2.0"
28
28
  spec.add_dependency "net-telnet", "~> 0.1"
29
- spec.add_dependency "nokogiri", "~> 1.7"
29
+ spec.add_dependency "oga", "~> 2.10"
30
30
  spec.add_dependency "win32-security", "~> 0.5" # For windows compatibility
31
31
 
32
32
  spec.add_development_dependency "bundler", "~> 1.7"
@@ -12,7 +12,9 @@ module RokuBuilder
12
12
  end
13
13
  @options = build_options({monitor: "main"}, false)
14
14
  @config = Config.new(options: @options)
15
- @connection = Minitest::Mock.new
15
+ @connection = Object.new()
16
+ @connection.define_singleton_method(:waitfor) {}
17
+ @connection.define_singleton_method(:puts) {}
16
18
  device_config = {
17
19
  ip: "111.222.333",
18
20
  user: "user",
@@ -21,9 +23,6 @@ module RokuBuilder
21
23
  @config.instance_variable_set(:@parsed, {device_config: device_config, init_params: {}})
22
24
  @monitor = Monitor.new(config: @config)
23
25
  end
24
- def teardown
25
- @connection.verify
26
- end
27
26
  def test_scripter_parse_options_long
28
27
  parser = OptionParser.new
29
28
  options = {}
@@ -43,11 +42,10 @@ module RokuBuilder
43
42
  assert_equal "regexp", options[:regexp]
44
43
  end
45
44
  def test_monitor_monit
46
- @connection.expect(:waitfor, nil) do |config|
47
- assert_equal(/./, config['Match'])
48
- assert_equal(false, config['Timeout'])
49
- end
50
-
45
+ count = 0
46
+ waitfor = proc {
47
+ count += 1
48
+ }
51
49
  readline = proc {
52
50
  sleep(0.1)
53
51
  "q"
@@ -55,47 +53,50 @@ module RokuBuilder
55
53
 
56
54
  Readline.stub(:readline, readline) do
57
55
  Net::Telnet.stub(:new, @connection) do
58
- @monitor.monitor(options: @options)
56
+ @connection.stub(:waitfor, waitfor, "txt") do
57
+ @monitor.monitor(options: @options)
58
+ end
59
59
  end
60
60
  end
61
61
 
62
+ assert count > 0
62
63
  end
63
64
 
64
65
  def test_monitor_monit_and_manage
65
66
  @monitor.instance_variable_set(:@show_prompt, true)
66
-
67
- @connection.expect(:waitfor, nil) do |config, &blk|
68
- assert_equal(/./, config['Match'])
69
- assert_equal(false, config['Timeout'])
70
- txt = "Fake Text"
71
- blk.call(txt) == ""
72
- end
73
-
67
+ count = 0
68
+ waitfor = proc {
69
+ count += 1
70
+ }
74
71
  readline = proc {
75
72
  sleep(0.1)
76
73
  "q"
77
74
  }
78
-
79
75
  Readline.stub(:readline, readline) do
80
76
  Net::Telnet.stub(:new, @connection) do
81
- @monitor.stub(:manage_text, "") do
82
- @monitor.monitor(options: @options)
77
+ @connection.stub(:waitfor, waitfor, "txt") do
78
+ @monitor.stub(:manage_text, "") do
79
+ @monitor.monitor(options: @options)
80
+ end
83
81
  end
84
82
  end
85
83
  end
84
+ assert count > 0
86
85
  end
87
86
 
88
87
  def test_monitor_monit_input
89
88
  @monitor.instance_variable_set(:@show_prompt, true)
89
+ wait_count = 0
90
+ waitfor = proc {
91
+ wait_count += 1
92
+ }
90
93
 
91
- @connection.expect(:waitfor, nil) do |config|
92
- assert_equal(/./, config['Match'])
93
- assert_equal(false, config['Timeout'])
94
- end
95
- @connection.expect(:puts, nil) do |text|
94
+ puts_count = 0
95
+ puts = proc { |text|
96
+ puts_count += 1
96
97
  assert_equal("text", text)
97
98
  @monitor.instance_variable_set(:@show_prompt, true)
98
- end
99
+ }
99
100
 
100
101
  readline = proc {
101
102
  @count ||= 0
@@ -111,9 +112,15 @@ module RokuBuilder
111
112
 
112
113
  Readline.stub(:readline, readline) do
113
114
  Net::Telnet.stub(:new, @connection) do
114
- @monitor.monitor(options: @options)
115
+ @connection.stub(:waitfor, waitfor, "txt") do
116
+ @connection.stub(:puts, puts) do
117
+ @monitor.monitor(options: @options)
118
+ end
119
+ end
115
120
  end
116
121
  end
122
+ assert wait_count > 0
123
+ assert puts_count > 0
117
124
  end
118
125
 
119
126
  def test_monitor_manage_text
@@ -137,5 +144,11 @@ module RokuBuilder
137
144
  mock.verify
138
145
 
139
146
  end
147
+
148
+ def test_monitor_manage_text_connection_used
149
+ assert_raises ExecutionError do
150
+ @monitor.send(:manage_text, {all_text: "", txt: "Console connection is already in use."})
151
+ end
152
+ end
140
153
  end
141
154
  end
@@ -105,7 +105,6 @@ module RokuBuilder
105
105
  @requests.push(stub_request(:post, "http://192.168.0.100:8060/keypress/Rev").
106
106
  to_return(status: 200, body: "", headers: {}))
107
107
 
108
- logger.expect(:info, nil, ["Home x 5, Fwd x 3, Rev x 2,"])
109
108
  5.times do
110
109
  logger.expect(:debug, nil, ["Send Command: /keypress/Home"])
111
110
  end
@@ -123,15 +122,19 @@ module RokuBuilder
123
122
  end
124
123
  def test_navigator_screen_reboot
125
124
  logger = Minitest::Mock.new
125
+ command_logger = Minitest::Mock.new
126
126
  Logger.class_variable_set(:@@instance, logger)
127
127
  options = {screen: "reboot"}
128
128
  config, options = build_config_options_objects(NavigatorTest, options, false)
129
129
  navigator = Navigator.new(config: config)
130
130
 
131
131
  logger.expect(:unknown, nil, ["Cannot run command automatically"])
132
- logger.expect(:unknown, nil, ["Home x 5, Up, Rev x 2, Fwd x 2,"])
132
+ command_logger.expect(:unknown, nil, ["Home x 5, Up, Rev x 2, Fwd x 2,"])
133
+ command_logger.expect(:formatter=, nil, [Proc])
133
134
 
134
- navigator.screen(options: options)
135
+ ::Logger.stub(:new, command_logger) do
136
+ navigator.screen(options: options)
137
+ end
135
138
 
136
139
  logger.verify
137
140
  Logger.set_testing
@@ -153,11 +156,22 @@ module RokuBuilder
153
156
  config, options = build_config_options_objects(NavigatorTest, options, false)
154
157
  navigator = Navigator.new(config: config)
155
158
 
159
+ logger.expect(:formatter=, nil, [Proc])
160
+ logger.expect(:unknown, nil) do |msg|
161
+ /-+/=~ msg
162
+ end
156
163
  navigator.instance_variable_get("@screens").each_key do |key|
157
- logger.expect(:unknown, nil, [key])
164
+ logger.expect(:unknown, nil) do |msg|
165
+ /#{key}:/=~ msg
166
+ end
167
+ logger.expect(:unknown, nil) do |msg|
168
+ /-+/=~ msg
169
+ end
158
170
  end
159
171
 
160
- navigator.screens(options: options)
172
+ ::Logger.stub(:new, logger) do
173
+ navigator.screens(options: options)
174
+ end
161
175
 
162
176
  logger.verify
163
177
  Logger.set_testing
@@ -76,7 +76,8 @@ module RokuBuilder
76
76
  loader = Minitest::Mock.new
77
77
  inspector = Minitest::Mock.new
78
78
  io = Minitest::Mock.new
79
- config, options = build_config_options_objects(PackagerTest, {package: true, stage: "production", inspect_package: true}, false)
79
+ logger = Minitest::Mock.new
80
+ config, options = build_config_options_objects(PackagerTest, {package: true, stage: "production", inspect_package: true, verbose: true}, false)
80
81
 
81
82
  @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
82
83
  to_return(status: 200, body: "", headers: {}).times(2))
@@ -91,6 +92,13 @@ module RokuBuilder
91
92
  io.expect(:write, nil, ["package_body"])
92
93
  inspector.expect(:inspect, nil, [Hash])
93
94
 
95
+ logger.expect(:debug, nil, [String])
96
+ io.expect(:each_line, nil)
97
+ logger.expect(:info, nil) do |message|
98
+ assert_match(/\/tmp\//, message)
99
+ end
100
+
101
+ Logger.class_variable_set(:@@instance, logger)
94
102
  packager = Packager.new(config: config)
95
103
  dev_id = Proc.new {"#{Random.rand(999999999999)}"}
96
104
  Loader.stub(:new, loader) do
@@ -107,6 +115,7 @@ module RokuBuilder
107
115
  io.verify
108
116
  loader.verify
109
117
  inspector.verify
118
+ logger.verify
110
119
  end
111
120
  def test_packager_dev_id
112
121
  body = "v class=\"roku-font-5\"><label>Your Dev ID: &nbsp;</label> dev_id<hr></div>"
@@ -179,6 +188,19 @@ module RokuBuilder
179
188
  end
180
189
  end
181
190
 
191
+ def test_packager_no_key
192
+ config = good_config(PackagerTest)
193
+ config[:projects][:project1][:stages][:production].delete(:key)
194
+ config, options = build_config_options_objects(PackagerTest, {key: true, stage: "production"}, false, config)
195
+ packager = Packager.new(config: config)
196
+ dev_id = Proc.new {"#{Random.rand(999999999999)}"}
197
+ assert_raises ExecutionError do
198
+ packager.stub(:dev_id, dev_id) do
199
+ packager.key(options: options)
200
+ end
201
+ end
202
+ end
203
+
182
204
  def test_packager_genkey
183
205
  loader = Minitest::Mock.new
184
206
  loader.expect(:sideload, nil, [Hash])
@@ -27,10 +27,14 @@ def register_plugins(plugin_class)
27
27
  end
28
28
  end
29
29
  end
30
- def build_config_options_objects(klass, options = {validate: true}, empty_plugins = true)
30
+ def build_config_options_objects(klass, options = {validate: true}, empty_plugins = true, config_hash = nil)
31
31
  options = build_options(options, empty_plugins)
32
32
  config = RokuBuilder::Config.new(options: options)
33
- config.instance_variable_set(:@config, good_config(klass))
33
+ if config_hash
34
+ config.instance_variable_set(:@config, config_hash)
35
+ else
36
+ config.instance_variable_set(:@config, good_config(klass))
37
+ end
34
38
  config.parse
35
39
  [config, options]
36
40
  end
@@ -37,6 +37,7 @@ module RokuBuilder
37
37
  @config.instance_variable_set(:@parsed, {root_dir: File.join(@root_dir, "test.zip")})
38
38
  manifest = Manifest.new(config: @config)
39
39
  assert_equal "010101.1", manifest.build_version
40
+ @config.instance_variable_set(:@parsed, {root_dir: @root_dir})
40
41
  end
41
42
  def test_manifest_update_attributes
42
43
  manifest = Manifest.new(config: @config)
@@ -70,9 +71,8 @@ module RokuBuilder
70
71
  assert !!manifest.major_version
71
72
  assert !!manifest.minor_version
72
73
  assert !!manifest.build_version
73
- assert !!manifest.mm_icon_focus_fhd
74
74
  assert !!manifest.mm_icon_focus_hd
75
- assert !!manifest.mm_icon_focus_sd
75
+ assert !!manifest.splash_screen_fhd
76
76
  end
77
77
  def test_manifest_increment_build_version
78
78
  manifest = Manifest.new(config: @config)
@@ -6,7 +6,7 @@ module RokuBuilder
6
6
  class RokuBuilderTest < Minitest::Test
7
7
  def setup
8
8
  Logger.set_testing
9
- RokuBuilder.class_variable_set(:@@plugins, [])
9
+ RokuBuilder.setup_plugins
10
10
  @ping = Minitest::Mock.new
11
11
  @options = build_options({validate: true, device_given: false, working: true})
12
12
  @options.define_singleton_method(:device_commands){
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - greeneca
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-14 00:00:00.000000000 Z
11
+ date: 2017-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -95,19 +95,19 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.1'
97
97
  - !ruby/object:Gem::Dependency
98
- name: nokogiri
98
+ name: oga
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.7'
103
+ version: '2.10'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.7'
110
+ version: '2.10'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: win32-security
113
113
  requirement: !ruby/object:Gem::Requirement