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.
- checksums.yaml +4 -4
- data/config/application.rb +151 -151
- data/config/boot.rb +13 -13
- data/config/commands.rb +85 -86
- data/config/users.rb +18 -18
- data/config/version.rb +8 -8
- data/lib/commands/build.rb +69 -69
- data/lib/commands/run.rb +48 -48
- data/lib/origen_testers.rb +47 -47
- data/lib/origen_testers/api.rb +381 -381
- data/lib/origen_testers/basic_test_setups.rb +105 -105
- data/lib/origen_testers/callback_handlers.rb +59 -59
- data/lib/origen_testers/command_based_tester.rb +45 -45
- data/lib/origen_testers/flow.rb +382 -382
- data/lib/origen_testers/generator.rb +283 -283
- data/lib/origen_testers/generator/identity_map.rb +23 -23
- data/lib/origen_testers/generator/placeholder.rb +11 -11
- data/lib/origen_testers/generator/test_numberer.rb +23 -23
- data/lib/origen_testers/igxl_based_tester.rb +12 -12
- data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
- data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
- data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
- data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
- data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
- data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
- data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
- data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
- data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
- data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
- data/lib/origen_testers/interface.rb +345 -324
- data/lib/origen_testers/memory_style.rb +77 -77
- data/lib/origen_testers/no_interface.rb +7 -7
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
- data/lib/origen_testers/origen_ext/generator.rb +54 -54
- data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
- data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
- data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
- data/lib/origen_testers/parser.rb +22 -22
- data/lib/origen_testers/parser/description_lookup.rb +62 -62
- data/lib/origen_testers/parser/searchable_array.rb +30 -30
- data/lib/origen_testers/parser/searchable_hash.rb +30 -30
- data/lib/origen_testers/pattern_compilers.rb +116 -116
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
- data/lib/origen_testers/pattern_compilers/job.rb +96 -96
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
- data/lib/origen_testers/program_generators.rb +62 -62
- data/lib/origen_testers/smartest_based_tester.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
- data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
- data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
- data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
- data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
- data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
- data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
- data/lib/origen_testers/test/basic_interface.rb +17 -17
- data/lib/origen_testers/test/block.rb +21 -21
- data/lib/origen_testers/test/custom_test_interface.rb +111 -111
- data/lib/origen_testers/test/dut.rb +295 -295
- data/lib/origen_testers/test/dut2.rb +76 -76
- data/lib/origen_testers/test/dut3.rb +244 -244
- data/lib/origen_testers/test/interface.rb +503 -503
- data/lib/origen_testers/test/nvm.rb +94 -94
- data/lib/origen_testers/timing.rb +368 -368
- data/lib/origen_testers/vector.rb +207 -207
- data/lib/origen_testers/vector_based_tester.rb +41 -41
- data/lib/origen_testers/vector_generator.rb +655 -655
- data/lib/origen_testers/vector_pipeline.rb +302 -302
- data/pattern/bitmap.rb +7 -7
- data/pattern/dc_instr.rb +7 -7
- data/pattern/delay.rb +7 -7
- data/pattern/freq_counter.rb +6 -6
- data/pattern/mem_test.rb +8 -8
- data/pattern/multi_vector.rb +122 -122
- data/pattern/multi_vector_plus1.rb +125 -125
- data/pattern/nvm/j750/add_late_pins.rb +3 -3
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/j750_halt.rb +159 -159
- data/pattern/nvm/j750/j750_workout.rb +209 -209
- data/pattern/nvm/j750/timing.rb +73 -73
- data/pattern/read_write_reg.rb +61 -61
- data/pattern/reset.rb +4 -4
- data/pattern/subroutines.rb +69 -69
- data/pattern/tester_overlay.rb +61 -52
- data/pattern/tester_store.rb +28 -28
- data/program/_additional_erase.rb +7 -7
- data/program/_efa_resources.rb +7 -7
- data/program/_erase.rb +25 -25
- data/program/_erase_vfy.rb +5 -5
- data/program/_iv_resources.rb +10 -10
- data/program/basic_interface.rb +5 -5
- data/program/components/_prb1_main.rb +222 -222
- data/program/components/_temp.rb +6 -6
- data/program/custom_tests.rb +10 -10
- data/program/flow_control.rb +422 -422
- data/program/prb1.rb +11 -11
- data/program/prb1_resources.rb +28 -28
- data/program/prb2.rb +27 -27
- data/program/test.rb +29 -29
- data/program/uflex_resources.rb +199 -199
- data/templates/example.txt.erb +53 -53
- data/templates/j750/program_sheet.txt.erb +9 -9
- data/templates/manifest/v93k.yaml.erb +22 -22
- data/templates/web/index.md.erb +51 -51
- data/templates/web/layouts/_basic.html.erb +15 -15
- data/templates/web/partials/_navbar.html.erb +22 -22
- data/templates/web/release_notes.md.erb +5 -5
- 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
|