roku_builder_generator 0.2.1 → 0.3.1

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