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]
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.
-
#parameters ⇒ Object
readonly
Returns an hash corresponding to the parameters that the given test method has.
-
#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
Constructor Details
#initialize(options) ⇒ TestMethod
Returns a new instance of TestMethod.
19 20 21 22 23 24 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 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 19 def initialize() @type = [:type] @library = [:library] @class_name = [:methods].delete(:class_name) @parameters = {} # Add limits by default define_singleton_method('limits') do @limits end @limits = TestMethods::Limits.new(self) # Add any methods if [:methods][:methods] methods = [:methods][:methods] @finalize = methods.delete(:finalize) methods.each do |method_name, function| 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 # 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| 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| send("#{k}=", v) if respond_to?("#{k}=") end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
119 120 121 122 123 124 125 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 119 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 |
#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 |
#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
115 116 117 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 115 def finalize @finalize end |
#format(attr) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 85 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 type = send(clean_attr_name(parameters[attr])) end case type when :current, 'CURR' "#{val}[A]" when :voltage, 'VOLT' "#{val}[V]" when :time "#{val}[s]" when :frequency "#{val}[Hz]" when :string, :integer, :double val.to_s else fail "Unknown type for attribute #{attr}: #{type}" end end |
#klass ⇒ Object
110 111 112 113 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 110 def klass @abs_class_name || "#{library.klass}.#{@class_name || type.to_s.camelize}" end |
#respond_to?(method) ⇒ Boolean
127 128 129 |
# File 'lib/origen_testers/smartest_based_tester/base/test_method.rb', line 127 def respond_to?(method) (limits && limits.respond_to?(method)) || super end |