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