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
@@ -0,0 +1,111 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class OptionsPluginTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ end
10
+ def test_options_plugins_parse
11
+ RokuBuilder.class_variable_set(:@@plugins, nil)
12
+ parser = Minitest::Mock.new()
13
+ options_hash = {}
14
+ RokuBuilder.register_plugin( OptionsTestPlugin)
15
+ options = Options.allocate
16
+ parser.expect(:parse!, nil)
17
+ parser.expect(:banner=, nil, [String])
18
+ parser.expect(:separator, nil, [String])
19
+ parser.expect(:separator, nil, [String])
20
+ OptionParser.stub(:new, parser) do
21
+ options.stub(:validate_parser, nil) do
22
+ options_hash = options.send(:parse)
23
+ end
24
+ end
25
+ assert options_hash[:run]
26
+ parser.verify
27
+ RokuBuilder.class_variable_set(:@@plugins, nil)
28
+ end
29
+ def test_options_plugins_commands
30
+ RokuBuilder.class_variable_set(:@@plugins, nil)
31
+ RokuBuilder.register_plugin(OptionsTestPlugin)
32
+ options = Options.allocate
33
+ options.send(:setup_plugin_commands)
34
+ assert_includes options.send(:commands), :test
35
+ RokuBuilder.class_variable_set(:@@plugins, nil)
36
+ end
37
+ def test_options_plugins_commands_source
38
+ RokuBuilder.class_variable_set(:@@plugins, nil)
39
+ RokuBuilder.register_plugin(OptionsTestPlugin)
40
+ options = Options.allocate
41
+ options.send(:setup_plugin_commands)
42
+ assert_includes options.send(:source_commands), :test
43
+ RokuBuilder.class_variable_set(:@@plugins, nil)
44
+ end
45
+ def test_options_plugins_commands_device
46
+ RokuBuilder.class_variable_set(:@@plugins, nil)
47
+ RokuBuilder.register_plugin(OptionsTestPlugin)
48
+ options = Options.allocate
49
+ options.send(:setup_plugin_commands)
50
+ assert_includes options.send(:device_commands), :test
51
+ RokuBuilder.class_variable_set(:@@plugins, nil)
52
+ end
53
+ def test_options_plugins_commands_exclude
54
+ RokuBuilder.class_variable_set(:@@plugins, nil)
55
+ RokuBuilder.register_plugin(OptionsTestPlugin)
56
+ options = Options.allocate
57
+ options.send(:setup_plugin_commands)
58
+ assert_includes options.send(:exclude_commands), :test
59
+ RokuBuilder.class_variable_set(:@@plugins, nil)
60
+ end
61
+ def test_options_plugins_commands_basic
62
+ RokuBuilder.class_variable_set(:@@plugins, nil)
63
+ RokuBuilder.register_plugin(OptionsTestPlugin2)
64
+ options = Options.allocate
65
+ options.send(:setup_plugin_commands)
66
+ assert_includes options.send(:commands), :test
67
+ RokuBuilder.class_variable_set(:@@plugins, nil)
68
+ end
69
+ def test_options_plugins_commands_source_2
70
+ RokuBuilder.class_variable_set(:@@plugins, nil)
71
+ RokuBuilder.register_plugin(OptionsTestPlugin2)
72
+ options = Options.allocate
73
+ options.send(:setup_plugin_commands)
74
+ refute_includes options.send(:source_commands), :test
75
+ RokuBuilder.class_variable_set(:@@plugins, nil)
76
+ end
77
+ def test_options_plugins_commands_device_2
78
+ RokuBuilder.class_variable_set(:@@plugins, nil)
79
+ RokuBuilder.register_plugin(OptionsTestPlugin2)
80
+ options = Options.allocate
81
+ options.send(:setup_plugin_commands)
82
+ refute_includes options.send(:device_commands), :test
83
+ RokuBuilder.class_variable_set(:@@plugins, nil)
84
+ end
85
+ def test_options_plugins_commands_exclude_2
86
+ RokuBuilder.class_variable_set(:@@plugins, nil)
87
+ RokuBuilder.register_plugin(OptionsTestPlugin2)
88
+ options = Options.allocate
89
+ options.send(:setup_plugin_commands)
90
+ refute_includes options.send(:exclude_commands), :test
91
+ RokuBuilder.class_variable_set(:@@plugins, nil)
92
+ end
93
+ end
94
+ class OptionsTestPlugin
95
+ extend Plugin
96
+ def self.parse_options(parser:, options:)
97
+ options[:run] = true
98
+ end
99
+ def self.commands
100
+ {test: {device: true, source: true, exclude: true}}
101
+ end
102
+ end
103
+ class OptionsTestPlugin2
104
+ extend Plugin
105
+ def self.parse_options(parser:, options:)
106
+ end
107
+ def self.commands
108
+ {test: {}}
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,48 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class PluginTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ end
10
+ def test_module_commands_fail
11
+ assert_raises ImplementationError do
12
+ TestClass.commands
13
+ end
14
+ end
15
+ def test_module_commands_success
16
+ TestClass2.commands
17
+ end
18
+ def test_module_parse_options_fail
19
+ assert_raises ImplementationError do
20
+ TestClass.parse_options(option_parser: nil, options: nil)
21
+ end
22
+ end
23
+ def test_module_parse_options_success
24
+ TestClass2.parse_options(option_parser: nil, options: nil)
25
+ end
26
+ def test_module_dependencies
27
+ assert_equal Array, TestClass.dependencies.class
28
+ end
29
+ def test_module_dependencies_dependent
30
+ assert_equal Array, TestClass2.dependencies.class
31
+ assert_equal TestClass, TestClass2.dependencies[0]
32
+ end
33
+ end
34
+ class TestClass
35
+ extend Plugin
36
+ end
37
+ class TestClass2
38
+ extend Plugin
39
+ def self.commands
40
+ end
41
+ def self.parse_options(option_parser:, options:)
42
+ end
43
+ def self.dependencies
44
+ [TestClass]
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,239 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class RokuBuilderTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ RokuBuilder.class_variable_set(:@@plugins, [])
10
+ @ping = Minitest::Mock.new
11
+ @options = build_options({validate: true, device_given: false, working: true})
12
+ @options.define_singleton_method(:device_commands){
13
+ [:validate]
14
+ }
15
+ @raw = {
16
+ devices: {
17
+ a: {ip: "2.2.2.2"},
18
+ b: {ip: "3.3.3.3"}
19
+ }
20
+ }
21
+ @parsed = {
22
+ device_config: {ip: "1.1.1.1"}
23
+ }
24
+ @config = Config.new(options: @options)
25
+ @config.instance_variable_set(:@config, @raw)
26
+ @config.instance_variable_set(:@parsed, @parsed)
27
+ RokuBuilder.class_variable_set(:@@options, @options)
28
+ RokuBuilder.class_variable_set(:@@config, @config)
29
+ end
30
+ def teardown
31
+ @ping.verify
32
+ RokuBuilder.class_variable_set(:@@plugins, [])
33
+ end
34
+
35
+ def test_roku_builder_run
36
+ config = File.join(test_files_path(RokuBuilderTest), "config.json")
37
+ RokuBuilder.run(options: {validate: true, config: config})
38
+ end
39
+ def test_roku_builder_run_stage
40
+ config = File.join(test_files_path(RokuBuilderTest), "config.json")
41
+ commands = Minitest::Mock.new
42
+ commands.expect(:call, {validate: {stage: true}})
43
+ commands.expect(:call, {validate: {stage: true}})
44
+ commands.expect(:call, {validate: {stage: true}})
45
+ commands.expect(:call, {validate: {stage: true}})
46
+ Core.stub(:commands, commands) do
47
+ RokuBuilder.run(options: {validate: true, config: config})
48
+ end
49
+ end
50
+ def test_roku_builder_run_debug
51
+ config = File.join(test_files_path(RokuBuilderTest), "config.json")
52
+ RokuBuilder.run(options: {validate: true, debug: true, config: config})
53
+ end
54
+ def test_roku_builder_run_bad_options
55
+ RokuBuilder.class_variable_set(:@@plugins, [])
56
+ logger = Minitest::Mock.new
57
+ logger.expect(:fatal, nil, ["RokuBuilder::InvalidOptions: Specify at least one command"])
58
+ Logger.class_variable_set(:@@instance, logger)
59
+ RokuBuilder.run(options: {working: true})
60
+ logger.verify
61
+ Logger.set_testing
62
+ end
63
+ def test_roku_builder_run_bad_options_debug
64
+ config = File.join(test_files_path(RokuBuilderTest), "config.json")
65
+ RokuBuilder.class_variable_set(:@@plugins, [])
66
+ RokuBuilder.setup_plugins
67
+ register_plugins(Packager)
68
+ assert_raises DeviceError do
69
+ RokuBuilder.run(options: {package: true, in: "/in/path", debug: true, config: config})
70
+ end
71
+ end
72
+ def test_roku_builder_run_bad_config
73
+ config = File.join(test_files_path(RokuBuilderTest), "missing_config.json")
74
+ logger = Minitest::Mock.new
75
+ logger.expect(:level=, nil, [::Logger::WARN])
76
+ logger.expect(:fatal, nil, ["ArgumentError: Missing Config"])
77
+ Logger.class_variable_set(:@@instance, logger)
78
+ RokuBuilder.run(options: {validate: true, config: config})
79
+ logger.verify
80
+ Logger.set_testing
81
+ end
82
+ def test_roku_builder_check_devices_good
83
+ Net::Ping::External.stub(:new, @ping) do
84
+ @ping.expect(:ping?, true, [@parsed[:device_config][:ip], 1, 0.2, 1])
85
+ RokuBuilder.check_devices
86
+ end
87
+ end
88
+ def test_roku_builder_check_devices_no_devices
89
+ Net::Ping::External.stub(:new, @ping) do
90
+ @ping.expect(:ping?, false, [@parsed[:device_config][:ip], 1, 0.2, 1])
91
+ @ping.expect(:ping?, false, [@raw[:devices][:a][:ip], 1, 0.2, 1])
92
+ @ping.expect(:ping?, false, [@raw[:devices][:b][:ip], 1, 0.2, 1])
93
+ assert_raises DeviceError do
94
+ RokuBuilder.check_devices
95
+ end
96
+ end
97
+ end
98
+ def test_roku_builder_check_devices_changed_device
99
+ Net::Ping::External.stub(:new, @ping) do
100
+ @ping.expect(:ping?, false, [@parsed[:device_config][:ip], 1, 0.2, 1])
101
+ @ping.expect(:ping?, true, [@raw[:devices][:a][:ip], 1, 0.2, 1])
102
+ RokuBuilder.check_devices
103
+ assert_equal @raw[:devices][:a][:ip], @config.parsed[:device_config][:ip]
104
+ end
105
+ end
106
+ def test_roku_builder_check_devices_bad_device
107
+ Net::Ping::External.stub(:new, @ping) do
108
+ @options[:device_given] = true
109
+ @ping.expect(:ping?, false, [@parsed[:device_config][:ip], 1, 0.2, 1])
110
+ assert_raises DeviceError do
111
+ RokuBuilder.check_devices
112
+ end
113
+ end
114
+ end
115
+ def test_roku_builder_check_devices
116
+ Net::Ping::External.stub(:new, @ping) do
117
+ @options = build_options({validate: true, device_given: false, working: true})
118
+ RokuBuilder.class_variable_set(:@@options, @options)
119
+ RokuBuilder.check_devices
120
+ end
121
+ end
122
+
123
+ def test_roku_builder_logger_debug
124
+ tests = [
125
+ {options: {debug: true}, method: :set_debug},
126
+ {options: {verbose: true}, method: :set_info},
127
+ {options: {}, method: :set_warn}
128
+ ]
129
+ tests.each do |test|
130
+ logger = Minitest::Mock.new
131
+ logger.expect(:call, nil)
132
+
133
+ Logger.stub(test[:method], logger) do
134
+ RokuBuilder.class_variable_set(:@@options, test[:options])
135
+ RokuBuilder.initialize_logger
136
+ end
137
+
138
+ logger.verify
139
+ end
140
+ end
141
+ def test_roku_builder_options_parse_simple
142
+ options = "a:b, c:d"
143
+ options = RokuBuilder.options_parse(options: options)
144
+ refute_nil options[:a]
145
+ refute_nil options[:c]
146
+ assert_equal "b", options[:a]
147
+ assert_equal "d", options[:c]
148
+ end
149
+ def test_roku_builder_options_parse_complex
150
+ options = "a:b:c, d:e:f"
151
+ options = RokuBuilder.options_parse(options: options)
152
+ refute_nil options[:a]
153
+ refute_nil options[:d]
154
+ assert_equal "b:c", options[:a]
155
+ assert_equal "e:f", options[:d]
156
+ end
157
+ def test_roku_builder_plugins_empty
158
+ RokuBuilder.class_variable_set(:@@plugins, nil)
159
+ RokuBuilder.process_plugins
160
+ assert_equal Array, RokuBuilder.plugins.class
161
+ assert_equal 0, RokuBuilder.plugins.count
162
+ end
163
+ def test_roku_builder_plugins_empty_no_setup
164
+ RokuBuilder.class_variable_set(:@@plugins, nil)
165
+ assert_equal Array, RokuBuilder.plugins.class
166
+ assert_equal 0, RokuBuilder.plugins.count
167
+ end
168
+ def test_roku_builder_plugins_registered
169
+ RokuBuilder.class_variable_set(:@@plugins, nil)
170
+ RokuBuilder.register_plugin(TestPlugin)
171
+ RokuBuilder.process_plugins
172
+ assert_equal Array, RokuBuilder.plugins.class
173
+ assert_equal 1, RokuBuilder.plugins.count
174
+ assert_equal TestPlugin, RokuBuilder.plugins[0]
175
+ end
176
+ def test_roku_builder_plugins_duplicate_classes
177
+ RokuBuilder.register_plugin(TestPlugin)
178
+ RokuBuilder.register_plugin(TestPlugin)
179
+ assert_raises ImplementationError do
180
+ RokuBuilder.process_plugins
181
+ end
182
+ end
183
+ def test_roku_builder_plugins_dependencies
184
+ RokuBuilder.register_plugin(TestPlugin)
185
+ RokuBuilder.register_plugin(TestPlugin3)
186
+ RokuBuilder.process_plugins
187
+ end
188
+ def test_roku_builder_plugins_dependencies_missing
189
+ RokuBuilder.register_plugin(TestPlugin3)
190
+ assert_raises ImplementationError do
191
+ RokuBuilder.process_plugins
192
+ end
193
+ end
194
+ def test_roku_builder_plugins_missing_command_method
195
+ RokuBuilder.register_plugin(TestPlugin4)
196
+ assert_raises ImplementationError do
197
+ RokuBuilder.process_plugins
198
+ end
199
+ end
200
+ def test_roku_builder_load_config
201
+ config = Minitest::Mock.new
202
+ config.expect(:configure, nil)
203
+ config.expect(:load, nil)
204
+ config.expect(:validate, nil)
205
+ config.expect(:parse, nil)
206
+ Config.stub(:new, config) do
207
+ RokuBuilder.class_variable_set(:@@options, {})
208
+ RokuBuilder.load_config
209
+ assert config === RokuBuilder.class_variable_get(:@@config)
210
+ end
211
+ config.verify
212
+ end
213
+ end
214
+ class TestPlugin
215
+ extend Plugin
216
+ def self.commands
217
+ {}
218
+ end
219
+ end
220
+ class TestPlugin2
221
+ extend Plugin
222
+ end
223
+ class TestPlugin3
224
+ extend Plugin
225
+ def self.commands
226
+ {}
227
+ end
228
+ def self.dependencies
229
+ [TestPlugin]
230
+ end
231
+ end
232
+ class TestPlugin4
233
+ extend Plugin
234
+ def self.commands
235
+ {test: {}}
236
+ end
237
+ end
238
+ end
239
+
@@ -4,64 +4,56 @@ require_relative "test_helper.rb"
4
4
 
