origen 0.0.1 → 0.0.2

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 (336) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ctags +0 -0
  3. data/bin/origen +165 -1
  4. data/bin/rgen +2 -0
  5. data/config/application.rb +141 -0
  6. data/config/commands.rb +72 -0
  7. data/config/development.rb +7 -0
  8. data/config/environment.rb +0 -0
  9. data/config/rgen.policy +7 -0
  10. data/config/rubocop/easy.yml +620 -0
  11. data/config/rubocop/easy_disabled.yml +271 -0
  12. data/config/rubocop/easy_enabled.yml +731 -0
  13. data/config/rubocop/strict.yml +620 -0
  14. data/config/rubocop/strict_disabled.yml +247 -0
  15. data/config/rubocop/strict_enabled.yml +755 -0
  16. data/config/users.rb +20 -0
  17. data/config/version.rb +1 -1
  18. data/helpers/url.rb +68 -0
  19. data/lib/c99/doc_interface.rb +56 -0
  20. data/lib/c99/j750_interface.rb +85 -0
  21. data/lib/c99/nvm.rb +89 -0
  22. data/lib/c99/target/mock2.rb +1 -0
  23. data/lib/c99/target/subdir/mock3.rb +1 -0
  24. data/lib/option_parser/optparse.rb +12 -0
  25. data/lib/origen/acronyms.rb +60 -0
  26. data/lib/origen/application/command_dispatcher.rb +12 -0
  27. data/lib/origen/application/configuration.rb +206 -0
  28. data/lib/origen/application/configuration_manager.rb +78 -0
  29. data/lib/origen/application/deployer.rb +367 -0
  30. data/lib/origen/application/environment.rb +186 -0
  31. data/lib/origen/application/lsf.rb +145 -0
  32. data/lib/origen/application/lsf_manager.rb +657 -0
  33. data/lib/origen/application/plugins_manager.rb +280 -0
  34. data/lib/origen/application/release.rb +359 -0
  35. data/lib/origen/application/runner.rb +246 -0
  36. data/lib/origen/application/statistics.rb +191 -0
  37. data/lib/origen/application/target.rb +374 -0
  38. data/lib/origen/application/version_tracker.rb +59 -0
  39. data/lib/origen/application/workspace_manager.rb +151 -0
  40. data/lib/origen/application.rb +746 -0
  41. data/lib/origen/bugs/bug.rb +36 -0
  42. data/lib/origen/bugs.rb +45 -0
  43. data/lib/origen/callbacks.rb +35 -0
  44. data/lib/origen/chip_mode.rb +118 -0
  45. data/lib/origen/chip_package.rb +461 -0
  46. data/lib/origen/client.rb +87 -0
  47. data/lib/origen/code_generators/actions.rb +258 -0
  48. data/lib/origen/code_generators/base.rb +57 -0
  49. data/lib/origen/code_generators/bundler.rb +17 -0
  50. data/lib/origen/code_generators/gem_setup.rb +49 -0
  51. data/lib/origen/code_generators/rake.rb +13 -0
  52. data/lib/origen/code_generators/rspec.rb +12 -0
  53. data/lib/origen/code_generators/semver.rb +39 -0
  54. data/lib/origen/code_generators/timever.rb +37 -0
  55. data/lib/origen/code_generators.rb +111 -0
  56. data/lib/origen/commands/add.rb +12 -0
  57. data/lib/origen/commands/compile.rb +62 -0
  58. data/lib/origen/commands/ctags.rb +9 -0
  59. data/lib/origen/commands/dispatch.rb +22 -0
  60. data/lib/origen/commands/environment.rb +11 -0
  61. data/lib/origen/commands/fetch.rb +63 -0
  62. data/lib/origen/commands/generate.rb +130 -0
  63. data/lib/origen/commands/interactive.rb +73 -0
  64. data/lib/origen/commands/lint.rb +82 -0
  65. data/lib/origen/commands/lsf.rb +93 -0
  66. data/lib/origen/commands/merge.rb +55 -0
  67. data/lib/origen/commands/modifications.rb +12 -0
  68. data/lib/origen/commands/new.rb +113 -0
  69. data/lib/origen/commands/plugin.rb +105 -0
  70. data/lib/origen/commands/program.rb +70 -0
  71. data/lib/origen/commands/rc.rb +442 -0
  72. data/lib/origen/commands/save.rb +56 -0
  73. data/lib/origen/commands/target.rb +27 -0
  74. data/lib/origen/commands/time.rb +127 -0
  75. data/lib/origen/commands/version.rb +17 -0
  76. data/lib/origen/commands/web.rb +221 -0
  77. data/lib/origen/commands.rb +272 -0
  78. data/lib/origen/commands_global.rb +76 -0
  79. data/lib/origen/controller.rb +94 -0
  80. data/lib/origen/core_ext/array.rb +23 -0
  81. data/lib/origen/core_ext/bignum.rb +36 -0
  82. data/lib/origen/core_ext/enumerable.rb +76 -0
  83. data/lib/origen/core_ext/fixnum.rb +46 -0
  84. data/lib/origen/core_ext/hash.rb +52 -0
  85. data/lib/origen/core_ext/module.rb +14 -0
  86. data/lib/origen/core_ext/numeric.rb +126 -0
  87. data/lib/origen/core_ext/object.rb +13 -0
  88. data/lib/origen/core_ext/range.rb +7 -0
  89. data/lib/origen/core_ext/string.rb +124 -0
  90. data/lib/origen/core_ext.rb +10 -0
  91. data/lib/origen/database/key_value_store.rb +111 -0
  92. data/lib/origen/database/key_value_stores.rb +108 -0
  93. data/lib/origen/database.rb +6 -0
  94. data/lib/origen/encodings.rb +102 -0
  95. data/lib/origen/features/feature.rb +22 -0
  96. data/lib/origen/features.rb +104 -0
  97. data/lib/origen/file_handler.rb +429 -0
  98. data/lib/origen/generator/comparator.rb +56 -0
  99. data/lib/origen/generator/compiler.rb +277 -0
  100. data/lib/origen/generator/flow.rb +49 -0
  101. data/lib/origen/generator/job.rb +131 -0
  102. data/lib/origen/generator/pattern.rb +356 -0
  103. data/lib/origen/generator/pattern_finder.rb +155 -0
  104. data/lib/origen/generator/pattern_iterator.rb +55 -0
  105. data/lib/origen/generator/renderer.rb +113 -0
  106. data/lib/origen/generator/resources.rb +40 -0
  107. data/lib/origen/generator/stage.rb +89 -0
  108. data/lib/origen/generator.rb +85 -0
  109. data/lib/origen/global_methods.rb +205 -0
  110. data/lib/origen/import_manager.rb +596 -0
  111. data/lib/origen/location/base.rb +116 -0
  112. data/lib/origen/location/map.rb +83 -0
  113. data/lib/origen/location.rb +6 -0
  114. data/lib/origen/log.rb +217 -0
  115. data/lib/origen/logger_methods.rb +56 -0
  116. data/lib/origen/mode.rb +61 -0
  117. data/lib/origen/model.rb +267 -0
  118. data/lib/origen/model_initializer.rb +45 -0
  119. data/lib/origen/nvm/block_array.rb +72 -0
  120. data/lib/origen/nvm.rb +6 -0
  121. data/lib/origen/parameters/live.rb +22 -0
  122. data/lib/origen/parameters/missing.rb +28 -0
  123. data/lib/origen/parameters/set.rb +144 -0
  124. data/lib/origen/parameters.rb +107 -0
  125. data/lib/origen/pdm.rb +218 -0
  126. data/lib/origen/pins/function_proxy.rb +36 -0
  127. data/lib/origen/pins/ground_pin.rb +6 -0
  128. data/lib/origen/pins/pin.rb +860 -0
  129. data/lib/origen/pins/pin_bank.rb +349 -0
  130. data/lib/origen/pins/pin_clock.rb +124 -0
  131. data/lib/origen/pins/pin_collection.rb +492 -0
  132. data/lib/origen/pins/pin_common.rb +206 -0
  133. data/lib/origen/pins/port.rb +268 -0
  134. data/lib/origen/pins/power_pin.rb +30 -0
  135. data/lib/origen/pins.rb +696 -0
  136. data/lib/origen/registers/bit.rb +562 -0
  137. data/lib/origen/registers/bit_collection.rb +787 -0
  138. data/lib/origen/registers/container.rb +288 -0
  139. data/lib/origen/registers/domain.rb +16 -0
  140. data/lib/origen/registers/reg.rb +1406 -0
  141. data/lib/origen/registers/reg_collection.rb +24 -0
  142. data/lib/origen/registers.rb +652 -0
  143. data/lib/origen/regression_manager.rb +251 -0
  144. data/lib/origen/remote_manager.rb +340 -0
  145. data/lib/origen/revision_control/base.rb +257 -0
  146. data/lib/origen/revision_control/design_sync.rb +276 -0
  147. data/lib/origen/revision_control/git.rb +243 -0
  148. data/lib/origen/revision_control/subversion.rb +6 -0
  149. data/lib/origen/revision_control.rb +44 -0
  150. data/lib/origen/ruby_version_check.rb +131 -0
  151. data/lib/origen/site_config.rb +61 -0
  152. data/lib/origen/specs/checkers.rb +103 -0
  153. data/lib/origen/specs/creation_info.rb +17 -0
  154. data/lib/origen/specs/doc_resource.rb +91 -0
  155. data/lib/origen/specs/exhibit.rb +17 -0
  156. data/lib/origen/specs/mode_select.rb +16 -0
  157. data/lib/origen/specs/note.rb +17 -0
  158. data/lib/origen/specs/override.rb +21 -0
  159. data/lib/origen/specs/power_supply.rb +13 -0
  160. data/lib/origen/specs/spec.rb +226 -0
  161. data/lib/origen/specs/version_history.rb +14 -0
  162. data/lib/origen/specs.rb +552 -0
  163. data/lib/origen/sub_blocks.rb +298 -0
  164. data/lib/origen/tester/api.rb +277 -0
  165. data/lib/origen/tester/bdm/bdm.rb +25 -0
  166. data/lib/origen/tester/command_based_tester.rb +46 -0
  167. data/lib/origen/tester/doc/doc.rb +226 -0
  168. data/lib/origen/tester/doc/generator/flow.rb +71 -0
  169. data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
  170. data/lib/origen/tester/doc/generator/test.rb +68 -0
  171. data/lib/origen/tester/doc/generator/test_group.rb +66 -0
  172. data/lib/origen/tester/doc/generator/tests.rb +47 -0
  173. data/lib/origen/tester/doc/generator.rb +126 -0
  174. data/lib/origen/tester/doc/model.rb +162 -0
  175. data/lib/origen/tester/generator/flow_control_api.rb +606 -0
  176. data/lib/origen/tester/generator/identity_map.rb +25 -0
  177. data/lib/origen/tester/generator/placeholder.rb +13 -0
  178. data/lib/origen/tester/generator/test_numberer.rb +25 -0
  179. data/lib/origen/tester/generator.rb +271 -0
  180. data/lib/origen/tester/interface.rb +154 -0
  181. data/lib/origen/tester/j750/files.rb +45 -0
  182. data/lib/origen/tester/j750/generator/flow.rb +123 -0
  183. data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
  184. data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
  185. data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
  186. data/lib/origen/tester/j750/generator/patset.rb +111 -0
  187. data/lib/origen/tester/j750/generator/patsets.rb +41 -0
  188. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
  189. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
  190. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
  191. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
  192. data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
  193. data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
  194. data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
  195. data/lib/origen/tester/j750/generator.rb +203 -0
  196. data/lib/origen/tester/j750/j750.rb +845 -0
  197. data/lib/origen/tester/j750/j750_hpt.rb +35 -0
  198. data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
  199. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  200. data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
  201. data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
  202. data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
  203. data/lib/origen/tester/j750/parser/flow.rb +111 -0
  204. data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
  205. data/lib/origen/tester/j750/parser/flows.rb +23 -0
  206. data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
  207. data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
  208. data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
  209. data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
  210. data/lib/origen/tester/j750/parser/timeset.rb +15 -0
  211. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  212. data/lib/origen/tester/j750/parser.rb +104 -0
  213. data/lib/origen/tester/jlink/jlink.rb +33 -0
  214. data/lib/origen/tester/parser/description_lookup.rb +64 -0
  215. data/lib/origen/tester/parser/searchable_array.rb +32 -0
  216. data/lib/origen/tester/parser/searchable_hash.rb +32 -0
  217. data/lib/origen/tester/parser.rb +24 -0
  218. data/lib/origen/tester/time.rb +338 -0
  219. data/lib/origen/tester/timing.rb +253 -0
  220. data/lib/origen/tester/ultraflex/files.rb +45 -0
  221. data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
  222. data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
  223. data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
  224. data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
  225. data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
  226. data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
  227. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
  228. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
  229. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
  230. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
  231. data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
  232. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
  233. data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
  234. data/lib/origen/tester/ultraflex/generator.rb +200 -0
  235. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
  236. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  237. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
  238. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
  239. data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
  240. data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
  241. data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
  242. data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
  243. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
  244. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
  245. data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
  246. data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
  247. data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
  248. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  249. data/lib/origen/tester/ultraflex/parser.rb +104 -0
  250. data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
  251. data/lib/origen/tester/v93k/generator/flow.rb +63 -0
  252. data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
  253. data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
  254. data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
  255. data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
  256. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
  257. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
  258. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
  259. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
  260. data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
  261. data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
  262. data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
  263. data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
  264. data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
  265. data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
  266. data/lib/origen/tester/v93k/generator.rb +80 -0
  267. data/lib/origen/tester/v93k/v93k.rb +420 -0
  268. data/lib/origen/tester/vector.rb +86 -0
  269. data/lib/origen/tester/vector_generator.rb +633 -0
  270. data/lib/origen/tester/vector_pipeline.rb +150 -0
  271. data/lib/origen/tester.rb +56 -0
  272. data/lib/origen/top_level.rb +134 -0
  273. data/lib/origen/users/ldap.rb +65 -0
  274. data/lib/origen/users/user.rb +149 -0
  275. data/lib/origen/users.rb +30 -0
  276. data/lib/origen/utility/block_args.rb +93 -0
  277. data/lib/origen/utility/csv_data.rb +110 -0
  278. data/lib/origen/utility/design_sync.rb +494 -0
  279. data/lib/origen/utility/diff.rb +158 -0
  280. data/lib/origen/utility/input_capture.rb +121 -0
  281. data/lib/origen/utility/mailer.rb +143 -0
  282. data/lib/origen/utility/s_record.rb +205 -0
  283. data/lib/origen/utility/time_and_date.rb +30 -0
  284. data/lib/origen/utility.rb +12 -0
  285. data/lib/origen/version_checker.rb +117 -0
  286. data/lib/origen/version_string.rb +356 -0
  287. data/lib/origen.rb +648 -0
  288. data/lib/tasks/gem.rake +27 -22
  289. data/origen_site_config.yml +36 -0
  290. data/source_setup +17 -0
  291. data/spec/format/rgen_formatter.rb +14 -0
  292. data/templates/api_doc/README.txt.erb +24 -0
  293. data/templates/code_generators/gemfile_app.rb +4 -0
  294. data/templates/code_generators/gemfile_plugin.rb +6 -0
  295. data/templates/code_generators/gemspec.rb +33 -0
  296. data/templates/code_generators/rakefile.rb +10 -0
  297. data/templates/code_generators/spec_helper.rb +49 -0
  298. data/templates/code_generators/version.rb +8 -0
  299. data/templates/code_generators/version_time.rb +3 -0
  300. data/templates/git/gitignore.erb +33 -0
  301. data/templates/j750/_vt_flow.txt.erb +8 -0
  302. data/templates/j750/_vt_instances.txt.erb +4 -0
  303. data/templates/j750/program_sheet.txt.erb +9 -0
  304. data/templates/nanoc/Rules +74 -0
  305. data/templates/nanoc/config.yaml +77 -0
  306. data/templates/nanoc/content/favicon.ico +0 -0
  307. data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
  308. data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
  309. data/templates/nanoc/layouts/freescale.html.erb +79 -0
  310. data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
  311. data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
  312. data/templates/nanoc/lib/default.rb +2 -0
  313. data/templates/nanoc/lib/gzip_filter.rb +16 -0
  314. data/templates/nanoc/lib/haml_code_filter.rb +41 -0
  315. data/templates/nanoc/lib/helpers.rb +1 -0
  316. data/templates/nanoc/lib/search_filter.rb +62 -0
  317. data/templates/nanoc_dynamic/content/search.js.erb +92 -0
  318. data/templates/shared/web/_logo.html +10 -0
  319. data/templates/test/_inline_sub.txt.erb +2 -0
  320. data/templates/test/environment.txt.erb +1 -0
  321. data/templates/test/inline.txt.erb +11 -0
  322. data/templates/test/inspections.txt.erb +19 -0
  323. data/templates/test/set1/_sub1.txt.erb +12 -0
  324. data/templates/test/set1/_sub4.txt.erb +1 -0
  325. data/templates/test/set1/_sub5.txt.erb +1 -0
  326. data/templates/test/set1/main.txt.erb +53 -0
  327. data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
  328. data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
  329. data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
  330. data/templates/test/set2/template_with_no_erb_1.txt +9 -0
  331. data/templates/test/set2/template_with_no_erb_2.txt +9 -0
  332. data/templates/test/set3/_layout.html.erb +4 -0
  333. data/templates/test/set3/content.html.erb +6 -0
  334. data/templates/time/filter.rb.erb +15 -0
  335. data/templates/time/rules.rb.erb +45 -0
  336. metadata +639 -5
