From 2aba67edae0974656c3c92eb2391aabdfd8d622b Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Fri, 14 Feb 2020 18:14:32 -0700 Subject: [PATCH] Fix idiosyncrasies around class method stubs The new method misbehaves here. It always appeared as defined, even though it isn't explicitly defined in the class. --- src/spectator/mocks/stubs.cr | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/spectator/mocks/stubs.cr b/src/spectator/mocks/stubs.cr index 04b8e10..fceefc5 100644 --- a/src/spectator/mocks/stubs.cr +++ b/src/spectator/mocks/stubs.cr @@ -34,16 +34,19 @@ module Spectator::Mocks raise "Unrecognized stub format" end - original = if @type.methods.find { |m| m.name.id == name } - :previous_def - else - :super - end.id + t = @type receiver = if receiver == :self.id + t = t.class "self." else "" end.id + original = if (name == :new.id && receiver == "self.".id) || + (t.superclass.has_method?(name) && !t.overrides?(t.superclass, name)) + :super + else + :previous_def + end.id %} {% if body && !body.is_a?(Nop) %}