5
5
  module RokuBuilder
6
6
  class StagerTest < Minitest::Test
7
+ def setup
8
+ Logger.set_testing
9
+ end
10
+
11
+ def build_config_options(options)
12
+ @options = build_options(options)
13
+ @options.define_singleton_method(:source_commands) {[:validate]}
14
+ @config = RokuBuilder::Config.new(options: @options)
15
+ @config.instance_variable_set(:@config, good_config(StagerTest))
16
+ @config.parse
17
+ end
7
18
 
8
19
  def test_stager_method
9
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
10
- stager_config = {
11
- method: :working,
12
- root_dir: root_dir
13
- }
14
- stager = Stager.new(**stager_config)
15
- assert_equal stager_config[:method], stager.method
20
+ build_config_options({validate: true, working: true})
21
+ stager = Stager.new(config: @config, options: @options)
22
+ assert_equal :working, stager.method
16
23
  end
17
24
 
18
25
  def test_stager_stage_working
19
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
20
- stager_config = {
21
- method: :working,
22
- root_dir: root_dir
23
- }
24
- stager = Stager.new(**stager_config)
26
+ build_config_options({validate: true, working: true})
27
+ stager = Stager.new(config: @config, options: @options)
25
28
  assert stager.stage
26
29
  assert stager.unstage
