origen_testers 0.5.7 → 0.6.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 +4 -4
- data/config/shared_commands.rb +6 -0
- data/config/version.rb +2 -2
- data/lib/commands/run.rb +44 -0
- data/lib/origen_testers.rb +19 -1
- data/lib/origen_testers/flow.rb +382 -0
- data/lib/origen_testers/generator.rb +32 -29
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
- data/lib/origen_testers/interface.rb +41 -6
- data/lib/origen_testers/no_interface.rb +7 -0
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
- data/lib/origen_testers/origen_ext/generator.rb +37 -0
- data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
- data/lib/origen_testers/program_generators.rb +0 -1
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
- data/lib/origen_testers/test/dut.rb +5 -0
- data/lib/origen_testers/test/j750_base_interface.rb +0 -3
- data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
- data/lib/origen_testers/test/v93k_interface.rb +5 -23
- data/program/components/_temp.rb +6 -0
- data/program/flow_control.rb +190 -62
- data/program/prb1.rb +13 -50
- data/program/prb2.rb +0 -16
- data/program/test.rb +12 -3
- data/program/uflex_resources.rb +159 -0
- metadata +66 -16
- data/lib/origen_testers/doc.rb +0 -224
- data/lib/origen_testers/doc/generator.rb +0 -124
- data/lib/origen_testers/doc/generator/flow.rb +0 -69
- data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
- data/lib/origen_testers/doc/generator/test.rb +0 -66
- data/lib/origen_testers/doc/generator/test_group.rb +0 -64
- data/lib/origen_testers/doc/generator/tests.rb +0 -45
- data/lib/origen_testers/doc/model.rb +0 -160
- data/lib/origen_testers/generator/flow_control_api.rb +0 -611
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
- data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +0 -9
data/lib/origen_testers/doc.rb
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
# Tester model to generate test program documentation from your pattern sources.
|
|
3
|
-
# This is intended to be a drop in replacement for existing testers and instead
|
|
4
|
-
# of generating patterns or test program sheets it will generate a document object
|
|
5
|
-
# which you can then render out via a template or manually.
|
|
6
|
-
class Doc
|
|
7
|
-
include VectorBasedTester
|
|
8
|
-
|
|
9
|
-
autoload :Generator, 'origen_testers/doc/generator'
|
|
10
|
-
autoload :Model, 'origen_testers/doc/model'
|
|
11
|
-
|
|
12
|
-
attr_accessor :html_mode
|
|
13
|
-
|
|
14
|
-
def generate?
|
|
15
|
-
html_mode
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def initialize(*_args)
|
|
19
|
-
@pat_extension = 'md'
|
|
20
|
-
@indent = 0
|
|
21
|
-
@snip_counters = []
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Snip the number of comment lines generated by the contained block
|
|
25
|
-
# to the number given, this is useful for keeping files sizes down and
|
|
26
|
-
# is typically used to snip sections like downloading LRE code.
|
|
27
|
-
def snip(number, _options = {})
|
|
28
|
-
@snip_counters.push number + 1
|
|
29
|
-
yield
|
|
30
|
-
@snip_counters.pop
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def pc(msg)
|
|
34
|
-
if @snip_counters.last
|
|
35
|
-
if @snip_counters.last == 1
|
|
36
|
-
@snip_counters[@snip_counters.size - 1] = 0
|
|
37
|
-
msg = ' ...snipped'
|
|
38
|
-
elsif @snip_counters.last == 0
|
|
39
|
-
return
|
|
40
|
-
else
|
|
41
|
-
@snip_counters[@snip_counters.size - 1] -= 1
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
if html_mode
|
|
45
|
-
push_comment(msg)
|
|
46
|
-
else
|
|
47
|
-
Origen.log.info((' ' * @indent) + msg)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def c1(msg, options = {})
|
|
52
|
-
if generating_program?
|
|
53
|
-
Origen.interface.doc_comments_capture(msg)
|
|
54
|
-
else
|
|
55
|
-
unless @inhibit_comments
|
|
56
|
-
options = {
|
|
57
|
-
prefix: true
|
|
58
|
-
}.merge(options)
|
|
59
|
-
if @step_comment_on
|
|
60
|
-
open_text_block
|
|
61
|
-
if options[:prefix]
|
|
62
|
-
pc "# #{msg}"
|
|
63
|
-
else
|
|
64
|
-
pc "#{msg}"
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def c2(msg, options = {})
|
|
72
|
-
unless @inhibit_comments
|
|
73
|
-
options = {
|
|
74
|
-
prefix: true
|
|
75
|
-
}.merge(options)
|
|
76
|
-
open_text_block
|
|
77
|
-
if options[:prefix]
|
|
78
|
-
pc "# #{msg}"
|
|
79
|
-
else
|
|
80
|
-
pc "#{msg}"
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def annotate(msg, _options)
|
|
86
|
-
unless @inhibit_comments
|
|
87
|
-
if html_mode
|
|
88
|
-
pc ''
|
|
89
|
-
lines = msg.split("\n")
|
|
90
|
-
leading_spaces = lines.first[/\A */].size
|
|
91
|
-
lines.each do |line|
|
|
92
|
-
pc line.gsub(/^.{#{leading_spaces}}/, '')
|
|
93
|
-
end
|
|
94
|
-
pc ''
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def open_text_block
|
|
100
|
-
if html_mode
|
|
101
|
-
unless @text_block_open
|
|
102
|
-
pc ''
|
|
103
|
-
pc '~~~text'
|
|
104
|
-
@text_block_open = true
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def close_text_block
|
|
110
|
-
if html_mode
|
|
111
|
-
if @text_block_open
|
|
112
|
-
pc '~~~'
|
|
113
|
-
pc ''
|
|
114
|
-
@text_block_open = false
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def pattern_name
|
|
120
|
-
Origen.app.current_job.output_pattern_filename.gsub('.md', '')
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def pre_header
|
|
124
|
-
# pc "---"
|
|
125
|
-
# pc "layout: bootstrap"
|
|
126
|
-
# pc "title: #{pattern_name}"
|
|
127
|
-
# pc "gzip: false"
|
|
128
|
-
# pc "---"
|
|
129
|
-
# pc ""
|
|
130
|
-
# pc "# #{pattern_name}"
|
|
131
|
-
# pc ""
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def pattern_section(msg)
|
|
135
|
-
unless @inhibit_comments
|
|
136
|
-
if generating_program?
|
|
137
|
-
Origen.interface.flow.start_section(name: msg)
|
|
138
|
-
yield
|
|
139
|
-
Origen.interface.flow.stop_section
|
|
140
|
-
else
|
|
141
|
-
if html_mode
|
|
142
|
-
counter = next_accordion_counter
|
|
143
|
-
close_text_block
|
|
144
|
-
pc ''
|
|
145
|
-
pc "<div class=\"accordion-group\">"
|
|
146
|
-
pc "<div class=\"accordion-heading\">"
|
|
147
|
-
pc "<a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion2\" href=\"#collapseComment#{counter}\">"
|
|
148
|
-
pc "#{msg}"
|
|
149
|
-
pc '</a>'
|
|
150
|
-
pc '</div>'
|
|
151
|
-
pc "<div id=\"collapseComment#{counter}\" class=\"accordion-body collapse\">"
|
|
152
|
-
pc "<div class=\"accordion-inner\" markdown=\"1\">"
|
|
153
|
-
yield
|
|
154
|
-
close_text_block
|
|
155
|
-
pc '</div>'
|
|
156
|
-
pc '</div>'
|
|
157
|
-
pc '</div>'
|
|
158
|
-
else
|
|
159
|
-
pc ''
|
|
160
|
-
pc "#{msg}"
|
|
161
|
-
pc ''
|
|
162
|
-
@indent += 4
|
|
163
|
-
yield
|
|
164
|
-
@indent -= 4
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def next_accordion_counter
|
|
171
|
-
@accordion_counter ||= 0
|
|
172
|
-
@accordion_counter += 1
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def ss(msg = nil)
|
|
176
|
-
unless @inhibit_comments
|
|
177
|
-
@step_comment_on = true
|
|
178
|
-
if block_given?
|
|
179
|
-
yield
|
|
180
|
-
else
|
|
181
|
-
c2(msg)
|
|
182
|
-
end
|
|
183
|
-
@step_comment_on = false
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def self.generate_program_model(files, options = {})
|
|
188
|
-
options = {
|
|
189
|
-
action: :program,
|
|
190
|
-
return_model: true,
|
|
191
|
-
skip_diff: true
|
|
192
|
-
}.merge(options)
|
|
193
|
-
Origen.app.with_doc_tester do
|
|
194
|
-
Origen.target.temporary = options[:target] if options[:target]
|
|
195
|
-
Origen.app.load_target!
|
|
196
|
-
Origen.interface.reset_globals
|
|
197
|
-
options[:files] = files
|
|
198
|
-
Origen.file_handler.preserve_and_clear_state do
|
|
199
|
-
Origen.app.runner.launch(options)
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
model.target = Origen.target.name
|
|
203
|
-
model
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def self.model
|
|
207
|
-
@model ||= Model.new
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
def doc?
|
|
211
|
-
true
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def cycle(_options = {})
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
# Ignore any tester-specific methods
|
|
218
|
-
def method_missing(_method, *_args, &_block)
|
|
219
|
-
if block_given?
|
|
220
|
-
yield
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
end
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
require 'active_support/concern'
|
|
2
|
-
|
|
3
|
-
module OrigenTesters
|
|
4
|
-
class Doc
|
|
5
|
-
module Generator
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
autoload :Test, 'origen_testers/doc/generator/test'
|
|
9
|
-
autoload :TestGroup, 'origen_testers/doc/generator/test_group'
|
|
10
|
-
autoload :Tests, 'origen_testers/doc/generator/tests'
|
|
11
|
-
autoload :Flow, 'origen_testers/doc/generator/flow'
|
|
12
|
-
autoload :FlowLine, 'origen_testers/doc/generator/flow_line'
|
|
13
|
-
autoload :Placeholder, 'origen_testers/generator/placeholder'
|
|
14
|
-
|
|
15
|
-
included do
|
|
16
|
-
include OrigenTesters::Interface # adds the interface helpers/Origen hook-up
|
|
17
|
-
include OrigenTesters::Generator::FlowControlAPI::Interface
|
|
18
|
-
PLATFORM = OrigenTesters::Doc
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Returns the current flow (as defined by the name of the current top
|
|
22
|
-
# level flow source file).
|
|
23
|
-
#
|
|
24
|
-
# Pass in a filename argument to have a specific flow returned instead.
|
|
25
|
-
#
|
|
26
|
-
# If the flow does not exist yet it will be created.
|
|
27
|
-
def flow(filename = nil)
|
|
28
|
-
unless filename
|
|
29
|
-
if Origen.file_handler.current_file
|
|
30
|
-
filename = Origen.file_handler.current_file.basename('.rb').to_s
|
|
31
|
-
else
|
|
32
|
-
filename = 'anonymous'
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
f = filename.to_sym
|
|
36
|
-
return flows[f] if flows[f]
|
|
37
|
-
p = Flow.new
|
|
38
|
-
p.inhibit_output if Origen.interface.resources_mode?
|
|
39
|
-
p.filename = f
|
|
40
|
-
flows[f] = p
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @api private
|
|
44
|
-
def at_flow_start
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# @api private
|
|
48
|
-
def at_run_start
|
|
49
|
-
flow.at_run_start
|
|
50
|
-
@@tests = nil
|
|
51
|
-
@@flows = nil
|
|
52
|
-
end
|
|
53
|
-
alias_method :reset_globals, :at_run_start
|
|
54
|
-
|
|
55
|
-
# Returns a container for all generated tests.
|
|
56
|
-
def tests
|
|
57
|
-
@@tests ||= Tests.new
|
|
58
|
-
end
|
|
59
|
-
alias_method :test_instances, :tests
|
|
60
|
-
|
|
61
|
-
# Returns a hash containing all flows
|
|
62
|
-
def flows
|
|
63
|
-
@@flows ||= {}
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Returns an array containing all sheet generators where a sheet generator is a flow,
|
|
67
|
-
# test instance, patset or pat group sheet.
|
|
68
|
-
# All Origen program generators must implement this method
|
|
69
|
-
def sheet_generators # :nodoc:
|
|
70
|
-
g = []
|
|
71
|
-
[flows].each do |sheets|
|
|
72
|
-
sheets.each do |_name, sheet|
|
|
73
|
-
g << sheet
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
g
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Returns an array containing all flow generators.
|
|
80
|
-
# All Origen program generators must implement this method
|
|
81
|
-
def flow_generators
|
|
82
|
-
g = []
|
|
83
|
-
flows.each do |_name, sheet|
|
|
84
|
-
g << sheet
|
|
85
|
-
end
|
|
86
|
-
g
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# The source of all program files is passed in here before executing.
|
|
90
|
-
# This will replace all comments with a method call containing the comment so that
|
|
91
|
-
# they can be captured.
|
|
92
|
-
def filter_source(source) # :nodoc:
|
|
93
|
-
src = ''
|
|
94
|
-
source.split(/\r?\n/).each do |line|
|
|
95
|
-
if line !~ /^\s*#-/ && line =~ /^\s*#(.*)/
|
|
96
|
-
comment = Regexp.last_match[1].gsub("'", "\\\\'")
|
|
97
|
-
src << "Origen.interface.doc_comments_capture('#{comment}')\n"
|
|
98
|
-
else
|
|
99
|
-
src << "#{line}\n"
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
src
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def doc_comments_capture(comment)
|
|
106
|
-
doc_comments << "#{comment}"
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def doc_comments
|
|
110
|
-
@doc_comments ||= []
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
def doc_comments_consume
|
|
114
|
-
c = doc_comments
|
|
115
|
-
doc_comments_discard
|
|
116
|
-
c
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def doc_comments_discard
|
|
120
|
-
@doc_comments = []
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
class Doc
|
|
3
|
-
module Generator
|
|
4
|
-
class Flow
|
|
5
|
-
include OrigenTesters::Generator
|
|
6
|
-
include OrigenTesters::Generator::FlowControlAPI
|
|
7
|
-
|
|
8
|
-
OUTPUT_POSTFIX = 'flow'
|
|
9
|
-
OUTPUT_EXTENSION = 'yaml'
|
|
10
|
-
|
|
11
|
-
def add(type, options = {})
|
|
12
|
-
preserve_comments = options.delete(:preserve_comments)
|
|
13
|
-
line = track_relationships(options) do |options|
|
|
14
|
-
FlowLine.new(type, options)
|
|
15
|
-
end
|
|
16
|
-
collection << line unless Origen.interface.resources_mode?
|
|
17
|
-
if preserve_comments
|
|
18
|
-
line.description = Origen.interface.doc_comments
|
|
19
|
-
else
|
|
20
|
-
line.description = Origen.interface.doc_comments_consume
|
|
21
|
-
end
|
|
22
|
-
line
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def start_section(options = {})
|
|
26
|
-
l = FlowLine.new(:section_start, options)
|
|
27
|
-
if options[:name]
|
|
28
|
-
desc = [options[:name]]
|
|
29
|
-
else
|
|
30
|
-
desc = []
|
|
31
|
-
end
|
|
32
|
-
l.description = desc + Origen.interface.doc_comments_consume
|
|
33
|
-
collection << l
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def stop_section(options = {})
|
|
37
|
-
collection << FlowLine.new(:section_stop, options)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def test(instance, options = {})
|
|
41
|
-
options = save_context(options)
|
|
42
|
-
add(:test, { test: instance }.merge(options))
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def set_device(options = {})
|
|
46
|
-
add(:set_device, options)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def to_yaml(options = {})
|
|
50
|
-
collection.map { |l| l.to_yaml(options) }
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def render(file, options = {})
|
|
54
|
-
options[:file] = file
|
|
55
|
-
add(:render, options)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def skip(identifier = nil, options = {})
|
|
59
|
-
identifier, options = nil, identifier if identifier.is_a?(Hash)
|
|
60
|
-
identifier = generate_unique_label(identifier)
|
|
61
|
-
options[:test] = identifier
|
|
62
|
-
add(:branch, options)
|
|
63
|
-
yield
|
|
64
|
-
add(:label, test: identifier)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
class Doc
|
|
3
|
-
module Generator
|
|
4
|
-
class FlowLine
|
|
5
|
-
attr_accessor :type, :id, :test, :context, :attributes, :description
|
|
6
|
-
|
|
7
|
-
def initialize(type, attrs = {})
|
|
8
|
-
@type = type
|
|
9
|
-
@test = attrs.delete(:test)
|
|
10
|
-
@context = {}
|
|
11
|
-
@attributes = {}
|
|
12
|
-
flow_control_options = Origen.interface.extract_flow_control_options!(attrs)
|
|
13
|
-
flow_control_options.each do |opt, val|
|
|
14
|
-
send("#{opt}=", val)
|
|
15
|
-
end
|
|
16
|
-
attrs.each do |attribute, val|
|
|
17
|
-
@attributes[attribute] = val
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def to_yaml(options = {})
|
|
22
|
-
options = {
|
|
23
|
-
include_descriptions: true
|
|
24
|
-
}.merge(options)
|
|
25
|
-
y = {
|
|
26
|
-
'type' => @type,
|
|
27
|
-
'description' => description,
|
|
28
|
-
'instance' => test_to_yaml(options),
|
|
29
|
-
'flow' => {
|
|
30
|
-
'attributes' => attributes_to_yaml(options),
|
|
31
|
-
'context' => context_to_yaml(options)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
y.delete('description') unless options[:include_descriptions]
|
|
35
|
-
y
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def attributes_to_yaml(_options = {})
|
|
39
|
-
a = {}
|
|
40
|
-
@attributes.each do |name, val|
|
|
41
|
-
a[name.to_s] = val if val
|
|
42
|
-
end
|
|
43
|
-
a
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def context_to_yaml(_options = {})
|
|
47
|
-
# Turn attribute keys into strings for prettier yaml, this includes all
|
|
48
|
-
# relationship meta data
|
|
49
|
-
c = @context.reduce({}) { |memo, (k, v)| memo[k.to_s] = v; memo }
|
|
50
|
-
# Now add job/enable word data
|
|
51
|
-
if @enable
|
|
52
|
-
c['if_enable'] = @enable
|
|
53
|
-
end
|
|
54
|
-
if @unless_enable
|
|
55
|
-
c['unless_enable'] = @unless_enable
|
|
56
|
-
end
|
|
57
|
-
unless if_jobs.empty?
|
|
58
|
-
c['if_jobs'] = if_jobs
|
|
59
|
-
end
|
|
60
|
-
unless unless_jobs.empty?
|
|
61
|
-
c['unless_jobs'] = unless_jobs
|
|
62
|
-
end
|
|
63
|
-
c
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def test_to_yaml(options = {})
|
|
67
|
-
if @test
|
|
68
|
-
if @test.is_a?(String) || @test.is_a?(Symbol)
|
|
69
|
-
{
|
|
70
|
-
'attributes' => {
|
|
71
|
-
'name' => @test.to_s
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else
|
|
75
|
-
@test.to_yaml(options)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def method_missing(method, *args, &_block)
|
|
81
|
-
method = method.to_s
|
|
82
|
-
if method.gsub!('=', '')
|
|
83
|
-
@attributes[method] = args.first
|
|
84
|
-
else
|
|
85
|
-
@attributes[method]
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def job
|
|
90
|
-
if !if_jobs.empty? && !unless_jobs.empty?
|
|
91
|
-
fail "Both if and unless jobs have been defined for test: #{parameter}"
|
|
92
|
-
elsif !if_jobs.empty?
|
|
93
|
-
if_jobs.join(',')
|
|
94
|
-
elsif !unless_jobs.empty?
|
|
95
|
-
unless_jobs.map { |j| "!#{j}" }.join(',')
|
|
96
|
-
else
|
|
97
|
-
''
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
alias_method :jobs, :job
|
|
101
|
-
|
|
102
|
-
def if_jobs
|
|
103
|
-
@if_jobs ||= []
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def unless_jobs
|
|
107
|
-
@unless_jobs ||= []
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def if_enable=(val)
|
|
111
|
-
@enable = val
|
|
112
|
-
end
|
|
113
|
-
alias_method :enable=, :if_enable=
|
|
114
|
-
alias_method :if_enabled=, :if_enable=
|
|
115
|
-
|
|
116
|
-
def unless_enable=(val)
|
|
117
|
-
@unless_enable = val
|
|
118
|
-
end
|
|
119
|
-
alias_method :unless_enabled=, :unless_enable=
|
|
120
|
-
|
|
121
|
-
def if_job=(jobs)
|
|
122
|
-
[jobs].flatten.compact.each do |job|
|
|
123
|
-
job = job.to_s.upcase
|
|
124
|
-
if job =~ /!/
|
|
125
|
-
self.unless_job = job
|
|
126
|
-
else
|
|
127
|
-
if_jobs << job unless if_jobs.include?(job)
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
alias_method :if_jobs=, :if_job=
|
|
132
|
-
alias_method :add_if_jobs, :if_job=
|
|
133
|
-
alias_method :add_if_job, :if_job=
|
|
134
|
-
|
|
135
|
-
def unless_job=(jobs)
|
|
136
|
-
[jobs].flatten.compact.each do |job|
|
|
137
|
-
job = job.to_s.upcase
|
|
138
|
-
job.gsub!('!', '')
|
|
139
|
-
unless_jobs << job unless unless_jobs.include?(job)
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
alias_method :unless_jobs=, :unless_job=
|
|
143
|
-
alias_method :add_unless_jobs, :unless_job=
|
|
144
|
-
alias_method :add_unless_job, :unless_job=
|
|
145
|
-
|
|
146
|
-
def run_if_failed(id)
|
|
147
|
-
@context[:if_failed] = id
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
def run_if_passed(id)
|
|
151
|
-
@context[:if_passed] = id
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
def run_if_ran(id)
|
|
155
|
-
@context[:if_ran] = id
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def run_unless_ran(id)
|
|
159
|
-
@context[:unless_ran] = id
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def run_if_any_passed(parent)
|
|
163
|
-
@context[:if_any_passed] = parent.id
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def run_if_all_passed(parent)
|
|
167
|
-
@context[:if_all_passed] = parent.id
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def run_if_any_failed(parent)
|
|
171
|
-
@context[:if_any_failed] = parent.id
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def run_if_all_failed(parent)
|
|
175
|
-
@context[:if_all_failed] = parent.id
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
def continue_on_fail
|
|
179
|
-
@attributes[:continue] = true
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def id
|
|
183
|
-
@id || "#{parameter}_#{unique_counter}"
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def unique_counter
|
|
187
|
-
@unique_counter ||= self.class.unique_counter
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def self.unique_counter
|
|
191
|
-
@ix ||= -1
|
|
192
|
-
@ix += 1
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def test?
|
|
196
|
-
@type == :test
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|