(yield check($node->indexOf($thirdChild) === 1, 'Third child not moved to 1')); }, 'insertAfter' => function () { $node = new Node('parent'); $node->append($firstChild = new Node('child-1')); $node->append($secondChild = new Node('child-2')); $node->insertAfter($firstChild, $thirdChild = new Node('child-3')); $notAChild = new Node('not-a-child'); (yield check(count($node->children) === 3, 'Child count not 3')); (yield check($node->indexOf($thirdChild) === 1, 'Third child not 1')); (yield check($node->indexOf($secondChild) === 2, 'Second child not 2')); }, 'insertBefore' => function () { $node = new Node('parent'); $node->append($firstChild = new Node('child-1')); $node->append($secondChild = new Node('child-2')); $node->insertBefore($secondChild, $thirdChild = new Node('child-3')); $notAChild = new Node('not-a-child'); (yield check(count($node->children) === 3, 'Child count not 3')); (yield check($node->indexOf($thirdChild) === 1, 'Third child not 1')); (yield check($node->indexOf($secondChild) === 2, 'Second child not 2')); }]; echo '<h1>Testing node functionality</h1>'; ob_start(); foreach ($tests as $name => $test) { echo '<h2>Testing ' . $name . ':</h2><br>'; foreach ($test() as $result) { echo "{$result}<br>"; } } $results = ob_get_clean(); echo "<h2>Tests: {$testCount}, Passes: {$passes}, Fails: {$fails}</h2><br>"; echo $results;