rdf-ex/test/support/test_literals.ex

54 lines
1.7 KiB
Elixir

defmodule RDF.TestLiterals do
alias RDF.Literal
alias RDF.NS.XSD
def value(:empty), do: [""]
def value(:plain), do: ["Hello"]
def value(:empty_lang), do: ["", [language: "en"]]
def value(:plain_lang), do: ["Hello", [language: "en"]]
def value(:typed_string), do: ["String", [datatype: XSD.string()]]
def value(:uri), do: [URI.parse("http://example.com")]
def value(true), do: [true]
def value(false), do: [false]
def value(:int), do: [123]
def value(:neg_int), do: [-123]
def value(:decimal), do: [Decimal.from_float(3.14)]
def value(:long), do: [9_223_372_036_854_775_807]
def value(:double), do: [3.1415]
def value(:date), do: [~D[2017-04-13]]
def value(:naive_datetime), do: [~N[2017-04-14 15:32:07]]
def value(:datetime), do: ["2017-04-14 15:32:07Z" |> DateTime.from_iso8601() |> elem(1)]
def value(:time), do: [~T[01:02:03]]
def value(selector) do
raise "unexpected literal: :#{selector}"
end
def values(:all_simple),
do: Enum.map(~W(empty plain typed_string)a, &value/1)
def values(:all_plain_lang),
do: Enum.map(~W[empty_lang plain_lang]a, &value/1)
def values(:all_native),
do: Enum.map(~W[false true int long double time date datetime naive_datetime]a, &value/1)
def values(:all_plain),
do: values(~W[all_simple all_plain_lang]a)
def values(:all),
do: values(~W[all_native all_plain]a)
def values(selectors) when is_list(selectors) do
Enum.reduce(selectors, [], fn selector, values ->
values ++ values(selector)
end)
end
def literal(selector),
do: apply(Literal, :new, value(selector))
def literals(selectors),
do: Enum.map(values(selectors), fn value -> apply(Literal, :new, value) end)
end