Files
n8n-openai-adapter/lib/elixir/test/elixir/behaviour_test.exs
T
2014-01-28 10:50:00 +01:00

73 lines
2.3 KiB
Elixir

Code.require_file "test_helper.exs", __DIR__
defmodule BehaviourTest do
use ExUnit.Case, async: true
defmodule Sample do
use Behaviour
@doc "I should be first."
defcallback first(integer) :: integer
@doc "Foo"
defcallback foo(atom(), binary) :: binary
@doc "Bar"
defcallback bar(External.hello, my_var :: binary) :: binary
defcallback guarded(my_var) :: my_var when my_var: binary
defcallback orr(atom | integer) :: atom
defcallback literal(123, { atom }, :atom, [integer], true) :: atom
@doc "I should be last."
defmacrocallback last(integer) :: Macro.t
end
test :docs do
docs = Sample.__behaviour__(:docs)
assert [
{{:first, 1}, 10, :def, _, "I should be first."},
{{:foo, 2}, 13, :def, _, "Foo"},
{{:bar, 2}, 16, :def, _, "Bar"},
{{:guarded, 1}, 18, :def, _, nil},
{{:orr, 1}, 20, :def, _, nil},
{{:literal, 5}, 22, :def, _, nil},
{{:last, 1}, 25, :defmacro, _, "I should be last."}
] = docs
assert [{ :integer, _, nil }] = List.keyfind(docs, { :first, 1 }, 0) |> elem(3)
assert [{ :atom, _, nil }, { :binary, _, nil }] = List.keyfind(docs, { :foo, 2 }, 0) |> elem(3)
assert [{ :hello, _, nil }, { :my_var, _, nil }] = List.keyfind(docs, { :bar, 2 }, 0) |> elem(3)
assert [{ :my_var, _, nil }] = List.keyfind(docs, { :guarded, 1 }, 0) |> elem(3)
assert [{ :atom, _, nil }] = List.keyfind(docs, { :orr, 1 }, 0) |> elem(3)
assert [{ :int1, _, nil }, { :tuple2, _, nil }, { :atom3, _, nil }, { :list4, _, nil }, { :bool5, _, nil} ] = List.keyfind(docs, { :literal, 5 }, 0) |> elem(3)
assert [{ :integer, _, nil }] = List.keyfind(docs, { :last, 1 }, 0) |> elem(3)
end
test :callbacks do
assert Sample.__behaviour__(:callbacks) == [first: 1, foo: 2, bar: 2, guarded: 1, orr: 1, literal: 5, "MACRO-last": 2]
end
test :specs do
assert length(Keyword.get_values(Sample.module_info[:attributes], :callback)) == 7
end
test :default_is_not_supported do
assert_raise ArgumentError, fn ->
defmodule WithDefault do
use Behaviour
defcallback hello(num \\ 0 :: integer) :: integer
end
end
assert_raise ArgumentError, fn ->
defmodule WithDefault do
use Behaviour
defcallback hello(num :: integer \\ 0) :: integer
end
end
end
end