27
30
  end
28
31
 
29
32
  def test_stager_stage_current
30
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
31
- stager_config = {
32
- method: :current,
33
- root_dir: root_dir
34
- }
35
- stager = Stager.new(**stager_config)
33
+ Pathname.stub(:pwd, test_files_path(StagerTest)) do
34
+ build_config_options({validate: true, current: true})
35
+ end
36
+ stager = Stager.new(config: @config, options: @options)
36
37
  assert stager.stage
37
38
  assert stager.unstage
38
39
  end
39
40
 
40
41
  def test_stager_stage_in
41
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
42
- stager_config = {
43
- method: :in,
44
- root_dir: root_dir
45
- }
46
- stager = Stager.new(**stager_config)
42
+ in_file = File.join(test_files_path(StagerTest), "test.zip")
43
+ build_config_options({validate: true, in: in_file})
44
+ stager = Stager.new(config: @config, options: @options)
47
45
  assert stager.stage
48
46
  assert stager.unstage
49
47
  end
50
48
 
51
49
  def test_stager_stage_git_stash
52
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
53
- branch_name = 'branch'
50
+ branch_name = 'production'
51
+ build_config_options({validate: true, stage: "production"})
54
52
  git = Minitest::Mock.new
55
53
  branch = Minitest::Mock.new
