roku_builder 3.13.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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?