HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: //usr/share/pear/test/pecl_http/phpunit/ParamsTest.php
<?php

class ParamsTest extends PHPUnit_Framework_TestCase {
    function testDefault() {
        $s = "foo, bar;arg=0;bla, gotit=0;now";
        $this->runAssertions(
            new http\Params($s),
            str_replace(" ", "", $s)
        );
    }

    function testCustom() {
        $s = "foo bar.arg:0.bla gotit:0.now";
        $this->runAssertions(
            new http\Params($s, " ", ".", ":"),
            $s
        );
    }

    function testQuoted() {
        $p = new http\Params("multipart/form-data; boundary=\"--123\"");
        $this->assertEquals(
            array(
                "multipart/form-data" => array(
                    "value" => true,
                    "arguments" => array(
                        "boundary" => "--123"
                    )
                )
            ),
            $p->params
        );
        $this->assertEquals("multipart/form-data;boundary=--123", (string) $p);
    }

    function testEscaped() {
        $p = new http\Params("form-data; name=\"upload\"; filename=\"trick\\\"\0\\\"ed\"");
        $this->assertEquals(
            array(
                "form-data" => array(
                    "value" => true,
                    "arguments" => array(
                        "name" => "upload",
                        "filename" => "trick\"\0\"ed"
                    )
                )
            ),
            $p->params
        );
        $this->assertEquals("form-data;name=upload;filename=\"trick\\\"\\0\\\"ed\"", (string) $p);
    }

    function testUrlencoded() {
        $s = "foo=b%22r&bar=b%22z&a%5B%5D%5B%5D=1";
        $p = new http\Params($s, "&", "", "=", http\Params::PARSE_URLENCODED);
        $this->assertEquals(
            array(
                "foo" => array(
                    "value" => "b\"r",
                    "arguments" => array(),
                ),
                "bar" => array(
                    "value" => "b\"z",
                    "arguments" => array(),
                ),
                "a[][]" => array(
                    "value" => "1",
                    "arguments" => array(),
                ),
            ),
            $p->params
        );
        $this->assertEquals("foo=b%22r&bar=b%22z&a%5B%5D%5B%5D=1", (string) $p);
    }

    function testQuery() {
        $s = "foo=b%22r&bar=b%22z&a%5B%5D%5B%5D=1";
        $p = new http\Params($s, "&", "", "=", http\Params::PARSE_QUERY);
        $this->assertEquals(
            array(
                "foo" => array(
                    "value" => "b\"r",
                    "arguments" => array(),
                ),
                "bar" => array(
                    "value" => "b\"z",
                    "arguments" => array(),
                ),
                "a" => array(
                    "value" => array(
                        array("1")
                    ),
                    "arguments" => array(),
                ),
            ),
            $p->params
        );
        $this->assertEquals("foo=b%22r&bar=b%22z&a%5B0%5D%5B0%5D=1", (string) $p);
    }


    function testEmpty() {
        $p = new http\Params(NULL);
        $this->assertEquals(array(), $p->params);
    }

    function testErrorOfToArrayWithArgs() {
        $this->setExpectedException("PHPUnit_Framework_Error_Warning");
        $p = new http\Params();
        $p->toArray("dummy");
    }

    function testIntegerKeys() {
        $p = new http\Params("0=nothing;1=yes");
        $this->assertEquals(array("0" => array("value" => "nothing", "arguments" => array(1=>"yes"))), $p->params);
        $this->assertEquals("0=nothing;1=yes", $p->toString());
    }

    function testBoolParamArguments() {
        $p = new http\Params;
        $container = array("value" => false, "arguments" => array("wrong" => false, "correct" => true));
        $p["container"] = $container;
        $this->assertEquals("container=0;wrong=0;correct", $p->toString());
        $this->assertEquals(array("container" => $container), $p->toArray());
    }

    function testNoArgsForParam() {
        $p = new http\Params;
        $p["param"] = true;
        $this->assertEquals("param", $p->toString());
        $p["param"] = false;
        $this->assertEquals("param=0", $p->toString());
    }

    protected function runAssertions($p, $s) {
        $this->assertCount(3, $p->params);
        $this->assertArrayHasKey("foo", $p->params);
        $this->assertArrayHasKey("bar", $p->params);
        $this->assertArrayHasKEy("gotit", $p->params);

        $this->assertTrue($p["foo"]["value"]);
        $this->assertTrue($p["bar"]["value"]);
        $this->assertEmpty($p["gotit"]["value"]);

        $this->assertEmpty($p["foo"]["arguments"]);
        $this->assertCount(2, $p["bar"]["arguments"]);
        $this->assertCount(1, $p["gotit"]["arguments"]);

        $this->assertEmpty($p["bar"]["arguments"]["arg"]);
        $this->assertTrue($p["bar"]["arguments"]["bla"]);
        $this->assertTrue($p["gotit"]["arguments"]["now"]);

        $this->assertEquals($s, (string) $p);

        $comp = array (
            'foo' => 
            array (
                'value' => true,
                'arguments' => 
                array (
                ),
            ),
            'bar' => 
            array (
                'value' => true,
                'arguments' => 
                array (
                    'arg' => '0',
                    'bla' => true,
                ),
            ),
            'gotit' => 
            array (
                'value' => '0',
                'arguments' => 
                array (
                    'now' => true,
                ),
            ),
        );

        $this->assertEquals($comp, $p->params);
        $a = new http\Params($p->params);
        $this->assertEquals($comp, $a->toArray());
	}
}