public function testGeneratedStructureWithElse() { $regex = REBuilder\REBuilder::parse("/a(?(?=a)a|b)+/"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(2, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[0]); $this->assertSame("a", $children[0]->getChar()); $this->assertInstanceOf("REBuilder\\Pattern\\ConditionalSubPattern", $children[1]); $this->assertInstanceOf("REBuilder\\Pattern\\Repetition\\OneOrMore", $children[1]->getRepetition()); $children = $children[1]->getChildren(); $this->assertSame(3, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Assertion", $children[0]); $this->assertSame(true, $children[0]->getLookahead()); $this->assertSame(false, $children[0]->getNegate()); $assertionChildren = $children[0]->getChildren(); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $assertionChildren[0]); $this->assertSame("a", $assertionChildren[0]->getChar()); $this->assertInstanceOf("REBuilder\\Pattern\\ConditionalThen", $children[1]); $thenChildren = $children[1]->getChildren(); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $thenChildren[0]); $this->assertSame("a", $thenChildren[0]->getChar()); $this->assertInstanceOf("REBuilder\\Pattern\\ConditionalElse", $children[2]); $elseChildren = $children[2]->getChildren(); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $elseChildren[0]); $this->assertSame("b", $elseChildren[0]->getChar()); $this->assertSame("/a(?(?=a)a|b)+/", $regex->render()); }
public function testGeneratedStructure() { $regex = REBuilder\REBuilder::parse("/\\a/i"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\NonPrintingChar", $children[0]); $this->assertSame("a", $children[0]->getIdentifier()); }
public function testCharEscaped() { $regex = REBuilder\REBuilder::parse("/\\*/i"); $children = $regex->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[0]); $this->assertSame("*", $children[0]->getChar()); $this->assertSame("/\\*/i", $regex->render()); }
public function testGeneratedStructureLazy() { $regex = REBuilder\REBuilder::parse("/a+?/"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Repetition\\OneOrMore", $children[0]->getRepetition()); $this->assertSame(true, $children[0]->getRepetition()->getLazy()); }
public function testInvalidNumberNotParsedAsRepetition() { $regex = REBuilder\REBuilder::parse("/a{1,/"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[0]); $this->assertSame("a{1,", $children[0]->getChar()); }
public function testGeneratedStructure() { $regex = REBuilder\REBuilder::parse("/\\C*/i"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Byte", $children[0]); $this->assertInstanceOf("REBuilder\\Pattern\\Repetition\\ZeroOrMore", $children[0]->getRepetition()); $this->assertSame("/\\C*/i", $regex->render()); }
public function testEscapedChar() { $regex = REBuilder\REBuilder::parse("/\\c\\+/i"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\ControlChar", $children[0]); $this->assertSame("+", $children[0]->getChar()); $this->assertSame(null, $children[0]->getRepetition()); $this->assertSame("/\\c\\+/i", $regex->render()); }
public function testOctalCharFollowedByNumber() { $regex = REBuilder\REBuilder::parse('/\\0111/'); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(2, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\OctalChar", $children[0]); $this->assertSame("011", $children[0]->getChar()); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[1]); $this->assertSame("1", $children[1]->getChar()); $this->assertSame('/\\0111/', $regex->render()); }
public function testGeneratedStructure() { $regex = REBuilder\REBuilder::parse("/\\d\\w\\s/i"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(3, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\GenericCharType", $children[0]); $this->assertSame("d", $children[0]->getIdentifier()); $this->assertInstanceOf("REBuilder\\Pattern\\GenericCharType", $children[1]); $this->assertSame("w", $children[1]->getIdentifier()); $this->assertInstanceOf("REBuilder\\Pattern\\GenericCharType", $children[2]); $this->assertSame("s", $children[2]->getIdentifier()); $this->assertSame("/\\d\\w\\s/i", $regex->render()); }
public function testLookbehindAssertion() { $regex = REBuilder\REBuilder::parse("/(?<=(?<!a)b)c/"); $this->assertInstanceOf("REBuilder\\Pattern\\Regex", $regex); $children = $regex->getChildren(); $this->assertSame(2, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[1]); $this->assertSame("c", $children[1]->getChar()); $this->assertInstanceOf("REBuilder\\Pattern\\Assertion", $children[0]); $this->assertSame(false, $children[0]->getLookahead()); $this->assertSame(false, $children[0]->getNegate()); $children = $children[0]->getChildren(); $this->assertSame(2, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[1]); $this->assertSame("b", $children[1]->getChar()); $this->assertInstanceOf("REBuilder\\Pattern\\Assertion", $children[0]); $this->assertSame(false, $children[0]->getLookahead()); $this->assertSame(true, $children[0]->getNegate()); $children = $children[0]->getChildren(); $this->assertSame(1, count($children)); $this->assertInstanceOf("REBuilder\\Pattern\\Char", $children[0]); $this->assertSame("a", $children[0]->getChar()); $this->assertSame("/(?<=(?<!a)b)c/", $regex->render()); }
/** * @dataProvider invalidRepetitions * @expectedException REBuilder\Exception\InvalidRepetition */ public function testInvalidRepetition($pattern) { REBuilder\REBuilder::parse("/{$pattern}/"); }
/** * @dataProvider invalidBackReferences * @expectedException REBuilder\Exception\Generic */ public function testInvalidReferenceException($pattern) { REBuilder\REBuilder::parse("/{$pattern}/"); }
/** * @expectedException REBuilder\Exception\InvalidRepetition */ public function testRepetitionNotAllowedOnParse() { REBuilder\REBuilder::parse("/\\b*/i"); }
/** * @expectedException REBuilder\Exception\EmptyRegex */ public function testEmptyRegexException() { REBuilder\REBuilder::parse(""); }
/** * @dataProvider invalidRecursivePatterns * @expectedException REBuilder\Exception\Generic */ public function testInvalidRecursivePatterns($pattern) { REBuilder\REBuilder::parse("/{$pattern}/"); }
/** * @expectedException REBuilder\Exception\Generic */ public function testInvalidAlternativeSyntax() { REBuilder\REBuilder::parse('/\\x{61/'); }
/** * @expectedException REBuilder\Exception\Generic */ public function testUnclosedCommentException() { REBuilder\REBuilder::parse("/a(?#test/"); }
/** * @dataProvider invalidRegexProvider * @expectedException REBuilder\Exception\Generic */ public function testInvalidRegexException($invalid) { REBuilder\REBuilder::parse("/{$invalid}/"); }
/** * @expectedException REBuilder\Exception\Generic */ public function testUnclosedCharClass() { REBuilder\REBuilder::parse("/[a/"); }
/** * @expectedException REBuilder\Exception\InvalidRepetition */ public function testNotSupportsReptetitionOnParse() { REBuilder\REBuilder::parse("/a|*/"); }
/** * @expectedException REBuilder\Exception\InvalidRepetition */ public function testInvalidRepetition() { REBuilder\REBuilder::parse("/(*)/"); }
/** * @expectedException REBuilder\Exception\Generic */ public function testWrongPosixCharClass() { REBuilder\REBuilder::parse("/[[:wrong:]]/"); }