json_ld: helpers for the JSON-LD test suite

This commit is contained in:
Marcel Otto 2017-03-24 23:13:05 +01:00
parent 55aead5028
commit 4cc0680fbf
3 changed files with 75 additions and 0 deletions

14
test/support/test_data.ex Normal file
View file

@ -0,0 +1,14 @@
defmodule JSON.LD.TestData do
@dir Path.join(File.cwd!, "test/data/")
def dir, do: @dir
def file(name) do
if File.exists?(path = Path.join(@dir, name)) do
path
else
raise "Test data file '#{name}' not found"
end
end
end

View file

@ -0,0 +1,55 @@
defmodule JSON.LD.TestSuite do
@test_suite_dir "json-ld.org-test-suite"
def test_suite_dir, do: @test_suite_dir
def file(name), do: JSON.LD.TestData.file(Path.join(@test_suite_dir, name))
def parse_json_file!(file) do
case File.read(file(file)) do
{:ok, content} -> Poison.Parser.parse!(content)
{:error, reason} -> raise File.Error, path: file, action: "read", reason: reason
end
end
def j(file), do: parse_json_file!(file)
def manifest_filename(type), do: "#{to_string(type)}-manifest.jsonld"
def manifest(type) do
type
|> manifest_filename
|> parse_json_file!
end
def test_cases(type), do: manifest(type)["sequence"]
def test_cases_by_type(test_cases) do
Enum.group_by(test_cases, fn %{"@type" => type} ->
cond do
"jld:PositiveEvaluationTest" in type -> :positive_evaluation_test
"jld:NegativeEvaluationTest" in type -> :negative_evaluation_test
"jld:PositiveSyntaxTest" in type -> :positive_syntax_test
"jld:NegativeSyntaxTest" in type -> :negative_syntax_test
end
end)
end
def test_case_options(test_case, %{"baseIri" => base_iri}),
do: test_case_options(test_case, base_iri)
def test_case_options(test_case, base_iri) do
test_case
|> Map.get("option", %{})
|> Map.put_new("base", base_iri <> test_case["input"])
|> Enum.map(fn {key, value} ->
{key |> Macro.underscore |> String.to_atom, value}
end)
|> Enum.map(fn
{:expand_context, file} -> {:expand_context, j(file)}
option -> option
end)
|> JSON.LD.Options.new
end
end

View file

@ -1 +1,7 @@
ExUnit.start()
with files = File.ls!("./test/support") do
Enum.each files, fn(file) ->
Code.require_file "support/#{file}", __DIR__
end
end