roku_builder 3.13.0 → 4.0.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 (226) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG +12 -0
  4. data/Gemfile.lock +22 -7
  5. data/Guardfile +3 -3
  6. data/README.md +22 -398
  7. data/bin/roku +1 -194
  8. data/config.json.example +1 -1
  9. data/intergration/roku_builder/test_core.rb +52 -0
  10. data/intergration/roku_builder/test_files/core_intergration_test/manifest_template +7 -0
  11. data/intergration/roku_builder/test_files/core_intergration_test/test.pkg +0 -0
  12. data/intergration/roku_builder/test_files/inspector_intergration_test/components/rectanglescene.xml +28 -0
  13. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  14. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  15. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_fhd.jpg +0 -0
  16. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_hd.jpg +0 -0
  17. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_sd.jpg +0 -0
  18. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  19. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  20. data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  21. data/intergration/roku_builder/test_files/inspector_intergration_test/manifest +21 -0
  22. data/intergration/roku_builder/test_files/inspector_intergration_test/source/main.brs +23 -0
  23. data/intergration/roku_builder/test_files/inspector_intergration_test/test.pkg +0 -0
  24. data/intergration/roku_builder/test_files/linker_intergration_test/components/rectanglescene.xml +29 -0
  25. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  26. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  27. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_fhd.jpg +0 -0
  28. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_hd.jpg +0 -0
  29. data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_sd.jpg +0 -0
  30. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  31. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  32. data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  33. data/intergration/roku_builder/test_files/linker_intergration_test/manifest +21 -0
  34. data/intergration/roku_builder/test_files/linker_intergration_test/source/main.brs +21 -0
  35. data/intergration/roku_builder/test_files/linker_intergration_test/test.pkg +0 -0
  36. data/intergration/roku_builder/test_files/loader_intergration_test/components/rectanglescene.xml +29 -0
  37. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  38. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  39. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_fhd.jpg +0 -0
  40. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_hd.jpg +0 -0
  41. data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_sd.jpg +0 -0
  42. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  43. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  44. data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  45. data/intergration/roku_builder/test_files/loader_intergration_test/manifest +21 -0
  46. data/intergration/roku_builder/test_files/loader_intergration_test/source/main.brs +21 -0
  47. data/intergration/roku_builder/test_files/loader_intergration_test/test.pkg +0 -0
  48. data/intergration/roku_builder/test_files/monitor_intergration_test/components/rectanglescene.xml +29 -0
  49. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  50. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  51. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_fhd.jpg +0 -0
  52. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_hd.jpg +0 -0
  53. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_sd.jpg +0 -0
  54. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  55. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  56. data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  57. data/intergration/roku_builder/test_files/monitor_intergration_test/manifest +21 -0
  58. data/intergration/roku_builder/test_files/monitor_intergration_test/source/main.brs +21 -0
  59. data/intergration/roku_builder/test_files/monitor_intergration_test/test.pkg +0 -0
  60. data/intergration/roku_builder/test_files/navigator_intergration_test/components/rectanglescene.xml +29 -0
  61. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  62. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  63. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_fhd.jpg +0 -0
  64. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_hd.jpg +0 -0
  65. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_sd.jpg +0 -0
  66. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  67. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  68. data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  69. data/intergration/roku_builder/test_files/navigator_intergration_test/manifest +21 -0
  70. data/intergration/roku_builder/test_files/navigator_intergration_test/source/main.brs +21 -0
  71. data/intergration/roku_builder/test_files/navigator_intergration_test/test.pkg +0 -0
  72. data/intergration/roku_builder/test_files/packager_intergration_test/components/rectanglescene.xml +29 -0
  73. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  74. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  75. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_fhd.jpg +0 -0
  76. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_hd.jpg +0 -0
  77. data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_sd.jpg +0 -0
  78. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  79. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  80. data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  81. data/intergration/roku_builder/test_files/packager_intergration_test/manifest +21 -0
  82. data/intergration/roku_builder/test_files/packager_intergration_test/source/main.brs +21 -0
  83. data/intergration/roku_builder/test_files/packager_intergration_test/test.pkg +0 -0
  84. data/intergration/roku_builder/test_files/profiler_intergration_test/components/rectanglescene.xml +29 -0
  85. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  86. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  87. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_fhd.jpg +0 -0
  88. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_hd.jpg +0 -0
  89. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_sd.jpg +0 -0
  90. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  91. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  92. data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  93. data/intergration/roku_builder/test_files/profiler_intergration_test/manifest +21 -0
  94. data/intergration/roku_builder/test_files/profiler_intergration_test/source/main.brs +21 -0
  95. data/intergration/roku_builder/test_files/profiler_intergration_test/test.pkg +0 -0
  96. data/intergration/roku_builder/test_files/scripter_intergration_test/components/rectanglescene.xml +29 -0
  97. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  98. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  99. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_fhd.jpg +0 -0
  100. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_hd.jpg +0 -0
  101. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_sd.jpg +0 -0
  102. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  103. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  104. data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  105. data/intergration/roku_builder/test_files/scripter_intergration_test/manifest +21 -0
  106. data/intergration/roku_builder/test_files/scripter_intergration_test/source/main.brs +21 -0
  107. data/intergration/roku_builder/test_files/scripter_intergration_test/test.pkg +0 -0
  108. data/intergration/roku_builder/test_files/tester_intergration_test/components/rectanglescene.xml +29 -0
  109. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
  110. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
  111. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_fhd.jpg +0 -0
  112. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_hd.jpg +0 -0
  113. data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_sd.jpg +0 -0
  114. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_bg_hd.jpg +0 -0
  115. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
  116. data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_splash_hd.jpg +0 -0
  117. data/intergration/roku_builder/test_files/tester_intergration_test/manifest +21 -0
  118. data/intergration/roku_builder/test_files/tester_intergration_test/source/main.brs +21 -0
  119. data/intergration/roku_builder/test_files/tester_intergration_test/test.pkg +0 -0
  120. data/intergration/roku_builder/test_helper.rb +138 -0
  121. data/intergration/roku_builder/test_inspector.rb +35 -0
  122. data/intergration/roku_builder/test_linker.rb +32 -0
  123. data/intergration/roku_builder/test_loader.rb +38 -0
  124. data/intergration/roku_builder/test_monitor.rb +21 -0
  125. data/intergration/roku_builder/test_navigator.rb +34 -0
  126. data/intergration/roku_builder/test_packager.rb +41 -0
  127. data/intergration/roku_builder/test_profiler.rb +48 -0
  128. data/intergration/roku_builder/test_scripter.rb +38 -0
  129. data/intergration/roku_builder/test_tester.rb +21 -0
  130. data/lib/roku_builder.rb +143 -154
  131. data/lib/roku_builder/config.rb +17 -40
  132. data/lib/roku_builder/config_parser.rb +49 -200
  133. data/lib/roku_builder/config_validator.rb +1 -1
  134. data/lib/roku_builder/errors.rb +12 -0
  135. data/lib/roku_builder/git.rb +28 -0
  136. data/lib/roku_builder/hash.rb +8 -0
  137. data/lib/roku_builder/manifest.rb +121 -0
  138. data/lib/roku_builder/options.rb +68 -29
  139. data/lib/roku_builder/plugin.rb +30 -0
  140. data/lib/roku_builder/plugins/core.rb +117 -0
  141. data/lib/roku_builder/plugins/inspector.rb +104 -0
  142. data/lib/roku_builder/{linker.rb → plugins/linker.rb} +38 -12
  143. data/lib/roku_builder/plugins/loader.rb +152 -0
  144. data/lib/roku_builder/{monitor.rb → plugins/monitor.rb} +20 -9
  145. data/lib/roku_builder/{navigator.rb → plugins/navigator.rb} +136 -88
  146. data/lib/roku_builder/plugins/packager.rb +194 -0
  147. data/lib/roku_builder/plugins/profiler.rb +135 -0
  148. data/lib/roku_builder/plugins/scripter.rb +53 -0
  149. data/lib/roku_builder/{tester.rb → plugins/tester.rb} +28 -19
  150. data/lib/roku_builder/stager.rb +48 -12
  151. data/lib/roku_builder/string.rb +20 -0
  152. data/lib/roku_builder/util.rb +10 -34
  153. data/lib/roku_builder/version.rb +1 -1
  154. data/rakefile +5 -1
  155. data/roku_builder.gemspec +2 -0
  156. data/test/roku_builder/plugins/test_core.rb +112 -0
  157. data/test/roku_builder/plugins/test_inspector.rb +165 -0
  158. data/test/roku_builder/plugins/test_linker.rb +123 -0
  159. data/test/roku_builder/plugins/test_loader.rb +115 -0
  160. data/test/roku_builder/plugins/test_monitor.rb +141 -0
  161. data/test/roku_builder/plugins/test_navigator.rb +274 -0
  162. data/test/roku_builder/plugins/test_packager.rb +202 -0
  163. data/test/roku_builder/plugins/test_profiler.rb +127 -0
  164. data/test/roku_builder/plugins/test_scripter.rb +110 -0
  165. data/test/roku_builder/plugins/test_tester.rb +109 -0
  166. data/test/roku_builder/test_config.rb +51 -35
  167. data/test/roku_builder/test_config_parser.rb +76 -154
  168. data/test/roku_builder/test_config_validator.rb +18 -1
  169. data/test/roku_builder/test_files/{loader_test/manifest → config_parser_test/test.pkg} +0 -0
  170. data/test/roku_builder/test_files/config_test/config.json +3 -0
  171. data/test/roku_builder/test_files/controller_commands_test/manifest_template +7 -0
  172. data/test/roku_builder/test_files/core_test/manifest_template +7 -0
  173. data/test/roku_builder/test_files/core_test/test.pkg +0 -0
  174. data/test/roku_builder/test_files/inspector_test/manifest +6 -0
  175. data/test/roku_builder/test_files/inspector_test/test.pkg +0 -0
  176. data/test/roku_builder/test_files/linker_test/manifest +6 -0
  177. data/test/roku_builder/test_files/linker_test/test.pkg +0 -0
  178. data/test/roku_builder/test_files/loader_test/manifest_template +6 -0
  179. data/test/roku_builder/test_files/loader_test/test.pkg +0 -0
  180. data/test/roku_builder/test_files/loader_test/test.zip +0 -0
  181. data/test/roku_builder/test_files/manifest_test/manifest_comments +6 -0
  182. data/test/roku_builder/test_files/manifest_test/manifest_template +7 -0
  183. data/test/roku_builder/test_files/manifest_test/test.zip +0 -0
  184. data/test/roku_builder/test_files/packager_test/manifest +6 -0
  185. data/test/roku_builder/test_files/packager_test/scripter_test/manifest +6 -0
  186. data/test/roku_builder/test_files/packager_test/test.pkg +0 -0
  187. data/test/roku_builder/test_files/roku_builder_test/config.json +32 -0
  188. data/test/roku_builder/test_files/scripter_test/manifest +6 -0
  189. data/test/roku_builder/test_files/scripter_test/test.pkg +0 -0
  190. data/test/roku_builder/test_files/stager_test/test.pkg +0 -0
  191. data/test/roku_builder/test_files/tester_test/manifest +6 -0
  192. data/test/roku_builder/test_files/tester_test/test.pkg +0 -0
  193. data/test/roku_builder/test_helper.rb +44 -11
  194. data/test/roku_builder/test_logger.rb +1 -0
  195. data/test/roku_builder/test_manifest.rb +99 -0
  196. data/test/roku_builder/test_options.rb +106 -77
  197. data/test/roku_builder/test_options_plugins.rb +111 -0
  198. data/test/roku_builder/test_plugin.rb +48 -0
  199. data/test/roku_builder/test_roku_builder.rb +239 -0
  200. data/test/roku_builder/test_stager.rb +49 -101
  201. data/test/roku_builder/test_util.rb +19 -4
  202. metadata +241 -47
  203. data/lib/roku_builder/controller.rb +0 -98
  204. data/lib/roku_builder/controller_commands.rb +0 -224
  205. data/lib/roku_builder/error_handler.rb +0 -142
  206. data/lib/roku_builder/inspector.rb +0 -82
  207. data/lib/roku_builder/keyer.rb +0 -106
  208. data/lib/roku_builder/loader.rb +0 -131
  209. data/lib/roku_builder/manifest_manager.rb +0 -126
  210. data/lib/roku_builder/packager.rb +0 -43
  211. data/lib/roku_builder/profiler.rb +0 -96
  212. data/lib/roku_builder/scripter.rb +0 -39
  213. data/test/roku_builder/test_controller.rb +0 -70
  214. data/test/roku_builder/test_controller_commands.rb +0 -465
  215. data/test/roku_builder/test_error_handler.rb +0 -90
  216. data/test/roku_builder/test_inspector.rb +0 -298
  217. data/test/roku_builder/test_keyer.rb +0 -176
  218. data/test/roku_builder/test_linker.rb +0 -110
  219. data/test/roku_builder/test_loader.rb +0 -337
  220. data/test/roku_builder/test_manifest_manager.rb +0 -103
  221. data/test/roku_builder/test_monitor.rb +0 -137
  222. data/test/roku_builder/test_navigator.rb +0 -280
  223. data/test/roku_builder/test_packager.rb +0 -127
  224. data/test/roku_builder/test_profiler.rb +0 -35
  225. data/test/roku_builder/test_scripter.rb +0 -102
  226. data/test/roku_builder/test_tester.rb +0 -130
@@ -4,6 +4,9 @@ require_relative "test_helper.rb"
4
4
 
5
5
  module RokuBuilder
6
6
  class ConfigValidatorTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ end
7
10
 
8
11
  def test_config_manager_validate_devices
9
12
  config = good_config
@@ -191,9 +194,23 @@ module RokuBuilder
191
194
 
192
195
  def test_config_manager_validate_input_mappings
193
196
  config = good_config
194
- config[:input_mapping]["a"] = ["home"]
197
+ config[:input_mappings]["a"] = ["home"]
195
198
  validator = ConfigValidator.new(config: config)
196
199
  assert_equal [21], validator.instance_variable_get(:@codes)
197
200
  end
201
+
202
+ def test_config_manager_validate_project_stage_method_bad
203
+ config = good_config
204
+ config[:projects][:project2][:stage_method] = :bad
205
+ validator = ConfigValidator.new(config: config)
206
+ assert_equal [18], validator.instance_variable_get(:@codes)
207
+ end
208
+
209
+ def test_config_manager_validate_project_stage_method_missing
210
+ config = good_config
211
+ config[:projects][:project2][:stage_method] = nil
212
+ validator = ConfigValidator.new(config: config)
213
+ assert_equal [23], validator.instance_variable_get(:@codes)
214
+ end
198
215
  end
