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
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.
-
#force_keep_parent ⇒ Object
Returns the value of attribute force_keep_parent.
-
#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.
-
#massage_gates ⇒ Object
convert hash gates to set convert their routines to type array if not already.
- #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 34 |
# 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? massage_gates end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &block) ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/origen_testers/charz/profile.rb', line 182 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, :force_keep_parent, :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, :force_keep_parent, :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, :force_keep_parent, :and_enables, :and_flags |
#force_keep_parent ⇒ Object
Returns the value of attribute force_keep_parent.
22 23 24 |
# File 'lib/origen_testers/charz/profile.rb', line 22 def force_keep_parent @force_keep_parent end |
#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, :force_keep_parent, :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, :force_keep_parent, :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, :force_keep_parent, :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, :force_keep_parent, :and_enables, :and_flags |
Instance Method Details
#attrs_ok? ⇒ Boolean
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 93 |
# File 'lib/origen_testers/charz/profile.rb', line 36 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
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/origen_testers/charz/profile.rb', line 109 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
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/origen_testers/charz/profile.rb', line 142 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 |
#massage_gates ⇒ Object
convert hash gates to set convert their routines to type array if not already
96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/origen_testers/charz/profile.rb', line 96 def massage_gates if @enables.is_a?(Hash) @enables = {}.tap do |new_h| @enables.each { |gates, routines| new_h[gates] = [routines].flatten } end end if @flags.is_a?(Hash) @flags = {}.tap do |new_h| @flags.each { |gates, routines| new_h[gates] = [routines].flatten } end end end |