The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 11; 
use Test::Exception;
use SRU::Utils::XMLTest qw( wellFormedXML ); 

use_ok( 'SRU::Request::Explain' );
use_ok( 'SRU::Response' );

OK: {
    my $url = 'http://myserver.com/myurl?operation=explain&version=1.0&recordPacking=xml&stylesheet=http://www.example.com/style.xsl&extraRequestData=123';

    my $request = SRU::Request->newFromURI( $url );
    isa_ok( $request, 'SRU::Request::Explain' );

    is( $request->stylesheet(), 'http://www.example.com/style.xsl', 
        'stylesheet()' );

    my $response = SRU::Response->newFromRequest( $request );
    isa_ok( $response, 'SRU::Response::Explain' );
    is( $response->type(), 'explain', 'type()' );

    $response->record(
        SRU::Response::Record->new(
            recordSchema => 'http://explain.z3950.org/dtd/2.0/',
            recordData   => '<foo>bar</foo>'
        )
    );
    my $xml = $response->asXML();
    like( $xml, qr{<foo>bar</foo>}, 'found recordData' );
    like( $xml, qr{\Q<?xml-stylesheet type='text/xsl' href="http://www.example.com/style.xsl" ?>\E}, 'found stylsheet in XML' ); 

    ok( wellFormedXML($xml), "asXML()" );
}

INVALID_RECORD: {
    my $url = 'http://myserver.com/myurl?operation=explain';
    my $request = SRU::Request->newFromURI( $url );
    isa_ok( $request, 'SRU::Request::Explain' );
    my $response = SRU::Response->newFromRequest( $request );

    throws_ok 
        { $response->record( '<explain>Explain info here</explain>' ) }
        qr/must pass in a SRU::Response::Record/, 
        "caught invalid parameter passed to record()";
}