#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Plack::Test;
use utf8;
{
package MyApp::Controller;
use Moose;
sub basic {
my $self = shift;
my ($r) = @_;
return sub {
my $responder = shift;
$responder->([ 200, [], ["hello world: " . $r->path] ]);
}
}
sub writer {
my $self = shift;
my ($r) = @_;
return sub {
my $responder = shift;
my $writer = $responder->([ 200, [] ]);
$writer->write("hello world: ");
$writer->write($r->path);
$writer->close;
}
}
sub utf8 {
my $self = shift;
my ($r) = @_;
return sub {
my $responder = shift;
$responder->([ 200, [], ["café"] ]);
}
}
sub latin1 {
my $self = shift;
my ($r) = @_;
$r->encoding('latin1');
return sub {
my $responder = shift;
$responder->([ 200, [], ["café"] ]);
}
}
}
{
package MyApp;
use OX;
has controller => (
is => 'ro',
isa => 'MyApp::Controller',
);
router as {
route '/basic' => 'controller.basic';
route '/writer' => 'controller.writer';
route '/utf8' => 'controller.utf8';
route '/latin1' => 'controller.latin1';
};
}
test_psgi
app => MyApp->new->to_app,
client => sub {
my $cb = shift;
{
my $req = HTTP::Request->new(GET => "http://localhost/basic");
my $res = $cb->($req);
ok($res->is_success)
|| diag($res->status_line . "\n" . $res->content);
is($res->content, "hello world: /basic", "got the right content");
}
{
my $req = HTTP::Request->new(GET => "http://localhost/writer");
my $res = $cb->($req);
ok($res->is_success)
|| diag($res->status_line . "\n" . $res->content);
is($res->content, "hello world: /writer", "got the right content");
}
{
my $req = HTTP::Request->new(GET => "http://localhost/utf8");
my $res = $cb->($req);
ok($res->is_success)
|| diag($res->status_line . "\n" . $res->content);
is($res->content, "caf\xc3\xa9", "got the right content");
}
{
my $req = HTTP::Request->new(GET => "http://localhost/latin1");
my $res = $cb->($req);
ok($res->is_success)
|| diag($res->status_line . "\n" . $res->content);
is($res->content, "caf\xe9", "got the right content");
}
};
done_testing;