origen_testers 0.13.1 → 0.13.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 (258) hide show
  1. checksums.yaml +4 -4
  2. data/config/application.rb +151 -151
  3. data/config/boot.rb +13 -13
  4. data/config/commands.rb +85 -86
  5. data/config/users.rb +18 -18
  6. data/config/version.rb +8 -8
  7. data/lib/commands/build.rb +69 -69
  8. data/lib/commands/run.rb +48 -48
  9. data/lib/origen_testers.rb +47 -47
  10. data/lib/origen_testers/api.rb +381 -381
  11. data/lib/origen_testers/basic_test_setups.rb +105 -105
  12. data/lib/origen_testers/callback_handlers.rb +59 -59
  13. data/lib/origen_testers/command_based_tester.rb +45 -45
  14. data/lib/origen_testers/flow.rb +382 -382
  15. data/lib/origen_testers/generator.rb +283 -283
  16. data/lib/origen_testers/generator/identity_map.rb +23 -23
  17. data/lib/origen_testers/generator/placeholder.rb +11 -11
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -23
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -12
  20. data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
  21. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
  22. data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
  23. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
  24. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
  25. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
  26. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
  27. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
  28. data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
  29. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
  30. data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
  31. data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
  32. data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
  33. data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
  34. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
  35. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
  36. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
  37. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
  38. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
  39. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
  40. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
  41. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
  42. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
  43. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
  44. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
  45. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
  46. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
  47. data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
  48. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
  49. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
  50. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
  51. data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
  52. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
  53. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
  54. data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
  55. data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
  56. data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
  57. data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
  58. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
  59. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
  60. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
  61. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
  62. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
  63. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
  64. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
  65. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
  66. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
  67. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
  68. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
  69. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
  70. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
  71. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
  72. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
  73. data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
  74. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
  75. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
  76. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
  77. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
  78. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
  79. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
  80. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
  81. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
  82. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
  83. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
  84. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
  85. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
  86. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
  87. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
  88. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
  89. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
  90. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
  91. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
  92. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
  93. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
  94. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
  95. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
  96. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
  97. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
  98. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
  99. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
  100. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
  101. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
  106. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
  107. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
  108. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
  109. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
  110. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
  111. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
  112. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
  113. data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
  114. data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
  115. data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
  116. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
  117. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
  118. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
  119. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
  120. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
  121. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
  122. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
  123. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
  124. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
  125. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
  126. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
  127. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
  128. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
  129. data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
  130. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
  131. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
  132. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
  133. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
  134. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
  135. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
  136. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
  137. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
  138. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
  139. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
  140. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
  141. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
  142. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
  143. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
  144. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
  145. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
  146. data/lib/origen_testers/interface.rb +345 -324
  147. data/lib/origen_testers/memory_style.rb +77 -77
  148. data/lib/origen_testers/no_interface.rb +7 -7
  149. data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
  150. data/lib/origen_testers/origen_ext/generator.rb +54 -54
  151. data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
  152. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
  153. data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
  154. data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
  155. data/lib/origen_testers/parser.rb +22 -22
  156. data/lib/origen_testers/parser/description_lookup.rb +62 -62
  157. data/lib/origen_testers/parser/searchable_array.rb +30 -30
  158. data/lib/origen_testers/parser/searchable_hash.rb +30 -30
  159. data/lib/origen_testers/pattern_compilers.rb +116 -116
  160. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
  161. data/lib/origen_testers/pattern_compilers/job.rb +96 -96
  162. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
  163. data/lib/origen_testers/program_generators.rb +62 -62
  164. data/lib/origen_testers/smartest_based_tester.rb +8 -8
  165. data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
  166. data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
  167. data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
  168. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
  169. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
  170. data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
  171. data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
  172. data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
  173. data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
  174. data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
  175. data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
  176. data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
  177. data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
  178. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
  179. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
  180. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
  181. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
  182. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
  183. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
  184. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
  185. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
  186. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
  187. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
  188. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
  189. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
  190. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
  191. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
  192. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
  193. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
  194. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
  195. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
  196. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
  197. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
  198. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
  199. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
  200. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
  201. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
  202. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
  203. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
  204. data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
  205. data/lib/origen_testers/test/basic_interface.rb +17 -17
  206. data/lib/origen_testers/test/block.rb +21 -21
  207. data/lib/origen_testers/test/custom_test_interface.rb +111 -111
  208. data/lib/origen_testers/test/dut.rb +295 -295
  209. data/lib/origen_testers/test/dut2.rb +76 -76
  210. data/lib/origen_testers/test/dut3.rb +244 -244
  211. data/lib/origen_testers/test/interface.rb +503 -503
  212. data/lib/origen_testers/test/nvm.rb +94 -94
  213. data/lib/origen_testers/timing.rb +368 -368
  214. data/lib/origen_testers/vector.rb +207 -207
  215. data/lib/origen_testers/vector_based_tester.rb +41 -41
  216. data/lib/origen_testers/vector_generator.rb +655 -655
  217. data/lib/origen_testers/vector_pipeline.rb +302 -302
  218. data/pattern/bitmap.rb +7 -7
  219. data/pattern/dc_instr.rb +7 -7
  220. data/pattern/delay.rb +7 -7
  221. data/pattern/freq_counter.rb +6 -6
  222. data/pattern/mem_test.rb +8 -8
  223. data/pattern/multi_vector.rb +122 -122
  224. data/pattern/multi_vector_plus1.rb +125 -125
  225. data/pattern/nvm/j750/add_late_pins.rb +3 -3
  226. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
  227. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
  228. data/pattern/nvm/j750/j750_halt.rb +159 -159
  229. data/pattern/nvm/j750/j750_workout.rb +209 -209
  230. data/pattern/nvm/j750/timing.rb +73 -73
  231. data/pattern/read_write_reg.rb +61 -61
  232. data/pattern/reset.rb +4 -4
  233. data/pattern/subroutines.rb +69 -69
  234. data/pattern/tester_overlay.rb +61 -52
  235. data/pattern/tester_store.rb +28 -28
  236. data/program/_additional_erase.rb +7 -7
  237. data/program/_efa_resources.rb +7 -7
  238. data/program/_erase.rb +25 -25
  239. data/program/_erase_vfy.rb +5 -5
  240. data/program/_iv_resources.rb +10 -10
  241. data/program/basic_interface.rb +5 -5
  242. data/program/components/_prb1_main.rb +222 -222
  243. data/program/components/_temp.rb +6 -6
  244. data/program/custom_tests.rb +10 -10
  245. data/program/flow_control.rb +422 -422
  246. data/program/prb1.rb +11 -11
  247. data/program/prb1_resources.rb +28 -28
  248. data/program/prb2.rb +27 -27
  249. data/program/test.rb +29 -29
  250. data/program/uflex_resources.rb +199 -199
  251. data/templates/example.txt.erb +53 -53
  252. data/templates/j750/program_sheet.txt.erb +9 -9
  253. data/templates/manifest/v93k.yaml.erb +22 -22
  254. data/templates/web/index.md.erb +51 -51
  255. data/templates/web/layouts/_basic.html.erb +15 -15
  256. data/templates/web/partials/_navbar.html.erb +22 -22
  257. data/templates/web/release_notes.md.erb +5 -5
  258. metadata +2 -2
