+ /**
+ * Test the download callback with valid value
+ */
+ public function testCurlDownloadCallbackOk()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_ok');
+ $data = [
+ 'HTTP/1.1 200 OK',
+ 'Server: GitHub.com',
+ 'Date: Sat, 28 Oct 2017 12:01:33 GMT',
+ 'Content-Type: text/html; charset=utf-8',
+ 'Status: 200 OK',
+ 'end' => 'th=device-width"><title>Refactoring · GitHub</title><link rel="search" type="application/opensea',
+ '<title>ignored</title>',
+ ];
+ foreach ($data as $key => $line) {
+ $ignore = null;
+ $expected = $key !== 'end' ? strlen($line) : false;
+ $this->assertEquals($expected, $callback($ignore, $line));
+ if ($expected === false) {
+ break;
+ }
+ }
+ $this->assertEquals('utf-8', $charset);
+ $this->assertEquals('Refactoring · GitHub', $title);
+ }
+
+ /**
+ * Test the download callback with valid values and no charset
+ */
+ public function testCurlDownloadCallbackOkNoCharset()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_no_charset');
+ $data = [
+ 'HTTP/1.1 200 OK',
+ 'end' => 'th=device-width"><title>Refactoring · GitHub</title><link rel="search" type="application/opensea',
+ '<title>ignored</title>',
+ ];
+ foreach ($data as $key => $line) {
+ $ignore = null;
+ $this->assertEquals(strlen($line), $callback($ignore, $line));
+ }
+ $this->assertEmpty($charset);
+ $this->assertEquals('Refactoring · GitHub', $title);
+ }
+
+ /**
+ * Test the download callback with valid values and no charset
+ */
+ public function testCurlDownloadCallbackOkHtmlCharset()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_no_charset');
+ $data = [
+ 'HTTP/1.1 200 OK',
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',
+ 'end' => 'th=device-width"><title>Refactoring · GitHub</title><link rel="search" type="application/opensea',
+ '<title>ignored</title>',
+ ];
+ foreach ($data as $key => $line) {
+ $ignore = null;
+ $expected = $key !== 'end' ? strlen($line) : false;
+ $this->assertEquals($expected, $callback($ignore, $line));
+ if ($expected === false) {
+ break;
+ }
+ }
+ $this->assertEquals('utf-8', $charset);
+ $this->assertEquals('Refactoring · GitHub', $title);
+ }
+
+ /**
+ * Test the download callback with valid values and no title
+ */
+ public function testCurlDownloadCallbackOkNoTitle()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_ok');
+ $data = [
+ 'HTTP/1.1 200 OK',
+ 'end' => 'th=device-width">Refactoring · GitHub<link rel="search" type="application/opensea',
+ 'ignored',
+ ];
+ foreach ($data as $key => $line) {
+ $ignore = null;
+ $this->assertEquals(strlen($line), $callback($ignore, $line));
+ }
+ $this->assertEquals('utf-8', $charset);
+ $this->assertEmpty($title);
+ }
+
+ /**
+ * Test the download callback with an invalid content type.
+ */
+ public function testCurlDownloadCallbackInvalidContentType()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_ct_ko');
+ $ignore = null;
+ $this->assertFalse($callback($ignore, ''));
+ $this->assertEmpty($charset);
+ $this->assertEmpty($title);
+ }
+
+ /**
+ * Test the download callback with an invalid response code.
+ */
+ public function testCurlDownloadCallbackInvalidResponseCode()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_rc_ko');
+ $ignore = null;
+ $this->assertFalse($callback($ignore, ''));
+ $this->assertEmpty($charset);
+ $this->assertEmpty($title);
+ }
+
+ /**
+ * Test the download callback with an invalid content type and response code.
+ */
+ public function testCurlDownloadCallbackInvalidContentTypeAndResponseCode()
+ {
+ $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_rs_ct_ko');
+ $ignore = null;
+ $this->assertFalse($callback($ignore, ''));
+ $this->assertEmpty($charset);
+ $this->assertEmpty($title);
+ }
+