origen 0.2.6 → 0.3.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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/bin/origen +3 -1
  3. data/config/boot.rb +1 -7
  4. data/config/commands.rb +0 -1
  5. data/config/version.rb +2 -2
  6. data/lib/c99/{j750_interface.rb → ate_interface.rb} +3 -11
  7. data/lib/c99/doc_interface.rb +1 -1
  8. data/lib/origen.rb +9 -30
  9. data/lib/origen/application.rb +10 -8
  10. data/lib/origen/application/configuration.rb +13 -26
  11. data/lib/origen/application/plugins.rb +122 -0
  12. data/lib/origen/application/plugins_manager.rb +16 -254
  13. data/lib/origen/application/release.rb +2 -2
  14. data/lib/origen/application/runner.rb +2 -4
  15. data/lib/origen/chips.rb +0 -0
  16. data/lib/origen/chips/chip.rb +0 -0
  17. data/lib/origen/chips/design_entry.rb +0 -0
  18. data/lib/origen/chips/doc_entry.rb +0 -0
  19. data/lib/origen/chips/note.rb +0 -0
  20. data/lib/origen/commands.rb +4 -44
  21. data/lib/origen/commands/compile.rb +1 -2
  22. data/lib/origen/commands/generate.rb +1 -1
  23. data/lib/origen/commands/interactive.rb +1 -2
  24. data/lib/origen/commands/plugin.rb +49 -56
  25. data/lib/origen/commands/program.rb +1 -1
  26. data/lib/origen/commands/rc.rb +2 -2
  27. data/lib/origen/commands/version.rb +2 -17
  28. data/lib/origen/commands_global.rb +3 -0
  29. data/lib/origen/file_handler.rb +10 -10
  30. data/lib/origen/generator.rb +1 -1
  31. data/lib/origen/generator/job.rb +1 -1
  32. data/lib/origen/generator/pattern.rb +2 -2
  33. data/lib/origen/generator/pattern_finder.rb +10 -9
  34. data/lib/origen/pins/pin.rb +0 -0
  35. data/lib/origen/regression_manager.rb +0 -0
  36. data/lib/origen/remote_manager.rb +2 -8
  37. data/lib/origen/revision_control/design_sync.rb +0 -0
  38. data/lib/origen/revision_control/git.rb +0 -0
  39. data/lib/origen/specs.rb +0 -0
  40. data/lib/origen/specs/checkers.rb +0 -0
  41. data/lib/origen/specs/creation_info.rb +0 -0
  42. data/lib/origen/specs/exhibit.rb +0 -0
  43. data/lib/origen/specs/spec.rb +0 -0
  44. data/lib/origen/utility.rb +0 -1
  45. data/lib/origen/utility/diff.rb +0 -0
  46. metadata +42 -119
  47. data/lib/origen/import_manager.rb +0 -596
  48. data/lib/origen/nvm.rb +0 -6
  49. data/lib/origen/nvm/block_array.rb +0 -72
  50. data/lib/origen/tester.rb +0 -56
  51. data/lib/origen/tester/api.rb +0 -277
  52. data/lib/origen/tester/bdm/bdm.rb +0 -25
  53. data/lib/origen/tester/doc/doc.rb +0 -226
  54. data/lib/origen/tester/doc/generator.rb +0 -126
  55. data/lib/origen/tester/doc/generator/flow.rb +0 -71
  56. data/lib/origen/tester/doc/generator/flow_line.rb +0 -203
  57. data/lib/origen/tester/doc/generator/test.rb +0 -68
  58. data/lib/origen/tester/doc/generator/test_group.rb +0 -66
  59. data/lib/origen/tester/doc/generator/tests.rb +0 -47
  60. data/lib/origen/tester/doc/model.rb +0 -162
  61. data/lib/origen/tester/generator.rb +0 -271
  62. data/lib/origen/tester/generator/flow_control_api.rb +0 -606
  63. data/lib/origen/tester/generator/identity_map.rb +0 -25
  64. data/lib/origen/tester/generator/placeholder.rb +0 -13
  65. data/lib/origen/tester/generator/test_numberer.rb +0 -25
  66. data/lib/origen/tester/interface.rb +0 -154
  67. data/lib/origen/tester/j750/files.rb +0 -45
  68. data/lib/origen/tester/j750/generator.rb +0 -203
  69. data/lib/origen/tester/j750/generator/flow.rb +0 -123
  70. data/lib/origen/tester/j750/generator/flow_line.rb +0 -288
  71. data/lib/origen/tester/j750/generator/patgroup.rb +0 -111
  72. data/lib/origen/tester/j750/generator/patgroups.rb +0 -41
  73. data/lib/origen/tester/j750/generator/patset.rb +0 -111
  74. data/lib/origen/tester/j750/generator/patsets.rb +0 -41
  75. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +0 -9
  76. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +0 -16
  77. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +0 -8
  78. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +0 -10
  79. data/lib/origen/tester/j750/generator/test_instance.rb +0 -846
  80. data/lib/origen/tester/j750/generator/test_instance_group.rb +0 -60
  81. data/lib/origen/tester/j750/generator/test_instances.rb +0 -182
  82. data/lib/origen/tester/j750/j750.rb +0 -845
  83. data/lib/origen/tester/j750/j750_hpt.rb +0 -35
  84. data/lib/origen/tester/j750/parser.rb +0 -104
  85. data/lib/origen/tester/j750/parser/ac_spec.rb +0 -11
  86. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  87. data/lib/origen/tester/j750/parser/dc_spec.rb +0 -36
  88. data/lib/origen/tester/j750/parser/dc_specs.rb +0 -50
  89. data/lib/origen/tester/j750/parser/descriptions.rb +0 -340
  90. data/lib/origen/tester/j750/parser/flow.rb +0 -111
  91. data/lib/origen/tester/j750/parser/flow_line.rb +0 -207
  92. data/lib/origen/tester/j750/parser/flows.rb +0 -23
  93. data/lib/origen/tester/j750/parser/pattern_set.rb +0 -94
  94. data/lib/origen/tester/j750/parser/pattern_sets.rb +0 -33
  95. data/lib/origen/tester/j750/parser/test_instance.rb +0 -322
  96. data/lib/origen/tester/j750/parser/test_instances.rb +0 -26
  97. data/lib/origen/tester/j750/parser/timeset.rb +0 -15
  98. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  99. data/lib/origen/tester/jlink/jlink.rb +0 -33
  100. data/lib/origen/tester/parser.rb +0 -24
  101. data/lib/origen/tester/parser/description_lookup.rb +0 -64
  102. data/lib/origen/tester/parser/searchable_array.rb +0 -32
  103. data/lib/origen/tester/parser/searchable_hash.rb +0 -32
  104. data/lib/origen/tester/time.rb +0 -338
  105. data/lib/origen/tester/timing.rb +0 -253
  106. data/lib/origen/tester/ultraflex/files.rb +0 -45
  107. data/lib/origen/tester/ultraflex/generator.rb +0 -200
  108. data/lib/origen/tester/ultraflex/generator/flow.rb +0 -119
  109. data/lib/origen/tester/ultraflex/generator/flow_line.rb +0 -269
  110. data/lib/origen/tester/ultraflex/generator/patgroup.rb +0 -111
  111. data/lib/origen/tester/ultraflex/generator/patgroups.rb +0 -41
  112. data/lib/origen/tester/ultraflex/generator/patset.rb +0 -111
  113. data/lib/origen/tester/ultraflex/generator/patsets.rb +0 -41
  114. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +0 -9
  115. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +0 -16
  116. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +0 -8
  117. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +0 -10
  118. data/lib/origen/tester/ultraflex/generator/test_instance.rb +0 -622
  119. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +0 -60
  120. data/lib/origen/tester/ultraflex/generator/test_instances.rb +0 -174
  121. data/lib/origen/tester/ultraflex/parser.rb +0 -104
  122. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +0 -11
  123. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  124. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +0 -36
  125. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +0 -50
  126. data/lib/origen/tester/ultraflex/parser/descriptions.rb +0 -342
  127. data/lib/origen/tester/ultraflex/parser/flow.rb +0 -111
  128. data/lib/origen/tester/ultraflex/parser/flow_line.rb +0 -207
  129. data/lib/origen/tester/ultraflex/parser/flows.rb +0 -23
  130. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +0 -94
  131. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +0 -33
  132. data/lib/origen/tester/ultraflex/parser/test_instance.rb +0 -262
  133. data/lib/origen/tester/ultraflex/parser/test_instances.rb +0 -26
  134. data/lib/origen/tester/ultraflex/parser/timeset.rb +0 -15
  135. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  136. data/lib/origen/tester/ultraflex/ultraflex.rb +0 -759
  137. data/lib/origen/tester/v93k/generator.rb +0 -80
  138. data/lib/origen/tester/v93k/generator/flow.rb +0 -63
  139. data/lib/origen/tester/v93k/generator/flow_node.rb +0 -17
  140. data/lib/origen/tester/v93k/generator/flow_node/print.rb +0 -10
  141. data/lib/origen/tester/v93k/generator/pattern.rb +0 -16
  142. data/lib/origen/tester/v93k/generator/pattern_master.rb +0 -54
  143. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +0 -6
  144. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +0 -11
  145. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +0 -121
  146. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +0 -9
  147. data/lib/origen/tester/v93k/generator/test_function.rb +0 -103
  148. data/lib/origen/tester/v93k/generator/test_functions.rb +0 -79
  149. data/lib/origen/tester/v93k/generator/test_method.rb +0 -46
  150. data/lib/origen/tester/v93k/generator/test_methods.rb +0 -75
  151. data/lib/origen/tester/v93k/generator/test_suite.rb +0 -54
  152. data/lib/origen/tester/v93k/generator/test_suites.rb +0 -65
  153. data/lib/origen/tester/v93k/v93k.rb +0 -420
  154. data/lib/origen/tester/vector.rb +0 -86
  155. data/lib/origen/tester/vector_generator.rb +0 -637
  156. data/lib/origen/tester/vector_pipeline.rb +0 -150
  157. data/lib/origen/utility/design_sync.rb +0 -494
  158. data/lib/origen/version_checker.rb +0 -117
