public function testOrChain() { $or = new OrSpec($this->generator, $this->generator); $this->assertEquals($or->generate(), "(1 || 1)"); $or->add($this->generator); $this->assertEquals($or->generate(), "(1 || 1 || 1)"); }
protected function parseObj($obj) { if (!is_array($obj)) { return null; } $v = current($obj); $k = key($obj); $specs = []; if (is_array($v)) { foreach ($v as $item) { $ret = $this->parseObj($item); if ($ret) { $specs[] = $ret; } } } switch ($k) { case 'and': $andSpec = new AndSpec(); $andSpec->addMany($specs); return $andSpec; case 'or': $orSpec = new OrSpec(); $orSpec->addMany($specs); return $orSpec; case 'not': return new NotSpec($this->parseObj($v)); case 'lang': case 'e': case 'exp': return new ExpressionSpec($v); break; default: throw new UnknownSpec("Unknown spec: {$k}"); } }