/** @test */ public function registeredOperatorParser() { $operatorParserMock = $this->getMockBuilder('Superruzafa\\Rules\\Loader\\Xml\\OperatorParser')->setMethods(array('getElementName'))->getMockForAbstractClass(); $operatorParserMock->expects($this->exactly(2))->method('getElementName')->will($this->returnValue('JARL')); OperatorParserFactoryMethod::registerParser($operatorParserMock); $this->assertSame($operatorParserMock, OperatorParserFactoryMethod::create('JARL')); OperatorParserFactoryMethod::unregisterParser($operatorParserMock); }
/** * Parses the operands defined in an XML element and adds them to an operator * * @param Operator $operator * @param \DOMElement $operatorElement * @param \DOMXPath $xpath * @return Operator */ protected function parseOperands(Operator $operator, \DOMElement $operatorElement, \DOMXPath $xpath) { foreach ($operatorElement->attributes as $attribute) { $operator->addOperand(Primitive::create($attribute->nodeValue)); } $nodes = $xpath->query(sprintf('*[namespace-uri() = "%s"]', XmlLoader::XMLNS_LOADER), $operatorElement); foreach ($nodes as $node) { $parser = OperatorParserFactoryMethod::create($node->localName); $operator->addOperand($parser->parse($node, $xpath)); } return $operator; }
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; } }