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, :string, :integer, :double, :boolean]
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
-
#initialize(options) ⇒ TestMethod
constructor
A new instance of TestMethod.
- #klass ⇒ Object
- #method_missing(method, *args, &block) ⇒ 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
153 154 155 156 157 158 159 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 153 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
149 150 151 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 149 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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# 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$/, ''))) else fail "Unknown attribute type: #{parameters[attr]}" end end 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, :double val when :boolean # Check for valid values if [0, 1, true, false].include?(val) # Use true/false for smt8 and 0/1 for smt7 if [1, true].include?(val) tester.smt8? ? true : 1 else tester.smt8? ? false : 0 end else fail "Unknown boolean value for attribute #{attr}: #{val}" end else fail "Unknown type for attribute #{attr}: #{type}" end end |
#klass ⇒ Object
144 145 146 147 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 144 def klass @abs_class_name || "#{library.klass}.#{@class_name || type.to_s.camelize}" end |
#respond_to?(method) ⇒ Boolean
161 162 163 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 161 def respond_to?(method) (limits && limits.respond_to?(method)) || super end |
#sorted_parameters ⇒ Object
165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 165 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 |