use Plack::Test;
use Catalyst::Exception;
use Catalyst::Utils;
-use Class::MOP;
+use Class::Load qw(load_class is_class_loaded);
use Sub::Exporter;
+use Moose::Util 'find_meta';
use Carp 'croak', 'carp';
+use Ref::Util qw(is_plain_coderef is_plain_hashref);
sub _build_request_export {
my ($self, $args) = @_;
return sub { croak "Must specify a test app: use Catalyst::Test 'TestApp'" }
unless $class;
- Class::MOP::load_class($class) unless Class::MOP::is_class_loaded($class);
+ load_class($class) unless is_class_loaded($class);
$class->import;
return sub { _local_request( $class, @_ ) };
# hook into 'dispatch' -- the function gets called after all plugins
# have done their work, and it's an easy place to capture $c.
- my $meta = Class::MOP::get_metaclass_by_name($class);
+ my $meta = find_meta($class);
$meta->make_mutable;
$meta->add_after_method_modifier( "dispatch", sub {
$ctx_closed_over = shift;
or say: use Catalyst::Test 'MyApp'; # If you do want to import a test app.\n\n})
unless $class;
$import->($self, '-all' => { class => $class });
- $opts = {} unless ref $opts eq 'HASH';
+ $opts = {} unless is_plain_hashref($opts);
$default_host = $opts->{default_host} if exists $opts->{default_host};
return 1;
}
my $class = shift;
return _request({
- app => ref($class) eq "CODE" ? $class : $class->_finalized_psgi_app,
+ app => is_plain_coderef($class) ? $class : $class->_finalized_psgi_app,
mangle_response => sub {
my ($resp) = @_;
# getting it into Plack::Test, or make a middleware out of it, or
# whatever. Seriously - horrible.
- require HTML::HeadParser;
+ if (!$resp->content_type || $resp->content_is_html) {
+ require HTML::HeadParser;
- my $parser = HTML::HeadParser->new();
- $parser->xml_mode(1) if $resp->content_is_xhtml;
- $parser->utf8_mode(1) if $] >= 5.008 && $HTML::Parser::VERSION >= 3.40;
+ my $parser = HTML::HeadParser->new();
+ $parser->xml_mode(1) if $resp->content_is_xhtml;
+ $parser->utf8_mode(1) if $] >= 5.008 && $HTML::Parser::VERSION >= 3.40;
- $parser->parse( $resp->content );
- my $h = $parser->header;
- for my $f ( $h->header_field_names ) {
- $resp->init_header( $f, [ $h->header($f) ] );
+ $parser->parse( $resp->content );
+ my $h = $parser->header;
+ for my $f ( $h->header_field_names ) {
+ $resp->init_header( $f, [ $h->header($f) ] );
+ }
}
# Another horrible hack to make the response headers have a
# 'status' field. This is for back-compat, but you should
my $request = shift;
my $extra_env = shift;
my $opts = pop(@_) || {};
- $opts = {} unless ref($opts) eq 'HASH';
+ $opts = {} unless is_plain_hashref($opts);
if ( my $host = exists $opts->{host} ? $opts->{host} : $default_host ) {
$request->header( 'Host' => $host );
}