56
54
  stashes = Minitest::Mock.new
57
55
  stash = Minitest::Mock.new
58
56
 
59
- stager_config = {
60
- method: :git,
61
- root_dir: root_dir,
62
- key: branch_name
63
- }
64
-
65
57
  git.expect(:current_branch, 'other_branch')
66
58
  git.expect(:current_branch, 'other_branch')
67
59
  git.expect(:branch, branch)
@@ -77,7 +69,7 @@ module RokuBuilder
77
69
  stashes.expect(:pop, nil, ["stash@{0}"])
78
70
 
79
71
  Git.stub(:open, git) do
80
- stager = Stager.new(**stager_config)
72
+ stager = Stager.new(config: @config, options: @options)
81
73
  assert stager.stage
82
74
  assert stager.unstage
83
75
  end
@@ -88,18 +80,12 @@ module RokuBuilder
88
80
  end
89
81
 
90
82
  def test_stager_stage_git_no_stash
91
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
92
- branch_name = 'branch'
83
+ branch_name = 'production'
84
+ build_config_options({validate: true, stage: "production"})
93
85
  git = Minitest::Mock.new
94
86
  branch = Minitest::Mock.new
95
87
  stashes = Minitest::Mock.new
96
88
 
97
- stager_config = {
98
- method: :git,
99
- root_dir: root_dir,
100
- key: branch_name
101
- }
102
-
103
89
  git.expect(:current_branch, 'other_branch')
