. /** * Unit tests for the url class. * * @package tool_moodlenet * @category test * @copyright 2020 Jake Dallimore * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace tool_moodlenet\local\tests; use tool_moodlenet\local\url; defined('MOODLE_INTERNAL') || die(); /** * Class tool_moodlenet_url_testcase, providing test cases for the url class. */ class tool_moodlenet_url_testcase extends \advanced_testcase { /** * Test the parsing to host + path components. * * @dataProvider url_provider * @param string $urlstring The full URL string * @param string $host the expected host component of the URL. * @param string $path the expected path component of the URL. * @param bool $exception whether or not an exception is expected during construction. */ public function test_parsing($urlstring, $host, $path, $exception) { if ($exception) { $this->expectException(\coding_exception::class); $url = new url($urlstring); return; } $url = new url($urlstring); $this->assertEquals($urlstring, $url->get_value()); $this->assertEquals($host, $url->get_host()); $this->assertEquals($path, $url->get_path()); } /** * Data provider. * * @return array */ public function url_provider() { return [ 'No path' => [ 'url' => 'https://example.moodle.net', 'host' => 'example.moodle.net', 'path' => null, 'exception' => false, ], 'Slash path' => [ 'url' => 'https://example.moodle.net/', 'host' => 'example.moodle.net', 'path' => '/', 'exception' => false, ], 'Path includes file and extension' => [ 'url' => 'https://example.moodle.net/uploads/123456789/pic.png', 'host' => 'example.moodle.net', 'path' => '/uploads/123456789/pic.png', 'exception' => false, ], 'Path includes file, extension and params' => [ 'url' => 'https://example.moodle.net/uploads/123456789/pic.png?option=1&option2=test', 'host' => 'example.moodle.net', 'path' => '/uploads/123456789/pic.png', 'exception' => false, ], 'Malformed - invalid' => [ 'url' => 'invalid', 'host' => null, 'path' => null, 'exception' => true, ], 'Direct, non-encoded utf8 - invalid' => [ 'url' => 'http://москва.рф/services/', 'host' => 'москва.рф', 'path' => '/services/', 'exception' => true, ], ]; } }