Class: RBS::Test::Tester::MethodCallTester

Inherits:
Object
  • Object
show all
Defined in:
lib/rbs/test/tester.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(self_class, builder, definition, kind:, sample_size:, unchecked_classes:) ⇒ MethodCallTester

Returns a new instance of MethodCallTester.



119
120
121
122
123
124
125
126
# File 'lib/rbs/test/tester.rb', line 119

def initialize(self_class, builder, definition, kind:, sample_size:, unchecked_classes:)
  @self_class = self_class
  @definition = definition
  @builder = builder
  @kind = kind
  @sample_size = sample_size
  @unchecked_classes = unchecked_classes
end

Instance Attribute Details

#builderObject (readonly)

Returns the value of attribute builder.



114
115
116
# File 'lib/rbs/test/tester.rb', line 114

def builder
  @builder
end

#definitionObject (readonly)

Returns the value of attribute definition.



113
114
115
# File 'lib/rbs/test/tester.rb', line 113

def definition
  @definition
end

#kindObject (readonly)

Returns the value of attribute kind.



115
116
117
# File 'lib/rbs/test/tester.rb', line 115

def kind
  @kind
end

#sample_sizeObject (readonly)

Returns the value of attribute sample_size.



116
117
118
# File 'lib/rbs/test/tester.rb', line 116

def sample_size
  @sample_size
end

#self_classObject (readonly)

Returns the value of attribute self_class.



112
113
114
# File 'lib/rbs/test/tester.rb', line 112

def self_class
  @self_class
end

#unchecked_classesObject (readonly)

Returns the value of attribute unchecked_classes.



117
118
119
# File 'lib/rbs/test/tester.rb', line 117

def unchecked_classes
  @unchecked_classes
end

Instance Method Details

#call(receiver, trace) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/rbs/test/tester.rb', line 145

def call(receiver, trace)
  method_name = trace.method_name
  method = definition.methods[method_name]
  if method
    RBS.logger.debug { "Type checking `#{self_class}#{format_method_name(method_name)}`..."}
    errors = check.overloaded_call(method, format_method_name(method_name), trace, errors: [])

    if errors.empty?
      RBS.logger.debug { "No type error detected 👏" }
    else
      RBS.logger.debug { "Detected type error 🚨" }
      raise TypeError.new(errors)
    end
  else
    RBS.logger.error { "Type checking `#{self_class}#{method_name}` call but no method found in definition" }
  end
end

#checkObject



132
133
134
# File 'lib/rbs/test/tester.rb', line 132

def check
  @check ||= TypeCheck.new(self_class: self_class, builder: builder, sample_size: sample_size, unchecked_classes: unchecked_classes)
end

#envObject



128
129
130
# File 'lib/rbs/test/tester.rb', line 128

def env
  builder.env
end

#format_method_name(name) ⇒ Object



136
137
138
139
140
141
142
143
# File 'lib/rbs/test/tester.rb', line 136

def format_method_name(name)
  case kind
  when :instance
    "##{name}"
  when :singleton
    ".#{name}"
  end
end