199
216
  end
@@ -25,5 +25,8 @@
25
25
  }
26
26
  }
27
27
  }
28
+ },
29
+ "input_mappings": {
30
+ "a": ["home", "Home"]
28
31
  }
29
32
  }
@@ -0,0 +1,7 @@
1
+ #comment
2
+ title=Test
3
+ major_version=1
4
+ minor_version=0
5
+ build_version=010101.1
6
+ mm_icon_focus_hd=pkg:/images/focus.png
7
+ mm_icon_focus_sd=pkg:/images/focus.png
@@ -0,0 +1,7 @@
1
+ #comment
2
+ title=Test
3
+ major_version=1
4
+ minor_version=0
5
+ build_version=010101.1
6
+ mm_icon_focus_hd=pkg:/images/focus.png
7
+ mm_icon_focus_sd=pkg:/images/focus.png
File without changes
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
File without changes
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
File without changes
@@ -0,0 +1,6 @@
1
+ #comment
2
+ title=title
3
+
4
+ other=
5
+ other2=val#comment
6
+ other3=#comment
@@ -0,0 +1,7 @@
1
+ #comment
2
+ title=Test
3
+ major_version=1
4
+ minor_version=0
5
+ build_version=010101.1
6
+ mm_icon_focus_hd=pkg:/images/focus.png
7
+ mm_icon_focus_sd=pkg:/images/focus.png
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
@@ -0,0 +1,32 @@
1
+ {
2
+ "devices": {
3
+ "default": "roku",
4
+ "roku": {
5
+ "ip": "111.222.333.444",
6
+ "user": "user",
7
+ "password": "pass"
8
+ }
9
+ },
10
+ "projects": {
11
+ "default": "p1",
12
+ "p1": {
13
+ "directory": "/tmp",
14
+ "folders": ["resources","source"],
15
+ "files": ["manifest"],
16
+ "app_name": "app",
17
+ "stage_method": "git",
18
+ "stages":{
19
+ "production": {
20
+ "branch": "master",
21
+ "key": {
22
+ "keyed_pkg": "/tmp/package.pkg",
23
+ "password": "password"
24
+ }
25
+ }
26
+ }
27
+ }
28
+ },
29
+ "input_mappings": {
30
+ "a": ["home", "Home"]
31
+ }
32
+ }
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
File without changes
@@ -0,0 +1,6 @@
1
+ title=Test
2
+ major_version=1
3
+ minor_version=0
4
+ build_version=010101.1
5
+ mm_icon_focus_hd=pkg:/images/focus.png
6
+ mm_icon_focus_sd=pkg:/images/focus.png
File without changes
@@ -12,19 +12,52 @@ SimpleCov.start
12
12
  require "byebug"
