parser = new GuardianArticleParser; } public function test_implements_article_parser_interface(): void { $this->assertInstanceOf(ArticleParserInterface::class, $this->parser); } public function test_can_parse_guardian_url(): void { $this->assertTrue($this->parser->canParse('https://www.theguardian.com/world/2026/mar/08/some-article')); } public function test_can_parse_guardian_url_without_www(): void { $this->assertTrue($this->parser->canParse('https://theguardian.com/world/2026/mar/08/some-article')); } public function test_cannot_parse_non_guardian_url(): void { $this->assertFalse($this->parser->canParse('https://www.vrt.be/vrtnws/en/article')); $this->assertFalse($this->parser->canParse('https://www.belganewsagency.eu/article')); } public function test_get_source_name(): void { $this->assertEquals('The Guardian', $this->parser->getSourceName()); } public function test_extract_data_delegates_to_page_parser(): void { $html = '
Content
'; $data = $this->parser->extractData($html); $this->assertIsArray($data); $this->assertArrayHasKey('title', $data); $this->assertEquals('Test Title', $data['title']); } }