public function testTagElement() { $data = ["aaa", "bbbb"]; $li = TagNode::element('li', ['class' => 'le']); $ul = TagNode::element('ul', ['class' => 'fl']); $call = _Array::map($li)->implode('')->then($ul); $this->assertEquals($call($data), '<ul class="fl"><li class="le">aaa</li><li class="le">bbbb</li></ul>'); }
public function testMapNode() { $before = _Array::map(_String::ucfirst()); $this->assertInstanceOf(ArrayMap::class, $before); $this->assertInstanceOf(CollectionNodeInterface::class, $before); $this->assertInstanceOf(AbstractArray::class, $before); $this->assertInstanceOf(AbstractNode::class, $before); $this->assertEquals($before(['a.b'])[0], 'A.b'); }
public function testXNode() { $data = ['abc', 'qwert', 'xyz']; $fn = _Node::init(function ($data) { $map = _Array::map(function ($value) { return Tag::init('li')->inner($value); }); return Tag::init('ul')->inner($map($data)); }); $this->assertEquals('<ul><li>abc</li><li>qwert</li><li>xyz</li></ul>', $fn($data) . ''); }
abstract class AbstractArray extends AbstractNode implements CollectionNodeInterface { /** * @param callable $do * @return AbstractNode */ public function then(callable $do) { return new class($this, $do) extends AbstractArray implements ContainerTraitInterface { use ContainerTrait; }; } /** * @param callable $do * @return ArrayEach */ public function each(callable $do) { return new class($this, _Array::each($do)) extends ArrayEach implements ContainerTraitInterface { use ContainerTrait; }; } /** * @param callable $callable * @return ArrayMap */ public function map(callable $callable) { return new class($this, _Array::map($callable)) extends ArrayMap implements ContainerTraitInterface { use ContainerTrait; }; } /** * @param callable $callable * @return ArrayMap */ public function fold(callable $callable) { return new class($this, _Array::map($callable)) extends ArrayMap implements ContainerTraitInterface { use ContainerTrait; }; } /** * @param \callable[] ...$callable * @return ArraySort */ public function sort(callable ...$callable) { return new class($this, _Array::sort(...$callable)) extends ArraySort implements ContainerTraitInterface { use ContainerTrait; }; } /** * @return ArraySort */ public function merge() { return new class($this, _Array::merge()) extends ArrayMerge implements ContainerTraitInterface { use ContainerTrait; }; } /** * @return AbstractNode */ public function sum() { return new class($this, MathNode::sum()) extends AbstractNode implements ContainerTraitInterface { use ContainerTrait; }; } /** * @return ArraySort */ public function values() { return new class($this, _Array::values()) extends AbstractArray implements ContainerTraitInterface { use ContainerTrait; }; } /** * @param string $glue * @return AbstractNode */ public function implode(string $glue) { return $this->then(_Array::implode($glue)); } /** * @return IsEmptyFilter */ public function isEmpty() { return new class($this, _Filter::isEmpty()) extends IsEmptyFilter implements ContainerTraitInterface { use ContainerTrait; }; } /** * @return ContainsFilter */ public function contains($needle, $strict = null) { return new class($this, _Filter::contains($needle, $strict)) extends ContainsFilter implements ContainerTraitInterface { use ContainerTrait; }; } }