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
@@ -0,0 +1,21 @@
1
+ '********** Copyright 2016 Roku Corp. All Rights Reserved. **********
2
+
3
+ title=Rectangle Example
4
+ subtitle=A Roku Scene Graph Development Example
5
+ major_version=1
6
+ minor_version=0
7
+ build_version=00000
8
+
9
+ mm_icon_focus_hd=pkg:/images/rsgde_mm_focus_hd.jpg
10
+ mm_icon_focus_sd=pkg:/images/rde_mm_focus_sd.jpg
11
+
12
+ splash_screen_sd=pkg:/images/rde_splash_sd.jpg
13
+
14
+ splash_screen_hd=pkg:/images/rsgde_splash_hd.jpg
15
+
16
+ splash_screen_fhd=pkg:/images/rde_splash_fhd.jpg
17
+
18
+ splash_color=#662D91
19
+ splash_min_time=1000
20
+
21
+ ui_resolutions = "hd"
@@ -0,0 +1,21 @@
1
+ '********** Copyright 2016 Roku Corp. All Rights Reserved. **********
2
+
3
+ sub Main(externalParams)
4
+
5
+ screen = CreateObject("roSGScreen")
6
+ m.port = CreateObject("roMessagePort")
7
+ screen.setMessagePort(m.port)
8
+ scene = screen.CreateScene("RectangleExample")
9
+ screen.getGlobalNode().addFields({externalParams: externalParams})
10
+
11
+ screen.show()
12
+ while(true)
13
+ msg = wait(0, m.port)
14
+ msgType = type(msg)
15
+
16
+ if msgType = "roSGScreenEvent"
17
+ if msg.isScreenClosed() then return
18
+ end if
19
+ end while
20
+
21
+ end sub
@@ -0,0 +1,29 @@
1
+ <?xml version = "1.0" encoding = "utf-8" ?>
2
+
3
+ <!--********** Copyright 2016 Roku Corp. All Rights Reserved. **********-->
4
+
5
+ <component name = "RectangleExample" extends = "Scene" >
6
+ <script type = "text/brightscript" uri = "uuid.brs" />
7
+ <script type = "text/brightscript" >
8
+ <![CDATA[
9
+ sub init()
10
+ m.top.backgroundURI = "pkg:/images/rsgde_bg_hd.jpg"
11
+ example = m.top.findNode("exampleRectangle")
12
+ examplerect = example.boundingRect()
13
+ centerx = (1280 - examplerect.width) / 2
14
+ centery = (720 - examplerect.height) / 2
15
+ example.translation = [ centerx, centery ]
16
+ m.top.setFocus(true)
17
+ print uuid()
18
+ print m.global.externalParams.uuid
19
+ end sub
20
+ ]]>
21
+ </script>
22
+ <children >
23
+ <Rectangle
24
+ id = "exampleRectangle"
25
+ width = "512"
26
+ height = "288"
27
+ color = "0x1010EBFF" />
28
+ </children>
29
+ </component>
@@ -0,0 +1,21 @@
1
+ '********** Copyright 2016 Roku Corp. All Rights Reserved. **********
2
+
3
+ title=Rectangle Example
4
+ subtitle=A Roku Scene Graph Development Example
5
+ major_version=1
6
+ minor_version=0
7
+ build_version=00000
8
+
9
+ mm_icon_focus_hd=pkg:/images/rsgde_mm_focus_hd.jpg
10
+ mm_icon_focus_sd=pkg:/images/rde_mm_focus_sd.jpg
11
+
12
+ splash_screen_sd=pkg:/images/rde_splash_sd.jpg
13
+
14
+ splash_screen_hd=pkg:/images/rsgde_splash_hd.jpg
15
+
16
+ splash_screen_fhd=pkg:/images/rde_splash_fhd.jpg
17
+
18
+ splash_color=#662D91
19
+ splash_min_time=1000
20
+
21
+ ui_resolutions = "hd"
@@ -0,0 +1,21 @@
1
+ '********** Copyright 2016 Roku Corp. All Rights Reserved. **********
2
+
3
+ sub Main(externalParams)
4
+
5
+ screen = CreateObject("roSGScreen")
6
+ m.port = CreateObject("roMessagePort")
7
+ screen.setMessagePort(m.port)
8
+ scene = screen.CreateScene("RectangleExample")
9
+ screen.getGlobalNode().addFields({externalParams: externalParams})
10
+
11
+ screen.show()
12
+ while(true)
13
+ msg = wait(0, m.port)
14
+ msgType = type(msg)
15
+
16
+ if msgType = "roSGScreenEvent"
17
+ if msg.isScreenClosed() then return
18
+ end if
19
+ end while
20
+
21
+ end sub
@@ -0,0 +1,29 @@
1
+ <?xml version = "1.0" encoding = "utf-8" ?>
2
+
3
+ <!--********** Copyright 2016 Roku Corp. All Rights Reserved. **********-->
4
+
5
+ <component name = "RectangleExample" extends = "Scene" >
6
+ <script type = "text/brightscript" uri = "uuid.brs" />
7
+ <script type = "text/brightscript" >
8
+ <![CDATA[
9
+ sub init()
10
+ m.top.backgroundURI = "pkg:/images/rsgde_bg_hd.jpg"
11
+ example = m.top.findNode("exampleRectangle")
12
+ examplerect = example.boundingRect()
13
+ centerx = (1280 - examplerect.width) / 2
14
+ centery = (720 - examplerect.height) / 2
15
+ example.translation = [ centerx, centery ]
16
+ m.top.setFocus(true)
17
+ print uuid()
18
+ print m.global.externalParams.uuid
19
+ end sub
20
+ ]]>
21
+ </script>
22
+ <children >
23
+ <Rectangle
24
+ id = "exampleRectangle"
25
+ width = "512"
26
+ height = "288"
27
+ color = "0x1010EBFF" />
28
+ </children>
29
+ </component>
@@ -0,0 +1,21 @@
1
+ '********** Copyright 2016 Roku Corp. All Rights Reserved. **********
2
+
3
+ title=Rectangle Example
4
+ subtitle=A Roku Scene Graph Development Example
5
+ major_version=1
6
+ minor_version=0
7
+ build_version=00000
8
+
9
+ mm_icon_focus_hd=pkg:/images/rsgde_mm_focus_hd.jpg
10
+ mm_icon_focus_sd=pkg:/images/rde_mm_focus_sd.jpg
11
+
12
+ splash_screen_sd=pkg:/images/rde_splash_sd.jpg
13
+
14
+ splash_screen_hd=pkg:/images/rsgde_splash_hd.jpg
15
+
16
+ splash_screen_fhd=pkg:/images/rde_splash_fhd.jpg
17
+
18
+ splash_color=#662D91
19
+ splash_min_time=1000
20
+
21
+ ui_resolutions = "hd"
@@ -0,0 +1,21 @@
1
+ '********** Copyright 2016 Roku Corp. All Rights Reserved. **********
2
+
3
+ sub Main(externalParams)
4
+
5
+ screen = CreateObject("roSGScreen")
6
+ m.port = CreateObject("roMessagePort")
7
+ screen.setMessagePort(m.port)
8
+ scene = screen.CreateScene("RectangleExample")
9
+ screen.getGlobalNode().addFields({externalParams: externalParams})
10
+
11
+ screen.show()
12
+ while(true)
13
+ msg = wait(0, m.port)
14
+ msgType = type(msg)
15
+
16
+ if msgType = "roSGScreenEvent"
17
+ if msg.isScreenClosed() then return
18
+ end if
19
+ end while
20
+
21
+ end sub
@@ -0,0 +1,138 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require "simplecov"
4
+ require "coveralls"
5
+
6
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter::new([
7
+ SimpleCov::Formatter::HTMLFormatter,
8
+ Coveralls::SimpleCov::Formatter
9
+ ])
10
+ SimpleCov.start
11
+
12
+ require "byebug"
13
+ require "roku_builder"
14
+ require "minitest/autorun"
15
+ require "minitest/utils"
16
+ require "securerandom"
17
+
18
+ module Minitest
19
+ module Assertions
20
+ def wait_assert(timeout = 10, msg = nil)
21
+ self.assertions += 1
22
+ start = Time.now
23
+ result = nil
24
+ while (Time.now - start) < timeout
25
+ result = yield
26
+ return true if result
27
+ end
28
+ msg ||= "Expected #{result} to be truthy"
29
+ raise Minitest::Assertion, msg
30
+ end
31
+ def assert_log(log, timeout = 10, msg = nil)
32
+ self.assertions += 1
33
+ ip = good_config(self.class)[:devices][:roku][:ip]
34
+ telnet_config = {
35
+ 'Host' => ip,
36
+ 'Port' => 8085
37
+ }
38
+ waitfor_config = {
39
+ 'Match' => /#{log}/,
40
+ 'Timeout' => timeout
41
+ }
42
+ connection = Net::Telnet.new(telnet_config)
43
+ begin
44
+ connection.waitfor(waitfor_config) do |txt|
45
+ #puts txt
46
+ end
47
+ rescue Timeout::Error
48
+ msg ||= "Expected to see log with #{log}"
49
+ raise Minitest::Assertion, msg
50
+ end
51
+ sleep 1
52
+ true
53
+ end
54
+ end
55
+ end
56
+
57
+ module Helpers
58
+ def roku(config=nil)
59
+ config ||= @config
60
+ "bin/roku --config #{config}"
61
+ end
62
+
63
+ def testfiles_path(klass)
64
+ klass = klass.to_s.split("::")[1].underscore
65
+ File.join(File.dirname(__FILE__), "test_files", klass)
66
+ end
67
+
68
+ def build_config(klass, target=nil, config=nil)
69
+ target = "config.json" unless target
70
+ config_path = File.join(testfiles_path(klass), target)
71
+ config = good_config(klass) unless config
72
+ config_string = JSON.pretty_generate(config)
73
+ file = File.open(config_path, "w")
74
+ file.write(config_string)
75
+ file.close
76
+ config_path
77
+ end
78
+
79
+
80
+ def build_uuid_script
81
+ script = [
82
+ "function uuid()\n",
83
+ " return \"#{@uuid}\"\n",
84
+ "end function"
85
+ ]
86
+ path = File.join(testfiles_path(self.class), "components", "uuid.brs")
87
+ FileUtils.rm (path) if File.exist?(path)
88
+ File.open(path, "w") do |io|
89
+ script.each do |line|
90
+ io.write(line)
91
+ end
92
+ end
93
+ end
94
+
95
+ def cleanup_uuid_script
96
+ path = File.join(testfiles_path(self.class), "components", "uuid.brs")
97
+ FileUtils.rm (path) if File.exist?(path)
98
+ end
99
+
100
+ def good_config(klass)
101
+ root_dir = testfiles_path(klass)
102
+ {
103
+ devices: {
104
+ default: :roku,
105
+ roku: {
106
+ ip: "192.168.1.127",
107
+ user: "rokudev",
108
+ password: "aaaa"
109
+ }
110
+ },
111
+ projects: {
112
+ default: :project1,
113
+ project1: {
114
+ directory: root_dir,
115
+ folders: ["resources","source","components"],
116
+ files: ["manifest","file.tmp"],
117
+ app_name: "App Name",
118
+ stage_method: :script,
119
+ stages:{
120
+ production: {
121
+ script: {stage: "touch file.tmp", unstage: "rm file.tmp"},
122
+ key: "a"
123
+ }
124
+ }
125
+ }
126
+ },
127
+ keys: {
128
+ a: {
129
+ keyed_pkg: File.join(root_dir, "test.pkg"),
130
+ password: "CvOqcutO3X419INdUbOyqw=="
131
+ }
132
+ },
133
+ input_mappings: {
134
+ "a": ["home", "Home"]
135
+ }
136
+ }
137
+ end
138
+ end
@@ -0,0 +1,35 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class InspectorIntergrationTest < Minitest::Test
7
+ include Helpers
8
+ def setup
9
+ @config = build_config(InspectorIntergrationTest)
10
+ @uuid = SecureRandom.uuid
11
+ build_uuid_script
12
+ end
13
+ def teardown
14
+ FileUtils.rm(@config) if File.exist?(@config)
15
+ cleanup_uuid_script
16
+ end
17
+ def test_inspector
18
+ target = File.join(testfiles_path(InspectorIntergrationTest), "test.pkg")
19
+ output = `bin/roku --inspect --in #{target} --password CvOqcutO3X419INdUbOyqw== --config #{@config}`
20
+ assert output =~ /App Name:/
21
+ assert output =~ /Dev ID:/
22
+ assert output =~ /Creation Date:/
23
+ assert output =~ /dev.zip:/
24
+ end
25
+ def test_screencapture
26
+ target = File.join(testfiles_path(InspectorIntergrationTest), "out.jpg")
27
+ `#{roku} --sideload --working`
28
+ assert_log @uuid
29
+ `#{roku} --screencapture --out #{target}`
30
+ wait_assert(15) {File.exist?(target)}
31
+ FileUtils.rm(target)
32
+ end
33
+ end
34
+ end
35
+
@@ -0,0 +1,32 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class LinkerIntergrationTest < Minitest::Test
7
+ include Helpers
8
+ def setup
9
+ @config = build_config(LinkerIntergrationTest)
10
+ @uuid = SecureRandom.uuid
11
+ build_uuid_script
12
+ end
13
+ def teardown
14
+ FileUtils.rm(@config) if File.exist?(@config)
15
+ cleanup_uuid_script
16
+ end
17
+ def test_deeplink
18
+ `#{roku} --sideload --working`
19
+ assert_log @uuid
20
+ uuid_param = SecureRandom.uuid
21
+ `#{roku} --deeplink 'uuid:#{uuid_param}'`
22
+ assert_log uuid_param
23
+ end
24
+ def test_deeplink_with_sideload
25
+ uuid_param = SecureRandom.uuid
26
+ `#{roku} --deeplink 'uuid:#{uuid_param}' --working`
27
+ assert_log @uuid
28
+ assert_log uuid_param
29
+ end
30
+ end
31
+ end
32
+