@@ -1,283 +1,283 @@
1
- require 'active_support/concern'
2
- require 'erb'
3
- require 'yaml'
4
-
5
- module OrigenTesters
6
- # This module should be included in all test program component generators and provides the required
7
- # integration with the Flow.create and Resources.create methods
8
- module Generator
9
- autoload :Placeholder, 'origen_testers/generator/placeholder'
10
- autoload :IdentityMap, 'origen_testers/generator/identity_map'
11
-
12
- extend ActiveSupport::Concern
13
-
14
- included do
15
- include Origen::Generator::Comparator
16
- end
17
-
18
- def self.execute_source(file)
19
- load file
20
- end
21
-
22
- # When called on a generator no output files will be created from it
23
- def inhibit_output
24
- @inhibit_output = true
25
- end
26
-
27
- # Returns true if the output files from this generator will be inhibited
28
- def output_inhibited?
29
- @inhibit_output
30
- end
31
-
32
- # Expands and inserts all render statements that have been encountered
33
- def close(options = {})
34
- Origen.profile "closing #{filename}" do
35
- base_collection = collection
36
- base_collection.each_with_index do |item, i|
37
- if item.is_a? Placeholder
38
- if item.type == :render
39
- txt = ''
40
- Origen.file_handler.preserve_current_file do
41
- Origen.file_handler.default_extension = file_extension
42
- placeholder = compiler.render(item.file, item.options)
43
- txt = compiler.insert(placeholder).chomp
44
- end
45
- base_collection[i] = txt
46
- else
47
- fail 'Unknown placeholder encountered!'
48
- end
49
- end
50
- end
51
- @collection = base_collection.flatten.compact
52
- on_close(options)
53
- end
54
- end
55
-
56
- def file_pipeline
57
- @@file_pipeline ||= []
58
- end
59
-
60
- # Returns the directory of the current source file being generated
61
- def current_dir
62
- if file_pipeline.empty?
63
- Origen.file_handler.base_directory
64
- else
65
- Pathname.new(file_pipeline.last).dirname
66
- end
67
- end
68
-
69
- # Redefine this in the parent which includes this module if you want anything to
70
- # occur after closing the generator (expanding all render/import statements) but
71
- # before writing to a file.
72
- def on_close(options = {})
73
- end
74
-
75
- # Redefine this in the parent which includes this module if you want anything to
76
- # occur after all tests have been generated but before file writing starts.
77
- def finalize(options = {})
78
- end
79
-
80
- def compiler
81
- Origen.generator.compiler
82
- end
83
-
84
- def filename=(name)
85
- @filename = name
86
- end
87
-
88
- def name
89
- @filename.to_sym
90
- end
91
- alias_method :id, :name
92
-
93
- def filename(options = {})
94
- options = {
95
- include_extension: true
96
- }.merge(options)
97
- name = (@filename || Origen.file_handler.current_file.basename('.rb')).to_s
98
- if Origen.config.program_prefix
99
- unless name =~ /^#{Origen.config.program_prefix}/i
100
- name = "#{Origen.config.program_prefix}_#{name}"
101
- end
102
- end
103
- f = Pathname.new(name).basename
104
- ext = f.extname.empty? ? file_extension : f.extname
105
- body = f.basename(".#{ext}").to_s
106
- body.gsub!('_resources', '')
107
- if defined? self.class::OUTPUT_PREFIX
108
- # Unless the fixfix is already in the name
109
- unless body =~ /#{self.class::OUTPUT_PREFIX}$/i
110
- body = "#{self.class::OUTPUT_PREFIX}_#{body}"
111
- end
112
- end
113
- if defined? self.class::OUTPUT_POSTFIX
114
- # Unless the postfix is already in the name
115
- unless body =~ /#{self.class::OUTPUT_POSTFIX}$/i
116
- body = "#{body}_#{self.class::OUTPUT_POSTFIX}"
117
- end
118
- end
119
- ext = ".#{ext}" unless ext =~ /^\./
120
- if options[:include_extension]
121
- "#{body}#{ext}"
122
- else
123
- "#{body}"
124
- end
125
- end
126
-
127
- def dont_diff=(val)
128
- @dont_diff = val
129
- end
130
-
131
- # All generators must implement a collection method that returns an
132
- # array containing the generated items
133
- def collection
134
- @collection ||= []
135
- end
136
-
137
- def collection=(array)
138
- @collection = array
139
- end
140
-
141
- def file_extension
142
- if defined? self.class::OUTPUT_EXTENSION
143
- self.class::OUTPUT_EXTENSION
144
- elsif defined? self.class::TEMPLATE
145
- p = Pathname.new(self.class::TEMPLATE)
146
- ext = p.basename('.erb').extname
147
- ext.empty? ? 'txt' : ext
148
- else
149
- 'txt'
150
- end
151
- end
152
-
153
- def write_to_file(options = {})
154
- c = caller[0]
155
- unless output_inhibited?
156
- if defined? self.class::TEMPLATE || Origen.tester.is_a?(OrigenTesters::Doc)
157
- write_from_template(options)
158
- else
159
- fail "Don't know how to write without a template!"
160
- end
161
- stats.completed_files += 1
162
- end
163
- end
164
-
165
- def write_from_template(options = {})
166
- return unless Origen.interface.write?
167
- options = {
168
- quiet: false,
169
- skip_diff: false
170
- }.merge(options)
171
- unless output_inhibited?
172
- # If this is not the first time we have written to the current output file
173
- # then append to it, otherwise clear it and start from scratch.
174
- # The use of a class variable to store the opened files means that it will be
175
- # shared by all generators in this run.
176
- @@opened_files ||= []
177
- if @@opened_files.include?(output_file) && !Origen.tester.is_a?(OrigenTesters::Doc)
178
- @append = true
179
- Origen.file_handler.preserve_state do
180
- File.open(output_file, 'a') do |out|
181
- content = compiler.insert(ERB.new(File.read(self.class::TEMPLATE), 0, Origen.config.erb_trim_mode).result(binding))
182
- out.puts content unless content.empty?
183
- end
184
- end
185
- Origen.log.info "Appending... #{output_file.basename}" unless options[:quiet]
186
- else
187
- @append = false
188
- Origen.file_handler.preserve_state do
189
- File.open(output_file, 'w') do |out|
190
- out.puts compiler.insert(ERB.new(File.read(self.class::TEMPLATE), 0, Origen.config.erb_trim_mode).result(binding))
191
- end
192
- end
193
- @@opened_files << output_file
194
- Origen.log.info "Writing... #{output_file.basename}" unless options[:quiet]
195
- end
196
- if !@dont_diff && !options[:skip_diff] && !options[:quiet]
197
- check_for_changes(output_file, reference_file,
198
- compile_job: true,
199
- comment_char: Origen.app.tester.program_comment_char)
200
- end
201
- end
202
- end
203
-
204
- def output_file
205
- if respond_to? :subdirectory
206
- p = Pathname.new("#{Origen.file_handler.output_directory}/#{subdirectory}/#{filename}")
207
- else
208
- p = Pathname.new("#{Origen.file_handler.output_directory}/#{filename}")
209
- end
210
- FileUtils.mkdir_p p.dirname.to_s unless p.dirname.exist?
211
- p
212
- end
213
-
214
- def reference_file
215
- Pathname.new("#{Origen.file_handler.reference_directory}/#{filename}")
216
- end
217
-
218
- def import(file, options = {})
219
- file = Pathname.new(file).absolute? ? file : "#{current_dir}/#{file}"
220
- file = Origen.file_handler.clean_path_to_sub_program(file)
221
- base_collection = collection
222
- @collection = []
223
- Origen.generator.option_pipeline << options
224
- file_pipeline << file
225
- ::OrigenTesters::Generator.execute_source(file)
226
- file_pipeline.pop
227
- base_collection << @collection
228
- @collection = base_collection.flatten
229
- end
230
-
231
- def render(file, options = {})
232
- # Since the flow is now handled via ATP, render the string immediately
233
- # for insertion into the AST
234
- if try(:is_the_flow?)
235
- val = nil
236
- Origen.file_handler.preserve_current_file do
237
- Origen.file_handler.default_extension = file_extension
238
- full_path = Origen.file_handler.clean_path_to(file, allow_missing: true)
239
- full_path ||= Origen.file_handler.clean_path_to_sub_template(file)
240
- placeholder = compiler.render(full_path, options)
241
- val = compiler.insert(placeholder).chomp
242
- end
243
- val
244
- else
245
- if options.delete(:_inline)
246
- super Origen.file_handler.clean_path_to_sub_template(file), options
247
- else
248
- collection << Placeholder.new(:render, file, options)
249
- end
250
- end
251
- end
252
-
253
- def stats
254
- Origen.app.stats
255
- end
256
-
257
- def to_be_written?
258
- true
259
- end
260
-
261
- def set_flow_description(desc)
262
- Origen.interface.descriptions.add_for_flow(output_file, desc)
263
- end
264
-
265
- def identity_map # :nodoc:
266
- Origen.interface.identity_map
267
- end
268
-
269
- def platform
270
- Origen.interface.platform
271
- end
272
-
273
- module ClassMethods
274
- def new(*args, &block) # :nodoc:
275
- options = (args.last && args.last.is_a?(Hash)) ? args.last : {}
276
- x = allocate
277
- x.send(:initialize, *args, &block)
278
- Origen.interface.sheet_generators << x unless options[:manually_register]
279
- x
280
- end
281
- end
282
- end
283
- end
1
+ require 'active_support/concern'
2
+ require 'erb'
3
+ require 'yaml'
4
+
5
+ module OrigenTesters
6
+ # This module should be included in all test program component generators and provides the required
7
+ # integration with the Flow.create and Resources.create methods
8
+ module Generator
9
+ autoload :Placeholder, 'origen_testers/generator/placeholder'
10
+ autoload :IdentityMap, 'origen_testers/generator/identity_map'
11
+
12
+ extend ActiveSupport::Concern
13
+
14
+ included do
15
+ include Origen::Generator::Comparator
16
+ end
17
+
18
+ def self.execute_source(file)
19
+ load file
20
+ end
21
+
22
+ # When called on a generator no output files will be created from it
23
+ def inhibit_output
24
+ @inhibit_output = true
25
+ end
26
+
27
+ # Returns true if the output files from this generator will be inhibited
28
+ def output_inhibited?
29
+ @inhibit_output
30
+ end
31
+
32
+ # Expands and inserts all render statements that have been encountered
33
+ def close(options = {})
34
+ Origen.profile "closing #{filename}" do
35
+ base_collection = collection
36
+ base_collection.each_with_index do |item, i|
37
+ if item.is_a? Placeholder
38
+ if item.type == :render
39
+ txt = ''
40
+ Origen.file_handler.preserve_current_file do
41
+ Origen.file_handler.default_extension = file_extension
42
+ placeholder = compiler.render(item.file, item.options)
43
+ txt = compiler.insert(placeholder).chomp
44
+ end
45
+ base_collection[i] = txt
46
+ else
47
+ fail 'Unknown placeholder encountered!'
48
+ end
49
+ end
50
+ end
51
+ @collection = base_collection.flatten.compact
52
+ on_close(options)
53
+ end
54
+ end
55
+
56
+ def file_pipeline
57
+ @@file_pipeline ||= []
58
+ end
59
+
60
+ # Returns the directory of the current source file being generated
61
+ def current_dir
62
+ if file_pipeline.empty?
63
+ Origen.file_handler.base_directory
64
+ else
65
+ Pathname.new(file_pipeline.last).dirname
66
+ end
67
+ end
68
+
69
+ # Redefine this in the parent which includes this module if you want anything to
70
+ # occur after closing the generator (expanding all render/import statements) but
71
+ # before writing to a file.
72
+ def on_close(options = {})
73
+ end
74
+
75
+ # Redefine this in the parent which includes this module if you want anything to
76
+ # occur after all tests have been generated but before file writing starts.
77
+ def finalize(options = {})
78
+ end
79
+
80
+ def compiler
81
+ Origen.generator.compiler
82
+ end
83
+
84
+ def filename=(name)
85
+ @filename = name
86
+ end
87
+
88
+ def name
89
+ @filename.to_sym
90
+ end
91
+ alias_method :id, :name
92
+
93
+ def filename(options = {})
94
+ options = {
95
+ include_extension: true
96
+ }.merge(options)
97
+ name = (@filename || Origen.file_handler.current_file.basename('.rb')).to_s
98
+ if Origen.config.program_prefix
99
+ unless name =~ /^#{Origen.config.program_prefix}/i
100
+ name = "#{Origen.config.program_prefix}_#{name}"
101
+ end
102
+ end
103
+ f = Pathname.new(name).basename
104
+ ext = f.extname.empty? ? file_extension : f.extname
105
+ body = f.basename(".#{ext}").to_s
106
+ body.gsub!('_resources', '')
107
+ if defined? self.class::OUTPUT_PREFIX
108
+ # Unless the fixfix is already in the name
109
+ unless body =~ /#{self.class::OUTPUT_PREFIX}$/i
110
+ body = "#{self.class::OUTPUT_PREFIX}_#{body}"
111
+ end
112
+ end
113
+ if defined? self.class::OUTPUT_POSTFIX
114
+ # Unless the postfix is already in the name
115
+ unless body =~ /#{self.class::OUTPUT_POSTFIX}$/i
116
+ body = "#{body}_#{self.class::OUTPUT_POSTFIX}"
117
+ end
118
+ end
119
+ ext = ".#{ext}" unless ext =~ /^\./
120
+ if options[:include_extension]
121
+ "#{body}#{ext}"
122
+ else
123
+ "#{body}"
124
+ end
125
+ end
126
+
127
+ def dont_diff=(val)
128
+ @dont_diff = val
129
+ end
130
+
131
+ # All generators must implement a collection method that returns an
132
+ # array containing the generated items
133
+ def collection
134
+ @collection ||= []
135
+ end
136
+
137
+ def collection=(array)
138
+ @collection = array
139
+ end
140
+
141
+ def file_extension
142
+ if defined? self.class::OUTPUT_EXTENSION
143
+ self.class::OUTPUT_EXTENSION
144
+ elsif defined? self.class::TEMPLATE
145
+ p = Pathname.new(self.class::TEMPLATE)
146
+ ext = p.basename('.erb').extname
147
+ ext.empty? ? 'txt' : ext
148
+ else
149
+ 'txt'
150
+ end
151
+ end
152
+
153
+ def write_to_file(options = {})
154
+ c = caller[0]
155
+ unless output_inhibited?
156
+ if defined? self.class::TEMPLATE || Origen.tester.is_a?(OrigenTesters::Doc)
157
+ write_from_template(options)
158
+ else
159
+ fail "Don't know how to write without a template!"
160
+ end
161
+ stats.completed_files += 1
162
+ end
163
+ end
164
+
165
+ def write_from_template(options = {})
166
+ return unless Origen.interface.write?
167
+ options = {
168
+ quiet: false,
169
+ skip_diff: false
170
+ }.merge(options)
171
+ unless output_inhibited?
172
+ # If this is not the first time we have written to the current output file
173
+ # then append to it, otherwise clear it and start from scratch.
174
+ # The use of a class variable to store the opened files means that it will be
175
+ # shared by all generators in this run.
176
+ @@opened_files ||= []
177
+ if @@opened_files.include?(output_file) && !Origen.tester.is_a?(OrigenTesters::Doc)
178
+ @append = true
179
+ Origen.file_handler.preserve_state do
180
+ File.open(output_file, 'a') do |out|
181
+ content = compiler.insert(ERB.new(File.read(self.class::TEMPLATE), 0, Origen.config.erb_trim_mode).result(binding))
182
+ out.puts content unless content.empty?
183
+ end
184
+ end
185
+ Origen.log.info "Appending... #{output_file.basename}" unless options[:quiet]
186
+ else
187
+ @append = false
188
+ Origen.file_handler.preserve_state do
189
+ File.open(output_file, 'w') do |out|
190
+ out.puts compiler.insert(ERB.new(File.read(self.class::TEMPLATE), 0, Origen.config.erb_trim_mode).result(binding))
191
+ end
192
+ end
193
+ @@opened_files << output_file
194
+ Origen.log.info "Writing... #{output_file.basename}" unless options[:quiet]
195
+ end
196
+ if !@dont_diff && !options[:skip_diff] && !options[:quiet]
197
+ check_for_changes(output_file, reference_file,
198
+ compile_job: true,
199
+ comment_char: Origen.app.tester.program_comment_char)
200
+ end
201
+ end
202
+ end
203
+
204
+ def output_file
205
+ if respond_to? :subdirectory
206
+ p = Pathname.new("#{Origen.file_handler.output_directory}/#{subdirectory}/#{filename}")
207
+ else
208
+ p = Pathname.new("#{Origen.file_handler.output_directory}/#{filename}")
209
+ end
210
+ FileUtils.mkdir_p p.dirname.to_s unless p.dirname.exist?
211
+ p
212
+ end
213
+
214
+ def reference_file
215
+ Pathname.new("#{Origen.file_handler.reference_directory}/#{filename}")
216
+ end
217
+
218
+ def import(file, options = {})
219
+ file = Pathname.new(file).absolute? ? file : "#{current_dir}/#{file}"
220
+ file = Origen.file_handler.clean_path_to_sub_program(file)
221
+ base_collection = collection
222
+ @collection = []
223
+ Origen.generator.option_pipeline << options
224
+ file_pipeline << file
225
+ ::OrigenTesters::Generator.execute_source(file)
226
+ file_pipeline.pop
227
+ base_collection << @collection
228
+ @collection = base_collection.flatten
229
+ end
230
+
231
+ def render(file, options = {})
232
+ # Since the flow is now handled via ATP, render the string immediately
233
+ # for insertion into the AST
234
+ if try(:is_the_flow?)
235
+ val = nil
236
+ Origen.file_handler.preserve_current_file do
237
+ Origen.file_handler.default_extension = file_extension
238
+ full_path = Origen.file_handler.clean_path_to(file, allow_missing: true)
239
+ full_path ||= Origen.file_handler.clean_path_to_sub_template(file)
240
+ placeholder = compiler.render(full_path, options)
241
+ val = compiler.insert(placeholder).chomp
242
+ end
243
+ val
244
+ else
245
+ if options.delete(:_inline)
246
+ super Origen.file_handler.clean_path_to_sub_template(file), options
247
+ else
248
+ collection << Placeholder.new(:render, file, options)
249
+ end
250
+ end
251
+ end
252
+
253
+ def stats
254
+ Origen.app.stats
255
+ end
256
+
257
+ def to_be_written?
258
+ true
259
+ end
260
+
261
+ def set_flow_description(desc)
262
+ Origen.interface.descriptions.add_for_flow(output_file, desc)
263
+ end
264
+
265
+ def identity_map # :nodoc:
266
+ Origen.interface.identity_map
267
+ end
268
+
269
+ def platform
270
+ Origen.interface.platform
271
+ end
272
+
273
+ module ClassMethods
274
+ def new(*args, &block) # :nodoc:
275
+ options = (args.last && args.last.is_a?(Hash)) ? args.last : {}
276
+ x = allocate
277
+ x.send(:initialize, *args, &block)
278
+ Origen.interface.sheet_generators << x unless options[:manually_register]
279
+ x
280
+ end
281
+ end
282
+ end
283
+ end