@@ -0,0 +1,226 @@
1
+ module Origen
2
+ module Tester
3
+ # Tester model to generate test program documentation from your pattern sources.
4
+ # This is intended to be a drop in replacement for existing testers and instead
5
+ # of generating patterns or test program sheets it will generate a document object
6
+ # which you can then render out via a template or manually.
7
+ class Doc
8
+ include Tester
9
+
10
+ autoload :Generator, 'origen/tester/doc/generator'
11
+ autoload :Model, 'origen/tester/doc/model'
12
+
13
+ attr_accessor :html_mode
14
+
15
+ def generate?
16
+ html_mode
17
+ end
18
+
19
+ def initialize(*_args)
20
+ @pat_extension = 'md'
21
+ @indent = 0
22
+ @snip_counters = []
23
+ end
24
+
25
+ # Snip the number of comment lines generated by the contained block
26
+ # to the number given, this is useful for keeping files sizes down and
27
+ # is typically used to snip sections like downloading LRE code.
28
+ def snip(number, _options = {})
29
+ @snip_counters.push number + 1
30
+ yield
31
+ @snip_counters.pop
32
+ end
33
+
34
+ def pc(msg)
35
+ if @snip_counters.last
36
+ if @snip_counters.last == 1
37
+ @snip_counters[@snip_counters.size - 1] = 0
38
+ msg = ' ...snipped'
39
+ elsif @snip_counters.last == 0
40
+ return
41
+ else
42
+ @snip_counters[@snip_counters.size - 1] -= 1
43
+ end
44
+ end
45
+ if html_mode
46
+ push_comment(msg)
47
+ else
48
+ Origen.log.info((' ' * @indent) + msg)
49
+ end
50
+ end
51
+
52
+ def c1(msg, options = {})
53
+ if generating_program?
54
+ Origen.interface.doc_comments_capture(msg)
55
+ else
56
+ unless @inhibit_comments
57
+ options = {
58
+ prefix: true
59
+ }.merge(options)
60
+ if @step_comment_on
61
+ open_text_block
62
+ if options[:prefix]
63
+ pc "# #{msg}"
64
+ else
65
+ pc "#{msg}"
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ def c2(msg, options = {})
73
+ unless @inhibit_comments
74
+ options = {
75
+ prefix: true
76
+ }.merge(options)
77
+ open_text_block
78
+ if options[:prefix]
79
+ pc "# #{msg}"
80
+ else
81
+ pc "#{msg}"
82
+ end
83
+ end
84
+ end
85
+
86
+ def annotate(msg, _options)
87
+ unless @inhibit_comments
88
+ if html_mode
89
+ pc ''
90
+ lines = msg.split("\n")
91
+ leading_spaces = lines.first[/\A */].size
92
+ lines.each do |line|
93
+ pc line.gsub(/^.{#{leading_spaces}}/, '')
94
+ end
95
+ pc ''
96
+ end
97
+ end
98
+ end
99
+
100
+ def open_text_block
101
+ if html_mode
102
+ unless @text_block_open
103
+ pc ''
104
+ pc '~~~text'
105
+ @text_block_open = true
106
+ end
107
+ end
108
+ end
109
+
110
+ def close_text_block
111
+ if html_mode
112
+ if @text_block_open
113
+ pc '~~~'
114
+ pc ''
115
+ @text_block_open = false
116
+ end
117
+ end
118
+ end
119
+
120
+ def pattern_name
121
+ Origen.app.current_job.output_pattern_filename.gsub('.md', '')
122
+ end
123
+
124
+ def pre_header
125
+ # pc "---"
126
+ # pc "layout: bootstrap"
127
+ # pc "title: #{pattern_name}"
128
+ # pc "gzip: false"
129
+ # pc "---"
130
+ # pc ""
131
+ # pc "# #{pattern_name}"
132
+ # pc ""
133
+ end
134
+
135
+ def pattern_section(msg)
136
+ unless @inhibit_comments
137
+ if generating_program?
138
+ Origen.interface.flow.start_section(name: msg)
139
+ yield
140
+ Origen.interface.flow.stop_section
141
+ else
142
+ if html_mode
143
+ counter = next_accordion_counter
144
+ close_text_block
145
+ pc ''
146
+ pc "<div class=\"accordion-group\">"
147
+ pc "<div class=\"accordion-heading\">"
148
+ pc "<a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion2\" href=\"#collapseComment#{counter}\">"
149
+ pc "#{msg}"
150
+ pc '</a>'
151
+ pc '</div>'
152
+ pc "<div id=\"collapseComment#{counter}\" class=\"accordion-body collapse\">"
153
+ pc "<div class=\"accordion-inner\" markdown=\"1\">"
154
+ yield
155
+ close_text_block
156
+ pc '</div>'
157
+ pc '</div>'
158
+ pc '</div>'
159
+ else
160
+ pc ''
161
+ pc "#{msg}"
162
+ pc ''
163
+ @indent += 4
164
+ yield
165
+ @indent -= 4
166
+ end
167
+ end
168
+ end
169
+ end
170
+
171
+ def next_accordion_counter
172
+ @accordion_counter ||= 0
173
+ @accordion_counter += 1
174
+ end
175
+
176
+ def ss(msg = nil)
177
+ unless @inhibit_comments
178
+ @step_comment_on = true
179
+ if block_given?
180
+ yield
181
+ else
182
+ c2(msg)
183
+ end
184
+ @step_comment_on = false
185
+ end
186
+ end
187
+
188
+ def self.generate_program_model(files, options = {})
189
+ options = {
190
+ action: :program,
191
+ return_model: true,
192
+ skip_diff: true
193
+ }.merge(options)
194
+ Origen.app.with_doc_tester do
195
+ Origen.target.temporary = options[:target] if options[:target]
196
+ Origen.app.load_target!
197
+ Origen.interface.reset_globals
198
+ options[:files] = files
199
+ Origen.file_handler.preserve_and_clear_state do
200
+ Origen.app.runner.launch(options)
201
+ end
202
+ end
203
+ model.target = Origen.target.name
204
+ model
205
+ end
206
+
207
+ def self.model
208
+ @model ||= Model.new
209
+ end
210
+
211
+ def doc?
212
+ true
213
+ end
214
+
215
+ def cycle(_options = {})
216
+ end
217
+
218
+ # Ignore any tester-specific methods
219
+ def method_missing(_method, *_args, &_block)
220
+ if block_given?
221
+ yield
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
@@ -0,0 +1,71 @@
1
+ module Origen
2
+ module Tester
3
+ class Doc
4
+ module Generator
5
+ class Flow
6
+ include Origen::Tester::Generator
7
+ include Origen::Tester::Generator::FlowControlAPI
8
+
9
+ OUTPUT_POSTFIX = 'flow'
10
+ OUTPUT_EXTENSION = 'yaml'
11
+
12
+ def add(type, options = {})
13
+ preserve_comments = options.delete(:preserve_comments)
14
+ line = track_relationships(options) do |options|
15
+ FlowLine.new(type, options)
16
+ end
17
+ collection << line unless Origen.interface.resources_mode?
18
+ if preserve_comments
19
+ line.description = Origen.interface.doc_comments
20
+ else
21
+ line.description = Origen.interface.doc_comments_consume
22
+ end
23
+ line
24
+ end
25
+
26
+ def start_section(options = {})
27
+ l = FlowLine.new(:section_start, options)
28
+ if options[:name]
29
+ desc = [options[:name]]
30
+ else
31
+ desc = []
32
+ end
33
+ l.description = desc + Origen.interface.doc_comments_consume
34
+ collection << l
35
+ end
36
+
37
+ def stop_section(options = {})
38
+ collection << FlowLine.new(:section_stop, options)
39
+ end
40
+
41
+ def test(instance, options = {})
42
+ options = save_context(options)
43
+ add(:test, { test: instance }.merge(options))
44
+ end
45
+
46
+ def set_device(options = {})
47
+ add(:set_device, options)
48
+ end
49
+
50
+ def to_yaml(options = {})
51
+ collection.map { |l| l.to_yaml(options) }
52
+ end
53
+
54
+ def render(file, options = {})
55
+ options[:file] = file
56
+ add(:render, options)
57
+ end
58
+
59
+ def skip(identifier = nil, options = {})
60
+ identifier, options = nil, identifier if identifier.is_a?(Hash)
61
+ identifier = generate_unique_label(identifier)
62
+ options[:test] = identifier
63
+ add(:branch, options)
64
+ yield
65
+ add(:label, test: identifier)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,203 @@
1
+ module Origen
2
+ module Tester
3
+ class Doc
4
+ module Generator
5
+ class FlowLine
6
+ attr_accessor :type, :id, :test, :context, :attributes, :description
7
+
8
+ def initialize(type, attrs = {})
9
+ @type = type
10
+ @test = attrs.delete(:test)
11
+ @context = {}
12
+ @attributes = {}
13
+ flow_control_options = Origen.interface.extract_flow_control_options!(attrs)
14
+ flow_control_options.each do |opt, val|
15
+ send("#{opt}=", val)
16
+ end
17
+ attrs.each do |attribute, val|
18
+ @attributes[attribute] = val
19
+ end
20
+ end
21
+
22
+ def to_yaml(options = {})
23
+ options = {
24
+ include_descriptions: true
25
+ }.merge(options)
26
+ y = {
27
+ 'type' => @type,
28
+ 'description' => description,
29
+ 'instance' => test_to_yaml(options),
30
+ 'flow' => {
31
+ 'attributes' => attributes_to_yaml(options),
32
+ 'context' => context_to_yaml(options)
33
+ }
34
+ }
35
+ y.delete('description') unless options[:include_descriptions]
36
+ y
37
+ end
38
+
39
+ def attributes_to_yaml(_options = {})
40
+ a = {}
41
+ @attributes.each do |name, val|
42
+ a[name.to_s] = val if val
43
+ end
44
+ a
45
+ end
46
+
47
+ def context_to_yaml(_options = {})
48
+ # Turn attribute keys into strings for prettier yaml, this includes all
49
+ # relationship meta data
50
+ c = @context.reduce({}) { |memo, (k, v)| memo[k.to_s] = v; memo }
51
+ # Now add job/enable word data
52
+ if @enable
53
+ c['if_enable'] = @enable
54
+ end
55
+ if @unless_enable
56
+ c['unless_enable'] = @unless_enable
57
+ end
58
+ unless if_jobs.empty?
59
+ c['if_jobs'] = if_jobs
60
+ end
61
+ unless unless_jobs.empty?
62
+ c['unless_jobs'] = unless_jobs
63
+ end
64
+ c
65
+ end
66
+
67
+ def test_to_yaml(options = {})
68
+ if @test
69
+ if @test.is_a?(String) || @test.is_a?(Symbol)
70
+ {
71
+ 'attributes' => {
72
+ 'name' => @test.to_s
73
+ }
74
+ }
75
+ else
76
+ @test.to_yaml(options)
77
+ end
78
+ end
79
+ end
80
+
81
+ def method_missing(method, *args, &_block)
82
+ method = method.to_s
83
+ if method.gsub!('=', '')
84
+ @attributes[method] = args.first
85
+ else
86
+ @attributes[method]
87
+ end
88
+ end
89
+
90
+ def job
91
+ if !if_jobs.empty? && !unless_jobs.empty?
92
+ fail "Both if and unless jobs have been defined for test: #{parameter}"
93
+ elsif !if_jobs.empty?
94
+ if_jobs.join(',')
95
+ elsif !unless_jobs.empty?
96
+ unless_jobs.map { |j| "!#{j}" }.join(',')
97
+ else
98
+ ''
99
+ end
100
+ end
101
+ alias_method :jobs, :job
102
+
103
+ def if_jobs
104
+ @if_jobs ||= []
105
+ end
106
+
107
+ def unless_jobs
108
+ @unless_jobs ||= []
109
+ end
110
+
111
+ def if_enable=(val)
112
+ @enable = val
113
+ end
114
+ alias_method :enable=, :if_enable=
115
+ alias_method :if_enabled=, :if_enable=
116
+
117
+ def unless_enable=(val)
118
+ @unless_enable = val
119
+ end
120
+ alias_method :unless_enabled=, :unless_enable=
121
+
122
+ def if_job=(jobs)
123
+ [jobs].flatten.compact.each do |job|
124
+ job = job.to_s.upcase
125
+ if job =~ /!/
126
+ self.unless_job = job
127
+ else
128
+ if_jobs << job unless if_jobs.include?(job)
129
+ end
130
+ end
131
+ end
132
+ alias_method :if_jobs=, :if_job=
133
+ alias_method :add_if_jobs, :if_job=
134
+ alias_method :add_if_job, :if_job=
135
+
136
+ def unless_job=(jobs)
137
+ [jobs].flatten.compact.each do |job|
138
+ job = job.to_s.upcase
139
+ job.gsub!('!', '')
140
+ unless_jobs << job unless unless_jobs.include?(job)
141
+ end
142
+ end
143
+ alias_method :unless_jobs=, :unless_job=
144
+ alias_method :add_unless_jobs, :unless_job=
145
+ alias_method :add_unless_job, :unless_job=
146
+
147
+ def run_if_failed(id)
148
+ @context[:if_failed] = id
149
+ end
150
+
151
+ def run_if_passed(id)
152
+ @context[:if_passed] = id
153
+ end
154
+
155
+ def run_if_ran(id)
156
+ @context[:if_ran] = id
157
+ end
158
+
159
+ def run_unless_ran(id)
160
+ @context[:unless_ran] = id
161
+ end
162
+
163
+ def run_if_any_passed(parent)
164
+ @context[:if_any_passed] = parent.id
165
+ end
166
+
167
+ def run_if_all_passed(parent)
168
+ @context[:if_all_passed] = parent.id
169
+ end
170
+
171
+ def run_if_any_failed(parent)
172
+ @context[:if_any_failed] = parent.id
173
+ end
174
+
175
+ def run_if_all_failed(parent)
176
+ @context[:if_all_failed] = parent.id
177
+ end
178
+
179
+ def continue_on_fail
180
+ @attributes[:continue] = true
181
+ end
182
+
183
+ def id
184
+ @id || "#{parameter}_#{unique_counter}"
185
+ end
186
+
187
+ def unique_counter
188
+ @unique_counter ||= self.class.unique_counter
189
+ end
190
+
191
+ def self.unique_counter
192
+ @ix ||= -1
193
+ @ix += 1
194
+ end
195
+
196
+ def test?
197
+ @type == :test
198
+ end
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,68 @@
1
+ module Origen
2
+ module Tester
3
+ class Doc
4
+ module Generator
5
+ class Test
6
+ attr_accessor :name, :index, :version, :append_version, :attributes
7
+
8
+ def initialize(name, attrs = {})
9
+ attrs = {}.merge(attrs) # Important to keep this to clone the original options
10
+ # so that the caller's copy if not affected by stripping
11
+ # out the flow/relation options
12
+ @attributes = {}
13
+ @append_version = true
14
+ self.name = name
15
+ Origen.interface.extract_relation_options!(attrs)
16
+ Origen.interface.extract_flow_control_options!(attrs)
17
+ attrs.each do |attribute, val|
18
+ @attributes[attribute] = val
19
+ end
20
+ end
21
+
22
+ def to_yaml(options = {})
23
+ {
24
+ 'attributes' => attributes_to_yaml(options)
25
+ }
26
+ end
27
+
28
+ def attributes_to_yaml(_options = {})
29
+ a = {}
30
+ @attributes.each do |name, val|
31
+ a[name.to_s] = val if val
32
+ end
33
+ a['name'] = name
34
+ a
35
+ end
36
+
37
+ def method_missing(method, *args, &_block)
38
+ method = method.to_s
39
+ if method.gsub!('=', '')
40
+ @attributes[method] = args.first
41
+ else
42
+ @attributes[method]
43
+ end
44
+ end
45
+
46
+ def ==(other_test)
47
+ self.class == other_test.class &&
48
+ unversioned_name.to_s == other_test.unversioned_name.to_s &&
49
+ attributes.size == other_test.attributes.size &&
50
+ attributes.all? { |name, val| other_test.attributes[name] == val }
51
+ end
52
+
53
+ def name
54
+ if version && @append_version
55
+ "#{@name}_v#{version}"
56
+ else
57
+ @name.to_s
58
+ end
59
+ end
60
+
61
+ def unversioned_name
62
+ @name.to_s
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,66 @@
1
+ module Origen
2
+ module Tester
3
+ class Doc
4
+ module Generator
5
+ class TestGroup
6
+ attr_accessor :name, :version, :append_version
7
+
8
+ include Enumerable
9
+
10
+ def initialize(name, _options = {})
11
+ @name = name
12
+ @store = []
13
+ @append_version = true
14
+ end
15
+
16
+ def name
17
+ if unversioned_name
18
+ if version && @append_version
19
+ "#{unversioned_name}_v#{version}"
20
+ else
21
+ unversioned_name.to_s
22
+ end
23
+ end
24
+ end
25
+
26
+ def to_yaml(options = {})
27
+ y = {}
28
+ y['group'] = @store.map { |t| t.to_yaml(options) }
29
+ y
30
+ end
31
+
32
+ def unversioned_name
33
+ if @name
34
+ if @name =~ /grp$/
35
+ @name
36
+ else
37
+ "#{@name}_grp"
38
+ end
39
+ end
40
+ end
41
+
42
+ def <<(instance)
43
+ @store << instance
44
+ end
45
+
46
+ def size
47
+ @store.size
48
+ end
49
+
50
+ def each
51
+ @store.each { |ins| yield ins }
52
+ end
53
+
54
+ def ==(other_instance_group)
55
+ self.class == other_instance_group.class &&
56
+ unversioned_name.to_s == other_instance_group.unversioned_name.to_s &&
57
+ size == other_instance_group.size &&
58
+ self.all? do |ins|
59
+ other_instance_group.any? { |other_ins| ins == other_ins }
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,47 @@
1
+ module Origen
2
+ module Tester
3
+ class Doc
4
+ module Generator
5
+ class Tests
6
+ attr_accessor :collection
7
+
8
+ def initialize
9
+ @collection = []
10
+ end
11
+
12
+ class IndexedString < ::String
13
+ attr_accessor :index
14
+
15
+ def name
16
+ self
17
+ end
18
+ end
19
+
20
+ def add(name, attrs = {})
21
+ test = Test.new(name, attrs)
22
+ if @current_group
23
+ @current_group << test
24
+ else
25
+ collection << test
26
+ end
27
+ test
28
+ end
29
+
30
+ # Arbitrarily group a subset of tests together, see the J750 API for details on how to use
31
+ # this.
32
+ def group(name = nil, options = {})
33
+ name, options = nil, name if name.is_a?(Hash)
34
+ @current_group = TestGroup.new(name, options)
35
+ collection << @current_group
36
+ yield @current_group
37
+ @current_group = nil
38
+ end
39
+ alias_method :add_group, :group
40
+
41
+ def render(_file, _options = {})
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end