104
90
  git.expect(:current_branch, 'other_branch')
105
91
  git.expect(:branch, branch)
@@ -112,7 +98,7 @@ module RokuBuilder
112
98
  branch.expect(:stashes, [])
113
99
 
114
100
  Git.stub(:open, git) do
115
- stager = Stager.new(**stager_config)
101
+ stager = Stager.new(config: @config, options: @options)
116
102
  assert stager.stage
117
103
  assert stager.unstage
118
104
  end
@@ -122,19 +108,12 @@ module RokuBuilder
122
108
  end
123
109
 
124
110
  def test_stager_stage_git_error_stage
125
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
126
- branch_name = 'branch'
111
+ build_config_options({validate: true, stage: "production"})
127
112
  git = Minitest::Mock.new
128
113
  branch = Minitest::Mock.new
129
114
  stashes = Minitest::Mock.new
130
115
  stash = Minitest::Mock.new
131
116
 
132
- stager_config = {
133
- method: :git,
134
- root_dir: root_dir,
135
- key: branch_name
136
- }
137
-
138
117
  def git.checkout(branch)
139
118
  raise Git::GitExecuteError.new
140
119
  end
@@ -152,7 +131,7 @@ module RokuBuilder
152
131
  stashes.expect(:pop, nil, ["stash@{0}"])
