The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Tests that base URLs are working OK.

use Test::More tests => 12;
BEGIN { use_ok('RDF::RDFa::Parser') };

my $xhtml_rdfa_10 = RDF::RDFa::Parser::Config->new('xhtml','1.0');

my ($parser, $model);
my $xhtml = <<EOF;
<html
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ex="http://example.com/ns#"
	xmlns:http="http://example.com/http#"
	xml:lang="en">
	<body>
		<div about="[ex:r1/foo]" rel="ex:test" resource="[ex:test]" />
		<div about="[ex:r2]" rel="ex:r2/foo" resource="[ex:test]" />
		<div about="[ex:r3]" rel=":TEST" resource="[ex:test]" />
		<div about="[ex:r4]" rel="ex:r4" href="[ex:r4]" />
		<div about="[ex:r5]" rel="ex:r5" resource="[ex:r5]" />
		<div about="[ex:r6]" rel="arkansas" resource="[ex:r6]" />
		<div about="http://example.net/1" rel="ex:test" resource="[ex:test]" />
		<div about="[http://example.net/2]" rel="ex:test" resource="[ex:test]" />
	</body>
</html>
EOF

$parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', $xhtml_rdfa_10);
$parser->consume;
$model = $parser->graph;

#my $iter = $model->as_stream;
#while (my $st = $iter->next)
#{
#	diag $st->as_string;
#}

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1/foo'),
		undef,
		undef,
		),
	"Supports non-QName characters in SafeCURIEs.");

ok($model->count_statements(
		undef,
		RDF::Trine::Node::Resource->new('http://example.com/ns#r2/foo'),
		undef,
		),
	"Supports non-QName characters in CURIEs.");

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r3'),
		RDF::Trine::Node::Resource->new('http://www.w3.org/1999/xhtml/vocab#TEST'),
		undef,
		),
	"Default prefix works.");

ok(!$model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r4'),
		RDF::Trine::Node::Resource->new('http://example.com/ns#r4'),
		RDF::Trine::Node::Resource->new('http://example.com/ns#r4'),
		),
	"Safe CURIEs don't work in \@href.");

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r5'),
		RDF::Trine::Node::Resource->new('http://example.com/ns#r5'),
		RDF::Trine::Node::Resource->new('http://example.com/ns#r5'),
		),
	"Safe CURIEs work in \@resource.");

ok(!$model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r6'),
		undef,
		RDF::Trine::Node::Resource->new('http://example.com/ns#r6'),
		),
	"Nonsense keywords ignored.");

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.net/1'),
		undef,
		undef,
		),
	"http-URI recognised.");

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/http#//example.net/2'),
		undef,
		undef,
		),
	"http-URI-looking CURIE recognised.");

$xhtml = <<EOF;
<html
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ex="http://example.com/ns#"
	xmlns:http="http://example.com/http#"
	xml:lang="en">
	<body>
		<div about="[ex:r1]" rel="http://example.com/ https://example.com/" resource="[ex:r1]" />
	</body>
</html>
EOF

$parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', $xhtml_rdfa_10);
$parser->consume;
$model = $parser->graph;

ok(1==$model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1'),
		undef,
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1'),
		),
	"Undefined CURIE ignored.");

$parser = RDF::RDFa::Parser->new($xhtml, 'http://example.com/', {'full_uris'=>1});
$parser->consume;
$model = $parser->graph;

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1'),
		RDF::Trine::Node::Resource->new('http://example.com/http#//example.com/'),
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1'),
		),
	"http-URI-looking CURIE recognised, even if full URIs enabled.");

ok($model->count_statements(
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1'),
		RDF::Trine::Node::Resource->new('https://example.com/'),
		RDF::Trine::Node::Resource->new('http://example.com/ns#r1'),
		),
	"Full URI recognised.");