origen_testers 0.4.0
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 +7 -0
- data/config/application.rb +140 -0
- data/config/commands.rb +73 -0
- data/config/development.rb +12 -0
- data/config/environment.rb +1 -0
- data/config/shared_commands.rb +47 -0
- data/config/users.rb +18 -0
- data/config/version.rb +8 -0
- data/lib/commands/build.rb +69 -0
- data/lib/origen_testers.rb +23 -0
- data/lib/origen_testers/api.rb +258 -0
- data/lib/origen_testers/basic_test_setups.rb +105 -0
- data/lib/origen_testers/callback_handlers.rb +58 -0
- data/lib/origen_testers/generator.rb +279 -0
- data/lib/origen_testers/generator/flow_control_api.rb +611 -0
- data/lib/origen_testers/generator/identity_map.rb +23 -0
- data/lib/origen_testers/generator/placeholder.rb +11 -0
- data/lib/origen_testers/generator/test_numberer.rb +23 -0
- data/lib/origen_testers/igxl_based_tester.rb +12 -0
- data/lib/origen_testers/igxl_based_tester/base.rb +641 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +171 -0
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +322 -0
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +217 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -0
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -0
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +326 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +58 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +179 -0
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -0
- data/lib/origen_testers/igxl_based_tester/j750.rb +248 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +8 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +547 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +515 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -0
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -0
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +341 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -0
- data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +477 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +270 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -0
- data/lib/origen_testers/interface.rb +183 -0
- data/lib/origen_testers/parser.rb +22 -0
- data/lib/origen_testers/parser/description_lookup.rb +62 -0
- data/lib/origen_testers/parser/searchable_array.rb +30 -0
- data/lib/origen_testers/parser/searchable_hash.rb +30 -0
- data/lib/origen_testers/pattern_compilers.rb +116 -0
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -0
- data/lib/origen_testers/pattern_compilers/job.rb +96 -0
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -0
- data/lib/origen_testers/program_generators.rb +55 -0
- data/lib/origen_testers/smartest_based_tester.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/base.rb +411 -0
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +188 -0
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +476 -0
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +123 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +23 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +47 -0
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +143 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +73 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +43 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +166 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -0
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +169 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +201 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -0
- data/lib/origen_testers/test/basic_interface.rb +17 -0
- data/lib/origen_testers/test/block.rb +21 -0
- data/lib/origen_testers/test/dut.rb +184 -0
- data/lib/origen_testers/test/dut2.rb +76 -0
- data/lib/origen_testers/test/j750_base_interface.rb +119 -0
- data/lib/origen_testers/test/j750_hpt_interface.rb +8 -0
- data/lib/origen_testers/test/j750_interface.rb +8 -0
- data/lib/origen_testers/test/nvm.rb +94 -0
- data/lib/origen_testers/test/ultraflex_interface.rb +110 -0
- data/lib/origen_testers/test/v93k_interface.rb +115 -0
- data/lib/origen_testers/timing.rb +362 -0
- data/lib/origen_testers/vector.rb +203 -0
- data/lib/origen_testers/vector_based_tester.rb +42 -0
- data/lib/origen_testers/vector_generator.rb +623 -0
- data/lib/origen_testers/vector_pipeline.rb +288 -0
- data/pattern/dc_instr.rb +7 -0
- data/pattern/delay.rb +7 -0
- data/pattern/mem_test.rb +8 -0
- data/pattern/multi_vector.rb +117 -0
- data/pattern/multi_vector_plus1.rb +125 -0
- data/pattern/nvm/j750/add_late_pins.rb +3 -0
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -0
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -0
- data/pattern/nvm/j750/j750_halt.rb +159 -0
- data/pattern/nvm/j750/j750_workout.rb +202 -0
- data/pattern/nvm/j750/timing.rb +73 -0
- data/pattern/nvm/v93k/v93k_workout.rb +136 -0
- data/pattern/read_write_reg.rb +58 -0
- data/pattern/reset.rb +4 -0
- data/pattern/subroutines.rb +38 -0
- data/program/_additional_erase.rb +7 -0
- data/program/_efa_resources.rb +7 -0
- data/program/_erase.rb +25 -0
- data/program/_erase_vfy.rb +5 -0
- data/program/_iv_resources.rb +10 -0
- data/program/basic_interface.rb +5 -0
- data/program/components/_prb2_main.rb +6 -0
- data/program/flow_control.rb +164 -0
- data/program/prb1.rb +226 -0
- data/program/prb1_resources.rb +28 -0
- data/program/prb2.rb +40 -0
- data/program/test.rb +20 -0
- data/templates/example.txt.erb +53 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/manifest/v93k.yaml.erb +22 -0
- data/templates/web/index.md.erb +51 -0
- data/templates/web/layouts/_basic.html.erb +15 -0
- data/templates/web/partials/_navbar.html.erb +22 -0
- data/templates/web/release_notes.md.erb +5 -0
- metadata +332 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class UltraFLEX
|
|
4
|
+
require 'origen_testers/igxl_based_tester/base/test_instances'
|
|
5
|
+
class TestInstances < Base::TestInstances
|
|
6
|
+
TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module OrigenTesters
|
|
4
|
+
# Include this module in any class you define as a test interface
|
|
5
|
+
module Interface
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
included do
|
|
9
|
+
Origen.add_interface(self)
|
|
10
|
+
include Generator::FlowControlAPI::Interface
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# This identifier will be used to make labels and other references unique to the
|
|
14
|
+
# current application. This will help to avoid name duplication if a program is
|
|
15
|
+
# comprised of many modules generated by Origen.
|
|
16
|
+
#
|
|
17
|
+
# Override in the application interface to customize, by default the identifier
|
|
18
|
+
# will be Origen.config.initials
|
|
19
|
+
def app_identifier
|
|
20
|
+
Origen.config.initials || 'Anon App'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def close(options = {})
|
|
24
|
+
sheet_generators.each do |generator|
|
|
25
|
+
generator.close(options)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Compile a template file
|
|
30
|
+
def compile(file, options = {})
|
|
31
|
+
Origen.file_handler.preserve_state do
|
|
32
|
+
begin
|
|
33
|
+
file = Origen.file_handler.clean_path_to_template(file)
|
|
34
|
+
Origen.generator.compile_file_or_directory(file, initial_options: options)
|
|
35
|
+
rescue
|
|
36
|
+
file = Origen.file_handler.clean_path_to(file)
|
|
37
|
+
Origen.generator.compile_file_or_directory(file, initial_options: options)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def import(file, options = {})
|
|
43
|
+
# Attach the import request to the first generator, when it imports
|
|
44
|
+
# it any generated resources will automatically find their way to the
|
|
45
|
+
# correct generator/collection
|
|
46
|
+
generator = flow || sheet_generators.first
|
|
47
|
+
generator.import(file, options)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def render(file, options = {})
|
|
51
|
+
if sheet_generators.size > 1
|
|
52
|
+
fail "You must specify which generator to render content to! e.g. i.test_instances.render '#{file}'"
|
|
53
|
+
else
|
|
54
|
+
sheet_generators.first.render(file, options)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def write_files(options = {})
|
|
59
|
+
sheet_generators.each do |generator|
|
|
60
|
+
generator.finalize(options)
|
|
61
|
+
end
|
|
62
|
+
sheet_generators.each do |generator|
|
|
63
|
+
generator.write_to_file(options) if generator.to_be_written?
|
|
64
|
+
end
|
|
65
|
+
clean_referenced_patterns
|
|
66
|
+
reset_globals
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# All generators should push to this array whenever they reference a pattern
|
|
70
|
+
# so that it is captured in the pattern list, e.g.
|
|
71
|
+
# Origen.interface.referenced_patterns << pattern
|
|
72
|
+
def referenced_patterns
|
|
73
|
+
@@referenced_patterns ||= []
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# All generators should push to this array whenever they reference a subroutine
|
|
77
|
+
# pattern so that it is captured in the pattern list, e.g.
|
|
78
|
+
# Origen.interface.referenced_subroutine_patterns << pattern
|
|
79
|
+
def referenced_subroutine_patterns
|
|
80
|
+
unless Origen.tester.v93k?
|
|
81
|
+
fail 'referenced_subroutine_patterns is currently only implemented for V93k!'
|
|
82
|
+
end
|
|
83
|
+
@@referenced_subroutine_patterns ||= []
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Remove duplicates and file extensions from the referenced pattern lists
|
|
87
|
+
def clean_referenced_patterns
|
|
88
|
+
refs = [:referenced_patterns]
|
|
89
|
+
refs << :referenced_subroutine_patterns if Origen.tester.v93k?
|
|
90
|
+
refs.each do |ref|
|
|
91
|
+
ref = send(ref)
|
|
92
|
+
ref.uniq!
|
|
93
|
+
ref.map! do |pat|
|
|
94
|
+
pat.sub(/\..*/, '')
|
|
95
|
+
end
|
|
96
|
+
ref.uniq!
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Add a comment line into the buffer
|
|
101
|
+
def comment(text)
|
|
102
|
+
comments << text
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def comments
|
|
106
|
+
@@comments ||= []
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def discard_comments
|
|
110
|
+
@@comments = nil
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Returns the buffered description comments and clears the buffer
|
|
114
|
+
def consume_comments
|
|
115
|
+
c = comments
|
|
116
|
+
discard_comments
|
|
117
|
+
c
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def top_level_flow
|
|
121
|
+
@@top_level_flow ||= nil
|
|
122
|
+
end
|
|
123
|
+
alias_method :top_level_flow_filename, :top_level_flow
|
|
124
|
+
|
|
125
|
+
def flow_generator
|
|
126
|
+
flow
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def set_top_level_flow
|
|
130
|
+
@@top_level_flow = flow_generator.output_file
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def clear_top_level_flow
|
|
134
|
+
@@top_level_flow = nil
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# A storage Hash that all generators can push comment descriptions
|
|
138
|
+
# into when generating.
|
|
139
|
+
# At the end of a generation run this will contain all descriptions
|
|
140
|
+
# for all flows that were just created.
|
|
141
|
+
#
|
|
142
|
+
# Access via Origen.interface.descriptions
|
|
143
|
+
def descriptions
|
|
144
|
+
@@descriptions ||= Parser::DescriptionLookup.new
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Any tests generated within the given block will be generated in resources mode.
|
|
148
|
+
# Generally this means that all resources for a given test will be generated but
|
|
149
|
+
# flow entries will be inhibited.
|
|
150
|
+
def resources_mode
|
|
151
|
+
orig = @resources_mode
|
|
152
|
+
@resources_mode = true
|
|
153
|
+
yield
|
|
154
|
+
@resources_mode = orig
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def resources_mode?
|
|
158
|
+
@resources_mode
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def identity_map # :nodoc:
|
|
162
|
+
@@identity_map ||= ::OrigenTesters::Generator::IdentityMap.new
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def platform
|
|
166
|
+
# This branch to support the ProgramGenerators module where the generator
|
|
167
|
+
# is included into an interface instance and not the class
|
|
168
|
+
if singleton_class.const_defined? :PLATFORM
|
|
169
|
+
singleton_class::PLATFORM
|
|
170
|
+
else
|
|
171
|
+
self.class::PLATFORM
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
module ClassMethods
|
|
176
|
+
# Returns true if the interface class supports the
|
|
177
|
+
# given tester instance
|
|
178
|
+
def supports?(tester_instance)
|
|
179
|
+
tester_instance.class == self::PLATFORM
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module Parser
|
|
3
|
+
autoload :SearchableArray, 'origen_testers/parser/searchable_array'
|
|
4
|
+
autoload :SearchableHash, 'origen_testers/parser/searchable_hash'
|
|
5
|
+
autoload :DescriptionLookup, 'origen_testers/parser/description_lookup'
|
|
6
|
+
|
|
7
|
+
def parse(*args, &block)
|
|
8
|
+
parser.parse(*args, &block)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Returns a SearchableArray containing all tests parsed from flows, this is intended to
|
|
12
|
+
# be the main API for accessing parsed test program attributes and should be a consistent
|
|
13
|
+
# method that is implemented accross all tester models.
|
|
14
|
+
#
|
|
15
|
+
# Direct access to the underlying structure (which will be specific to the tester model)
|
|
16
|
+
# can be achieved through the parser method, which returns an instance of J750::Parser
|
|
17
|
+
# $tester.parser.test_instances
|
|
18
|
+
def tests
|
|
19
|
+
parser.flow_items
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module Parser
|
|
3
|
+
class DescriptionLookup
|
|
4
|
+
def initialize
|
|
5
|
+
@store = { flow: {}, test: {}, usage: {} }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def for_flow(name, options = {})
|
|
9
|
+
k = flow_key(name)
|
|
10
|
+
@store[:flow][k] || []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def for_test_definition(name, options = {})
|
|
14
|
+
n = name_key(name)
|
|
15
|
+
@store[:test][n] || []
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def for_test_usage(name, flow, options = {})
|
|
19
|
+
k = flow_key(flow)
|
|
20
|
+
n = name_key(name)
|
|
21
|
+
@store[:usage][k] ||= {}
|
|
22
|
+
@store[:usage][k][n] || []
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def add_for_flow(flow, description, options = {})
|
|
26
|
+
k = flow_key(flow)
|
|
27
|
+
@store[:flow][k] ||= []
|
|
28
|
+
[description].flatten.each do |d|
|
|
29
|
+
@store[:flow][k] << d
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def add_for_test_definition(test, description, option = {})
|
|
34
|
+
n = name_key(test)
|
|
35
|
+
@store[:test][n] ||= []
|
|
36
|
+
[description].flatten.each do |d|
|
|
37
|
+
@store[:test][n] << d
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def add_for_test_usage(test, flow, description, option = {})
|
|
42
|
+
k = flow_key(flow)
|
|
43
|
+
n = name_key(test)
|
|
44
|
+
@store[:usage][k] ||= {}
|
|
45
|
+
@store[:usage][k][n] ||= []
|
|
46
|
+
[description].flatten.each do |d|
|
|
47
|
+
@store[:usage][k][n] << d
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def flow_key(flow)
|
|
54
|
+
Pathname.new(flow).basename('.*').to_s
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def name_key(name)
|
|
58
|
+
name.to_s.downcase
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Tester
|
|
2
|
+
module Parser
|
|
3
|
+
class SearchableArray < ::Array
|
|
4
|
+
def where(conditions)
|
|
5
|
+
exact = conditions.delete(:exact)
|
|
6
|
+
results = SearchableArray.new
|
|
7
|
+
each do |item|
|
|
8
|
+
if conditions.all? do |attr, val|
|
|
9
|
+
if val.is_a?(Array)
|
|
10
|
+
if exact
|
|
11
|
+
val.any? { |v| item.send(attr).to_s == v.to_s }
|
|
12
|
+
else
|
|
13
|
+
val.any? { |v| item.send(attr).to_s =~ /#{v.to_s}/ }
|
|
14
|
+
end
|
|
15
|
+
else
|
|
16
|
+
if exact
|
|
17
|
+
item.send(attr).to_s == val.to_s
|
|
18
|
+
else
|
|
19
|
+
item.send(attr).to_s =~ /#{val.to_s}/
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
results << item
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
results
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module Parser
|
|
3
|
+
class SearchableHash < ::Hash
|
|
4
|
+
def where(conditions)
|
|
5
|
+
exact = conditions.delete(:exact)
|
|
6
|
+
results = SearchableArray.new
|
|
7
|
+
each do |key, item|
|
|
8
|
+
if conditions.all? do |attr, val|
|
|
9
|
+
if val.is_a?(Array)
|
|
10
|
+
if exact
|
|
11
|
+
val.any? { |v| item.send(attr).to_s == v.to_s }
|
|
12
|
+
else
|
|
13
|
+
val.any? { |v| item.send(attr).to_s =~ /#{v.to_s}/ }
|
|
14
|
+
end
|
|
15
|
+
else
|
|
16
|
+
if exact
|
|
17
|
+
item.send(attr).to_s == val.to_s
|
|
18
|
+
else
|
|
19
|
+
item.send(attr).to_s =~ /#{val.to_s}/
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
results << item
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
results
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module PatternCompilers
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require_relative 'pattern_compilers/ultraflex_pattern_compiler'
|
|
5
|
+
|
|
6
|
+
PLATFORMS = [:ultraflex]
|
|
7
|
+
|
|
8
|
+
# Linux compiler executable path
|
|
9
|
+
LINUX_PATTERN_COMPILER = "#{Origen.root!}/bin/latest/bin/atpcompiler"
|
|
10
|
+
|
|
11
|
+
# Windows compiler executable path
|
|
12
|
+
WINDOWS_PATTERN_COMPILER = "#{ENV['IGXLROOT']}/bin/apc.exe"
|
|
13
|
+
|
|
14
|
+
# Hash wrapper for compiler instances, defaults to display currently enabled
|
|
15
|
+
# tester platform. If none is set then user must supply a valid tester platform argument
|
|
16
|
+
def pattern_compilers(id = nil)
|
|
17
|
+
@pattern_compilers ||= begin
|
|
18
|
+
hash = {}
|
|
19
|
+
PLATFORMS.each { |platform| hash[platform] = {} }
|
|
20
|
+
hash
|
|
21
|
+
end
|
|
22
|
+
if id.nil?
|
|
23
|
+
@pattern_compilers[platform]
|
|
24
|
+
else
|
|
25
|
+
@pattern_compilers[platform][id].inspect_options
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
alias_method :compilers, :pattern_compilers
|
|
29
|
+
|
|
30
|
+
def pattern_compiler_platforms
|
|
31
|
+
PLATFORMS
|
|
32
|
+
end
|
|
33
|
+
alias_method :compiler_platforms, :pattern_compiler_platforms
|
|
34
|
+
|
|
35
|
+
# Delete pattern compiler instances. If no argument default to current platform
|
|
36
|
+
def delete_pattern_compilers(p = platform)
|
|
37
|
+
@pattern_compilers[p].delete_if { |k, v| true }
|
|
38
|
+
end
|
|
39
|
+
alias_method :delete_compilers, :delete_pattern_compilers
|
|
40
|
+
|
|
41
|
+
# Delete a pattern compiler instance.
|
|
42
|
+
def delete_pattern_compiler(id)
|
|
43
|
+
@pattern_compilers[platform].delete(id)
|
|
44
|
+
end
|
|
45
|
+
alias_method :delete_compiler, :delete_pattern_compiler
|
|
46
|
+
|
|
47
|
+
# Add a compiler for a particular tester platform and pattern type
|
|
48
|
+
def add_pattern_compiler(id, platform, options = {})
|
|
49
|
+
pattern_compilers
|
|
50
|
+
id = id.to_sym
|
|
51
|
+
platform = platform.to_sym
|
|
52
|
+
options[:location] = options[:location].to_sym unless options[:location].nil?
|
|
53
|
+
case platform
|
|
54
|
+
when :ultraflex
|
|
55
|
+
fail "Compiler ID #{id} for platform #{platform} already exists! Pick another name, delete the compiler, or clear all compilers" if @pattern_compilers[platform].keys.include? id
|
|
56
|
+
@pattern_compilers[platform][id] = UltraFlexPatternCompiler.new(id, options)
|
|
57
|
+
else
|
|
58
|
+
fail "Platform #{platform} is not valid, please choose from #{PLATFORMS.join(', ')}"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
alias_method :add_compiler, :add_pattern_compiler
|
|
62
|
+
|
|
63
|
+
# Returns an array of the pattern compiler instance ids
|
|
64
|
+
# for the currently selected tester platform.
|
|
65
|
+
def pattern_compiler_instances(p = platform)
|
|
66
|
+
# Check if nil which means no tester is defined so ask user to supply it
|
|
67
|
+
fail "No tester platform defined so supply one of the following as an argument: #{PLATFORMS.join(', ')}" if p.nil?
|
|
68
|
+
p = p.to_sym
|
|
69
|
+
@pattern_compilers[p].keys
|
|
70
|
+
end
|
|
71
|
+
alias_method :compiler_instances, :pattern_compiler_instances
|
|
72
|
+
|
|
73
|
+
def pattern_compiler_options
|
|
74
|
+
cmd = ''
|
|
75
|
+
running_on_windows? ? cmd = "#{WINDOWS_PATTERN_COMPILER} -help" : cmd = "#{LINUX_PATTERN_COMPILER} -help"
|
|
76
|
+
system cmd
|
|
77
|
+
end
|
|
78
|
+
alias_method :compiler_options, :pattern_compiler_options
|
|
79
|
+
|
|
80
|
+
def pattern_compiler_version
|
|
81
|
+
cmd = ''
|
|
82
|
+
running_on_windows? ? cmd = "#{WINDOWS_PATTERN_COMPILER} -version" : cmd = "#{LINUX_PATTERN_COMPILER} -version"
|
|
83
|
+
system cmd
|
|
84
|
+
end
|
|
85
|
+
alias_method :compiler_version, :pattern_compiler_version
|
|
86
|
+
|
|
87
|
+
# Check if the current tester is supported
|
|
88
|
+
def pattern_compiler_supported?
|
|
89
|
+
PLATFORMS.include? platform ? true : false
|
|
90
|
+
end
|
|
91
|
+
alias_method :compiler_supported?, :pattern_compiler_supported?
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
def running_on_windows?
|
|
96
|
+
RUBY_PLATFORM == 'i386-mingw32'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Check if the current tester is an Ultraflex
|
|
100
|
+
def is_ultraflex?
|
|
101
|
+
platform == :ultraflex ? true : false
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def platform
|
|
105
|
+
if $tester.nil?
|
|
106
|
+
fail 'No tester instantiated, $tester is set to nil'
|
|
107
|
+
else
|
|
108
|
+
$tester.class.to_s.downcase.split('::').last.to_sym
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def target_enabled?
|
|
113
|
+
Origen.target.name.nil? ? true : false
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|