153
132
 
154
133
  Git.stub(:open, git) do
155
- stager = Stager.new(**stager_config)
134
+ stager = Stager.new(config: @config, options: @options)
156
135
  assert !stager.stage
157
136
  assert stager.unstage
158
137
  end
@@ -163,16 +142,10 @@ module RokuBuilder
163
142
  end
164
143
 
165
144
  def test_stager_stage_git_error_unstage
166
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
167
- branch_name = 'branch'
145
+ build_config_options({validate: true, stage: "production"})
168
146
  git = Minitest::Mock.new
169
147
  logger = Minitest::Mock.new
170
148
 
171
- stager_config = {
172
- method: :git,
173
- root_dir: root_dir,
174
- key: branch_name
175
- }
176
149
  Logger.class_variable_set(:@@instance, logger)
177
150
 
178
151
  def git.checkout(branch)
@@ -182,7 +155,7 @@ module RokuBuilder
182
155
  logger.expect(:error, nil, ["Branch or ref does not exist"])
183
156
 
184
157
  Git.stub(:open, git) do
185
- stager = Stager.new(**stager_config)
158
+ stager = Stager.new(config: @config, options: @options)
186
159
  stager.instance_variable_set(:@current_branch, "branch")
187
160
  assert !stager.unstage
188
161
  end
@@ -191,34 +164,14 @@ module RokuBuilder
191
164
  Logger.set_testing
192
165
  end
193
166
 
194
- def test_stager_stage_script
195
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
196
- stager_config = {
197
- method: :script,
198
- key: {stage: "stage_script", unstage: "unstage_script"},
199
- root_dir: root_dir
200
- }
201
- Controller.stub(:system, nil) do
202
- stager = Stager.new(**stager_config)
203
- assert stager.stage
204
- assert stager.unstage
205
- end
206
- end
207
-
208
167
  def test_stager_save_state
