1<?php 2/** 3 * Unit tests for HTTP_Request2 package 4 * 5 * PHP version 5 6 * 7 * LICENSE 8 * 9 * This source file is subject to BSD 3-Clause License that is bundled 10 * with this package in the file LICENSE and available at the URL 11 * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE 12 * 13 * @category HTTP 14 * @package HTTP_Request2 15 * @author Alexey Borzov <avb@php.net> 16 * @copyright 2008-2021 Alexey Borzov <avb@php.net> 17 * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License 18 * @link http://pear.php.net/package/HTTP_Request2 19 */ 20 21/** Sets up includes */ 22require_once dirname(__DIR__) . '/TestHelper.php'; 23 24use Yoast\PHPUnitPolyfills\TestCases\TestCase; 25 26/** 27 * Unit test for HTTP_Request2_MultipartBody class 28 */ 29class HTTP_Request2_MultipartBodyTest extends TestCase 30{ 31 public function testUploadSimple() 32 { 33 $req = new HTTP_Request2(null, HTTP_Request2::METHOD_POST); 34 $body = $req->addPostParameter('foo', 'I am a parameter') 35 ->addUpload('upload', dirname(__DIR__) . '/_files/plaintext.txt') 36 ->getBody(); 37 38 $this->assertTrue($body instanceof HTTP_Request2_MultipartBody); 39 $asString = $body->__toString(); 40 $boundary = $body->getBoundary(); 41 $this->assertEquals($body->getLength(), strlen($asString)); 42 $this->assertStringContainsString('This is a test.', $asString); 43 $this->assertStringContainsString('I am a parameter', $asString); 44 $this->assertMatchesRegularExpression("!--{$boundary}--\r\n$!", $asString); 45 } 46 47 public function testRequest16863() 48 { 49 $this->expectException(\HTTP_Request2_LogicException::class); 50 $req = new HTTP_Request2(null, HTTP_Request2::METHOD_POST); 51 $fp = fopen(dirname(__DIR__) . '/_files/plaintext.txt', 'rb'); 52 $body = $req->addUpload('upload', $fp) 53 ->getBody(); 54 55 $asString = $body->__toString(); 56 $this->assertStringContainsString('name="upload"; filename="anonymous.blob"', $asString); 57 $this->assertStringContainsString('This is a test.', $asString); 58 59 $req->addUpload('bad_upload', fopen('php://input', 'rb')); 60 } 61 62 public function testStreaming() 63 { 64 $req = new HTTP_Request2(null, HTTP_Request2::METHOD_POST); 65 $body = $req->addPostParameter('foo', 'I am a parameter') 66 ->addUpload('upload', dirname(__DIR__) . '/_files/plaintext.txt') 67 ->getBody(); 68 $asString = ''; 69 while ($part = $body->read(10)) { 70 $asString .= $part; 71 } 72 $this->assertEquals($body->getLength(), strlen($asString)); 73 $this->assertStringContainsString('This is a test.', $asString); 74 $this->assertStringContainsString('I am a parameter', $asString); 75 } 76 77 public function testUploadArray() 78 { 79 $req = new HTTP_Request2(null, HTTP_Request2::METHOD_POST); 80 $body = $req->addUpload('upload', [ 81 [dirname(__DIR__) . '/_files/plaintext.txt', 'bio.txt', 'text/plain'], 82 [fopen(dirname(__DIR__) . '/_files/empty.gif', 'rb'), 'photo.gif', 'image/gif'] 83 ]) 84 ->getBody(); 85 $asString = $body->__toString(); 86 $this->assertStringContainsString(file_get_contents(dirname(__DIR__) . '/_files/empty.gif'), $asString); 87 $this->assertStringContainsString('name="upload[0]"; filename="bio.txt"', $asString); 88 $this->assertStringContainsString('name="upload[1]"; filename="photo.gif"', $asString); 89 90 $body2 = $req->setConfig(['use_brackets' => false])->getBody(); 91 $asString = $body2->__toString(); 92 $this->assertStringContainsString('name="upload"; filename="bio.txt"', $asString); 93 $this->assertStringContainsString('name="upload"; filename="photo.gif"', $asString); 94 } 95} 96?>