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