Skip to content

Commit 17d8281

Browse files
gilmagnosimbabque
authored andcommitted
Fix the legacy API of "file" inputs
1 parent 8b25569 commit 17d8281

3 files changed

Lines changed: 84 additions & 1 deletion

File tree

lib/HTML/Form.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1554,7 +1554,7 @@ sub form_name_value {
15541554
my $fn = shift @$file;
15551555
push(@headers, @$file);
15561556
$file = $f;
1557-
$filename = $fn unless defined $filename;
1557+
$filename = $fn;
15581558
}
15591559

15601560
return ($name => [$file, $filename, @headers]);

t/file_upload.t

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
use strict;
2+
use warnings;
3+
use Test::More;
4+
use HTML::Form;
5+
6+
my ($form, $input);
7+
8+
sub new_form_and_input {
9+
$form = HTML::Form->new('POST', '/', 'multipart/form-data');
10+
$form->push_input('file', { name => 'document' });
11+
($input) = $form->inputs;
12+
return $form, $input;
13+
}
14+
15+
my $file = 't/file_upload.txt';
16+
my $filename = 'the_uploaded_file.txt';
17+
18+
# Using [$file, $filename] as argument
19+
20+
# $input->value and array refs
21+
($form, $input) = new_form_and_input;
22+
$input->value([ $file, $filename ]);
23+
like( $form->make_request->as_string, qr! filename="$filename" !x,
24+
'Upload: using $input->value([$file, $filename])' );
25+
26+
# $input->file and array refs
27+
($form, $input) = new_form_and_input;
28+
$input->file([ $file, $filename ]);
29+
like( $form->make_request->as_string, qr! filename="$filename" !x,
30+
'Upload: using $input->file([$file, $filename])' );
31+
32+
# $form->value and array refs
33+
($form, $input) = new_form_and_input;
34+
$form->value('document', [ $file, $filename ]);
35+
like( $form->make_request->as_string, qr! filename="$filename" !x,
36+
q/Upload: using $form->value('document', [$file, $filename])/ );
37+
38+
# Using [$file, $filename, Content => 'inline content'] as argument
39+
40+
# $input->value and array refs
41+
($form, $input) = new_form_and_input;
42+
$input->value([ $file, $filename, Content => 'inline content' ]);
43+
like( $form->make_request->as_string, qr! filename="$filename" !x,
44+
q/Upload: using $input->value([$file, $filename, Content => '?'])/ );
45+
46+
# $input->file and array refs
47+
($form, $input) = new_form_and_input;
48+
$input->file([ $file, $filename, Content => 'inline content' ]);
49+
like( $form->make_request->as_string, qr! filename="$filename" !x,
50+
q/Upload: using $input->file([$file, $filename, Content => '?'])/ );
51+
52+
# $form->value and array refs
53+
($form, $input) = new_form_and_input;
54+
$form->value('document', [ $file, $filename, Content => 'inline content' ]);
55+
like( $form->make_request->as_string, qr! filename="$filename" !x,
56+
q/Upload: using $form->value('document', [$file, $filename, Content => '?'])/ );
57+
58+
# Using methods (file, filename, content) directly
59+
60+
# 'file' informed directly
61+
($form, $input) = new_form_and_input;
62+
$input->file($file);
63+
like( $form->make_request->as_string, qr! filename="$file" !x,
64+
"Upload: 'file' informed directly and used as 'filename'" );
65+
66+
# 'file' and 'filename' informed directly
67+
($form, $input) = new_form_and_input;
68+
$input->file($file);
69+
$input->filename($filename);
70+
like( $form->make_request->as_string, qr! filename="$filename" !x,
71+
"Upload: 'file' and 'filename' informed directly" );
72+
73+
# 'file', 'filename' and 'content' informed directly
74+
($form, $input) = new_form_and_input;
75+
$input->file($file);
76+
$input->filename($filename);
77+
$input->content('inline content');
78+
like( $form->make_request->as_string, qr! filename="$filename" !x,
79+
"Upload: 'file', 'filename' and 'content' informed directly" );
80+
81+
done_testing;

t/file_upload.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
First line.
2+
Second line.

0 commit comments

Comments
 (0)