rdf-ex/test/unit/xsd/utils/regex_test.exs
Marcel Otto 5819eec0cf Re-integrate XSD.ex
It turned out that the costs of separating the XSD datatypes are too high
and probably not worth the effort, since with its limited scope
probably nobody would want to use XSD.ex outside of the RDF.ex context
anyway.
2020-05-05 23:58:44 +02:00

67 lines
1.9 KiB
Elixir

defmodule RDF.XSD.Utils.RegexTest do
use ExUnit.Case
alias RDF.XSD.Utils.Regex
@poem """
<poem author="Wilhelm Busch">
Kaum hat dies der Hahn gesehen,
Fängt er auch schon an zu krähen:
Kikeriki! Kikikerikih!!
Tak, tak, tak! - da kommen sie.
</poem>
"""
describe "matches?" do
test "without flags" do
[
{"abracadabra", "bra", true},
{"abracadabra", "^a.*a$", true},
{"abracadabra", "^bra", false},
{@poem, "Kaum.*krähen", false},
{@poem, "^Kaum.*gesehen,$", false},
{"foobar", "foo$", false},
{~S"noe\u0308l", ~S"noe\\u0308l", true},
{~S"noe\\u0308l", ~S"noe\\\\u0308l", true},
{~S"\u{01D4B8}", ~S"\\U0001D4B8", true},
{~S"\\U0001D4B8", ~S"\\\U0001D4B8", true},
{42, "4", true},
{42, "en", false}
]
|> Enum.each(fn {literal, pattern, expected_result} ->
result = Regex.matches?(literal, pattern)
assert result == expected_result,
"expected XSD.Regex.matches?(#{inspect(literal)}, #{inspect(pattern)}) to return #{
inspect(expected_result)
}, but got #{result}"
end)
end
test "with flags" do
[
{@poem, "Kaum.*krähen", "s", true},
{@poem, "^Kaum.*gesehen,$", "m", true},
{@poem, "kiki", "i", true}
]
|> Enum.each(fn {literal, pattern, flags, result} ->
assert Regex.matches?(literal, pattern, flags) == result
end)
end
test "with q flag" do
[
{"abcd", ".*", "q", false},
{"Mr. B. Obama", "B. OBAMA", "iq", true},
# If the q flag is used together with the m, s, or x flag, that flag has no effect.
{"abcd", ".*", "mq", true},
{"abcd", ".*", "qim", true},
{"abcd", ".*", "xqm", true}
]
|> Enum.each(fn {literal, pattern, flags, result} ->
assert Regex.matches?(literal, pattern, flags) == result
end)
end
end
end