13
13
  require "roku_builder"
14
14
  require "minitest/autorun"
15
+ require "minitest/utils"
16
+ require "webmock/minitest"
17
+
15
18
 
16
19
  RokuBuilder::Logger.set_testing
20
+ WebMock.disable_net_connect!
21
+ def register_plugins(plugin_class)
22
+ plugins = [plugin_class]
23
+ plugins.each do |plugin|
24
+ plugins.concat(plugin.dependencies)
25
+ unless RokuBuilder.plugins.include?(plugin)
26
+ RokuBuilder.register_plugin(plugin)
27
+ end
28
+ end
29
+ end
30
+ def build_config_options_objects(klass, options = {validate: true}, empty_plugins = true)
31
+ options = build_options(options, empty_plugins)
32
+ config = RokuBuilder::Config.new(options: options)
33
+ config.instance_variable_set(:@config, good_config(klass))
34
+ config.parse
35
+ [config, options]
36
+ end
37
+
38
+ def build_config_object(klass, options= {validate: true}, empty_plugins = true)
39
+ build_config_options_objects(klass, options, empty_plugins).first
40
+ end
17
41
 
18
42
  def test_files_path(klass)
19
43
  klass = klass.to_s.split("::")[1].underscore
20
44
  File.join(File.dirname(__FILE__), "test_files", klass)
