rdf-ex/test/unit/xsd/datatypes/string_test.exs

143 lines
6.2 KiB
Elixir

defmodule RDF.XSD.StringTest do
use RDF.XSD.Datatype.Test.Case,
datatype: RDF.XSD.String,
name: "string",
primitive: true,
applicable_facets: [
RDF.XSD.Facets.MinLength,
RDF.XSD.Facets.MaxLength,
RDF.XSD.Facets.Length,
],
facets: %{
max_length: nil,
min_length: nil,
length: nil
},
valid: %{
# input => { value, lexical, canonicalized }
"foo" => {"foo", nil, "foo"},
0 => {"0", nil, "0"},
42 => {"42", nil, "42"},
3.14 => {"3.14", nil, "3.14"},
true => {"true", nil, "true"},
false => {"false", nil, "false"}
},
invalid: []
describe "cast/1" do
test "casting a string returns the input as it is" do
assert XSD.string("foo") |> XSD.String.cast() == XSD.string("foo")
end
test "casting an integer" do
assert XSD.integer(0) |> XSD.String.cast() == XSD.string("0")
assert XSD.integer(1) |> XSD.String.cast() == XSD.string("1")
end
test "casting a boolean" do
assert XSD.false() |> XSD.String.cast() == XSD.string("false")
assert XSD.true() |> XSD.String.cast() == XSD.string("true")
end
test "casting a decimal" do
assert XSD.decimal(0) |> XSD.String.cast() == XSD.string("0")
assert XSD.decimal(1.0) |> XSD.String.cast() == XSD.string("1")
assert XSD.decimal(3.14) |> XSD.String.cast() == XSD.string("3.14")
end
test "casting a double" do
assert XSD.double(0) |> XSD.String.cast() == XSD.string("0")
assert XSD.double(0.0) |> XSD.String.cast() == XSD.string("0")
assert XSD.double("+0") |> XSD.String.cast() == XSD.string("0")
assert XSD.double("-0") |> XSD.String.cast() == XSD.string("-0")
assert XSD.double(0.1) |> XSD.String.cast() == XSD.string("0.1")
assert XSD.double(3.14) |> XSD.String.cast() == XSD.string("3.14")
assert XSD.double(0.000_001) |> XSD.String.cast() == XSD.string("0.000001")
assert XSD.double(123_456) |> XSD.String.cast() == XSD.string("123456")
assert XSD.double(1_234_567) |> XSD.String.cast() == XSD.string("1.234567E6")
assert XSD.double(0.0000001) |> XSD.String.cast() == XSD.string("1.0E-7")
assert XSD.double(1.0e-10) |> XSD.String.cast() == XSD.string("1.0E-10")
assert XSD.double("1.0e-10") |> XSD.String.cast() == XSD.string("1.0E-10")
assert XSD.double(1.26743223e15) |> XSD.String.cast() == XSD.string("1.26743223E15")
assert XSD.double(:nan) |> XSD.String.cast() == XSD.string("NaN")
assert XSD.double(:positive_infinity) |> XSD.String.cast() == XSD.string("INF")
assert XSD.double(:negative_infinity) |> XSD.String.cast() == XSD.string("-INF")
end
test "casting a float" do
assert XSD.float(0) |> XSD.String.cast() == XSD.string("0")
assert XSD.float(0.0) |> XSD.String.cast() == XSD.string("0")
assert XSD.float("+0") |> XSD.String.cast() == XSD.string("0")
assert XSD.float("-0") |> XSD.String.cast() == XSD.string("-0")
assert XSD.float(0.1) |> XSD.String.cast() == XSD.string("0.1")
assert XSD.float(3.14) |> XSD.String.cast() == XSD.string("3.14")
assert XSD.float(0.000_001) |> XSD.String.cast() == XSD.string("0.000001")
assert XSD.float(123_456) |> XSD.String.cast() == XSD.string("123456")
assert XSD.float(1_234_567) |> XSD.String.cast() == XSD.string("1.234567E6")
assert XSD.float(0.0000001) |> XSD.String.cast() == XSD.string("1.0E-7")
assert XSD.float(1.0e-10) |> XSD.String.cast() == XSD.string("1.0E-10")
assert XSD.float("1.0e-10") |> XSD.String.cast() == XSD.string("1.0E-10")
assert XSD.float(1.26743223e15) |> XSD.String.cast() == XSD.string("1.26743223E15")
assert XSD.float(:nan) |> XSD.String.cast() == XSD.string("NaN")
assert XSD.float(:positive_infinity) |> XSD.String.cast() == XSD.string("INF")
assert XSD.float(:negative_infinity) |> XSD.String.cast() == XSD.string("-INF")
end
test "casting a datetime" do
assert XSD.datetime(~N[2010-01-01T12:34:56]) |> XSD.String.cast() ==
XSD.string("2010-01-01T12:34:56")
assert XSD.datetime("2010-01-01T00:00:00+00:00") |> XSD.String.cast() ==
XSD.string("2010-01-01T00:00:00Z")
assert XSD.datetime("2010-01-01T01:00:00+01:00") |> XSD.String.cast() ==
XSD.string("2010-01-01T01:00:00+01:00")
assert XSD.datetime("2010-01-01 01:00:00+01:00") |> XSD.String.cast() ==
XSD.string("2010-01-01T01:00:00+01:00")
end
test "casting a date" do
assert XSD.date(~D[2000-01-01]) |> XSD.String.cast() == XSD.string("2000-01-01")
assert XSD.date("2000-01-01") |> XSD.String.cast() == XSD.string("2000-01-01")
assert XSD.date("2000-01-01+00:00") |> XSD.String.cast() == XSD.string("2000-01-01Z")
assert XSD.date("2000-01-01+01:00") |> XSD.String.cast() == XSD.string("2000-01-01+01:00")
assert XSD.date("0001-01-01") |> XSD.String.cast() == XSD.string("0001-01-01")
assert XSD.date("-0001-01-01") |> XSD.String.cast() == XSD.string("-0001-01-01")
end
test "casting a time" do
assert XSD.time(~T[00:00:00]) |> XSD.String.cast() == XSD.string("00:00:00")
assert XSD.time("00:00:00") |> XSD.String.cast() == XSD.string("00:00:00")
assert XSD.time("00:00:00Z") |> XSD.String.cast() == XSD.string("00:00:00Z")
assert XSD.time("00:00:00+00:00") |> XSD.String.cast() == XSD.string("00:00:00Z")
assert XSD.time("00:00:00+01:00") |> XSD.String.cast() == XSD.string("00:00:00+01:00")
end
test "casting an IRI" do
assert RDF.iri("http://example.com") |> XSD.String.cast() == XSD.string("http://example.com")
end
test "with invalid literals" do
assert XSD.integer(3.14) |> XSD.String.cast() == nil
assert XSD.decimal("NAN") |> XSD.String.cast() == nil
assert XSD.double(true) |> XSD.String.cast() == nil
end
test "with coercible value" do
assert XSD.String.cast(42) == XSD.string("42")
assert XSD.String.cast(3.14) == XSD.string("3.14")
assert XSD.String.cast(true) == XSD.string("true")
assert XSD.String.cast(false) == XSD.string("false")
end
test "with non-coercible value" do
assert XSD.String.cast(:foo) == nil
assert XSD.String.cast(make_ref()) == nil
end
end
end