The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;
use RDF::Trine::Exporter::RDFPatch;

use strict;
use warnings;
use RDF::Trine;

my $rdf		= RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
my $foaf	= RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/');
my $kasei	= RDF::Trine::Namespace->new('http://kasei.us/');

my $HEADER	= qq[\@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n\@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n\n];

my $page	= RDF::Trine::Node::Resource->new('http://kasei.us/');
my $g		= RDF::Trine::Node::Blank->new('greg');

my $st0		= RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person );
# my $st0_p	= q[_:greg rdf:type foaf:Person];

my $st1		= RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') );
# my $st1_p	= q[_:greg foaf:name "Greg"];

my $st2		= RDF::Trine::Statement->new( $g, $foaf->homepage, $page );
# my $st2_p	= q[_:greg foaf:homepage <http://kasei.us/>];

my $st3		= RDF::Trine::Statement->new( $page, $rdf->type, $foaf->Document );
# my $st3_p	= q[<http://kasei.us/> rdf:type foaf:Document];

{
	my $sink	= RDF::Trine::Serializer::StringSink->new();
	my $log		= RDF::Trine::Exporter::RDFPatch->new( sink => $sink, namespaces => { rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', foaf => 'http://xmlns.com/foaf/0.1/' } );
	my $model	= RDF::Trine::Model->new();
	$model->logger( $log );
	
	$model->add_statement( $st0 );
	is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n] );
	
	$log->comment("foo");
	is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n# foo\n] );
	
	$model->add_statement( $st1 );
	is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n# foo\nA R foaf:name "Greg" .\n] );

	$model->add_statement( $st3 );
	is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n# foo\nA R foaf:name "Greg" .\nA <http://kasei.us/> rdf:type foaf:Document .\n] );
	
	$model->remove_statement( $st0 );
	is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n# foo\nA R foaf:name "Greg" .\nA <http://kasei.us/> rdf:type foaf:Document .\nD _:greg R foaf:Person .\n] );
	
	$log->comment("multi-line\ncomment");
	is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n# foo\nA R foaf:name "Greg" .\nA <http://kasei.us/> rdf:type foaf:Document .\nD _:greg R foaf:Person .\n# multi-line\n# comment\n] );
}

done_testing();