modifs.mineures sans commentaires
This commit is contained in:
parent
e2bec38540
commit
7257654753
@ -3,6 +3,7 @@ namespace nur\sery\wip\php\access;
|
||||
|
||||
use ArrayAccess;
|
||||
use nulib\cl;
|
||||
use nulib\ref\schema\ref_schema;
|
||||
|
||||
/**
|
||||
* Class KeyAccess: accès
|
||||
@ -116,4 +117,34 @@ class KeyAccess extends AbstractAccess {
|
||||
"protect_dest" => $this->protectDest,
|
||||
]);
|
||||
}
|
||||
|
||||
function ensureAssoc(array $keys): void {
|
||||
$index = 0;
|
||||
$dest =& $this->dest;
|
||||
foreach ($keys as $key) {
|
||||
if ($dest !== null && array_key_exists($key, $dest)) continue;
|
||||
while (in_array($index, $keys, true)) {
|
||||
$index++;
|
||||
}
|
||||
if ($dest !== null && array_key_exists($index, $dest)) {
|
||||
$dest[$key] = $dest[$index];
|
||||
unset($dest[$index]);
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ensureKeys(array $defaults): void {
|
||||
$dest =& $this->dest;
|
||||
$keys = array_keys($defaults);
|
||||
foreach ($keys as $key) {
|
||||
if ($dest === null || !array_key_exists($key, $dest)) {
|
||||
$dest[$key] = $defaults[$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ensureOrder(array $keys): void {
|
||||
$dest =& $this->dest;
|
||||
}
|
||||
}
|
||||
|
@ -125,4 +125,69 @@ class KeyAccessTest extends TestCase {
|
||||
self::assertTrue($a->available());
|
||||
self::assertSame("", $a->get($default));
|
||||
}
|
||||
|
||||
private function _ensureAssoc(?array $orig, ?array $expected, array $keys) {
|
||||
$v = $orig; $a = new KeyAccess($v);
|
||||
$a->ensureAssoc($keys);
|
||||
self::assertSame($expected, $v);
|
||||
}
|
||||
function testEnsureAssoc() {
|
||||
$keys = ["a", "b", "c"];
|
||||
|
||||
$this->_ensureAssoc(null, null, $keys);
|
||||
$this->_ensureAssoc([], [], $keys);
|
||||
$this->_ensureAssoc([1], ["a" => 1], $keys);
|
||||
$this->_ensureAssoc([1, 2, 3], ["a" => 1, "b" => 2, "c" => 3], $keys);
|
||||
$this->_ensureAssoc([1, 2, 3, 4], [3 => 4, "a" => 1, "b" => 2, "c" => 3], $keys);
|
||||
$this->_ensureAssoc(["c" => 3, 1], ["c" => 3, "a" => 1], $keys);
|
||||
$this->_ensureAssoc(["c" => 3, "b" => 2, 1], ["c" => 3, "b" => 2, "a" => 1], $keys);
|
||||
$this->_ensureAssoc(["c" => 3, "b" => 2, "a" => 1], ["c" => 3, "b" => 2, "a" => 1], $keys);
|
||||
$this->_ensureAssoc(["a" => 1, 2], ["a" => 1, "b" => 2], $keys);
|
||||
$this->_ensureAssoc([2, "a" => 1], ["a" => 1, "b" => 2], $keys);
|
||||
|
||||
$keys = [0, "a", "b"];
|
||||
$this->_ensureAssoc([1], [1], $keys);
|
||||
$this->_ensureAssoc([1, 2], [1, "a" => 2], $keys);
|
||||
}
|
||||
|
||||
private function _ensureKeys(?array $orig, ?array $expected, array $defaults) {
|
||||
$v = $orig; $a = new KeyAccess($v);
|
||||
$a->ensureKeys($defaults);
|
||||
self::assertSame($expected, $v);
|
||||
}
|
||||
function testEnsureKeys() {
|
||||
$defaults = ["a" => false, "b" => false, "c" => false];
|
||||
|
||||
$this->_ensureKeys(null, ["a" => false, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureKeys([], ["a" => false, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureKeys(["a" => 1], ["a" => 1, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureKeys(["a" => 1, "b" => 2, "c" => 3], ["a" => 1, "b" => 2, "c" => 3], $defaults);
|
||||
$this->_ensureKeys(["x"], ["x", "a" => false, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureKeys(["x", "a" => 1], ["x", "a" => 1, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureKeys(["a" => 1, "x"], ["a" => 1, "x", "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureKeys(["a" => 1, "b" => 2, "c" => 3, "x"], ["a" => 1, "b" => 2, "c" => 3, "x"], $defaults);
|
||||
}
|
||||
|
||||
private function _ensureAssocKeysOrder(?array $orig, ?array $expected, array $defaults) {
|
||||
$v = $orig; $a = new KeyAccess($v);
|
||||
$keys = array_keys($defaults);
|
||||
$a->ensureAssoc($keys);
|
||||
$a->ensureKeys($defaults);
|
||||
$a->ensureOrder($keys);
|
||||
self::assertSame($expected, $v);
|
||||
}
|
||||
function testEnsureAssocKeysOrder() {
|
||||
$defaults = ["a" => false, "b" => false, "c" => false];
|
||||
|
||||
$this->_ensureAssocKeysOrder(null, ["a" => false, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureAssocKeysOrder([], ["a" => false, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureAssocKeysOrder([1], ["a" => 1, "b" => false, "c" => false], $defaults);
|
||||
$this->_ensureAssocKeysOrder([1, 2, 3], ["a" => 1, "b" => 2, "c" => 3], $defaults);
|
||||
$this->_ensureAssocKeysOrder([1, 2, 3, 4], [3 => 4, "a" => 1, "b" => 2, "c" => 3], $defaults);
|
||||
$this->_ensureAssocKeysOrder(["c" => 3, 1], ["c" => 3, "a" => 1, "b" => false], $defaults);
|
||||
$this->_ensureAssocKeysOrder(["c" => 3, "b" => 2, 1], ["c" => 3, "b" => 2, "a" => 1], $defaults);
|
||||
$this->_ensureAssocKeysOrder(["c" => 3, "b" => 2, "a" => 1], ["c" => 3, "b" => 2, "a" => 1], $defaults);
|
||||
$this->_ensureAssocKeysOrder(["a" => 1, 2], ["a" => 1, "b" => 2, "c" => false], $defaults);
|
||||
$this->_ensureAssocKeysOrder([2, "a" => 1], ["a" => 1, "b" => 2, "c" => false], $defaults);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user