Skip to content
Merged
50 changes: 50 additions & 0 deletions spec/compiler/macro/macro_methods_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -2746,4 +2746,54 @@ module Crystal
end
end
end

describe "error reporting" do
it "reports wrong number of arguments" do
expect_raises(Crystal::TypeException, "wrong number of arguments for macro 'ArrayLiteral#push' (given 0, expected 1)") do
assert_macro "", %({{[1, 2, 3].push}}), [] of ASTNode, ""
end
end

it "reports wrong number of arguments, with optional parameters" do
expect_raises(Crystal::TypeException, "wrong number of arguments for macro 'NumberLiteral#+' (given 2, expected 0..1)") do
assert_macro "", %({{1.+(2, 3)}}), [] of ASTNode, ""
end

expect_raises(Crystal::TypeException, "wrong number of arguments for macro 'ArrayLiteral#[]' (given 0, expected 1..2)") do
assert_macro "", %({{[1][]}}), [] of ASTNode, ""
end
end

it "reports unexpected block" do
expect_raises(Crystal::TypeException, "macro 'ArrayLiteral#shuffle' is not expected to be invoked with a block, but a block was given") do
assert_macro "", %({{[1, 2, 3].shuffle { |x| }}}), [] of ASTNode, ""
end
end

it "reports missing block" do
expect_raises(Crystal::TypeException, "macro 'ArrayLiteral#reduce' is expected to be invoked with a block, but no block was given") do
assert_macro "", %({{[1, 2, 3].reduce}}), [] of ASTNode, ""
end
end

it "reports unexpected named argument" do
expect_raises(Crystal::TypeException, "named arguments are not allowed here") do
assert_macro "", %({{"".starts_with?(other: "")}}), [] of ASTNode, ""
end
end

it "reports unexpected named argument (2)" do
expect_raises(Crystal::TypeException, "no named parameter 'foo'") do
assert_macro "", %({{"".camelcase(foo: "")}}), [] of ASTNode, ""
end
end

# there are no macro methods with required named parameters

it "uses correct name for top-level macro methods" do
expect_raises(Crystal::TypeException, "wrong number of arguments for top-level macro 'flag?' (given 0, expected 1)") do
assert_macro "", %({{flag?}}), [] of ASTNode, ""
end
end
end
end
Loading