use strict; use warnings FATAL => 'all'; use Test::More tests => 31; use Data::Dumper; use File::Temp qw(tempdir); use File::Slurp; use File::Spec; BEGIN { use_ok('HTML::Tested', qw(HTV HT)); use_ok(HT() . "::List"); use_ok('HTML::Tested::Test::Request'); use_ok('HTML::Tested::Test'); use_ok('HTML::Tested::Value::Upload'); } package T; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV."::Upload", 'v'); package main; my $object = T->new; is_deeply($object->v, undef); my $stash = {}; $object->ht_render($stash); is_deeply($stash, { v => < ENDS my $td = tempdir(File::Spec->catdir(File::Spec->tmpdir, "plt_110_up_XXXXXX") , CLEANUP => 1); write_file("$td/c.txt", "Hello\nworld\n"); my $req = HTML::Tested::Test::Request->new; $req->add_upload(v => "$td/c.txt"); is(scalar($req->upload), 1); is($req->upload(($req->upload)[0])->name, 'v'); is($req->upload(($req->upload)[0])->filename, "$td/c.txt"); is($req->upload(($req->upload)[0])->size, -s "$td/c.txt"); is(ref($req->upload(($req->upload)[0])->fh), 'GLOB'); my $res = T->ht_load_from_params(map { $_->name, $_ } map { $req->upload($_) } $req->upload); is(ref($res->v), 'GLOB'); is(read_file($res->v), "Hello\nworld\n"); $req = HTML::Tested::Test::Request->new; HTML::Tested::Test->convert_tree_to_param('T', $req, { v => "$td/c.txt" }); is_deeply([ $req->param ], []); is(scalar($req->upload), 1); my $u = $req->upload("v"); is($u->name, 'v'); is($u->filename, "$td/c.txt"); is(ref($u->fh), 'GLOB'); $req->add_upload(c => "$td/c.txt"); is($req->upload('c')->name, 'c'); is($req->upload('j'), undef); package TC; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HT . "::List", l => 'T'); package main; $object = TC->new({ l => [ map { T->new } (1 .. 2) ] }); $stash = {}; $object->ht_render($stash); is_deeply($stash, { l => [ { v => '' . "\n" } , { v => '' . "\n" } ] }) or diag(Dumper($stash)); T->ht_add_widget(::HTV, "b"); $req = HTML::Tested::Test::Request->new; HTML::Tested::Test->convert_tree_to_param('TC', $req, { l => [ { b => 1 }, { v => "$td/c.txt" }, { b => 2, v => "$td/c.txt" } ] }); $object = TC->ht_load_from_params((map { $_->name, $_ } map { $req->upload($_) } $req->upload) , (map { $_, $req->param($_) } $req->param)); is($object->l->[0]->{b}, 1); is(read_file($object->l->[1]->v), "Hello\nworld\n"); is(read_file($object->l->[2]->v), "Hello\nworld\n"); is($object->l->[2]->b, 2); package T1; use base 'HTML::Tested'; __PACKAGE__->ht_add_widget(::HTV."::Upload", 'v', object => 1); package main; $req = HTML::Tested::Test::Request->new; $req->add_upload(v => "$td/c.txt"); $object = T1->ht_load_from_params(map { $_->name, $_ } map { $req->upload($_) } $req->upload); isnt($object->v, undef); is($object->v->filename, "$td/c.txt"); is($object->v->size, -s "$td/c.txt"); is($object->v->name, "v"); is(read_file($object->v->fh), "Hello\nworld\n");