From 8042cfeb491a3401363dfec350b6a39449d90f07 Mon Sep 17 00:00:00 2001 From: webeweb Date: Tue, 27 Aug 2019 12:45:07 +0200 Subject: [PATCH] Update XMLTV: - rename into IO/Reader - add loadXML() --- doc/index.md | 4 +- src/IO/Reader.php | 73 ++++++++++++++++++++++ src/XMLTV.php | 39 ------------ tests/{XMLTVTest.php => IO/ReaderTest.php} | 40 +++++++++--- 4 files changed, 107 insertions(+), 49 deletions(-) create mode 100644 src/IO/Reader.php delete mode 100644 src/XMLTV.php rename tests/{XMLTVTest.php => IO/ReaderTest.php} (50%) diff --git a/doc/index.md b/doc/index.md index 591b2ef..4a2d0fe 100644 --- a/doc/index.md +++ b/doc/index.md @@ -1,11 +1,11 @@ DOCUMENTATION ============= -Parse an XML file: +Read an XML file: ```php /** @var Tv $tv */ -$tv = XMLTV::parseXML("/path/to/file.xml"); +$tv = Reader::readXML("/path/to/file.xml"); /** @var Channel $channel */ foreach($tv->getChannels() as $channel) { diff --git a/src/IO/Reader.php b/src/IO/Reader.php new file mode 100644 index 0000000..434e84f --- /dev/null +++ b/src/IO/Reader.php @@ -0,0 +1,73 @@ + + * @package WBW\Library\XMLTV\IO + */ +class Reader { + + /** + * Load an XML file. + * + * @param string $url The URL. + * @param string $filename The filename The filename. + * @param LoggerInterface|null $logger The logger. + * @return Tv Returns the TV. + * @throws Exception Throws an exception if an error occurs. + */ + public static function loadXML($url, $filename, LoggerInterface $logger = null) { + + $stream = fopen($filename, "w"); + + $client = new Client([ + "headers" => [ + "Accept" => "text/xml", + "User-Agent" => "webeweb/xmltv-library", + ], + "save_to" => $stream, + "synchronous" => true, + ]); + + $client->request("GET", $url); + + return static::readXML($filename, $logger); + } + + /** + * Read an XML file. + * + * @param string $filename The filename. + * @param LoggerInterface $logger The logger. + * @return Tv Returns the TV. + */ + public static function readXML($filename, LoggerInterface $logger = null) { + + $document = new DOMDocument(); + $document->load($filename); + + ParserHelper::setLogger($logger); + + return Parser::parseTv($document->documentElement); + } +} diff --git a/src/XMLTV.php b/src/XMLTV.php deleted file mode 100644 index b025088..0000000 --- a/src/XMLTV.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @package WBW\Library\XMLTV - */ -class XMLTV { - - /** - * Parses an XML file. - * - * @param string $filename The filename. - * @return Tv Returns the TV. - */ - public static function parseXML($filename) { - - $document = new DOMDocument(); - $document->load($filename); - - return Parser::parseTv($document->documentElement); - } -} diff --git a/tests/XMLTVTest.php b/tests/IO/ReaderTest.php similarity index 50% rename from tests/XMLTVTest.php rename to tests/IO/ReaderTest.php index 1443031..e1956ae 100644 --- a/tests/XMLTVTest.php +++ b/tests/IO/ReaderTest.php @@ -9,29 +9,53 @@ * file that was distributed with this source code. */ -namespace WBW\Library\XMLTV\Tests; +namespace WBW\Library\XMLTV\Tests\IO; +use Exception; +use Psr\Log\LoggerInterface; +use WBW\Library\XMLTV\IO\Reader; use WBW\Library\XMLTV\Model\Channel; use WBW\Library\XMLTV\Model\Programme; use WBW\Library\XMLTV\Model\Tv; -use WBW\Library\XMLTV\XMLTV; +use WBW\Library\XMLTV\Tests\AbstractTestCase; /** - * XMLTV test. + * Reader test. * * @author webeweb - * @package WBW\Library\XMLTV\Tests + * @package WBW\Library\XMLTV\Tests\IO */ -class XMLTVTest extends AbstractTestCase { +class ReaderTest extends AbstractTestCase { /** - * Tests tha parseXML() method. + * Tests the loadXML() method. * * @return void + * @throws Exception Throws an exception if an error occurs. */ - public function testParseXML() { + public function testLoadXML() { - $res = XMLTV::parseXML($this->filename); + // Set a Logger mock. + $logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); + + // Set an URL mock. + $url = "https://raw.githubusercontent.com/webeweb/xmltv-library/master/tests/Fixtures/xmltv.xml"; + + // Set a filename mock. + $filename = getcwd() . "/xmltv.xml"; + + $res = Reader::loadXML($url, $filename, $logger); + $this->assertInstanceOf(Tv::class, $res); + } + + /** + * Tests tha readXML() method. + * + * @return void + */ + public function testReadXML() { + + $res = Reader::readXML($this->filename); $this->assertInstanceOf(Tv::class, $res); $this->assertInstanceOf(Channel::class, $res->getChannels()[0]);