@@ -1,66 +0,0 @@
1
- module Origen
2
- module Tester
3
- class Doc
4
- module Generator
5
- class TestGroup
6
- attr_accessor :name, :version, :append_version
7
-
8
- include Enumerable
9
-
10
- def initialize(name, _options = {})
11
- @name = name
12
- @store = []
13
- @append_version = true
14
- end
15
-
16
- def name
17
- if unversioned_name
18
- if version && @append_version
19
- "#{unversioned_name}_v#{version}"
20
- else
21
- unversioned_name.to_s
22
- end
23
- end
24
- end
25
-
26
- def to_yaml(options = {})
27
- y = {}
28
- y['group'] = @store.map { |t| t.to_yaml(options) }
29
- y
30
- end
31
-
32
- def unversioned_name
33
- if @name
34
- if @name =~ /grp$/
35
- @name
36
- else
37
- "#{@name}_grp"
38
- end
39
- end
40
- end
41
-
42
- def <<(instance)
43
- @store << instance
44
- end
45
-
46
- def size
47
- @store.size
48
- end
49
-
50
- def each
51
- @store.each { |ins| yield ins }
52
- end
53
-
54
- def ==(other_instance_group)
55
- self.class == other_instance_group.class &&
56
- unversioned_name.to_s == other_instance_group.unversioned_name.to_s &&
57
- size == other_instance_group.size &&
58
- self.all? do |ins|
59
- other_instance_group.any? { |other_ins| ins == other_ins }
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,47 +0,0 @@
1
- module Origen
2
- module Tester
3
- class Doc
4
- module Generator
5
- class Tests
6
- attr_accessor :collection
7
-
8
- def initialize
9
- @collection = []
10
- end
11
-
12
- class IndexedString < ::String
13
- attr_accessor :index
14
-
15
- def name
16
- self
17
- end
18
- end
19
-
20
- def add(name, attrs = {})
21
- test = Test.new(name, attrs)
22
- if @current_group
23
- @current_group << test
24
- else
25
- collection << test
26
- end
27
- test
28
- end
29
-
30
- # Arbitrarily group a subset of tests together, see the J750 API for details on how to use
31
- # this.
32
- def group(name = nil, options = {})
33
- name, options = nil, name if name.is_a?(Hash)
34
- @current_group = TestGroup.new(name, options)
35
- collection << @current_group
36
- yield @current_group
37
- @current_group = nil
38
- end
39
- alias_method :add_group, :group
40
-
41
- def render(_file, _options = {})
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,162 +0,0 @@
1
- module Origen
2
- module Tester
3
- class Doc
4
- # Class representing a program model, provides an API to iterate
5
- # on the flow based on context (e.g. which job).
6
- class Model
7
- attr_accessor :flows, :target
8
-
9
- def initialize
10
- @flows = {}
11
- end
12
-
13
- # Iterates through each line in the given flow returning a hash for each
14
- # line with the following structure:
15
- #
16
- # {
17
- # :type => Symbol, # Type of flow line
18
- # :description => [], # Array of strings
19
- # :instance => [{}], # Array of attributes hashes (each one represents an individual test instance)
20
- # :flow => {}, # Hash of attributes
21
- # :context => {}, # Hash of attributes
22
- # }
23
- #
24
- # In all cases if an item is missing then it will be replaced by an empty
25
- # array or hash as appropriate so that the caller does not need to worry
26
- # about this.
27
- #
28
- # Supply the name of the flow(s) to consider, if the flows argument is left
29
- # out then all lines in all flows will be returned.
30
- #
31
- # A context option can be supplied to only return the tests for which the given
32
- # context is true.
33
- #
34
- # puts "The following tests run at FR:"
35
- # program_model.each_in_flow(:ft_flow, :context => { :job => "FR" }) do |line|
36
- # puts " #{line[:flow][:name]}"
37
- # end
38
- def each_in_flow(flows = nil, options = {})
39
- if flows.is_a?(Hash)
40
- options = flows
41
- flows = nil
42
- end
43
- unless flows
44
- flows = self.flows.keys
45
- end
46
- [flows].flatten.each do |flow|
47
- @flows[flow.to_sym].each do |test|
48
- test = format_test(test)
49
- if valid_in_context?(test, options[:context])
50
- yield test
51
- end
52
- end
53
- end
54
- nil
55
- end
56
-
57
- # Searches the given flows to find dependents of the given test id. The dependents
58
- # are returned in arrays grouped by context:
59
- #
60
- # {
61
- # :if_failed => [],
62
- # :if_passed => [],
63
- # :if_ran => [],
64
- # :unless_ran => [],
65
- # }
66
- #
67
- # Each test will have the same format as described in #each_in_flow.
68
- #
69
- # If no dependents are found an empty hash is returned.
70
- def dependents_of(id, flows, options = {})
71
- d = {}
72
- each_in_flow(flows, options) do |test|
73
- test[:context].each do |key, val|
74
- if val == id
75
- d[key] ||= []
76
- d[key] << test
77
- end
78
- end
79
- end
80
- d
81
- end
82
-
83
- # Search for the given test id in the given flows.
84
- # Returns nil if not found.
85
- def find_by_id(id, flows, options = {})
86
- each_in_flow(flows, options) do |test|
87
- return test if test[:flow][:id] == id
88
- end
89
- end
90
-
91
- # Returns true if the given tests id valid under the given context
92
- # (currently only tests for job matching)
93
- def valid_in_context?(test, context = nil)
94
- if context && context[:job] && test[:context]
95
- if test[:context][:if_jobs]
96
- test[:context][:if_jobs].include?(context[:job])
97
- elsif test[:context][:unless_jobs]
98
- !test[:context][:unless_jobs].include?(context[:job])
99
- else
100
- true
101
- end
102
- else
103
- true
104
- end
105
- end
106
-
107
- # @api private
108
- def format_test(test, _options = {})
109
- {
110
- type: test[:type] ? test[:type].to_sym : :unknown,
111
- description: test[:description] || [],
112
- instance: build_instance(test),
113
- flow: test[:flow] ? test[:flow][:attributes] || {} : {},
114
- context: test[:flow] ? test[:flow][:context] || {} : {}
115
- }
116
- end
117
-
118
- # @api private
119
- def build_instance(test)
120
- if test[:instance]
121
- if test[:instance][:group]
122
- test[:instance][:group].map { |g| g[:attributes] || {} }
123
- else
124
- [test[:instance][:attributes] || {}]
125
- end
126
- else
127
- [{}]
128
- end
129
- end
130
-
131
- # YAML likes strings for keys, we don't, so make sure all keys are symbols
132
- # when receiving a new flow
133
- # @api private
134
- def add_flow(name, content)
135
- @flows[name.to_sym] = content.map do |h|
136
- h = symbolize_keys h
137
- if h[:instance] && h[:instance][:group]
138
- h[:instance][:group] = h[:instance][:group].map { |j| symbolize_keys j }
139
- end
140
- h
141
- end
142
- end
143
-
144
- # @api private
145
- def symbolize_keys(hash)
146
- hash.reduce({}) do |result, (key, value)|
147
- new_key = case key
148
- when String then key.to_sym
149
- else key
150
- end
151
- new_value = case value
152
- when Hash then symbolize_keys(value)
153
- else value
154
- end
155
- result[new_key] = new_value
156
- result
157
- end
158
- end
159
- end
160
- end
161
- end
162
- end
@@ -1,271 +0,0 @@
1
- require 'active_support/concern'
2
- require 'erb'
3
- require 'yaml'
4
-
5
- module Origen
6
- module Tester
7
- module Generator
8
- autoload :Placeholder, 'origen/tester/generator/placeholder'
9
- autoload :IdentityMap, 'origen/tester/generator/identity_map'
10
- autoload :FlowControlAPI, 'origen/tester/generator/flow_control_api'
11
-
12
- extend ActiveSupport::Concern
13
-
14
- included do
15
- include Origen::Generator::Comparator
16
- end
17
-
18
- # The program source files are executed by eval to allow the tester to filter the
19
- # source contents before executing. For examples the doc tester replaces all comments
20
- # with a method call containing each comment so that they can be captured.
21
- def self.execute_source(file)
22
- if Origen.tester.doc? && Origen.interface_loaded? && Origen.interface.respond_to?(:filter_source)
23
- File.open(file) do |f|
24
- src = f.read
25
- src = Origen.interface.filter_source(src)
26
- # With source file wrapping here to ensure that any calls to Origen.app! within
27
- # the source code will evaluate to the correct app instance
28
- Origen.with_source_file(file) do
29
- eval(src, global_binding)
30
- end
31
- end
32
- else
33
- load file
34
- end
35
- end
36
-
37
- # When called on a generater no output files will be created from it
38
- def inhibit_output
39
- @inhibit_output = true
40
- end
41
-
42
- # Returns true if the output files from this generator will be inhibited
43
- def output_inhibited?
44
- @inhibit_output
45
- end
46
-
47
- # Expands and inserts all render statements that have been encountered
48
- def close(options = {})
49
- Origen.profile "closing #{filename}" do
50
- base_collection = collection
51
- base_collection.each_with_index do |item, i|
52
- if item.is_a? Placeholder
53
- if item.type == :render
54
- txt = ''
55
- Origen.file_handler.preserve_current_file do
56
- Origen.file_handler.default_extension = file_extension
57
- placeholder = compiler.render(item.file, item.options)
58
- txt = compiler.insert(placeholder).chomp
59
- end
60
- base_collection[i] = txt
61
- else
62
- fail 'Unknown placeholder encountered!'
63
- end
64
- end
65
- end
66
- @collection = base_collection.flatten.compact
67
- on_close(options)
68
- end
69
- end
70
-
71
- def file_pipeline
72
- @@file_pipeline ||= []
73
- end
74
-
75
- # Returns the directory of the current source file being generated
76
- def current_dir
77
- if file_pipeline.empty?
78
- Origen.file_handler.base_directory
79
- else
80
- Pathname.new(file_pipeline.last).dirname
81
- end
82
- end
83
-
84
- # Redefine this in the parent which includes this module if you want anything to
85
- # occur after closing the generator (expanding all render/import statements) but
86
- # before writing to a file.
87
- def on_close(_options = {})
88
- end
89
-
90
- # Redefine this in the parent which includes this module if you want anything to
91
- # occur after all tests have been generated but before file writing starts.
92
- def finalize(_options = {})
93
- end
94
-
95
- def compiler
96
- Origen.generator.compiler
97
- end
98
-
99
- def filename=(name)
100
- @filename = name
101
- end
102
-
103
- def filename(options = {})
104
- options = {
105
- include_extension: true
106
- }.merge(options)
107
- name = (@filename || Origen.file_handler.current_file.basename('.rb')).to_s
108
- if Origen.config.program_prefix
109
- unless name =~ /^#{Origen.config.program_prefix}/i
110
- name = "#{Origen.config.program_prefix}_#{name}"
111
- end
112
- end
113
- f = Pathname.new(name).basename
114
- ext = f.extname.empty? ? file_extension : f.extname
115
- body = f.basename(".#{ext}").to_s
116
- body.gsub!('_resources', '')
117
- if defined? self.class::OUTPUT_POSTFIX
118
- # Unless the postfix is already in the name
119
- unless body =~ /#{self.class::OUTPUT_POSTFIX}$/i
120
- body = "#{body}_#{self.class::OUTPUT_POSTFIX}"
121
- end
122
- end
123
- ext = ".#{ext}" unless ext =~ /^\./
124
- if options[:include_extension]
125
- "#{body}#{ext}"
126
- else
127
- "#{body}"
128
- end
129
- end
130
-
131
- def dont_diff=(val)
132
- @dont_diff = val
133
- end
134
-
135
- # All generators must implement a collection method that returns an
136
- # array containing the generated items
137
- def collection
138
- @collection ||= []
139
- end
140
-
141
- def collection=(array)
142
- @collection = array
143
- end
144
-
145
- def file_extension
146
- if defined? self.class::OUTPUT_EXTENSION
147
- self.class::OUTPUT_EXTENSION
148
- elsif defined? self.class::TEMPLATE
149
- p = Pathname.new(self.class::TEMPLATE)
150
- ext = p.basename('.erb').extname
151
- ext.empty? ? 'txt' : ext
152
- else
153
- 'txt'
154
- end
155
- end
156
-
157
- def write_to_file(options = {})
158
- unless output_inhibited?
159
- if defined? self.class::TEMPLATE || Origen.tester.is_a?(Origen::Tester::Doc)
160
- write_from_template(options)
161
- else
162
- fail "Don't know hot to write without a template!"
163
- end
164
- stats.completed_files += 1
165
- end
166
- end
167
-
168
- def write_from_template(options = {})
169
- options = {
170
- quiet: false,
171
- skip_diff: false
172
- }.merge(options)
173
- unless output_inhibited?
174
- # If this is not the first time we have written to the current output file
175
- # then appen to it, otherwise clear it and start from scratch.
176
- # The use of a class variable to store the opened files means that it will be
177
- # shared by all generators in this run.
178
- @@opened_files ||= []
179
- if @@opened_files.include?(output_file) && !Origen.tester.is_a?(Origen::Tester::Doc)
180
- @append = true
181
- Origen.file_handler.preserve_state do
182
- File.open(output_file, 'a') do |out|
183
- content = compiler.insert(ERB.new(File.read(self.class::TEMPLATE), 0, Origen.config.erb_trim_mode).result(binding))
184
- out.puts content unless content.empty?
185
- end
186
- end
187
- Origen.log.info "Appending... #{output_file.basename}" unless options[:quiet]
188
- else
189
- @append = false
190
- Origen.file_handler.preserve_state do
191
- if Origen.tester.is_a?(Origen::Tester::Doc)
192
- if options[:return_model]
193
- Origen::Tester::Doc.model.add_flow(filename(include_extension: false), to_yaml)
194
- else
195
- Origen.file_handler.open_for_write(output_file) do |f|
196
- f.puts YAML.dump(to_yaml(include_descriptions: false))
197
- end
198
- end
199
- else
200
- File.open(output_file, 'w') do |out|
201
- out.puts compiler.insert(ERB.new(File.read(self.class::TEMPLATE), 0, Origen.config.erb_trim_mode).result(binding))
202
- end
203
- end
204
- end
205
- @@opened_files << output_file
206
- Origen.log.info "Writing... #{output_file.basename}" unless options[:quiet]
207
- end
208
- if !@dont_diff && !options[:skip_diff] && !options[:quiet]
209
- check_for_changes(output_file, reference_file,
210
- compile_job: true,
211
- comment_char: Origen.app.tester.program_comment_char)
212
- end
213
- end
214
- end
215
-
216
- def output_file
217
- Pathname.new("#{Origen.file_handler.output_directory}/#{filename}")
218
- end
219
-
220
- def reference_file
221
- Pathname.new("#{Origen.file_handler.reference_directory}/#{filename}")
222
- end
223
-
224
- def import(file, options = {})
225
- file = Pathname.new(file).absolute? ? file : "#{current_dir}/#{file}"
226
- file = Origen.file_handler.clean_path_to_sub_program(file)
227
- base_collection = collection
228
- @collection = []
229
- Origen.generator.option_pipeline << options
230
- file_pipeline << file
231
- Origen::Tester::Generator.execute_source(file)
232
- file_pipeline.pop
233
- base_collection << @collection
234
- @collection = base_collection.flatten
235
- end
236
-
237
- def render(file, options = {})
238
- if options.delete(:_inline)
239
- super Origen.file_handler.clean_path_to_sub_template(file), options
240
- else
241
- collection << Placeholder.new(:render, file, options)
242
- end
243
- end
244
-
245
- def stats
246
- Origen.app.stats
247
- end
248
-
249
- def to_be_written?
250
- true
251
- end
252
-
253
- def set_flow_description(desc)
254
- Origen.interface.descriptions.add_for_flow(output_file, desc)
255
- end
256
-
257
- def identity_map # :nodoc:
258
- Origen.interface.identity_map
259
- end
260
-
261
- module ClassMethods
262
- def new(*args, &block) # :nodoc:
263
- x = allocate
264
- x.send(:initialize, *args, &block)
265
- Origen.interface.sheet_generators << x
266
- x
267
- end
268
- end
269
- end
270
- end
271
- end