From 4eefdeec95b21e2181e6c66fa9e870b4209ef6e0 Mon Sep 17 00:00:00 2001 From: mliem2k Date: Sun, 12 Jul 2026 20:29:15 +0800 Subject: [PATCH] Add test coverage for interface! rejecting classes interface! already guards against being called on a Class (raising TypeError), which also covers the class << self case since a module's singleton class is itself a Class. Add specs to lock in this behavior. --- spec/interface_spec.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/spec/interface_spec.rb b/spec/interface_spec.rb index 24ddc54..9acf6db 100644 --- a/spec/interface_spec.rb +++ b/spec/interface_spec.rb @@ -53,6 +53,36 @@ def m2 = "PartiallyInheritsItsImpl#m2" end describe "An interface" do + describe "interface!" do + it "raises when called on a class" do + error = assert_raises(TypeError) do + Class.new do + interface! + end + end + + assert_equal "Classes can't be interfaces. Did you mean to make it `abstract` instead?", error.message + end + + it "raises when called on a module's singleton class" do + error = assert_raises(TypeError) do + Module.new do + class << self + interface! + end + end + end + + assert_equal "Classes can't be interfaces. Did you mean to make it `abstract` instead?", error.message + end + + it "does not raise when called on a module" do + Module.new do + interface! + end + end + end + describe ".abstract macro" do it "returns the method name" do test_context = self