private function parseConditionElement(DOMElement $conditionElement) { $operatorElements = $this->xpath->query(sprintf('*[namespace-uri() = "%s"]', self::XMLNS_LOADER), $conditionElement); $operators = array(); foreach ($operatorElements as $operatorElement) { $operatorParser = OperatorParserFactoryMethod::create($operatorElement->localName); $operators[] = $operatorParser->parse($operatorElement, $this->xpath); } switch (count($operators)) { case 0: return Boolean::true(); case 1: return $operators[0]; default: $and = new AndOp(); array_map(function ($operator) use($and) { $and->addOperand($operator); }, $operators); return $and; } }
/** @test */ public function codeWithSeveralOperands() { $this->and->addOperand($this->getNativeExpressionMock('EXPRESSION1'))->addOperand($this->getNativeExpressionMock('EXPRESSION2'))->addOperand($this->getNativeExpressionMock('EXPRESSION3'))->addOperand($this->getNativeExpressionMock('EXPRESSION2'))->addOperand($this->getNativeExpressionMock('EXPRESSION1')); $this->assertEquals('(EXPRESSION1 && EXPRESSION2 && EXPRESSION3)', $this->and->getNativeExpression()); }