1use strict;
2use Test;
3plan tests => 8;
4
5use File::Path;
6use Fatal qw(open close chdir mkpath);
7use XML::SAX;
8use vars qw(*FILE);
9
10ok(@{XML::SAX->parsers}, 0);
11ok(XML::SAX->add_parser(q(XML::SAX::PurePerl)));
12ok(@{XML::SAX->parsers}, 1);
13
14rmtree('t/lib', 0, 0);
15mkpath('t/lib', 0, 0777);
16
17push @INC, 't/lib';
18write_file('t/lib/TestParserPackage.pm', <<EOT);
19package TestParserPackage;
20use XML::SAX::Base;
21\@ISA = qw(XML::SAX::Base);
22sub new { 
23    return bless {}, shift
24}
25sub supported_features {
26    return ('http://axkit.org/sax/frobnosticating');
27}
281;
29EOT
30
31my $parser;
32
33# Test we can get TestParserPackage out
34write_file('t/lib/SAX.ini', 'ParserPackage = TestParserPackage');
35$parser = XML::SAX::ParserFactory->parser();
36ok(ref($parser), "TestParserPackage", "Parser was not TestParserPackage");
37
38# Test we can get XML::SAX::PurePerl out
39write_file('t/lib/SAX.ini', 'ParserPackage = XML::SAX::PurePerl');
40$parser = XML::SAX::ParserFactory->parser();
41ok(ref($parser), "XML::SAX::PurePerl", "Parser was not XML::SAX::PurePerl");
42
43# Test we can ask for a frobnosticating parser, but not get it
44write_file('t/lib/SAX.ini', 'http://axkit.org/sax/frobnosticating = 1');
45$parser = XML::SAX::ParserFactory->parser();
46ok(ref($parser), "XML::SAX::PurePerl", "Parser was not PurePerl (frobnosticating)");
47
48# Test we can ask for a frobnosticating parser, and get it
49XML::SAX->add_parser('TestParserPackage');
50$parser = XML::SAX::ParserFactory->parser();
51ok(ref($parser), "TestParserPackage", "Parser was not TestParserPackage (frobnosticating)");
52
53# Test we can get a namespaces parser
54write_file('t/lib/SAX.ini', 'http://xml.org/sax/features/namespaces = 1');
55$parser = XML::SAX::ParserFactory->parser();
56ok(ref($parser), "XML::SAX::PurePerl", "Parser was not PurePerl (namespaces)");
57
58sub write_file {
59    my ($file, $data) = @_;
60    open(FILE, ">$file");
61    print FILE $data, "\n";
62    close FILE;
63}