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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user