# This file documents the revision history for Perl extension Catalyst.
+5.80033 2011-07-24 16:09:00
+
Bug fixes:
+ - Fix Catalyst::Request so that the hostname accessor is not incorrectly
+ populated with 'localhost' if a reverse DNS lookup fails.
+
+ - Fix Path actions debug screen to display number of arguments
+
+ - Fix a regression that prevented configuring attributes for all actions using
+ ->config(actions => { '*' => \%attrs }) from working
+
+ - Append $\ in Catalyst::Response->print to more closely match
+ IO::Handle's behaviour.
+
+ - Fixed situation where a detach($action) from a forward within auto
+ was not breaking out correctly
+
- Fix the disable_component_resolution_regex_fallback config setting
to also work in the $c->component method.
+ - Handle users setting cookies with an undef value by not trying to
+ output that cookie (rather than trying to do so and causing an exception
+ as previously happened). A warning is logged if this occurs in debug
+ mode.
+ - Update tests to ignore $ENV{CATALYST_HOME} where required
+
+ - Change repository metadata to point at git.
+
+ - Clean namespaces in Catalyst::Request::Upload
+
+ - Catalyst::Test: Fixes to action_ok, action_redirect and action_notfound
+ test functions to be better documented, and have better default test
+ names.
+
+ - Update tests to ignore CATALYST_HOME env var.
+
5.89002 2011-03-02 11:30:00 (TRIAL release)
Bug fixes:
BEGIN { $iters = $ENV{CAT_BENCH_ITERS} || 1; }
-use Test::More tests => 27*$iters;
+use Test::More;
use Catalyst::Test 'TestApp';
if ( $ENV{CAT_BENCHMARK} ) {
require Benchmark;
Benchmark::timethis( $iters, \&run_tests );
-
+
# new dispatcher:
# 11 wallclock secs (10.14 usr + 0.20 sys = 10.34 CPU) @ 15.18/s (n=157)
# old dispatcher (r1486):
run_tests();
}
}
-
+
sub run_tests {
# test auto + local method
{
TestApp::Controller::Action::Auto->one
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/one'), 'auto + local' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
is( $response->content, 'one', 'Content OK' );
}
-
+
# test auto + default
{
my @expected = qw[
TestApp::Controller::Action::Auto->default
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/anything'), 'auto + default' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
is( $response->content, 'default', 'Content OK' );
}
-
+
# test auto + auto + local
{
my @expected = qw[
TestApp::Controller::Action::Auto::Deep->one
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/deep/one'), 'auto + auto + local' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
is( $response->content, 'deep one', 'Content OK' );
}
-
+
# test auto + auto + default
{
my @expected = qw[
TestApp::Controller::Action::Auto::Deep->default
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/deep/anything'), 'auto + auto + default' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
is( $response->content, 'deep default', 'Content OK' );
}
-
+
# test auto + failing auto + local + end
{
my @expected = qw[
TestApp::Controller::Action::Auto::Abort->auto
TestApp::Controller::Action::Auto::Abort->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/abort/one'), 'auto + failing auto + local' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
is( $response->content, 'abort end', 'Content OK' );
}
-
+
# test auto + default (bug on invocation of default twice)
{
my @expected = qw[
TestApp::Controller::Action::Auto::Default->default
TestApp::Controller::Action::Auto::Default->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/default/moose'), 'auto + default' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
TestApp::Controller::Action::Auto::Detach->auto
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/detach'), 'auto with detach' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
TestApp::Controller::Action::Auto::Detach->with_forward_detach
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/detach?with_forward_detach=1'), 'auto with_forward_detach' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
TestApp::Controller::Action::Auto::Detach->detach_action
TestApp::Controller::Root->end
];
-
+
my $expected = join( ", ", @expected );
-
+
ok( my $response = request('http://localhost/action/auto/detach?with_forward_detach=1&detach_to_action=1'), 'auto with_forward_detach to detach_action' );
is( $response->header('X-Catalyst-Executed'),
$expected, 'Executed actions' );
is( $response->content, 'detach_action', 'Content OK' );
}
}
+
+done_testing;
+
use FindBin;
use lib "$FindBin::Bin/../lib";
-use Test::More tests => 15;
+use Test::More;
use Catalyst::Test 'TestApp';
use HTTP::Headers::Util 'split_header_words';
this_is_the_real_name => [ qw(this_is_the_real_name foo&bar path /) ], # not "object"
}, 'Response Cookies' );
}
+
+{
+ my $response;
+ ok( $response = request('http://localhost/engine/response/cookies/four'),
+ 'Request' );
+ ok( $response->is_success, 'Response Successful 2xx' ) or diag explain $response;
+ is( $response->content_type, 'text/plain', 'Response Content-Type' );
+ is( $response->header('X-Catalyst-Action'),
+ 'engine/response/cookies/four', 'Test Action' );
+
+ my $cookies = {};
+
+ for my $string ( $response->header('Set-Cookie') ) {
+ my $cookie = [ split_header_words $string];
+ $cookies->{ $cookie->[0]->[0] } = $cookie->[0];
+ }
+
+ is_deeply( $cookies, {
+ good => [qw|good good_cookie path /|],
+ }, 'Response Cookies' );
+}
+
+done_testing;
+