Class: OrigenTesters::Charz::Profile
- Inherits:
-
Object
- Object
- OrigenTesters::Charz::Profile
- Defined in:
- lib/origen_testers/charz/profile.rb
Overview
A Charz Profile Used to store characterization routines as well as flow control, conditional execution, and test placement meta data
Direct Known Subclasses
Instance Attribute Summary collapse
-
#and_enables ⇒ Object
Returns the value of attribute and_enables.
-
#and_flags ⇒ Object
Returns the value of attribute and_flags.
-
#charz_only ⇒ Boolean
Indicates if the point tests should or shouldn’t be added to the flow.
-
#enables ⇒ Symbol, ...
Enable gates to be wrapped around the resulting charz tests.
-
#flags ⇒ Symbol, ...
Flag gates to be wrapped around the resulting charz tests.
-
#id ⇒ Symbol
The id of the current profile, used as a key in OrigenTesters::Charz#charz_profiles hash.
-
#name ⇒ Symbol
The value used (if the user decides) to generate the name of the created charz test.
-
#on_result ⇒ Symbol
Indicates if the resulting charz tests are depending on the point tests result, valid values include :on_fail, and :on_pass.
-
#placement ⇒ Symbol
Placement of the to be created charz tests, defaults to inline, accepts :eof as well.
-
#routines ⇒ Array
List of charz routines to be called under this profile.
Instance Method Summary collapse
- #attrs_ok? ⇒ Boolean
- #gate_check(gates, gate_type) ⇒ Object
- #gate_check_and(gates, gate_type, other_gate) ⇒ Object
-
#initialize(id, options, &block) ⇒ Profile
constructor
A new instance of Profile.
- #method_missing(m, *args, &block) ⇒ Object
Constructor Details
#initialize(id, options, &block) ⇒ Profile
Returns a new instance of Profile.
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/origen_testers/charz/profile.rb', line 24 def initialize(id, , &block) @id = id @id = @id.symbolize unless id.is_a? Symbol .each { |k, v| instance_variable_set("@#{k}", v) } (block.arity < 1 ? (instance_eval(&block)) : block.call(self)) if block_given? @name ||= id @placement ||= :inline @defined_routines = .delete(:defined_routines) attrs_ok? end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/origen_testers/charz/profile.rb', line 167 def method_missing(m, *args, &block) ivar = "@#{m.to_s.gsub('=', '')}" ivar_sym = ":#{ivar}" if m.to_s =~ /=$/ define_singleton_method(m) do |val| instance_variable_set(ivar, val) end elsif instance_variables.include? ivar_sym instance_variable_get(ivar) else define_singleton_method(m) do instance_variable_get(ivar) end end send(m, *args, &block) end |
Instance Attribute Details
#and_enables ⇒ Object
Returns the value of attribute and_enables.
22 23 24 |
# File 'lib/origen_testers/charz/profile.rb', line 22 def and_enables @and_enables end |
#and_flags ⇒ Object
Returns the value of attribute and_flags.
22 23 24 |
# File 'lib/origen_testers/charz/profile.rb', line 22 def and_flags @and_flags end |
#charz_only ⇒ Boolean
Returns indicates if the point tests should or shouldn’t be added to the flow.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
#enables ⇒ Symbol, ...
Returns enable gates to be wrapped around the resulting charz tests.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
#flags ⇒ Symbol, ...
Returns flag gates to be wrapped around the resulting charz tests.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
#id ⇒ Symbol
Returns the id of the current profile, used as a key in OrigenTesters::Charz#charz_profiles hash.
22 23 24 |
# File 'lib/origen_testers/charz/profile.rb', line 22 def id @id end |
#name ⇒ Symbol
Returns the value used (if the user decides) to generate the name of the created charz test. defaults to the value of @id.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
#on_result ⇒ Symbol
Returns indicates if the resulting charz tests are depending on the point tests result, valid values include :on_fail, and :on_pass.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
#placement ⇒ Symbol
Returns placement of the to be created charz tests, defaults to inline, accepts :eof as well. Other placements can be used as well if @valid_placements is altered.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
#routines ⇒ Array
Returns list of charz routines to be called under this profile.
22 |
# File 'lib/origen_testers/charz/profile.rb', line 22 attr_accessor :id, :name, :placement, :on_result, :enables, :flags, :routines, :charz_only, :and_enables, :and_flags |
Instance Method Details
#attrs_ok? ⇒ Boolean
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/origen_testers/charz/profile.rb', line 35 def attrs_ok? return if @quality_check == false unless @routines.is_a?(Array) Origen.log.error "Profile #{id}: routines is expected to be of type <Array>, but is instead of type <#{@routines.class}>!" fail end # allowing a config for empty routines for usecase of # determining routines on the fly dynamically if @routines.empty? && !@allow_empty_routines Origen.log.error "Profile #{id}: routines array is empty!" Origen.log.warn "If you'd like to enable profile creation without routines, set the profile's @allow_empty_routines attribute to true" fail end unknown_routines = @routines - @defined_routines unless unknown_routines.empty? Origen.log.error "Profile #{id}: unknown routines: #{unknown_routines}" fail end @valid_placements ||= [:inline, :eof] unless @valid_placements.include? @placement Origen.log.error "Profile #{id}: invalid placement value, must be one of: #{@valid_placements}" fail end if @on_result @valid_on_results ||= [:on_fail, :fail, :failed, :on_pass, :pass, :passed] unless @valid_on_results.include?(@on_result) Origen.log.error "Profile #{id}: invalid on_result value, must be one of: #{@valid_on_results}" fail end end if @charz_only && @on_result Origen.log.error "Profile #{id}: @charz_only is set, but @on_result (#{@on_result}) requires the parent test to exist in the flow" fail end unless @gate_checks == false if @and_enables && @and_flags Origen.log.error "@and_enables and @and_flags are both set to true. Please only 'and' one gate type" fail end if @and_enables gate_check(@flags, :flags) if @flags gate_check_and(@enables, :enables, @flags) if @enables elsif @and_flags gate_check(@enables, :enables) if @enables gate_check_and(@flags, :flags, @enables) if @flags else gate_check(@enables, :enable) if @enables gate_check(@flags, :flags) if @flags end end end |
#gate_check(gates, gate_type) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/origen_testers/charz/profile.rb', line 94 def gate_check(gates, gate_type) case gates when Symbol, String return when Array unknown_gates = gates.reject { |gate| [String, Symbol].include? gate.class } if unknown_gates.empty? return else Origen.log.error "Profile #{id}: Unknown #{gate_type} type(s) in #{gate_type} array." Origen.log.error "Arrays must contain Strings and/or Symbols, but #{unknown_gates.map(&:class).uniq } were found in #{gates}" fail end when Hash gates.each do |gate, gated_routines| if gate.is_a? Hash Origen.log.error "Profile #{id}: #{gate_type} Hash keys cannot be of type Hash, but only Symbol, String, or Array" fail end gate_check(gate, gate_type) gated_routines = [gated_routines] unless gated_routines.is_a? Array unknown_routines = gated_routines - @defined_routines unless unknown_routines.empty? Origen.log.error "Profile #{id}: unknown routines found in @#{gate_type}[#{gate.is_a?(Symbol) ? ':' : ''}#{gate}]: #{unknown_routines}" fail end end else Origen.log.error "Profile #{id}: Unknown #{gate_type} type: #{gates.class}. #{gate_type} must be of type Symbol, String, Array, or Hash" fail end end |
#gate_check_and(gates, gate_type, other_gate) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/origen_testers/charz/profile.rb', line 127 def gate_check_and(gates, gate_type, other_gate) if other_gate.is_a? Hash Origen.log.error "Profile #{id}: #{other_gate} When using &&-ing feature, the non-anded gate can not be of type hash." fail end case gates when Symbol, String return when Array unknown_gates = gates.reject { |gate| [String, Symbol].include? gate.class } if unknown_gates.empty? return else Origen.log.error "Profile #{id}: Unknown #{gate_type} type(s) in #{gate_type} array." Origen.log.error "Arrays must contain Strings and/or Symbols, but #{unknown_gates.map(&:class).uniq } were found in #{gates}" fail end when Hash gates.each do |gated_routine, gates| if gated_routine.is_a? Hash Origen.log.error "Profile #{id}: #{gate_type} Hash keys cannot be of type Hash, but only Symbol, String, or Array" fail end unless @defined_routines.include?(gated_routine) Origen.log.error "Profile #{id}: #{gated_routine} Hash keys for &&-ed gates must be defined routines." fail end gates = [gates] unless gates.is_a? Array unknown_gates = gates.reject { |gate| [String, Symbol].include? gate.class } unless unknown_gates.empty? Origen.log.error "Gate array must contain Strings and/or Symbols, but #{unknown_gates.map(&:class).uniq } were found in #{gates}" fail end end else Origen.log.error "Profile #{id}: Unknown #{gate_type} type: #{gates.class}. #{gate_type} must be of type Symbol, String, Array, or Hash" fail end end |