The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApp;

use Catalyst qw( MobileAgent );
use Test::More tests => 6;

sub foo : Global {
    my ( $self, $c ) = @_;
    my $mobile_agent = $c->req->mobile_agent;

    my $class = $c->req->params->{ class };
    isa_ok $mobile_agent, $class, "$class check.";

    my $carrier = $c->req->params->{ carrier };
    like $mobile_agent->carrier_longname, qr/^$carrier$/;
}

__PACKAGE__->setup();

package main;

use Catalyst::Test 'TestApp';
use HTTP::Headers;
use HTTP::Request::Common;

my @Tests = (
    {
        class      => 'HTTP::MobileAgent::DoCoMo',
        user_agent => 'DoCoMo/2.0 N2001(c10;ser0123456789abcde;icc01234567890123456789)',
        carrier    => 'DoCoMo',
    },
    {
        class      => 'HTTP::MobileAgent::EZweb',
        user_agent => 'KDDI-TS21 UP.Browser/6.0.2.276 (GUI) MMP/1.1',
        carrier    => 'EZweb',
    },
    {
        class      => 'HTTP::MobileAgent::JPhone',
        user_agent => 'SoftBank/1.0/910T/TJ001 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1',
        carrier    => '(Vodafone|SoftBank)',
    },
);

for my $Test ( @Tests ) {
    my $request = GET(
        '/foo?class=' . $Test->{ class } . '&carrier=' . $Test->{ carrier },
        'User-Agent' => $Test->{ user_agent },
    );
    request( $request );
}