1#!perl 2 3use strict; 4use warnings; 5 6use Test::More qw[no_plan]; 7use lib 't'; 8use Util qw[tmpfile rewind $CRLF $LF]; 9use HTTP::Tiny; 10 11{ 12 no warnings 'redefine'; 13 sub HTTP::Tiny::Handle::can_read { 1 }; 14 sub HTTP::Tiny::Handle::can_write { 1 }; 15} 16 17{ 18 my $header = join $CRLF, 'Foo: Foo', 'Foo: Baz', 'Bar: Bar', '', ''; 19 my $fh = tmpfile($header); 20 my $exp = { foo => ['Foo', 'Baz'], bar => 'Bar' }; 21 my $handle = HTTP::Tiny::Handle->new(fh => $fh); 22 my $got = $handle->read_header_lines; 23 is_deeply($got, $exp, "->read_header_lines() CRLF"); 24} 25 26{ 27 my $header = join $LF, 'Foo: Foo', 'Foo: Baz', 'Bar: Bar', '', ''; 28 my $fh = tmpfile($header); 29 my $exp = { foo => ['Foo', 'Baz'], bar => 'Bar' }; 30 my $handle = HTTP::Tiny::Handle->new(fh => $fh); 31 my $got = $handle->read_header_lines; 32 is_deeply($got, $exp, "->read_header_lines() LF"); 33} 34 35{ 36 my $header = "Foo: $CRLF\x09Bar$CRLF\x09$CRLF\x09Baz$CRLF$CRLF"; 37 my $fh = tmpfile($header); 38 my $exp = { foo => 'Bar Baz' }; 39 my $handle = HTTP::Tiny::Handle->new(fh => $fh); 40 my $got = $handle->read_header_lines; 41 is_deeply($got, $exp, "->read_header_lines() insane continuations"); 42} 43 44{ 45 my $fh = tmpfile(); 46 my $handle = HTTP::Tiny::Handle->new(fh => $fh); 47 my $headers = { foo => ['Foo', 'Baz'], bar => 'Bar' }; 48 $handle->write_header_lines($headers); 49 rewind($fh); 50 is_deeply($handle->read_header_lines, $headers, "roundtrip header lines"); 51} 52 53{ 54 my $fh = tmpfile(); 55 my $handle = HTTP::Tiny::Handle->new(fh => $fh); 56 my $headers = { foo => ['Foo', 'Baz'], bar => 'Bar', baz => '' }; 57 $handle->write_header_lines($headers); 58 rewind($fh); 59 is_deeply($handle->read_header_lines, $headers, "roundtrip header lines"); 60} 61 62