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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG +12 -0
- data/Gemfile.lock +22 -7
- data/Guardfile +3 -3
- data/README.md +22 -398
- data/bin/roku +1 -194
- data/config.json.example +1 -1
- data/intergration/roku_builder/test_core.rb +52 -0
- data/intergration/roku_builder/test_files/core_intergration_test/manifest_template +7 -0
- data/intergration/roku_builder/test_files/core_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/components/rectanglescene.xml +28 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/source/main.brs +23 -0
- data/intergration/roku_builder/test_files/inspector_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/linker_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/loader_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/monitor_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/navigator_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/packager_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/profiler_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/scripter_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/components/rectanglescene.xml +29 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_mm_focus_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_fhd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rde_splash_sd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_bg_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_mm_focus_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/images/rsgde_splash_hd.jpg +0 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/manifest +21 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/source/main.brs +21 -0
- data/intergration/roku_builder/test_files/tester_intergration_test/test.pkg +0 -0
- data/intergration/roku_builder/test_helper.rb +138 -0
- data/intergration/roku_builder/test_inspector.rb +35 -0
- data/intergration/roku_builder/test_linker.rb +32 -0
- data/intergration/roku_builder/test_loader.rb +38 -0
- data/intergration/roku_builder/test_monitor.rb +21 -0
- data/intergration/roku_builder/test_navigator.rb +34 -0
- data/intergration/roku_builder/test_packager.rb +41 -0
- data/intergration/roku_builder/test_profiler.rb +48 -0
- data/intergration/roku_builder/test_scripter.rb +38 -0
- data/intergration/roku_builder/test_tester.rb +21 -0
- data/lib/roku_builder.rb +143 -154
- data/lib/roku_builder/config.rb +17 -40
- data/lib/roku_builder/config_parser.rb +49 -200
- data/lib/roku_builder/config_validator.rb +1 -1
- data/lib/roku_builder/errors.rb +12 -0
- data/lib/roku_builder/git.rb +28 -0
- data/lib/roku_builder/hash.rb +8 -0
- data/lib/roku_builder/manifest.rb +121 -0
- data/lib/roku_builder/options.rb +68 -29
- data/lib/roku_builder/plugin.rb +30 -0
- data/lib/roku_builder/plugins/core.rb +117 -0
- data/lib/roku_builder/plugins/inspector.rb +104 -0
- data/lib/roku_builder/{linker.rb → plugins/linker.rb} +38 -12
- data/lib/roku_builder/plugins/loader.rb +152 -0
- data/lib/roku_builder/{monitor.rb → plugins/monitor.rb} +20 -9
- data/lib/roku_builder/{navigator.rb → plugins/navigator.rb} +136 -88
- data/lib/roku_builder/plugins/packager.rb +194 -0
- data/lib/roku_builder/plugins/profiler.rb +135 -0
- data/lib/roku_builder/plugins/scripter.rb +53 -0
- data/lib/roku_builder/{tester.rb → plugins/tester.rb} +28 -19
- data/lib/roku_builder/stager.rb +48 -12
- data/lib/roku_builder/string.rb +20 -0
- data/lib/roku_builder/util.rb +10 -34
- data/lib/roku_builder/version.rb +1 -1
- data/rakefile +5 -1
- data/roku_builder.gemspec +2 -0
- data/test/roku_builder/plugins/test_core.rb +112 -0
- data/test/roku_builder/plugins/test_inspector.rb +165 -0
- data/test/roku_builder/plugins/test_linker.rb +123 -0
- data/test/roku_builder/plugins/test_loader.rb +115 -0
- data/test/roku_builder/plugins/test_monitor.rb +141 -0
- data/test/roku_builder/plugins/test_navigator.rb +274 -0
- data/test/roku_builder/plugins/test_packager.rb +202 -0
- data/test/roku_builder/plugins/test_profiler.rb +127 -0
- data/test/roku_builder/plugins/test_scripter.rb +110 -0
- data/test/roku_builder/plugins/test_tester.rb +109 -0
- data/test/roku_builder/test_config.rb +51 -35
- data/test/roku_builder/test_config_parser.rb +76 -154
- data/test/roku_builder/test_config_validator.rb +18 -1
- data/test/roku_builder/test_files/{loader_test/manifest → config_parser_test/test.pkg} +0 -0
- data/test/roku_builder/test_files/config_test/config.json +3 -0
- data/test/roku_builder/test_files/controller_commands_test/manifest_template +7 -0
- data/test/roku_builder/test_files/core_test/manifest_template +7 -0
- data/test/roku_builder/test_files/core_test/test.pkg +0 -0
- data/test/roku_builder/test_files/inspector_test/manifest +6 -0
- data/test/roku_builder/test_files/inspector_test/test.pkg +0 -0
- data/test/roku_builder/test_files/linker_test/manifest +6 -0
- data/test/roku_builder/test_files/linker_test/test.pkg +0 -0
- data/test/roku_builder/test_files/loader_test/manifest_template +6 -0
- data/test/roku_builder/test_files/loader_test/test.pkg +0 -0
- data/test/roku_builder/test_files/loader_test/test.zip +0 -0
- data/test/roku_builder/test_files/manifest_test/manifest_comments +6 -0
- data/test/roku_builder/test_files/manifest_test/manifest_template +7 -0
- data/test/roku_builder/test_files/manifest_test/test.zip +0 -0
- data/test/roku_builder/test_files/packager_test/manifest +6 -0
- data/test/roku_builder/test_files/packager_test/scripter_test/manifest +6 -0
- data/test/roku_builder/test_files/packager_test/test.pkg +0 -0
- data/test/roku_builder/test_files/roku_builder_test/config.json +32 -0
- data/test/roku_builder/test_files/scripter_test/manifest +6 -0
- data/test/roku_builder/test_files/scripter_test/test.pkg +0 -0
- data/test/roku_builder/test_files/stager_test/test.pkg +0 -0
- data/test/roku_builder/test_files/tester_test/manifest +6 -0
- data/test/roku_builder/test_files/tester_test/test.pkg +0 -0
- data/test/roku_builder/test_helper.rb +44 -11
- data/test/roku_builder/test_logger.rb +1 -0
- data/test/roku_builder/test_manifest.rb +99 -0
- data/test/roku_builder/test_options.rb +106 -77
- data/test/roku_builder/test_options_plugins.rb +111 -0
- data/test/roku_builder/test_plugin.rb +48 -0
- data/test/roku_builder/test_roku_builder.rb +239 -0
- data/test/roku_builder/test_stager.rb +49 -101
- data/test/roku_builder/test_util.rb +19 -4
- metadata +241 -47
- data/lib/roku_builder/controller.rb +0 -98
- data/lib/roku_builder/controller_commands.rb +0 -224
- data/lib/roku_builder/error_handler.rb +0 -142
- data/lib/roku_builder/inspector.rb +0 -82
- data/lib/roku_builder/keyer.rb +0 -106
- data/lib/roku_builder/loader.rb +0 -131
- data/lib/roku_builder/manifest_manager.rb +0 -126
- data/lib/roku_builder/packager.rb +0 -43
- data/lib/roku_builder/profiler.rb +0 -96
- data/lib/roku_builder/scripter.rb +0 -39
- data/test/roku_builder/test_controller.rb +0 -70
- data/test/roku_builder/test_controller_commands.rb +0 -465
- data/test/roku_builder/test_error_handler.rb +0 -90
- data/test/roku_builder/test_inspector.rb +0 -298
- data/test/roku_builder/test_keyer.rb +0 -176
- data/test/roku_builder/test_linker.rb +0 -110
- data/test/roku_builder/test_loader.rb +0 -337
- data/test/roku_builder/test_manifest_manager.rb +0 -103
- data/test/roku_builder/test_monitor.rb +0 -137
- data/test/roku_builder/test_navigator.rb +0 -280
- data/test/roku_builder/test_packager.rb +0 -127
- data/test/roku_builder/test_profiler.rb +0 -35
- data/test/roku_builder/test_scripter.rb +0 -102
- data/test/roku_builder/test_tester.rb +0 -130
data/lib/roku_builder/stager.rb
CHANGED
@@ -5,10 +5,13 @@ module RokuBuilder
|
|
5
5
|
# Change stage of roku application
|
6
6
|
class Stager
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@
|
8
|
+
def initialize(config:, options:)
|
9
|
+
@config = config
|
10
|
+
@options = options
|
11
|
+
@method = get_method
|
12
|
+
@ref = get_git_ref
|
13
|
+
@scripts = get_scripts
|
14
|
+
@root_dir = config.root_dir
|
12
15
|
@logger = Logger.instance
|
13
16
|
@stage_success = true
|
14
17
|
@stash_key = "roku-builder-temp-stash"
|
@@ -25,19 +28,22 @@ module RokuBuilder
|
|
25
28
|
# @return [Boolean] whether the staging was successful or not
|
26
29
|
def stage
|
27
30
|
@orginal_directory = Dir.pwd
|
28
|
-
Dir.chdir(@root_dir) unless @root_dir.nil? or @root_dir == @orginal_directory
|
29
31
|
case @method
|
30
|
-
when :current, :in
|
32
|
+
when :current, :in
|
31
33
|
# Do Nothing
|
34
|
+
when :working
|
35
|
+
switch_directory
|
32
36
|
when :git
|
37
|
+
switch_directory
|
33
38
|
begin
|
34
|
-
git_switch_to(branch: @
|
39
|
+
git_switch_to(branch: @ref)
|
35
40
|
rescue Git::GitExecuteError
|
36
41
|
git_rescue
|
37
42
|
@stage_success = false
|
38
43
|
end
|
39
44
|
when :script
|
40
|
-
|
45
|
+
switch_directory
|
46
|
+
RokuBuilder.system(command: @scripts[:stage])
|
41
47
|
end
|
42
48
|
@stage_success
|
43
49
|
end
|
@@ -46,27 +52,57 @@ module RokuBuilder
|
|
46
52
|
# @return [Boolean] whether the revert was successful or not
|
47
53
|
def unstage
|
48
54
|
@orginal_directory ||= Dir.pwd
|
49
|
-
Dir.chdir(@root_dir) unless @root_dir.nil? or @root_dir == @orginal_directory
|
50
55
|
unstage_success = true
|
51
56
|
case @method
|
52
57
|
when :current, :in, :working
|
53
58
|
# Do Nothing
|
54
59
|
when :git
|
60
|
+
switch_directory
|
55
61
|
begin
|
56
|
-
git_switch_from(branch: @
|
62
|
+
git_switch_from(branch: @ref, checkout: @stage_success)
|
57
63
|
rescue Git::GitExecuteError
|
58
64
|
git_rescue
|
59
65
|
unstage_success = false
|
60
66
|
end
|
67
|
+
switch_directory_back
|
61
68
|
when :script
|
62
|
-
|
69
|
+
switch_directory
|
70
|
+
RokuBuilder.system(command: @scripts[:unstage]) if @scripts[:unstage]
|
71
|
+
switch_directory_back
|
63
72
|
end
|
64
|
-
Dir.chdir(@orginal_directory) unless @root_dir == @orginal_directory
|
65
73
|
unstage_success
|
66
74
|
end
|
67
75
|
|
68
76
|
private
|
69
77
|
|
78
|
+
def get_method
|
79
|
+
method = ([:in, :current, :working] & @options.keys).first
|
80
|
+
if @config.project
|
81
|
+
method = @config.project[:stage_method]
|
82
|
+
end
|
83
|
+
method
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_git_ref
|
87
|
+
if @options[:ref]
|
88
|
+
@options[:ref]
|
89
|
+
elsif @config.stage
|
90
|
+
@config.stage[:branch]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def get_scripts
|
95
|
+
@config.stage[:script] if @config.stage
|
96
|
+
end
|
97
|
+
|
98
|
+
def switch_directory
|
99
|
+
Dir.chdir(@root_dir) unless @root_dir.nil? or @root_dir == @orginal_directory
|
100
|
+
end
|
101
|
+
|
102
|
+
def switch_directory_back
|
103
|
+
Dir.chdir(@orginal_directory) unless @root_dir == @orginal_directory
|
104
|
+
end
|
105
|
+
|
70
106
|
# Switch to the correct branch
|
71
107
|
# @param branch [String] the branch to switch to
|
72
108
|
def git_switch_to(branch:)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
|
2
|
+
|
3
|
+
class ::String
|
4
|
+
def underscore!
|
5
|
+
word = self
|
6
|
+
word.gsub!(/::/, '/')
|
7
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
8
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
9
|
+
word.tr!("-", "_")
|
10
|
+
word.downcase!
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def underscore
|
15
|
+
word = self.dup
|
16
|
+
word.underscore!
|
17
|
+
word
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
data/lib/roku_builder/util.rb
CHANGED
@@ -1,34 +1,25 @@
|
|
1
1
|
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
2
|
-
|
3
2
|
module RokuBuilder
|
4
3
|
|
5
|
-
# Super class for
|
4
|
+
# Super class for modules
|
6
5
|
# This class defines a common initializer and allows subclasses
|
7
6
|
# to define their own secondary initializer
|
8
7
|
class Util
|
9
8
|
|
10
9
|
# Common initializer of device utils
|
11
|
-
# @param
|
12
|
-
|
13
|
-
# @param password [String] Password for roku device
|
14
|
-
def initialize(ip:, user:, password:, init_params: nil)
|
10
|
+
# @param config [Config] Configuration object for the app
|
11
|
+
def initialize(config: )
|
15
12
|
@logger = Logger.instance
|
16
|
-
@
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
21
|
-
@roku_ip_address = ip
|
22
|
-
@dev_username = user
|
23
|
-
@dev_password = password
|
13
|
+
@config = config
|
14
|
+
@roku_ip_address = @config.device_config[:ip]
|
15
|
+
@dev_username = @config.device_config[:user]
|
16
|
+
@dev_password = @config.device_config[:password]
|
24
17
|
@url = "http://#{@roku_ip_address}"
|
25
|
-
|
26
|
-
init(**init_params)
|
27
|
-
else
|
28
|
-
init
|
29
|
-
end
|
18
|
+
init
|
30
19
|
end
|
31
20
|
|
21
|
+
private
|
22
|
+
|
32
23
|
# Second initializer to be overwriten
|
33
24
|
def init
|
34
25
|
#Override in subclass
|
@@ -57,20 +48,5 @@ module RokuBuilder
|
|
57
48
|
f.adapter Faraday.default_adapter
|
58
49
|
end
|
59
50
|
end
|
60
|
-
|
61
|
-
# Parses a string into and options hash
|
62
|
-
# @param options [String] string of options in the format "a:b, c:d"
|
63
|
-
# @return [Hash] Options hash generated
|
64
|
-
def self.options_parse(options:)
|
65
|
-
parsed = {}
|
66
|
-
opts = options.split(/,\s*/)
|
67
|
-
opts.each do |opt|
|
68
|
-
opt = opt.split(":")
|
69
|
-
key = opt.shift.to_sym
|
70
|
-
value = opt.join(":")
|
71
|
-
parsed[key] = value
|
72
|
-
end
|
73
|
-
parsed
|
74
|
-
end
|
75
51
|
end
|
76
52
|
end
|
data/lib/roku_builder/version.rb
CHANGED
data/rakefile
CHANGED
@@ -4,7 +4,11 @@ require 'rake'
|
|
4
4
|
require 'rake/testtask'
|
5
5
|
|
6
6
|
Rake::TestTask.new do |t|
|
7
|
-
|
7
|
+
t.test_files = Dir.glob('test/roku_builder/**/test_*.rb')
|
8
|
+
end
|
9
|
+
|
10
|
+
Rake::TestTask.new(:intergration) do |t|
|
11
|
+
t.test_files = Dir.glob('intergration/roku_builder/**/test_*.rb')
|
8
12
|
end
|
9
13
|
|
10
14
|
task(default: :test)
|
data/roku_builder.gemspec
CHANGED
@@ -35,6 +35,8 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency "minitest", "~> 5.10"
|
36
36
|
spec.add_development_dependency "minitest-autotest", "~> 1.0"
|
37
37
|
spec.add_development_dependency "minitest-server", "~> 1.0"
|
38
|
+
spec.add_development_dependency "minitest-utils", "~> 0.3"
|
39
|
+
spec.add_development_dependency "webmock", "~> 3.0"
|
38
40
|
spec.add_development_dependency "simplecov", "~> 0.12"
|
39
41
|
spec.add_development_dependency "coveralls", "~> 0.8"
|
40
42
|
spec.add_development_dependency "yard", "~> 0.9"
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
2
|
+
|
3
|
+
require_relative "../test_helper.rb"
|
4
|
+
|
5
|
+
module RokuBuilder
|
6
|
+
class CoreTest < Minitest::Test
|
7
|
+
def setup
|
8
|
+
Logger.set_testing
|
9
|
+
RokuBuilder.setup_plugins
|
10
|
+
register_plugins(Core)
|
11
|
+
end
|
12
|
+
def test_core_parse_options_long
|
13
|
+
parser = OptionParser.new
|
14
|
+
options = {}
|
15
|
+
Core.parse_options(parser: parser, options: options)
|
16
|
+
argv = ["roku", "--configure", "--validate", "--update-manifest", "--do-stage",
|
17
|
+
"--do-unstage", "--edit", "params", "--config", "config-path",
|
18
|
+
"--ref", "ref", "--working", "--current", "--stage", "stage", "--project",
|
19
|
+
"project", "--out", "out", "--in", "in", "--device", "device",
|
20
|
+
"--verbose", "--debug"]
|
21
|
+
parser.parse! argv
|
22
|
+
assert options[:configure]
|
23
|
+
assert options[:validate]
|
24
|
+
assert options[:increment]
|
25
|
+
assert options[:dostage]
|
26
|
+
assert options[:dounstage]
|
27
|
+
assert_equal "params", options[:edit_params]
|
28
|
+
assert_equal "config-path", options[:config]
|
29
|
+
assert_equal "ref", options[:ref]
|
30
|
+
assert options[:working]
|
31
|
+
assert options[:current]
|
32
|
+
assert_equal "stage", options[:stage]
|
33
|
+
assert_equal "project", options[:project]
|
34
|
+
assert_equal "out", options[:out]
|
35
|
+
assert_equal "in", options[:in]
|
36
|
+
assert_equal "device", options[:device]
|
37
|
+
assert options[:device_given]
|
38
|
+
assert options[:verbose]
|
39
|
+
assert options[:debug]
|
40
|
+
end
|
41
|
+
def test_core_parse_options_short
|
42
|
+
parser = OptionParser.new
|
43
|
+
options = {}
|
44
|
+
Core.parse_options(parser: parser, options: options)
|
45
|
+
argv = ["roku", "-u", "-e", "params", "-r", "ref", "-w", "-c", "-s",
|
46
|
+
"stage", "-p", "project", "-O", "out", "-I", "in", "-D", "device", "-V"]
|
47
|
+
parser.parse! argv
|
48
|
+
assert options[:increment]
|
49
|
+
assert_equal "params", options[:edit_params]
|
50
|
+
assert_equal "ref", options[:ref]
|
51
|
+
assert options[:working]
|
52
|
+
assert options[:current]
|
53
|
+
assert_equal "stage", options[:stage]
|
54
|
+
assert_equal "project", options[:project]
|
55
|
+
assert_equal "out", options[:out]
|
56
|
+
assert_equal "in", options[:in]
|
57
|
+
assert_equal "device", options[:device]
|
58
|
+
assert options[:device_given]
|
59
|
+
assert options[:verbose]
|
60
|
+
end
|
61
|
+
def test_core_configure
|
62
|
+
logger = Minitest::Mock.new
|
63
|
+
options = {configure: true, config: File.join(test_files_path(CoreTest), "config.json")}
|
64
|
+
config, options = build_config_options_objects(CoreTest, options, false)
|
65
|
+
logger.expect(:unknown, nil, ["Configured"])
|
66
|
+
Logger.class_variable_set(:@@instance, logger)
|
67
|
+
core = Core.new(config: config)
|
68
|
+
core.configure(options: options)
|
69
|
+
logger.verify
|
70
|
+
end
|
71
|
+
def test_core_validate
|
72
|
+
logger = Minitest::Mock.new
|
73
|
+
config, options = build_config_options_objects(CoreTest, {validate: true}, false)
|
74
|
+
logger.expect(:unknown, nil, ["Config Validated"])
|
75
|
+
Logger.class_variable_set(:@@instance, logger)
|
76
|
+
core = Core.new(config: config)
|
77
|
+
core.validate(options: options)
|
78
|
+
logger.verify
|
79
|
+
end
|
80
|
+
def test_core_increment
|
81
|
+
config, options = build_config_options_objects(CoreTest, {increment: true, working: true}, false)
|
82
|
+
source = File.join(test_files_path(CoreTest), "manifest_template")
|
83
|
+
target = File.join(test_files_path(CoreTest), "manifest")
|
84
|
+
FileUtils.cp(source, target)
|
85
|
+
core = Core.new(config: config)
|
86
|
+
Time.stub(:now, Time.new(2001, 02, 01)) do
|
87
|
+
core.increment(options: options)
|
88
|
+
end
|
89
|
+
assert_equal "020101.2", Manifest.new(config: config).build_version
|
90
|
+
FileUtils.rm(target)
|
91
|
+
end
|
92
|
+
def test_core_dostage
|
93
|
+
stager = Minitest::Mock.new
|
94
|
+
config, options = build_config_options_objects(CoreTest, {increment: true, working: true}, false)
|
95
|
+
stager.expect(:stage, nil)
|
96
|
+
core = Core.new(config: config)
|
97
|
+
Stager.stub(:new, stager) do
|
98
|
+
core.dostage(options: options)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
def test_core_dounstage
|
102
|
+
stager = Minitest::Mock.new
|
103
|
+
config, options = build_config_options_objects(CoreTest, {increment: true, working: true}, false)
|
104
|
+
stager.expect(:unstage, nil)
|
105
|
+
core = Core.new(config: config)
|
106
|
+
Stager.stub(:new, stager) do
|
107
|
+
core.dounstage(options: options)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
2
|
+
|
3
|
+
require_relative "../test_helper.rb"
|
4
|
+
module RokuBuilder
|
5
|
+
class InspectorTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
Logger.set_testing
|
8
|
+
RokuBuilder.setup_plugins
|
9
|
+
register_plugins(Inspector)
|
10
|
+
@requests = []
|
11
|
+
end
|
12
|
+
def teardown
|
13
|
+
@requests.each {|req| remove_request_stub(req)}
|
14
|
+
end
|
15
|
+
def test_inspector_parse_options_long
|
16
|
+
parser = OptionParser.new
|
17
|
+
options = {}
|
18
|
+
Inspector.parse_options(parser: parser, options: options)
|
19
|
+
argv = ["roku", "--inspect", "--screencapture", "--password", "password"]
|
20
|
+
parser.parse! argv
|
21
|
+
assert options[:inspect]
|
22
|
+
assert options[:screencapture]
|
23
|
+
assert_equal "password", options[:password]
|
24
|
+
end
|
25
|
+
def test_scripter_parse_options_short
|
26
|
+
parser = OptionParser.new
|
27
|
+
options = {}
|
28
|
+
Inspector.parse_options(parser: parser, options: options)
|
29
|
+
argv = ["roku", "-S"]
|
30
|
+
parser.parse! argv
|
31
|
+
assert options[:screencapture]
|
32
|
+
end
|
33
|
+
def test_inspector_inspect
|
34
|
+
logger = Minitest::Mock.new()
|
35
|
+
|
36
|
+
logger.expect(:formatter=, nil, [Proc])
|
37
|
+
logger.expect(:unknown, nil){|text| /=*/ =~ text}
|
38
|
+
logger.expect(:unknown, nil){|text| /app_name/ =~ text}
|
39
|
+
logger.expect(:unknown, nil){|text| /dev_id/ =~ text}
|
40
|
+
logger.expect(:unknown, nil, [String])
|
41
|
+
logger.expect(:unknown, nil){|text| /dev_zip/ =~ text}
|
42
|
+
logger.expect(:unknown, nil){|text| /=*/ =~ text}
|
43
|
+
|
44
|
+
body = "r1.insertCell(0).innerHTML = 'App Name: ';"+
|
45
|
+
" r1.insertCell(1).innerHTML = '<div class=\"roku-color-c3\">app_name</div>';"+
|
46
|
+
""+
|
47
|
+
" var r2 = table.insertRow(1);"+
|
48
|
+
" r2.insertCell(0).innerHTML = 'Dev ID: ';"+
|
49
|
+
" r2.insertCell(1).innerHTML = '<div class=\"roku-color-c3\"><font face=\"Courier\">dev_id</font></div>';"+
|
50
|
+
" "+
|
51
|
+
" var dd = new Date(628232400);"+
|
52
|
+
" var ddStr = \"\";"+
|
53
|
+
" ddStr += (dd.getMonth()+1);"+
|
54
|
+
" ddStr += \"/\";"+
|
55
|
+
" ddStr += dd.getDate();"+
|
56
|
+
" ddStr += \"/\";"+
|
57
|
+
" ddStr += dd.getFullYear();"+
|
58
|
+
" ddStr += \" \";"+
|
59
|
+
" ddStr += dd.getHours();"+
|
60
|
+
" ddStr += \":\";"+
|
61
|
+
" ddStr += dd.getMinutes();"+
|
62
|
+
" ddStr += \":\";"+
|
63
|
+
" ddStr += dd.getSeconds(); "+
|
64
|
+
" "+
|
65
|
+
" var r3 = table.insertRow(2);"+
|
66
|
+
" r3.insertCell(0).innerHTML = 'Creation Date: ';"+
|
67
|
+
" r3.insertCell(1).innerHTML = '<div class=\"roku-color-c3\">'+ddStr+'</div>';"+
|
68
|
+
" "+
|
69
|
+
" var r4 = table.insertRow(3);"+
|
70
|
+
" r4.insertCell(0).innerHTML = 'dev.zip: ';"+
|
71
|
+
" r4.insertCell(1).innerHTML = '<div class=\"roku-color-c3\"><font face=\"Courier\">dev_zip</font></div>';"
|
72
|
+
|
73
|
+
@requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
|
74
|
+
to_return(status: 200, body: body, headers: {}))
|
75
|
+
|
76
|
+
options = {inspect: true, in: File.join(test_files_path(InspectorTest), "test.pkg"), password: "password"}
|
77
|
+
config, options = build_config_options_objects(InspectorTest, options, false)
|
78
|
+
inspector = Inspector.new(config: config)
|
79
|
+
::Logger.stub(:new, logger) do
|
80
|
+
inspector.inspect(options: options)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
def test_inspector_inspect_old_interface
|
84
|
+
logger = Minitest::Mock.new()
|
85
|
+
|
86
|
+
logger.expect(:formatter=, nil, [Proc])
|
87
|
+
logger.expect(:unknown, nil){|text| /=*/ =~ text}
|
88
|
+
logger.expect(:unknown, nil){|text| /app_name/ =~ text}
|
89
|
+
logger.expect(:unknown, nil){|text| /dev_id/ =~ text}
|
90
|
+
logger.expect(:unknown, nil, [String])
|
91
|
+
logger.expect(:unknown, nil){|text| /dev_zip/ =~ text}
|
92
|
+
logger.expect(:unknown, nil){|text| /=*/ =~ text}
|
93
|
+
body = " <table cellpadding=\"2\">"+
|
94
|
+
" <tbody><tr><td> App Name: </td><td> <font color=\"blue\">app_name</font> </td></tr>"+
|
95
|
+
" <tr><td> Dev ID: </td><td> <font face=\"Courier\" color=\"blue\">dev_id</font> </td></tr>"+
|
96
|
+
" <tr><td> Creation Date: </td><td> <font color=\"blue\">"+
|
97
|
+
" <script type=\"text/javascript\">"+
|
98
|
+
" var d = new Date(628232400)"+
|
99
|
+
" document.write(d.getMonth()+1)"+
|
100
|
+
" document.write(\"/\")"+
|
101
|
+
" document.write(d.getDate())"+
|
102
|
+
" document.write(\"/\");"+
|
103
|
+
" document.write(d.getFullYear())"+
|
104
|
+
" document.write(\" \")"+
|
105
|
+
" document.write(d.getHours())"+
|
106
|
+
" document.write(\":\")"+
|
107
|
+
" document.write(d.getMinutes())"+
|
108
|
+
" document.write(\":\")"+
|
109
|
+
" document.write(d.getSeconds())"+
|
110
|
+
" </script>1/17/1970 16:42:28"+
|
111
|
+
" </font> </td></tr>"+
|
112
|
+
" <tr><td> dev.zip: </td><td> <font face=\"Courier\" color=\"blue\">dev_zip</font> </td></tr>"+
|
113
|
+
" </tbody></table>"
|
114
|
+
|
115
|
+
@requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
|
116
|
+
to_return(status: 200, body: body, headers: {}))
|
117
|
+
|
118
|
+
options = {inspect: true, in: File.join(test_files_path(InspectorTest), "test.pkg"), password: "password"}
|
119
|
+
config, options = build_config_options_objects(InspectorTest, options, false)
|
120
|
+
inspector = Inspector.new(config: config)
|
121
|
+
::Logger.stub(:new, logger) do
|
122
|
+
inspector.inspect(options: options)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_screencapture
|
127
|
+
body = "<hr /><img src=\"pkgs/dev.jpg?time=1455629573\">"
|
128
|
+
@requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
|
129
|
+
to_return(status: 200, body: body, headers: {}))
|
130
|
+
|
131
|
+
body2 = "<screencapture>"
|
132
|
+
@requests.push(stub_request(:get, "http://192.168.0.100/pkgs/dev.jpg?time=1455629573").
|
133
|
+
to_return(status: 200, body: body2, headers: {}))
|
134
|
+
|
135
|
+
io = Minitest::Mock.new()
|
136
|
+
io.expect("write", nil, [body2])
|
137
|
+
|
138
|
+
options = {screencapture: true }
|
139
|
+
config, options = build_config_options_objects(InspectorTest, options, false)
|
140
|
+
inspector = Inspector.new(config: config)
|
141
|
+
File.stub(:open, nil, io) do
|
142
|
+
inspector.screencapture(options: options)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
def test_screencapture_png
|
146
|
+
body = "<hr /><img src=\"pkgs/dev.png?time=1455629573\">"
|
147
|
+
@requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
|
148
|
+
to_return(status: 200, body: body, headers: {}))
|
149
|
+
|
150
|
+
body2 = "<screencapture>"
|
151
|
+
@requests.push(stub_request(:get, "http://192.168.0.100/pkgs/dev.png?time=1455629573").
|
152
|
+
to_return(status: 200, body: body2, headers: {}))
|
153
|
+
|
154
|
+
io = Minitest::Mock.new()
|
155
|
+
io.expect("write", nil, [body2])
|
156
|
+
|
157
|
+
options = {screencapture: true }
|
158
|
+
config, options = build_config_options_objects(InspectorTest, options, false)
|
159
|
+
inspector = Inspector.new(config: config)
|
160
|
+
File.stub(:open, nil, io) do
|
161
|
+
inspector.screencapture(options: options)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|