roku_builder_generator 0.2.1 → 0.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1689feb43f47e343530956db694328c6777d0949df073ee9187b274d53a4658c
4
- data.tar.gz: 498b94cd2b6e266d3ef1dcd8bf145fa19e177de83e531fe04716e212e73e6202
3
+ metadata.gz: 1853683defadf4bb9cf28a4b5aea7cc60fc7726bbcdaefece8956c5bc9b9436d
4
+ data.tar.gz: 8e46fd60a6bee8db1f4dc5f5e747084377b3a4cb8f80b883f959bbab19c1c126
5
5
  SHA512:
6
- metadata.gz: 9937fb52d8f1701a4c40a85db4d793ae16b840c00ddb21b05b8070713d156f4a52951cf7a1de0dc7bfade4ce23ba0cec772695b889928c6c3fab4e22dc88b286
7
- data.tar.gz: 5afc1b7ee76064e0ed340c15959bbbfb8e9755df8e917f5d3289e86b5556245401ab1a6ffe74423003265ead8327ecd03245fd78b08472982944bc76e945d683
6
+ metadata.gz: 9cab4f02389e86b1fe1a3ec96868a8919dbbfdee1ff956d6ee953c651eaa22e9f739e80b11b201504272dde389b9e2afba07d9be12ffc300d3032b998673e0b6
7
+ data.tar.gz: 7d314841d2473bfd2ff4f1fcc881a0eb5a3643e8c35ec111f69f29bf89cf7c28d8938a669864902b0f007f7b817415e051136c1bc76d17e4e19148b3e6e26b6d
data/README.md CHANGED
@@ -31,6 +31,10 @@ Options:
31
31
  --base-dir Base directory for generated brs/xml code (eg.: 'brands/core/components/<type>s')
32
32
  --with-config Add empty config JSON
33
33
  --config-dir Use custom directory for config json (eg.: 'brands/core/region/US/configs/<type>s')
