rdf-ex/test/unit/namespace/builder_test.exs
2022-06-03 22:19:16 +02:00

56 lines
1.6 KiB
Elixir

defmodule RDF.Namespace.BuilderTest do
use RDF.Test.Case
alias RDF.Namespace.Builder
import RDF.Sigils
@compile {:no_warn_undefined, ToplevelNS}
describe "create/3" do
test "creates a module" do
assert {:ok, {:module, ToplevelNS, _, _}} =
Builder.create(
ToplevelNS,
[foo: ~I<http://example.com/foo>],
Macro.Env.location(__ENV__)
)
assert Elixir.ToplevelNS.foo() == ~I<http://example.com/foo>
end
test "terms with invalid characters" do
%{
number_at_start: "42foo",
colon: "foo:",
bracket: "f(oo",
square_bracket: "f[oo"
}
|> Enum.each(fn {label, invalid_term} ->
assert Builder.create(
:"NamespaceWithInvalidCharacter#{label}",
[{invalid_term, ~I<http://example.com/invalid>}],
Macro.Env.location(__ENV__)
) ==
{:error,
%RDF.Namespace.InvalidTermError{
message: "invalid term: #{inspect(invalid_term)}"
}}
end)
end
test "terms with a special meaning for Elixir" do
Enum.each(Builder.reserved_terms(), fn invalid_term ->
assert Builder.create(
:"NamespaceWithInvalidTerm#{invalid_term}",
[{invalid_term, ~I<http://example.com/invalid>}],
Macro.Env.location(__ENV__)
) ==
{:error,
%RDF.Namespace.InvalidTermError{
message: "invalid term: #{inspect(invalid_term)}"
}}
end)
end
end
end