-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
FormDataPartTest.php
106 lines (92 loc) · 3.41 KB
/
FormDataPartTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Mime\Tests\Part\Multipart;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
use Symfony\Component\Mime\Part\TextPart;
class FormDataPartTest extends TestCase
{
public function testConstructor()
{
$r = new \ReflectionProperty(TextPart::class, 'encoding');
$r->setAccessible(true);
$b = new TextPart('content');
$c = DataPart::fromPath($file = __DIR__.'/../../Fixtures/mimetypes/test.gif');
$f = new FormDataPart([
'foo' => $content = 'very very long content that will not be cut even if the length is way more than 76 characters, ok?',
'bar' => clone $b,
'baz' => clone $c,
]);
$this->assertEquals('multipart', $f->getMediaType());
$this->assertEquals('form-data', $f->getMediaSubtype());
$t = new TextPart($content, 'utf-8', 'plain', '8bit');
$t->setDisposition('form-data');
$t->setName('foo');
$t->getHeaders()->setMaxLineLength(PHP_INT_MAX);
$b->setDisposition('form-data');
$b->setName('bar');
$b->getHeaders()->setMaxLineLength(PHP_INT_MAX);
$r->setValue($b, '8bit');
$c->setDisposition('form-data');
$c->setName('baz');
$c->getHeaders()->setMaxLineLength(PHP_INT_MAX);
$r->setValue($c, '8bit');
$this->assertEquals([$t, $b, $c], $f->getParts());
}
public function testNestedArrayParts()
{
$p1 = new TextPart('content', 'utf-8', 'plain', '8bit');
$f = new FormDataPart([
'foo' => clone $p1,
'bar' => [
'baz' => [
clone $p1,
'qux' => clone $p1,
],
],
]);
$this->assertEquals('multipart', $f->getMediaType());
$this->assertEquals('form-data', $f->getMediaSubtype());
$p1->setName('foo');
$p1->setDisposition('form-data');
$p2 = clone $p1;
$p2->setName('bar[baz][0]');
$p3 = clone $p1;
$p3->setName('bar[baz][qux]');
$this->assertEquals([$p1, $p2, $p3], $f->getParts());
}
public function testToString()
{
$p = DataPart::fromPath($file = __DIR__.'/../../Fixtures/mimetypes/test.gif');
$this->assertEquals(base64_encode(file_get_contents($file)), $p->bodyToString());
}
public function testContentLineLength()
{
$f = new FormDataPart([
'foo' => new DataPart($foo = str_repeat('foo', 1000), 'foo.txt', 'text/plain'),
'bar' => $bar = str_repeat('bar', 1000),
]);
$parts = $f->getParts();
$this->assertEquals($foo, $parts[0]->bodyToString());
$this->assertEquals($bar, $parts[1]->bodyToString());
}
public function testBoundaryContentTypeHeader()
{
$f = new FormDataPart([
'file' => new DataPart('data.csv', 'data.csv', 'text/csv'),
]);
$headers = $f->getPreparedHeaders()->toArray();
$this->assertMatchesRegularExpression(
'/^Content-Type: multipart\/form-data; boundary=[a-zA-Z0-9\-_]{8}$/',
$headers[0]
);
}
}