Actualización

This commit is contained in:
Xes
2025-04-10 12:24:57 +02:00
parent 8969cc929d
commit 45420b6f0d
39760 changed files with 4303286 additions and 0 deletions

View File

@@ -0,0 +1,491 @@
<?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\Form\Tests\Util;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Form\Util\OrderedHashMap;
/**
* @author Bernhard Schussek <bschussek@gmail.com>
*/
class OrderedHashMapTest extends TestCase
{
public function testGet()
{
$map = new OrderedHashMap();
$map['first'] = 1;
$this->assertSame(1, $map['first']);
}
/**
* @expectedException \OutOfBoundsException
*/
public function testGetNonExistingFails()
{
$map = new OrderedHashMap();
$map['first'];
}
public function testInsertStringKeys()
{
$map = new OrderedHashMap();
$map['first'] = 1;
$map['second'] = 2;
$this->assertSame(array('first' => 1, 'second' => 2), iterator_to_array($map));
}
public function testInsertNullKeys()
{
$map = new OrderedHashMap();
$map[] = 1;
$map['foo'] = 2;
$map[] = 3;
$this->assertSame(array(0 => 1, 'foo' => 2, 1 => 3), iterator_to_array($map));
}
/**
* Updates should not change the position of an element, otherwise we could
* turn foreach loops into endless loops if they change the current
* element.
*
* foreach ($map as $index => $value) {
* $map[$index] = $value + 1;
* }
*
* And we don't want this, right? :)
*/
public function testUpdateDoesNotChangeElementPosition()
{
$map = new OrderedHashMap();
$map['first'] = 1;
$map['second'] = 2;
$map['first'] = 1;
$this->assertSame(array('first' => 1, 'second' => 2), iterator_to_array($map));
}
public function testIsset()
{
$map = new OrderedHashMap();
$map['first'] = 1;
$this->assertTrue(isset($map['first']));
}
public function testIssetReturnsFalseForNonExisting()
{
$map = new OrderedHashMap();
$this->assertFalse(isset($map['first']));
}
public function testIssetReturnsFalseForNull()
{
$map = new OrderedHashMap();
$map['first'] = null;
$this->assertFalse(isset($map['first']));
}
public function testUnset()
{
$map = new OrderedHashMap();
$map['first'] = 1;
$map['second'] = 2;
unset($map['first']);
$this->assertSame(array('second' => 2), iterator_to_array($map));
}
public function testUnsetNonExistingSucceeds()
{
$map = new OrderedHashMap();
$map['second'] = 2;
unset($map['first']);
$this->assertSame(array('second' => 2), iterator_to_array($map));
}
public function testEmptyIteration()
{
$map = new OrderedHashMap();
$it = $map->getIterator();
$it->rewind();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationSupportsInsertion()
{
$map = new OrderedHashMap(array('first' => 1));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('first', $it->key());
$this->assertSame(1, $it->current());
// dynamic modification
$map['added'] = 2;
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('first', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('added', $it->key());
$this->assertSame(2, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationSupportsDeletionAndInsertion()
{
$map = new OrderedHashMap(array('first' => 1, 'removed' => 2));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('first', $it->key());
$this->assertSame(1, $it->current());
// dynamic modification
unset($map['removed']);
$map['added'] = 3;
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('first', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('added', $it->key());
$this->assertSame(3, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationSupportsDeletionOfCurrentElement()
{
$map = new OrderedHashMap(array('removed' => 1, 'next' => 2));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('removed', $it->key());
$this->assertSame(1, $it->current());
unset($map['removed']);
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('removed', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(2, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationIgnoresReplacementOfCurrentElement()
{
$map = new OrderedHashMap(array('replaced' => 1, 'next' => 2));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('replaced', $it->key());
$this->assertSame(1, $it->current());
$map['replaced'] = 3;
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('replaced', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(2, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationSupportsDeletionOfCurrentAndLastElement()
{
$map = new OrderedHashMap(array('removed' => 1));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('removed', $it->key());
$this->assertSame(1, $it->current());
unset($map['removed']);
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('removed', $it->key());
$this->assertSame(1, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationIgnoresReplacementOfCurrentAndLastElement()
{
$map = new OrderedHashMap(array('replaced' => 1));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('replaced', $it->key());
$this->assertSame(1, $it->current());
$map['replaced'] = 2;
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('replaced', $it->key());
$this->assertSame(1, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationSupportsDeletionOfPreviousElement()
{
$map = new OrderedHashMap(array('removed' => 1, 'next' => 2, 'onemore' => 3));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('removed', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(2, $it->current());
unset($map['removed']);
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(2, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('onemore', $it->key());
$this->assertSame(3, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationIgnoresReplacementOfPreviousElement()
{
$map = new OrderedHashMap(array('replaced' => 1, 'next' => 2, 'onemore' => 3));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('replaced', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(2, $it->current());
$map['replaced'] = 4;
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(2, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('onemore', $it->key());
$this->assertSame(3, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testIterationSupportsDeletionOfMultiplePreviousElements()
{
$map = new OrderedHashMap(array('removed' => 1, 'alsoremoved' => 2, 'next' => 3, 'onemore' => 4));
$it = $map->getIterator();
$it->rewind();
$this->assertTrue($it->valid());
$this->assertSame('removed', $it->key());
$this->assertSame(1, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('alsoremoved', $it->key());
$this->assertSame(2, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(3, $it->current());
unset($map['removed'], $map['alsoremoved']);
// iterator is unchanged
$this->assertTrue($it->valid());
$this->assertSame('next', $it->key());
$this->assertSame(3, $it->current());
// continue iteration
$it->next();
$this->assertTrue($it->valid());
$this->assertSame('onemore', $it->key());
$this->assertSame(4, $it->current());
// end of map
$it->next();
$this->assertFalse($it->valid());
$this->assertNull($it->key());
$this->assertNull($it->current());
}
public function testParallelIteration()
{
$map = new OrderedHashMap(array('first' => 1, 'second' => 2));
$it1 = $map->getIterator();
$it2 = $map->getIterator();
$it1->rewind();
$this->assertTrue($it1->valid());
$this->assertSame('first', $it1->key());
$this->assertSame(1, $it1->current());
$it2->rewind();
$this->assertTrue($it2->valid());
$this->assertSame('first', $it2->key());
$this->assertSame(1, $it2->current());
// 1: continue iteration
$it1->next();
$this->assertTrue($it1->valid());
$this->assertSame('second', $it1->key());
$this->assertSame(2, $it1->current());
// 2: remains unchanged
$this->assertTrue($it2->valid());
$this->assertSame('first', $it2->key());
$this->assertSame(1, $it2->current());
// 1: advance to end of map
$it1->next();
$this->assertFalse($it1->valid());
$this->assertNull($it1->key());
$this->assertNull($it1->current());
// 2: remains unchanged
$this->assertTrue($it2->valid());
$this->assertSame('first', $it2->key());
$this->assertSame(1, $it2->current());
// 2: continue iteration
$it2->next();
$this->assertTrue($it2->valid());
$this->assertSame('second', $it2->key());
$this->assertSame(2, $it2->current());
// 1: remains unchanged
$this->assertFalse($it1->valid());
$this->assertNull($it1->key());
$this->assertNull($it1->current());
// 2: advance to end of map
$it2->next();
$this->assertFalse($it2->valid());
$this->assertNull($it2->key());
$this->assertNull($it2->current());
// 1: remains unchanged
$this->assertFalse($it1->valid());
$this->assertNull($it1->key());
$this->assertNull($it1->current());
}
public function testCount()
{
$map = new OrderedHashMap();
$map[] = 1;
$map['foo'] = 2;
unset($map[0]);
$map[] = 3;
$this->assertCount(2, $map);
}
}

View File

@@ -0,0 +1,105 @@
<?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\Form\Tests\Util;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Form\Util\StringUtil;
class StringUtilTest extends TestCase
{
public function testTrim()
{
$data = ' Foo! ';
$this->assertEquals('Foo!', StringUtil::trim($data));
}
/**
* @dataProvider spaceProvider
*/
public function testTrimUtf8Separators($hex)
{
// Convert hexadecimal representation into binary
// H: hex string, high nibble first (UCS-2BE)
// *: repeat until end of string
$binary = pack('H*', $hex);
// Convert UCS-2BE to UTF-8
$symbol = mb_convert_encoding($binary, 'UTF-8', 'UCS-2BE');
$symbol = $symbol."ab\ncd".$symbol;
$this->assertSame("ab\ncd", StringUtil::trim($symbol));
}
public function spaceProvider()
{
return array(
// separators
array('0020'),
array('00A0'),
array('1680'),
// array('180E'),
array('2000'),
array('2001'),
array('2002'),
array('2003'),
array('2004'),
array('2005'),
array('2006'),
array('2007'),
array('2008'),
array('2009'),
array('200A'),
array('2028'),
array('2029'),
array('202F'),
array('205F'),
array('3000'),
// controls
array('0009'),
array('000A'),
array('000B'),
array('000C'),
array('000D'),
array('0085'),
// zero width space
// array('200B'),
);
}
/**
* @dataProvider fqcnToBlockPrefixProvider
*/
public function testFqcnToBlockPrefix($fqcn, $expectedBlockPrefix)
{
$blockPrefix = StringUtil::fqcnToBlockPrefix($fqcn);
$this->assertSame($expectedBlockPrefix, $blockPrefix);
}
public function fqcnToBlockPrefixProvider()
{
return array(
array('TYPE', 'type'),
array('\Type', 'type'),
array('\UserType', 'user'),
array('UserType', 'user'),
array('Vendor\Name\Space\Type', 'type'),
array('Vendor\Name\Space\UserForm', 'user_form'),
array('Vendor\Name\Space\UserType', 'user'),
array('Vendor\Name\Space\usertype', 'user'),
array('Symfony\Component\Form\Form', 'form'),
array('Vendor\Name\Space\BarTypeBazType', 'bar_type_baz'),
array('FooBarBazType', 'foo_bar_baz'),
);
}
}