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 107 108 109 110 111 112 113
|
<?php
/**
* League.Uri (https://uri.thephpleague.com)
*
* (c) Ignace Nyamagana Butera <nyamsprod@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace League\Uri\KeyValuePair;
use PHPUnit\Framework\TestCase;
final class ConverterTest extends TestCase
{
public function testItWilltConvertPairsToStringOrNull(): void
{
$converterWithAmpersand = Converter::new('&');
self::assertSame('&', $converterWithAmpersand->separator());
self::assertSame([], $converterWithAmpersand->encodingMap());
self::assertSame('a=b', $converterWithAmpersand->toValue([['a', 'b']]));
self::assertSame('a=b&b=c', $converterWithAmpersand->toValue([['a', 'b'], ['b', 'c']]));
self::assertSame('a=&b', $converterWithAmpersand->toValue([['a', ''], ['b', null]]));
self::assertSame('=&=', $converterWithAmpersand->toValue([['', ''], ['', '']]));
self::assertSame('a==', $converterWithAmpersand->toValue([['a', '=']]));
self::assertSame('&&', $converterWithAmpersand->toValue([['', null], ['', null], ['', null]]));
self::assertNull($converterWithAmpersand->toValue([]));
$converterWithSemiColon = Converter::new(';');
self::assertSame(';', $converterWithSemiColon->separator());
self::assertSame([], $converterWithSemiColon->encodingMap());
self::assertSame('a=b', $converterWithSemiColon->toValue([['a', 'b']]));
self::assertSame('a=b;b=c', $converterWithSemiColon->toValue([['a', 'b'], ['b', 'c']]));
self::assertSame('a=;b', $converterWithSemiColon->toValue([['a', ''], ['b', null]]));
self::assertSame('=;=', $converterWithSemiColon->toValue([['', ''], ['', '']]));
self::assertSame('a==', $converterWithSemiColon->toValue([['a', '=']]));
self::assertNull($converterWithSemiColon->toValue([]));
}
public function testItWillConvertPairsAndMapCharactersIfNeeded(): void
{
$converter = Converter::new('&')->withEncodingMap(['FOO' => 'bar']);
self::assertSame('&', $converter->separator());
self::assertSame(['FOO' => 'bar'], $converter->encodingMap());
self::assertSame('toto=bar', $converter->toValue([['toto', 'FOO']]));
}
public function testEncodingDecodingMapDiffersWithEachSpecification(): void
{
$encoded = [['tata%2A%3F%2F%20_%2B', 'tata%2A%3F%2F%20_%2B']];
$rfc3986 = Converter::fromRFC3986();
self::assertSame([], $rfc3986->encodingMap());
self::assertSame('tata%2A%3F%2F%20_%2B=tata%2A%3F%2F%20_%2B', $rfc3986->toValue($encoded));
self::assertSame($encoded, $rfc3986->toPairs('tata%2A%3F%2F%20_%2B=tata%2A%3F%2F%20_%2B'));
$rfc1738 = Converter::fromRFC1738();
self::assertSame(['%20' => '+'], $rfc1738->encodingMap());
self::assertSame('tata%2A%3F%2F+_%2B=tata%2A%3F%2F+_%2B', $rfc1738->toValue($encoded));
self::assertSame($encoded, $rfc1738->toPairs('tata%2A%3F%2F+_%2B=tata%2A%3F%2F+_%2B'));
$formData = Converter::fromFormData();
self::assertSame(['%20' => '+', '%2A' => '*'], $formData->encodingMap());
self::assertSame('tata*%3F%2F+_%2B=tata*%3F%2F+_%2B', $formData->toValue($encoded));
self::assertSame($encoded, $formData->toPairs('tata*%3F%2F+_%2B=tata*%3F%2F+_%2B'));
}
public function testEncodingValueByType(): void
{
self::assertSame(
'string=string;true=1;false=0;integer=42;float=42.0;null',
Converter::new(';')->toValue([
['string', 'string'],
['true', true],
['false', false],
['integer', 42],
['float', 42.000000000],
['null', null],
])
);
}
public function testDecodingValue(): void
{
self::assertSame(
[
['string', 'string'],
['true', '1'],
['false', '0'],
['integer', '42'],
['float', '42.000000000'],
['null', null],
],
Converter::new(';')->toPairs('string=string;true=1;false=0;integer=42;float=42.000000000;null')
);
}
public function testDecodingByType(): void
{
$converter = Converter::new(';');
self::assertSame([], $converter->toPairs(null));
self::assertSame([['', null]], $converter->toPairs(''));
self::assertSame([['42', null]], $converter->toPairs(42));
self::assertSame([['42', null]], $converter->toPairs(42.000));
self::assertSame([['0', null]], $converter->toPairs(false));
self::assertSame([['1', null]], $converter->toPairs(true));
self::assertSame([['string', null]], $converter->toPairs('string'));
}
}
|