34
+ --with-tests Add unit tests
35
+ --only-tests Only unit tests
36
+ --tests-dir Use custom directory for unit tests
37
+
34
38
  ```
35
39
 
36
40
  ### Examples
@@ -43,6 +47,10 @@ Generate a task ("Bar"), but just display the output on screen:
43
47
 
44
48
  `roku --generate task --name bar --dry-run -V`
45
49
 
50
+ Generate a module ("Buz"), and also generate config and unit tests
51
+
52
+ `roku --generate module --name buz --with-config --with-tests`
53
+
46
54
  ### Config
47
55
 
48
56
  You can supplement the default configuration using a local file `.roku_builder_generator.json`
@@ -7,6 +7,7 @@ def default_config()
7
7
  return {
8
8
  :component_dir => "brands/%brand%/components",
9
9
  :config_dir => "brands/%brand%/region/US/configs",
10
+ :unitTests_dir => "brands/unit-tests/components/tests",
10
11
  :template_dir => "roku_builder_generator"
11
12
  }
12
13
  end
@@ -23,6 +24,11 @@ def default_config_dir(component_type, brand = 'core', base_dir = nil)
23
24
  return "#{base_dir}/#{component_type.capitalize()}s"
24
25
  end
25
26
 
27
+ def default_unitTests_dir(component_type, base_dir = nil)
28
+ base_dir = base_dir || default_config[:unitTests_dir]
29
+ return "#{base_dir}/#{component_type.capitalize()}s"
30
+ end
31
+
26
32
 
27
33
  def replace_brand(directory, newBrand = 'core')
28
34
  directory["%brand%"]=newBrand
@@ -65,6 +71,12 @@ module RokuBuilder
65
71
  return "./#{base_dir}"
66
72
  end
67
73
 
74
+ def get_unitTests_output_dir(component_type, component_name, custom_dir = nil )
75
+ output_dir = get_directory_name(component_type, component_name)
76
+ base_dir = !custom_dir.nil? ? custom_dir : default_unitTests_dir(component_type)
77
+ return "./#{base_dir}/#{output_dir}"
78
+ end
79
+
68
80
  # Hook to add options to the parser
69
81
  # The keys set in options for commands must match the keys in the commands
70
82
  # hash
@@ -93,6 +105,16 @@ module RokuBuilder
93
105
  parser.on("--config-dir", "Use custom directory for config json (eg.: '#{default_config_dir('<type>')}')") do |d|
94
106
  options[:config_dir] = d
95
107
  end
108
+ parser.on("--with-tests", "Add unit tests") do |d|
109
+ options[:with_tests] = true
110
+ end
111
+ parser.on("--only-tests", "Only unit tests") do |d|
112
+ options[:only_tests] = true
113
+ options[:with_tests] = true
114
+ end
115
+ parser.on("--tests-dir", "Use custom directory for unit tests (eg.: '#{default_unitTests_dir('<type>')}')") do |d|
116
+ options[:tests_dir] = d
117
+ end
96
118
  parser.on("--dry-run", "Do not write files, just output") do |d|
97
119
  options[:dry_run] = true
98
120
  end
@@ -130,7 +152,6 @@ module RokuBuilder
130
152
 
131
153
  def component_has_config_json(component_type)
132
154
  ['module', 'screen', 'manager'].include? component_type
133
-
134
155
  end
135
156
 
136
157
  def generate(options:)
@@ -145,7 +166,7 @@ module RokuBuilder
145
166
  component_name_parts = options[:name].split('/')
146
167
  component_proper_name = capitalizeFirst(component_name_parts.last)
147
168
  component_parent_dir = component_name_parts.first(component_name_parts.size-1).join('/')
148
- brand = brand.downcase
169
+ brand = options[:brand].downcase
149
170
 
150
171
  component_name = get_file_name(component_type, component_proper_name)
151
172
  component = RokuBuilderGenerator::BrsComponent.new(component_name, options[:extends], component_type, @logger)
@@ -153,27 +174,52 @@ module RokuBuilder
153
174
  brs_text = component.render("brs")
154
175
  json_text = options[:with_config] && component_has_config_json(component_type) ? component.render("json") : nil
155
176
 
177
+ test_xml_text = options[:with_tests] ? component.renderTest("xml") : nil
178
+ test_brs_text = options[:with_tests] ? component.renderTest("brs") : nil
179
+ testSetup_brs_text = options[:with_tests] ? component.renderTestSetup() : nil
180
+
156
181
  output_dir = get_output_dir(component_type, component_name, brand, component_parent_dir, options[:custom_dir], config[:component_dir])
157
182
  output_config_dir = get_config_output_dir(component_type, brand, options[:config_dir])
158
183
  output_file_name = File.join(output_dir, component_name)
159
184
  output_config_file_name = File.join(output_config_dir, component_proper_name)
160
185
 
186
+ output_unitTests_dir = get_unitTests_output_dir(component_type, component_proper_name, options[:tests_dir])
187
+
188
+ test_component_name= "Test_"+component_proper_name
189
+
190
+ output_test_file_name = File.join(output_unitTests_dir, test_component_name)
191
+ output_test_setup_file_name= File.join(output_unitTests_dir, test_component_name+"_Setup")
192
+
161
193
  if(options[:dry_run])
162
194
  @logger.unknown "Dry Run, not writing files"
163
195
  show_line()
164
- display_file(output_file_name+".xml", xml_text)
165
- display_file(output_file_name+".brs", brs_text)
166
- display_file(output_config_file_name+".json", json_text)
196
+ unless options[:only_tests]
197
+ display_file(output_file_name+".xml", xml_text)
198
+ display_file(output_file_name+".brs", brs_text)
199
+ display_file(output_config_file_name+".json", json_text)
200
+ end
201
+
202
+ display_file(output_test_file_name+".xml", test_xml_text)
203
+ display_file(output_test_file_name+".brs", test_brs_text)
204
+ display_file(output_test_setup_file_name+".brs", testSetup_brs_text)
167
205
  else
168
206
  @logger.unknown "Writing files"
169
207
  show_line()
170
- FileUtils.mkdir_p output_dir
171
- unless json_text.nil?
172
- FileUtils.mkdir_p output_config_dir
208
+ unless options[:only_tests]
209
+ FileUtils.mkdir_p output_dir
210
+ unless json_text.nil?
211
+ FileUtils.mkdir_p output_config_dir
212
+ end
213
+ write_file(output_file_name+".xml", xml_text)
214
+ write_file(output_file_name+".brs", brs_text)
215
+ write_file(output_config_file_name+".json", json_text)
216
+ end
217
+ unless test_xml_text.nil?
218
+ FileUtils.mkdir_p output_unitTests_dir
173
219
  end
174
- write_file(output_file_name+".xml", xml_text)
175
- write_file(output_file_name+".brs", brs_text)
176
- write_file(output_config_file_name+".json", json_text)
220
+ write_file(output_test_file_name+".xml", test_xml_text)
221
+ write_file(output_test_file_name+".brs", test_brs_text)
222
+ write_file(output_test_setup_file_name+".brs", testSetup_brs_text)
177
223
  end
178
224
  end
179
225
 
@@ -27,6 +27,26 @@ module RokuBuilderGenerator
27
27
  return nil
28
28
  end
29
29
 
30
+ def renderTest(file_type)
31
+ file_name = get_template_name("test", file_type)
32
+
33
+ unless file_name.nil?
34
+ template = File.read(file_name)
35
+ return render_template(template)
36
+ end
37
+ return nil
38
+ end
39
+
40
+ def renderTestSetup()
41
+ file_name = get_template_name("test_Setup", "brs")
42
+
43
+ unless file_name.nil?
44
+ template = File.read(file_name)
45
+ return render_template(template)
46
+ end
47
+ return nil
48
+ end
49
+
30
50
  def log(message)
31
51
  unless @logger.nil?
32
52
  @logger.info message
@@ -0,0 +1,6 @@
1
+ sub init()
2
+ Runner = TestRunner()
3
+ Runner.SetFunctions([
4
+ TestSuite__<%= name %>_Setup
5
+ ])
6
+ end sub
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <!-- ##COPYRIGHT HEADER## -->
3
+
4
+ <component name="Test_<%= name %>" extends="<%= name %>">
5
+ <!-- Function, used by framework, to run tests. Should not be called manually! -->
6
+ <interface>
7
+ <function name="TestFramework__RunNodeTests"/>
8
+ </interface>
9
+
10
+ <!-- Import test suites. -->
11
+ <script type="text/brightscript" uri="Test_<%= name %>.brs" />
12
+ <script type="text/brightscript" uri="Test_<%= name %>_Setup.brs" />
13
+
14
+ <!-- Import test framework. -->
15
+ <script type="text/brightscript" uri="pkg:/source/UnitTestFramework.brs"/>
16
+ </component>
@@ -0,0 +1,20 @@
1
+ function TestSuite__<%= name %>_Setup()
2
+ ' Inherit your test suite from BaseTestSuite
3
+ this = BaseTestSuite()
4
+
5
+ ' Test suite name for log statistics
6
+ this.Name = "TestSuite_<%= name %>_Setup"
7
+
8
+ ' Add tests to suite's tests collection
9
+ this.addTest("TestCase_Config_Exists", TestCase_Config_Exists)
10
+
11
+ return this
12
+ end function
13
+
14
+ function TestCase_Config_Exists()
15
+ config = getGlobalAA().channelConfig
16
+ top = getGlobalAA().top
17
+
18
+ m.assertNotInvalid(config)
19
+ return m.assertNotInvalid(top)
20
+ end function
@@ -1,4 +1,4 @@
1
1
  module RokuBuilderGenerator
2
2
  NAME = "roku_builder_generator"
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.1"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Pearce
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-15 00:00:00.000000000 Z
11
+ date: 2022-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roku_builder
@@ -58,13 +58,16 @@ files:
58
58
  - lib/roku_builder_generator/templates/manager.brs.erb
59
59
  - lib/roku_builder_generator/templates/module.xml.erb
60
60
  - lib/roku_builder_generator/templates/screen.xml.erb
61
+ - lib/roku_builder_generator/templates/test.brs.erb
62
+ - lib/roku_builder_generator/templates/test.xml.erb
63
+ - lib/roku_builder_generator/templates/test_Setup.brs.erb
61
64
  - lib/roku_builder_generator/utils.rb
62
65
  - lib/roku_builder_generator/version.rb
63
66
  - roku_builder_generator.gemspec
64
67
  homepage: ''
65
68
  licenses: []
66
69
  metadata: {}
67
- post_install_message:
70
+ post_install_message:
68
71
  rdoc_options: []
69
72
  require_paths:
70
73
  - lib
@@ -79,8 +82,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
82
  - !ruby/object:Gem::Version
80
83
  version: '0'
81
84
  requirements: []
82
- rubygems_version: 3.0.8
83
- signing_key:
85
+ rubygems_version: 3.2.32
86
+ signing_key:
84
87
  specification_version: 4
85
88
  summary: RokuBuilder Generator Plugin
86
89
  test_files: []