Blame t/http-config.t

Packit a09cf7
use strict;
Packit a09cf7
use warnings;
Packit a09cf7
Packit a09cf7
use Test::More;
Packit a09cf7
plan tests => 28;
Packit a09cf7
Packit a09cf7
use HTTP::Config;
Packit a09cf7
Packit a09cf7
sub j { join("|", @_) }
Packit a09cf7
Packit a09cf7
my $conf = HTTP::Config->new;
Packit a09cf7
ok($conf->empty);
Packit a09cf7
is($conf->entries, 0);
Packit a09cf7
$conf->add_item(42);
Packit a09cf7
ok(!$conf->empty);
Packit a09cf7
is($conf->entries, 1);
Packit a09cf7
is(j($conf->matching_items("http://www.example.com/foo")), 42);
Packit a09cf7
is(j($conf->remove_items), 42);
Packit a09cf7
is(j($conf->remove_items), '');
Packit a09cf7
is($conf->matching_items("http://www.example.com/foo"), 0);
Packit a09cf7
is($conf->matching_items('foo', 'bar', 'baz'), 0);
Packit a09cf7
$conf->add({item => "http://www.example.com/foo", m_uri__HEAD => undef});
Packit a09cf7
is($conf->entries, 1);
Packit a09cf7
is($conf->matching_items("http://www.example.com/foo"), 0);
Packit a09cf7
SKIP: {
Packit a09cf7
	my $res;
Packit a09cf7
	eval { $res = $conf->matching_items(0); };
Packit a09cf7
	skip "can fails on non-object", 2 if $@;
Packit a09cf7
	is($res, 0);
Packit a09cf7
	eval { $res = $conf->matching(0); };
Packit a09cf7
	ok(!defined $res);
Packit a09cf7
}
Packit a09cf7
Packit a09cf7
$conf = HTTP::Config->new;
Packit a09cf7
Packit a09cf7
$conf->add_item("always");
Packit a09cf7
$conf->add_item("GET", m_method => ["GET", "HEAD"]);
Packit a09cf7
$conf->add_item("POST", m_method => "POST");
Packit a09cf7
$conf->add_item(".com", m_domain => ".com");
Packit a09cf7
$conf->add_item("secure", m_secure => 1);
Packit a09cf7
$conf->add_item("not secure", m_secure => 0);
Packit a09cf7
$conf->add_item("slash", m_host_port => "www.example.com:80", m_path_prefix => "/");
Packit a09cf7
$conf->add_item("u:p", m_host_port => "www.example.com:80", m_path_prefix => "/foo");
Packit a09cf7
$conf->add_item("success", m_code => "2xx");
Packit a09cf7
is($conf->find(m_domain => ".com")->{item}, '.com');
Packit a09cf7
my @found = $conf->find(m_domain => ".com");
Packit a09cf7
is($#found, 0);
Packit a09cf7
is($found[0]->{item}, '.com');
Packit a09cf7
Packit a09cf7
use HTTP::Request;
Packit a09cf7
my $request = HTTP::Request->new(HEAD => "http://www.example.com/foo/bar");
Packit a09cf7
$request->header("User-Agent" => "Moz/1.0");
Packit a09cf7
Packit a09cf7
is(j($conf->matching_items($request)), "u:p|slash|.com|GET|not secure|always");
Packit a09cf7
Packit a09cf7
$request->method("HEAD");
Packit a09cf7
$request->uri->scheme("https");
Packit a09cf7
Packit a09cf7
is(j($conf->matching_items($request)), ".com|GET|secure|always");
Packit a09cf7
Packit a09cf7
is(j($conf->matching_items("http://activestate.com")), ".com|not secure|always");
Packit a09cf7
Packit a09cf7
use HTTP::Response;
Packit a09cf7
my $response = HTTP::Response->new(200 => "OK");
Packit a09cf7
$response->content_type("text/plain");
Packit a09cf7
$response->content("Hello, world!\n");
Packit a09cf7
$response->request($request);
Packit a09cf7
Packit a09cf7
is(j($conf->matching_items($response)), ".com|success|GET|secure|always");
Packit a09cf7
Packit a09cf7
$conf->remove_items(m_secure => 1);
Packit a09cf7
$conf->remove_items(m_domain => ".com");
Packit a09cf7
is(j($conf->matching_items($response)), "success|GET|always");
Packit a09cf7
Packit a09cf7
$conf->remove_items;  # start fresh
Packit a09cf7
is(j($conf->matching_items($response)), "");
Packit a09cf7
Packit a09cf7
$conf->add_item("any", "m_media_type" => "*/*");
Packit a09cf7
$conf->add_item("text", m_media_type => "text/*");
Packit a09cf7
$conf->add_item("html", m_media_type => "html");
Packit a09cf7
$conf->add_item("HTML", m_media_type => "text/html");
Packit a09cf7
$conf->add_item("xhtml", m_media_type => "xhtml");
Packit a09cf7
Packit a09cf7
is(j($conf->matching_items($response)), "text|any");
Packit a09cf7
Packit a09cf7
$response->content_type("application/xhtml+xml");
Packit a09cf7
is(j($conf->matching_items($response)), "xhtml|html|any");
Packit a09cf7
Packit a09cf7
$response->content_type("text/html");
Packit a09cf7
is(j($conf->matching_items($response)), "HTML|html|text|any");
Packit a09cf7
Packit a09cf7
$response->request(undef);
Packit a09cf7
is(j($conf->matching_items($response)), "HTML|html|text|any");
Packit a09cf7
Packit a09cf7
{
Packit a09cf7
    my @warnings;
Packit a09cf7
    local $SIG{__WARN__} = sub { push @warnings, grep { length } @_ };
Packit a09cf7
Packit a09cf7
    my $conf = HTTP::Config->new;
Packit a09cf7
    $conf->add(owner => undef, callback => sub { 'bleah' });
Packit a09cf7
    $conf->remove(owner => undef);
Packit a09cf7
Packit a09cf7
    ok(($conf->empty), 'found and removed the config entry');
Packit a09cf7
    is(scalar(@warnings), 0, 'no warnings')
Packit a09cf7
        or diag('got warnings: ', explain(\@warnings));
Packit a09cf7
}