origen 0.2.6 → 0.3.0

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