21
45
  end
22
46
 
23
- def build_options(options)
24
- RokuBuilder::Options.new(options: options)
47
+ def build_options(options = {validate: true}, empty_plugins = true)
48
+ if empty_plugins
49
+ RokuBuilder.class_variable_set(:@@plugins, [])
50
+ require "roku_builder/plugins/core"
51
+ RokuBuilder.register_plugin(RokuBuilder::Core)
52
+ end
53
+ options = RokuBuilder::Options.new(options: options)
54
+ options.validate
55
+ options
25
56
  end
26
57
 
27
- def good_config
58
+ def good_config(klass=nil)
59
+ root_dir = "/tmp"
60
+ root_dir = test_files_path(klass) if klass
28
61
  {
29
62
  devices: {
30
63
  default: :roku,
@@ -37,7 +70,7 @@ def good_config
37
70
  projects: {
38
71
  default: :project1,
39
72
  project1: {
40
- directory: "/tmp",
73
+ directory: root_dir,
41
74
  folders: ["resources","source"],
42
75
  files: ["manifest"],
43
76
  app_name: "<app name>",
@@ -46,21 +79,21 @@ def good_config
46
79
  production: {
47
80
  branch: "production",
48
81
  key: {
49
- keyed_pkg: "/tmp",
50
- password: "<password for pkg>"
82
+ keyed_pkg: File.join(root_dir, "test.pkg"),
83
+ password: "password"
51
84
  }
52
85
  }
53
86
  }
54
87
  },
55
88
  project2: {
56
- directory: "/tmp",
89
+ directory: root_dir,
57
90
  folders: ["resources","source"],
58
91
  files: ["manifest"],
59
92
  app_name: "<app name>",
60
- stage_method: :git,
93
+ stage_method: :script,
61
94
  stages:{
62
95
  production: {
63
- branch: "production",
96
+ script: {stage: "stage_script", unstage: "unstage_script"},
64
97
  key: "a"
65
98
  }
66
99
  }
@@ -68,11 +101,11 @@ def good_config
68
101
  },
69
102
  keys: {
70
103
  a: {
71
- keyed_pkg: "/tmp",
104
+ keyed_pkg: File.join(root_dir, "test.pkg"),
72
105
  password: "password"
73
106
  }
74
107
  },
75
- input_mapping: {
108
+ input_mappings: {
76
109
  "a": ["home", "Home"]
77
110
  }
78
111
  }
@@ -6,6 +6,7 @@ module RokuBuilder
6
6
  class LoggerTest < Minitest::Test
7
7
 
8
8
  def test_logger
9
+ Logger.class_variable_set(:@@instance, nil)
9
10
  logger_a = Logger.instance
10
11
  logger_b = Logger.instance
11
12
  assert_equal logger_a, logger_b
@@ -0,0 +1,99 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+ module RokuBuilder
5
+ class ManifestTest < Minitest::Test
6
+ def setup
7
+ options = build_options
8
+ @root_dir = test_files_path(ManifestTest)
9
+ @config = Config.new(options: options)
10
+ @config.instance_variable_set(:@parsed, {root_dir: @root_dir})
11
+ FileUtils.cp(File.join(@root_dir, "manifest_template"), File.join(@root_dir, "manifest"))
12
+ Logger.set_testing
13
+ end
14
+ def teardown
15
+ path = File.join(@config.parsed[:root_dir], "manifest")
16
+ FileUtils.rm(path) if File.exist?(path)
17
+ @config = nil
18
+ end
19
+ def test_manifest_read
20
+ Manifest.new(config: @config)
21
+ end
22
+ def test_manifest_read_missing
23
+ FileUtils.rm(File.join(@config.parsed[:root_dir], "manifest"))
24
+ assert_raises ManifestError do
25
+ Manifest.new(config: @config)
26
+ end
27
+ end
28
+ def test_manifest_tite
29
+ manifest = Manifest.new(config: @config)
30
+ assert_equal "Test", manifest.title
31
+ end
32
+ def test_manifest_build_version
33
+ manifest = Manifest.new(config: @config)
34
+ assert_equal "010101.1", manifest.build_version
35
+ end
36
+ def test_manifest_build_version_zip
37
+ @config.instance_variable_set(:@parsed, {root_dir: File.join(@root_dir, "test.zip")})
38
+ manifest = Manifest.new(config: @config)
39
+ assert_equal "010101.1", manifest.build_version
40
+ end
41
+ def test_manifest_update_attributes
42
+ manifest = Manifest.new(config: @config)
43
+ attributes = {
44
+ title: "New Title"
45
+ }
46
+ manifest.update(attributes: attributes)
47
+ manifest = Manifest.new(config: @config)
48
+ assert_equal attributes[:title], manifest.title
49
+ end
50
+ def test_manifest_update_empty
51
+ manifest = Manifest.new(config: @config)
52
+ attributes = {}
53
+ manifest.update(attributes: attributes)
54
+ assert FileUtils.compare_file(File.join(@root_dir, "manifest"), File.join(@root_dir, "manifest_template"))
55
+ end
56
+ def test_manifest_update_with_comments
57
+ FileUtils.cp(File.join(@root_dir, "manifest_comments"), File.join(@root_dir, "manifest"))
58
+ manifest = Manifest.new(config: @config)
59
+ attributes = {}
60
+ manifest.update(attributes: attributes)
61
+ assert FileUtils.compare_file(File.join(@root_dir, "manifest"), File.join(@root_dir, "manifest_comments"))
62
+ end
63
+ def test_manifest_generate
64
+ FileUtils.rm(File.join(@root_dir, "manifest"))
65
+ attributes = {
66
+ title: "New Title"
67
+ }
68
+ manifest = Manifest.generate(config: @config, attributes: attributes)
69
+ assert_equal attributes[:title], manifest.title
70
+ assert !!manifest.major_version
71
+ assert !!manifest.minor_version
72
+ assert !!manifest.build_version
73
+ assert !!manifest.mm_icon_focus_fhd
74
+ assert !!manifest.mm_icon_focus_hd
75
+ assert !!manifest.mm_icon_focus_sd
76
+ end
77
+ def test_manifest_increment_build_version
78
+ manifest = Manifest.new(config: @config)
79
+ assert_equal "010101.1", manifest.build_version
80
+ Time.stub(:now, Time.new(2001, 02, 01)) do
81
+ manifest.increment_build_version
82
+ end
83
+ manifest = Manifest.new(config: @config)
84
+ assert_equal "020101.2", manifest.build_version
85
+ end
86
+ def test_manifest_increment_single_part_build_version
87
+ manifest = Manifest.new(config: @config)
88
+ attributes = {
89
+ build_version: "1"
90
+ }
91
+ manifest.update(attributes: attributes)
92
+ assert_equal "1", manifest.build_version
93
+ manifest.increment_build_version
94
+ manifest = Manifest.new(config: @config)
95
+ assert_equal "2", manifest.build_version
96
+ end
97
+ end
98
+ end
99
+
@@ -4,10 +4,94 @@ require_relative "test_helper.rb"
4
4
 
5
5
  module RokuBuilder
6
6
  class OptionsTest < Minitest::Test
7
+ def setup
8
+ RokuBuilder.class_variable_set(:@@plugins, [])
9
+ Logger.set_testing
10
+ end
11
+ def teardown
12
+ RokuBuilder.class_variable_set(:@@plugins, [])
13
+ end
14
+ def test_options_initialize_no_params
15
+ count = 0
16
+ parse_stub = lambda{ count+= 1; {validate: true} }
17
+ options = Options.allocate
18
+ options.stub(:parse, parse_stub) do
19
+ options.send(:initialize)
20
+ end
21
+ assert_equal 1, count
22
+ end
23
+ def test_options_initialize_params
24
+ count = 0
25
+ parse_stub = lambda{ count+= 1; {validate: true} }
26
+ options = Options.allocate
27
+ options.stub(:parse, parse_stub) do
28
+ options.send(:initialize, {options: {validate: true}})
29
+ end
30
+ assert_equal 0, count
31
+ end
32
+ def test_options_parse
33
+ parser = Minitest::Mock.new()
34
+ options_hash = {}
35
+ options = Options.allocate
36
+ parser.expect(:banner=, nil, [String])
37
+ parser.expect(:parse!, nil)
38
+ OptionParser.stub(:new, parser) do
39
+ options.stub(:validate_parser, nil) do
40
+ options_hash = options.send(:parse)
41
+ end
42
+ end
43
+ parser.verify
44
+ end
45
+ def test_options_parse_validate_options_good
46
+ Array.class_eval { alias_method :each_option, :each }
47
+ parser = Minitest::Mock.new()
48
+ options = Options.allocate
49
+ parser.expect(:instance_variable_get, build_stack, [:@stack])
50
+ parser.expect(:banner=, nil, [String])
51
+ parser.expect(:parse!, nil)
52
+ OptionParser.stub(:new, parser) do
53
+ options.send(:parse)
54
+ end
55
+ parser.verify
56
+ Array.class_eval { remove_method :each_option }
57
+ end
58
+ def test_options_parse_validate_options_bad
59
+ Array.class_eval { alias_method :each_option, :each }
60
+ parser = Minitest::Mock.new()
61
+ options = Options.allocate
62
+ parser.expect(:banner=, nil, [String])
63
+ parser.expect(:instance_variable_get, build_stack(false), [:@stack])
64
+
65
+ OptionParser.stub(:new, parser) do
66
+ assert_raises(ImplementationError) do
67
+ options.send(:parse)
68
+ end
69
+ end
70
+ parser.verify
71
+ Array.class_eval { remove_method :each_option }
72
+ end
73
+ def build_stack(good = true)
74
+ optionsA = Minitest::Mock.new()
75
+ optionsB = Minitest::Mock.new()
76
+ list = [optionsA, optionsB]
77
+ stack = [list]
78
+ 3.times do
79
+ optionsA.expect(:short, [ "a" ])
80
+ optionsA.expect(:long, [ "aOption" ])
81
+ if good
82
+ optionsB.expect(:short, [ "b" ])
83
+ optionsB.expect(:long, ["bOption" ])
84
+ else
85
+ optionsB.expect(:short, [ "a" ])
86
+ optionsB.expect(:long, [ "aOption" ])
87
+ end
88
+ end
89
+ stack
90
+ end
7
91
  def test_options_validate_extra_commands
8
92
  options = {
9
- sideload: true,
10
- package: true
93
+ configure: true,
94
+ validate: true
11
95
  }
12
96
  assert_raises InvalidOptions do
13
97
  build_options(options)
@@ -21,7 +105,7 @@ module RokuBuilder
21
105
  end
22
106
  def test_options_validate_extra_sources_sideload
23
107
  options = {
24
- sideload: true,
108
+ validate: true,
25
109
  working: true,
26
110
  current: true
27
111
  }
@@ -29,125 +113,70 @@ module RokuBuilder
29
113
  build_options(options)
30
114
  end
31
115
  end
32
- def test_options_validate_working
33
- options = {
34
- sideload: true,
35
- working: true
36
- }
37
- build_options(options)
38
- end
39
- def test_options_validate_no_source
40
- options = {
41
- package: true
42
- }
43
- assert_raises InvalidOptions do
44
- build_options(options)
45
- end
46
- end
47
- def test_options_validate_bad_current
48
- options = {
49
- package: true,
50
- current: true
51
- }
52
- assert_raises InvalidOptions do
53
- build_options(options)
54
- end
55
- end
56
- def test_options_validate_bad_in
57
- options = {
58
- package: true,
59
- in: true
60
- }
61
- assert_raises InvalidOptions do
62
- build_options(options)
63
- end
64
- end
65
- def test_options_validate_depricated
66
- options = {
67
- deeplink: "a:b c:d",
68
- deeplink_depricated: true
69
- }
70
- build_options(options)
71
- end
72
- def test_options_validate_current
73
- options = {
74
- sideload: true,
75
- current: true
76
- }
77
- build_options(options)
78
- end
79
116
  def test_options_validate_extra_sources_package
80
117
  options = {
81
- package: true,
118
+ validate: true,
82
119
  in: "",
83
- set_stage: true
120
+ stage: "production"
84
121
  }
85
122
  assert_raises InvalidOptions do
86
123
  build_options(options)
87
124
  end
88
125
  end
89
- def test_options_exclude_command_package
126
+ def test_options_exclude_command
90
127
  options = build_options({
91
- package:true,
92
- set_stage: true
128
+ validate:true,
93
129
  })
130
+ options.define_singleton_method(:exclude_commands) {[:validate]}
94
131
  assert options.exclude_command?
95
132
  end
96
- def test_options_exclude_command_build
133
+ def test_options_exclude_command_false
97
134
  options = build_options({
98
- build:true,
99
- set_stage: true
100
- })
101
- assert options.exclude_command?
102
- end
103
- def test_options_exclude_command_sideload
104
- options = build_options({
105
- sideload:true,
106
- set_stage: true
135
+ validate:true,
107
136
  })
108
137
  refute options.exclude_command?
109
138
  end
110
- def test_options_source_command_sideload
139
+ def test_options_source_command
111
140
  options = build_options({
112
- sideload:true,
113
- working: true
141
+ validate:true,
114
142
  })
143
+ options.define_singleton_method(:source_commands) {[:validate]}
115
144
  assert options.source_command?
116
145
  end
117
- def test_options_source_command_deeplink
146
+ def test_options_source_commandfalse
118
147
  options = build_options({
119
- deeplink: true,
148
+ validate: true,
120
149
  })
121
150
  refute options.source_command?
122
151
  end
123
152
  def test_options_command
124
153
  options = build_options({
125
- deeplink: true,
154
+ validate: true,
126
155
  })
127
- assert_equal :deeplink, options.command
156
+ assert_equal :validate, options.command
128
157
  end
129
158
  def test_options_device_command_true
130
159
  options = build_options({
131
- deeplink: true,
160
+ validate: true,
132
161
  })
162
+ options.define_singleton_method(:device_commands) {[:validate]}
133
163
  assert options.device_command?
134
164
  end
135
165
  def test_options_device_command_false
136
166
  options = build_options({
137
- build: true,
138
- working: true
167
+ validate: true,
139
168
  })
140
169
  refute options.device_command?
141
170
  end
142
171
  def test_options_has_source_false
143
172
  options = build_options({
144
- deeplink: true,
173
+ validate: true,
145
174
  })
146
175
  refute options.has_source?
147
176
  end
148
177
  def test_options_has_source_true
149
178
  options = build_options({
150
- deeplink: true,
179
+ validate: true,
151
180
  working: true
152
181
  })
153
182
  assert options.has_source?