Files
n8n-openai-adapter/test/elixir/kernel/overridable_test.exs
T
2012-05-13 15:33:57 +02:00

146 lines
3.1 KiB
Elixir

Code.require_file "../../test_helper", __FILE__
defmodule Kernel.Overridable do
def sample do
1
end
def with_super do
1
end
def without_super do
1
end
def explicit_nested_super do
{ super?, 2 }
end
defoverridable [sample: 0, with_super: 0, without_super: 0, explicit_nested_super: 0]
def explicit_nested_super do
{ super, super?, 1 }
end
defoverridable [explicit_nested_super: 0]
def implicit_nested_super do
{ super?, 1 }
end
defoverridable [implicit_nested_super: 0]
def implicit_nested_super do
{ super, super?, 0 }
end
def super_with_explicit_args(x, y) do
x + y
end
def super_with_implicit_args(x, y) do
x + y
end
def many_clauses(0) do
11
end
def many_clauses(1) do
13
end
defoverridable [implicit_nested_super: 0, super_with_implicit_args: 2,
super_with_explicit_args: 2, many_clauses: 1]
def without_super do
:without_super
end
def with_super do
super() + 2
end
def no_overridable do
{ :no_overridable, super? }
end
def explicit_nested_super do
{ super, super?, 0 }
end
def super_with_explicit_args(x, y) do
super x, y * 2
end
def super_with_implicit_args(x, y) do
x + y + super
end
def many_clauses(2) do
17
end
def many_clauses(_) do
super
end
end
defmodule Kernel.OverridableTest do
require Kernel.Overridable, as: Overridable
use ExUnit.Case
test "overridable is made concrete if no other is defined" do
assert Overridable.sample == 1
end
test "overridable overridden with super" do
assert Overridable.with_super == 3
end
test "overridable overridden without super" do
assert Overridable.without_super == :without_super
end
test "overridable overriden with nested super" do
assert Overridable.explicit_nested_super == { { { false, 2 }, true, 1 }, true, 0 }
end
test "overridable node overriden with nested super" do
assert Overridable.implicit_nested_super == { { false, 1 }, true, 0 }
end
test "calling super with explicit args" do
assert Overridable.super_with_explicit_args(1, 2) == 5
end
test "calling super with implicit args" do
assert Overridable.super_with_implicit_args(1, 2) == 6
end
test "function without overridable returns false for super?" do
assert Overridable.no_overridable == { :no_overridable, false }
end
test "overridable with many clauses" do
assert Overridable.many_clauses(0) == 11
assert Overridable.many_clauses(1) == 13
assert Overridable.many_clauses(2) == 17
end
test "overridable definitions are private" do
refute_member {:"OVERRIDABLE-0-with_super",0}, Overridable.__info__(:exports)
end
test "invalid super call" do
try do
Erlang.elixir.eval 'defmodule Foo.Forwarding do\ndef bar, do: 1\ndefoverridable [bar: 0]\ndef foo, do: super\nend', []
flunk "expected eval to fail"
rescue
error ->
assert error.message == ("nofile:4: no super defined for foo/0 in module 'Foo.Forwarding'. " <>
"Overridable functions available are: bar/0")
end
end
end