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
|
<?php
// phpcs:disable
declare(strict_types=1);
namespace Ramsey\Collection\Test\types;
use Ramsey\Collection\Map\AssociativeArrayMap;
use Ramsey\Collection\Map\NamedParameterMap;
use Ramsey\Collection\Map\TypedMap;
use Ramsey\Collection\Test\Mock\Person;
use function PHPStan\Testing\assertType;
$associativeArray = new AssociativeArrayMap([
'foo' => 1,
'bar' => 'something',
'baz' => false,
'qux' => 23.3,
]);
assertType('Ramsey\Collection\Map\AssociativeArrayMap', $associativeArray);
assertType('mixed', $associativeArray['foo']);
assertType('mixed', $associativeArray['bar']);
assertType('mixed', $associativeArray['baz']);
assertType('mixed', $associativeArray['qux']);
assertType('mixed', $associativeArray->offsetGet('foo'));
assertType('array<string, mixed>', $associativeArray->toArray());
assertType('array<string, mixed>', $associativeArray->__serialize());
assertType('Traversable<string, mixed>', $associativeArray->getIterator());
/** @psalm-suppress MixedAssignment */
foreach ($associativeArray as $key => $value) {
assertType('string', $key);
assertType('mixed', $value);
}
assertType('array<int, string>', $associativeArray->keys());
assertType('mixed', $associativeArray->get('foo'));
assertType('mixed', $associativeArray->put('foo', 'hello'));
assertType('mixed', $associativeArray->putIfAbsent('foo', 'hello'));
assertType('mixed', $associativeArray->remove('foo'));
assertType('mixed', $associativeArray->replace('foo', 'hello'));
$namedParameterMap = new NamedParameterMap(
[
'foo' => 'string',
'bar' => Person::class,
],
[
'foo' => 'hello',
'bar' => new Person('Jamie'),
],
);
assertType('Ramsey\Collection\Map\NamedParameterMap', $namedParameterMap);
assertType('mixed', $namedParameterMap['foo']);
assertType('mixed', $namedParameterMap['bar']);
assertType('mixed', $namedParameterMap->offsetGet('foo'));
assertType('array<string, mixed>', $namedParameterMap->toArray());
assertType('array<string, mixed>', $namedParameterMap->__serialize());
assertType('Traversable<string, mixed>', $namedParameterMap->getIterator());
/** @psalm-suppress MixedAssignment */
foreach ($namedParameterMap as $key => $value) {
assertType('string', $key);
assertType('mixed', $value);
}
assertType('array<int, string>', $namedParameterMap->keys());
assertType('mixed', $namedParameterMap->get('foo'));
assertType('mixed', $namedParameterMap->put('foo', 'goodbye'));
assertType('mixed', $namedParameterMap->putIfAbsent('foo', 'goodbye'));
assertType('mixed', $namedParameterMap->remove('foo'));
assertType('mixed', $namedParameterMap->replace('foo', 'goodbye'));
assertType('array<string, string>', $namedParameterMap->getNamedParameters());
$typedMap = new TypedMap('int', Person::class, [
123 => new Person('Jason'),
456 => new Person('Jackie'),
]);
assertType('Ramsey\Collection\Map\TypedMap<int, Ramsey\Collection\Test\Mock\Person>', $typedMap);
assertType(Person::class, $typedMap[123]);
assertType(Person::class, $typedMap[456]);
assertType(Person::class, $typedMap->offsetGet(123));
assertType('array<int, Ramsey\Collection\Test\Mock\Person>', $typedMap->toArray());
assertType('array<int, Ramsey\Collection\Test\Mock\Person>', $typedMap->__serialize());
assertType('Traversable<int, Ramsey\Collection\Test\Mock\Person>', $typedMap->getIterator());
foreach ($typedMap as $key => $value) {
assertType('int', $key);
assertType(Person::class, $value);
}
assertType('array<int, int>', $typedMap->keys());
assertType(Person::class . '|null', $typedMap->get(123));
assertType(Person::class . '|null', $typedMap->put(123, new Person('Jeffrey')));
assertType(Person::class . '|null', $typedMap->putIfAbsent(123, new Person('Jeffrey')));
assertType(Person::class . '|null', $typedMap->remove(123));
assertType(Person::class . '|null', $typedMap->replace(123, new Person('Jeffrey')));
|