Skip to content

Commit f255552

Browse files
committed
improved code, testing
1 parent 7d556ff commit f255552

File tree

4 files changed

+847
-2
lines changed

4 files changed

+847
-2
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
"friendsofphp/php-cs-fixer": "^2.0",
4141
"nyholm/psr7": "^1.2",
4242
"oscarotero/php-cs-fixer-config": "^1.0",
43-
"brick/varexporter": "^0.3.1"
43+
"brick/varexporter": "^0.3.1",
44+
"symfony/css-selector": "^5.0"
4445
},
4546
"autoload": {
4647
"psr-4": {

src/Document.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ public function __clone()
4545

4646
public function remove(string $query): void
4747
{
48-
foreach ($this->select($query)->nodes() as $node) {
48+
$nodes = iterator_to_array($this->xpath->query($query), false);
49+
50+
foreach ($nodes as $node) {
4951
$node->parentNode->removeChild($node);
5052
}
5153
}

tests/DocumentTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Embed\Tests;
5+
6+
use Embed\Embed;
7+
use Embed\Http\Crawler;
8+
use PHPUnit\Framework\TestCase;
9+
10+
class DocumentTest extends TestCase
11+
{
12+
private static Embed $embed;
13+
14+
private static function getEmbed(): Embed
15+
{
16+
if (isset(self::$embed)) {
17+
return self::$embed;
18+
}
19+
20+
$dispatcher = new FileClient(__DIR__.'/cache');
21+
$dispatcher->setMode(0);
22+
23+
return self::$embed = new Embed(new Crawler($dispatcher));
24+
}
25+
26+
public function testSelectors()
27+
{
28+
$extractor = self::getEmbed()->get('http://www.wired.com/?p=2064839');
29+
$document = $extractor->getDocument();
30+
31+
$expected = 23;
32+
33+
$this->assertCount($expected, $document->select('.//p')->nodes());
34+
$this->assertCount($expected, $document->selectCss('p')->nodes());
35+
36+
$document->remove('.//p');
37+
38+
$this->assertCount(0, $document->select('.//p')->nodes());
39+
$this->assertCount(0, $document->selectCss('p')->nodes());
40+
}
41+
42+
public function testMultipleSelectors()
43+
{
44+
$extractor = self::getEmbed()->get('https://css-tricks.com/css-scrollbar-with-progress-meter/');
45+
$document = $extractor->getDocument();
46+
47+
$expected = 118;
48+
49+
$this->assertCount($expected, $document->selectCss('[aria-hidden],[hidden],meta,style,canvas,svg,form,script,template,link,.hidden')->nodes());
50+
$this->assertCount($expected, $document->select('.//*[@aria-hidden]|.//*[@hidden]|.//meta|.//style|.//canvas|.//svg|.//form|.//script|.//template|.//link|.//*[contains(concat(" ",normalize-space(@class)," ")," hidden ")]')->nodes());
51+
52+
$document->removeCss('[aria-hidden],[hidden],meta,style,canvas,svg,form,script,template,link,.hidden');
53+
54+
$this->assertCount(0, $document->selectCss('[aria-hidden],[hidden],meta,style,canvas,svg,form,script,template,link,.hidden')->nodes());
55+
$this->assertCount(0, $document->select('.//*[@aria-hidden]|.//*[@hidden]|.//meta|.//style|.//canvas|.//svg|.//form|.//script|.//template|.//link|.//*[contains(concat(" ",normalize-space(@class)," ")," hidden ")]')->nodes());
56+
}
57+
}

0 commit comments

Comments
 (0)