209
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
210
- branch_name = 'branch'
168
+ branch_name = 'production'
169
+ build_config_options({validate: true, stage: "production"})
211
170
  git = Minitest::Mock.new
212
171
  branch = Minitest::Mock.new
213
172
  stashes = Minitest::Mock.new
214
173
  pstore = Minitest::Mock.new
215
174
 
216
- stager_config = {
217
- method: :git,
218
- root_dir: root_dir,
219
- key: branch_name
220
- }
221
-
222
175
  git.expect(:current_branch, 'other_branch')
223
176
  git.expect(:current_branch, 'other_branch')
224
177
  git.expect(:branch, branch)
@@ -234,7 +187,7 @@ module RokuBuilder
234
187
 
235
188
  Git.stub(:open, git) do
236
189
  PStore.stub(:new, pstore) do
237
- stager = Stager.new(**stager_config)
190
+ stager = Stager.new(config: @config, options: @options)
238
191
  assert stager.stage
239
192
  end
240
193
  end
@@ -245,20 +198,13 @@ module RokuBuilder
245
198
  end
246
199
 
247
200
  def test_stager_load_state
248
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
249
- branch_name = 'branch'
201
+ build_config_options({validate: true, stage: "production"})
250
202
  git = Minitest::Mock.new
251
203
  branch = Minitest::Mock.new
252
204
  stashes = Minitest::Mock.new
253
205
  stash = Minitest::Mock.new
254
206
  pstore = Minitest::Mock.new
255
207
 
256
- stager_config = {
257
- method: :git,
258
- root_dir: root_dir,
259
- key: branch_name
260
- }
261
-
262
208
  pstore.expect(:transaction, nil) do |&block|
263
209
  block.call
264
210
  end
@@ -276,7 +222,7 @@ module RokuBuilder
276
222
 
277
223
  Git.stub(:open, git) do
278
224
  PStore.stub(:new, pstore) do
279
- stager = Stager.new(**stager_config)
225
+ stager = Stager.new(config: @config, options: @options)
280
226
  assert stager.unstage
281
227
  end
282
228
  end
@@ -288,8 +234,7 @@ module RokuBuilder
288
234
  end
289
235
 
290
236
  def test_stager_load_second_state
291
- root_dir = File.join(File.dirname(__FILE__), "test_files", "stager_test")
292
- branch_name = 'branch'
237
+ build_config_options({validate: true, stage: "production"})
293
238
  git = Minitest::Mock.new
294
239
  branch = Minitest::Mock.new
295
240
  stashes = Minitest::Mock.new
@@ -297,12 +242,6 @@ module RokuBuilder
297
242
  other_stash = Minitest::Mock.new
298
243
  pstore = Minitest::Mock.new
299
244
 
300
- stager_config = {
301
- method: :git,
302
- root_dir: root_dir,
303
- key: branch_name
304
- }
305
-
306
245
  pstore.expect(:transaction, nil) do |&block|
307
246
  block.call
308
247
  end
@@ -321,7 +260,7 @@ module RokuBuilder
321
260
 
322
261
  Git.stub(:open, git) do
323
262
  PStore.stub(:new, pstore) do
324
- stager = Stager.new(**stager_config)
263
+ stager = Stager.new(config: @config, options: @options)
325
264
  assert stager.unstage
326
265
  end
327
266
  end
@@ -332,5 +271,14 @@ module RokuBuilder
332
271
  other_stash.verify
333
272
  pstore.verify
334
273
  end
274
+ def test_stager_stage_script
275
+ build_config_options({validate: true, stage: "production", project: "project2"})
276
+ RokuBuilder.stub(:system, nil) do
277
+ stager = Stager.new(config: @config, options: @options)
278
+ assert stager.stage
279
+ assert stager.unstage
280
+ end
281
+ end
282
+
335
283
  end
336
284
  end