json_ld: JSON-LD error test suite and some fixes
This commit is contained in:
parent
ea7d8b7b4e
commit
f208f2e22e
4 changed files with 48 additions and 3 deletions
|
@ -73,12 +73,13 @@ defmodule JSON.LD.Context do
|
|||
do: active
|
||||
defp set_base(active, base, _) do
|
||||
cond do
|
||||
# TODO: this slightly differs from the spec, due to our false special value for base_iri; add more tests
|
||||
is_nil(base) or absolute_iri?(base) ->
|
||||
%JSON.LD.Context{active | base_iri: base}
|
||||
not is_nil(active.base_iri) ->
|
||||
active.base_iri ->
|
||||
%JSON.LD.Context{active | base_iri: absolute_iri(base, active.base_iri)}
|
||||
true ->
|
||||
raise JSON.LD.InvalidBaseURIError,
|
||||
raise JSON.LD.InvalidBaseIRIError,
|
||||
message: "#{inspect base} is a relative IRI, but no active base IRI defined"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -68,7 +68,7 @@ defmodule JSON.LD.RecursiveContextInclusionError do
|
|||
defexception code: "recursive context inclusion", message: nil
|
||||
end
|
||||
|
||||
defmodule JSON.LD.InvalidBaseURIError do
|
||||
defmodule JSON.LD.InvalidBaseIRIError do
|
||||
@moduledoc """
|
||||
An invalid base IRI has been detected, i.e., it is neither an absolute IRI nor null.
|
||||
"""
|
||||
|
|
34
test/suite/error_test.exs
Normal file
34
test/suite/error_test.exs
Normal file
|
@ -0,0 +1,34 @@
|
|||
defmodule JSON.LD.TestSuite.ErrorTest do
|
||||
use ExUnit.Case, async: false
|
||||
|
||||
import JSON.LD.TestSuite
|
||||
|
||||
setup_all do
|
||||
[base_iri: manifest("error")["baseIri"]]
|
||||
end
|
||||
|
||||
test_cases("error")
|
||||
|> Enum.each(fn %{"name" => name, "input" => input} = test_case ->
|
||||
if input in ~w[error-0002-in.jsonld error-0003-in.jsonld error-0004-in.jsonld error-0005-in.jsonld] do
|
||||
@tag skip: "TODO: remote contexts not implemented yet"
|
||||
end
|
||||
@tag :test_suite
|
||||
@tag :flatten_test_suite
|
||||
@tag :error_test
|
||||
@tag data: test_case
|
||||
test "#{input}: #{name}",
|
||||
%{data: %{"input" => input, "expect" => error} = test_case, base_iri: base_iri} do
|
||||
context =
|
||||
case test_case["context"] do
|
||||
nil -> nil
|
||||
context -> j(context)
|
||||
end
|
||||
|
||||
assert_raise exception(error), fn ->
|
||||
JSON.LD.flatten(j(input), context, test_case_options(test_case, base_iri))
|
||||
end
|
||||
|
||||
end
|
||||
end)
|
||||
|
||||
end
|
|
@ -52,4 +52,14 @@ defmodule JSON.LD.TestSuite do
|
|||
|> JSON.LD.Options.new
|
||||
end
|
||||
|
||||
def exception(error) do
|
||||
error = error
|
||||
|> String.replace(" ", "_")
|
||||
|> String.replace("-", "_")
|
||||
|> String.replace("@", "_")
|
||||
|> Macro.camelize
|
||||
|> String.replace("_", "")
|
||||
String.to_existing_atom("Elixir.JSON.LD.#{error}Error")
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue