Class: OrigenTesters::SmartestBasedTester::Base::TestMethod
- Inherits:
-
Object
- Object
- OrigenTesters::SmartestBasedTester::Base::TestMethod
- Defined in:
- lib/origen_testers/smartest_based_tester/base/test_method.rb
Direct Known Subclasses
Constant Summary collapse
- FORMAT_TYPES =
[:current, :voltage, :time, :frequency, :string, :integer, :double, :boolean, :class, :list_strings, :list_classes]
Instance Attribute Summary collapse
-
#abs_class_name ⇒ Object
Returns the value of attribute abs_class_name.
-
#class_name ⇒ Object
Returns the value of attribute class_name.
-
#id ⇒ Object
(also: #name)
readonly
Returns the value of attribute id.
-
#library ⇒ Object
readonly
Returns the object representing the test method library that the given test method is defined in.
-
#limits ⇒ Object
readonly
Returns the value of attribute limits.
-
#limits_id ⇒ Object
(also: #limit_id)
Returns the value of attribute limits_id.
-
#parameters ⇒ Object
readonly
Returns an hash corresponding to the parameters that the given test method has.
-
#sub_test_name ⇒ Object
Used to store the name of the primary test logged in SMT8.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #finalize ⇒ Object
- #format(attr) ⇒ Object
- #handle_val_type(val, type, attr) ⇒ Object
-
#initialize(options) ⇒ TestMethod
constructor
A new instance of TestMethod.
- #klass ⇒ Object
- #method_missing(method, *args, &block) ⇒ Object
- #remove_parameter(name) ⇒ Object
- #respond_to?(method) ⇒ Boolean
- #sorted_parameters ⇒ Object
Constructor Details
#initialize(options) ⇒ TestMethod
Returns a new instance of TestMethod.
25 26 27 28 29 30 31 32 33 34 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 93 94 95 96 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 25 def initialize() @type = [:type] @library = [:library] @class_name = [:methods].delete(:class_name) @parameters = {} @limits_id = [:methods].delete(:limits_id) || [:methods].delete(:limit_id) @limits = TestMethods::Limits.new(self) @limits.render = false if [:methods].delete(:render_limits_in_tf) == false # Add any methods if [:methods][:methods] methods = [:methods][:methods] @finalize = methods[:finalize] methods.each do |method_name, function| unless method_name == :finalize var_name = "@#{method_name}".gsub(/=|\?/, '_') instance_variable_set(var_name, function) define_singleton_method method_name do |*args| instance_variable_get(var_name).call(self, *args) end end end end # Create attributes corresponding to the test method type represented # by this method instance [:methods].each do |attr, type_default| unless attr == :limits_type || attr == :aliases || attr == :methods clean_attr = clean_attr_name(attr) type = type_default[0] default = type_default[1] allowed = type_default[2] @parameters[attr] = type aliases = [clean_attr] aliases << clean_attr.underscore if clean_attr.underscore != clean_attr aliases.each do |alias_| define_singleton_method("#{alias_}=") do |v| v = v.to_s if v.is_a?(Symbol) if allowed unless allowed.include?(v) fail "Cannot set #{alias_} to #{v}, valid values are: #{allowed.join(', ')}" end end instance_variable_set("@#{clean_attr}", v) end define_singleton_method(alias_) do instance_variable_get("@#{clean_attr}") end end send("#{clean_attr}=", default) end end if [:methods][:aliases] [:methods][:aliases].each do |alias_, attr| clean_attr = clean_attr_name(attr) define_singleton_method("#{alias_}=") do |v| send("#{clean_attr}=", v) end define_singleton_method(alias_) do send(clean_attr) end end end # Finally set any initial values that have been supplied [:attrs].each do |k, v| accessor = "#{k}=" if respond_to?(accessor) send(accessor, v) else accessor = "#{k.to_s.underscore}=" send(accessor, v) if respond_to?(accessor) end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
178 179 180 181 182 183 184 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 178 def method_missing(method, *args, &block) if limits && limits.respond_to?(method) limits.send(method, *args, &block) else super end end |
Instance Attribute Details
#abs_class_name ⇒ Object
Returns the value of attribute abs_class_name.
17 18 19 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 17 def abs_class_name @abs_class_name end |
#class_name ⇒ Object
Returns the value of attribute class_name.
16 17 18 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 16 def class_name @class_name end |
#id ⇒ Object Also known as: name
Returns the value of attribute id.
11 12 13 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 11 def id @id end |
#library ⇒ Object (readonly)
Returns the object representing the test method library that the given test method is defined in
9 10 11 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 9 def library @library end |
#limits ⇒ Object (readonly)
Returns the value of attribute limits.
18 19 20 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 18 def limits @limits end |
#limits_id ⇒ Object Also known as: limit_id
Returns the value of attribute limits_id.
19 20 21 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 19 def limits_id @limits_id end |
#parameters ⇒ Object (readonly)
Returns an hash corresponding to the parameters that the given test method has. The keys are the parameter names and the values are the parameter type.
15 16 17 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 15 def parameters @parameters end |
#sub_test_name ⇒ Object
Used to store the name of the primary test logged in SMT8
23 24 25 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 23 def sub_test_name @sub_test_name end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
10 11 12 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 10 def type @type end |
Instance Method Details
#finalize ⇒ Object
174 175 176 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 174 def finalize @finalize end |
#format(attr) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 98 def format(attr) clean_attr = clean_attr_name(attr) val = send(clean_attr) if FORMAT_TYPES.include?(parameters[attr]) type = parameters[attr] else # The type is based on the value of another attribute name = clean_attr_name(parameters[attr]) if respond_to?(name) type = send(name) elsif respond_to?(name.sub(/b$/, '')) type = inverse_of(send(name.sub(/b$/, ''))) elsif parameters[attr].is_a?(Hash) || parameters[attr.to_sym].is_a?(Hash) type = :hash else fail "Unknown attribute type: #{parameters[attr]}" end end if val.nil? && !tester.print_all_params nil else handle_val_type(val, type, attr) end end |
#handle_val_type(val, type, attr) ⇒ Object
123 124 125 126 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 166 167 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 123 def handle_val_type(val, type, attr) return val if val == '' && !tester.smt8? case type when :current, 'CURR' "#{val}[A]" when :voltage, 'VOLT' "#{val}[V]" when :time "#{val}[s]" when :frequency "#{val}[Hz]" when :string val.to_s when :integer val.to_i when :double val.to_f when :boolean # Check for valid values if [0, 1, true, false, 'true', 'false'].include?(val) # Use true/false for smt8 and 0/1 for smt7 if [1, true, 'true'].include?(val) tester.smt8? ? true : 1 else tester.smt8? ? false : 0 end else fail "Unknown boolean value for attribute #{attr}: #{val}" end when :hash, :class val when :list_strings unless val.is_a?(Array) fail "#{val} is not an Array. List_strings must have Array values" end "##{val}" when :list_classes unless val.is_a?(Array) fail "#{val} is not an Array. List_classes must have Array values" end "##{val.to_s.gsub('"', '')}" else fail "Unknown type for attribute #{attr}: #{type}" end end |
#klass ⇒ Object
169 170 171 172 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 169 def klass @abs_class_name || "#{library.klass}.#{@class_name || type.to_s.camelize}" end |
#remove_parameter(name) ⇒ Object
204 205 206 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 204 def remove_parameter(name) @parameters.delete(name) end |
#respond_to?(method) ⇒ Boolean
186 187 188 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 186 def respond_to?(method) (limits && limits.respond_to?(method)) || super end |
#sorted_parameters ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 190 def sorted_parameters @parameters.sort_by do |name| if name.is_a?(String) name else if name.to_s[0] == '_' name.to_s.camelize(:upper) else name.to_s.camelize(:lower) end end end end |