public static function assertSelectEquals($selector, $content, $count, $actual, $message = '', $isHtml = true)
{
if ($message === '') {
$message = $selector . ' did not match: ' . $actual;
}
$crawler = new Crawler();
if ($actual instanceof \DOMDocument) {
$crawler->addDocument($actual);
} elseif ($isHtml) {
$crawler->addHtmlContent($actual);
} else {
$crawler->addXmlContent($actual);
}
$crawler = $crawler->filter($selector);
if (is_string($content)) {
$crawler = $crawler->reduce(function (Crawler $node, $i) use($content) {
if ($content === '') {
return $node->text() === '';
}
if (preg_match('/^regexp\\s*:\\s*(.*)/i', $content, $matches)) {
return (bool) preg_match($matches[1], $node->text());
}
return strstr($node->text(), $content) !== false;
});
}
$found = count($crawler);
if (is_numeric($count)) {
self::assertEquals($count, $found, $message);
} elseif (is_bool($count)) {
$found = $found > 0;
if ($count) {
self::assertTrue($found, $message);
} else {
self::assertFalse($found, $message);
}
} elseif (is_array($count) && (isset($count['>']) || isset($count['<']) || isset($count['>=']) || isset($count['<=']))) {
if (isset($count['>'])) {
self::assertTrue($found > $count['>'], $message);
}
if (isset($count['>='])) {
self::assertTrue($found >= $count['>='], $message);
}
if (isset($count['<'])) {
self::assertTrue($found < $count['<'], $message);
}
if (isset($count['<='])) {
self::assertTrue($found <= $count['<='], $message);
}
} else {
throw new \PHPUnit_Framework_Exception('Invalid count format');
}
}