diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..b4ebf9d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,37 @@ +language: php + +dist: xenial + +group: edge + +addons: + apt: + packages: + - language-pack-cs + +php: + - '7.0' + - '7.1' + - nightly + +matrix: + + allow_failures: + - php: nightly + +install: + - composer self-update + - | + if [[ "${TRAVIS_PHP_VERSION:0:7}" == "nightly" ]]; then + composer install --ignore-platform-reqs + else + composer install + fi + +script: + bin/phpunit tests --exclude-group=integration + +notifications: + email: + on_success: change + on_failure: always diff --git a/Jyxo/Beholder/Output/TextOutput.php b/Jyxo/Beholder/Output/TextOutput.php index 2342fda..4ecde5c 100644 --- a/Jyxo/Beholder/Output/TextOutput.php +++ b/Jyxo/Beholder/Output/TextOutput.php @@ -47,7 +47,7 @@ public function __toString(): string $return .= sprintf("%-9s %10s %-10s %-7s %-35s %s\n", 'Run Order', 'Duration', 'Ident', 'Status', 'Test Name', 'Description'); - foreach ($this->testsData as $data) { + foreach ($this->result->getTestsData() as $data) { $return .= sprintf("%9d %9.2fs %-10s %-7s %-35s %s\n", $data['order'], $data['duration'], diff --git a/Jyxo/Html.php b/Jyxo/Html.php index 8c41e41..7b622cd 100644 --- a/Jyxo/Html.php +++ b/Jyxo/Html.php @@ -80,6 +80,11 @@ public static function repair(string $html): string // 'drop-proprietary-attributes' => true, // Removes proprietary attributes (it would remove e.g. the background attribute) // 'drop-font-tags' => true // Removes and
tags ]; + + if (!function_exists('\tidy_repair_string')) { + throw new \Jyxo\Exception('Missing "tidy" extension.'); + } + $html = tidy_repair_string($html, $config, 'utf8'); // Removes namespace generated by MS Word diff --git a/composer.json b/composer.json index b87c234..a81f41f 100644 --- a/composer.json +++ b/composer.json @@ -21,11 +21,15 @@ "ext-curl": "To use Jyxo\\Rpc client/server or Jyxo\\Webdav client", "ext-json": "To use Jyxo\\Rpc\\Json client/server or Jyxo\\FirePHP logger", "ext-xmlrpc": "To use Jyxo\\Rpc\\Xml client/server", - "ext-imap": "To use Jyxo\\Mail\\Parser" + "ext-imap": "To use Jyxo\\Mail\\Parser", + "ext-tidy": "To use Jyxo\\Html extended capabilities" }, "autoload": { "psr-4": { "Jyxo\\": ["Jyxo/"] } }, + "autoload-dev": { + "psr-4": { "Jyxo\\": ["tests/Jyxo"] } + }, "config": { "bin-dir": "bin", "optimize-autoloader": true, diff --git a/tests/Jyxo/Beholder/TestCase/MemcachedTest.php b/tests/Jyxo/Beholder/TestCase/MemcachedTest.php index 78296cc..74d28f3 100644 --- a/tests/Jyxo/Beholder/TestCase/MemcachedTest.php +++ b/tests/Jyxo/Beholder/TestCase/MemcachedTest.php @@ -36,18 +36,14 @@ public function setUp() */ public function testConnectionFailure() { - if (!class_exists('Memcached')) { - $this->markTestSkipped('Memcached not set'); - } - $ip = '127.0.0.1'; - $port = '12345'; + $port = 12345; $test = new Memcached('Memcached', $ip, $port); // @ on purpose $result = @$test->run(); $this->assertEquals(\Jyxo\Beholder\Result::FAILURE, $result->getStatus()); - $this->assertEquals(sprintf('Connection error %s:%s', gethostbyaddr($ip), $port), $result->getDescription()); + $this->assertEquals(sprintf('Write error %s:%s', gethostbyaddr($ip), $port), $result->getDescription()); } /** diff --git a/tests/Jyxo/CharsetTest.php b/tests/Jyxo/CharsetTest.php index 61fa22e..2dbba0c 100644 --- a/tests/Jyxo/CharsetTest.php +++ b/tests/Jyxo/CharsetTest.php @@ -62,7 +62,7 @@ public function testFixUtf() $this->assertEquals('žluťoučký kůň pěl ďábelské ódy', Charset::fixUtf('žluťoučký kůň pěl ďábelské ódy')); $this->assertEquals('Государственный гимн Российской Федерации', Charset::fixUtf('Государственный гимн Российской Федерации')); - $this->assertEquals('', Charset::fixUtf(file_get_contents(DIR_FILES . '/charset/cp1250.txt'))); - $this->assertEquals('', Charset::fixUtf(file_get_contents(DIR_FILES . '/charset/iso-8859-2.txt'))); + $this->assertEquals('luouk k pern pl belsk dy', Charset::fixUtf(file_get_contents(DIR_FILES . '/charset/cp1250.txt'))); + $this->assertEquals('luouk k pern pl belsk dy', Charset::fixUtf(file_get_contents(DIR_FILES . '/charset/iso-8859-2.txt'))); } } diff --git a/tests/Jyxo/HtmlTest.php b/tests/Jyxo/HtmlTest.php index 5245552..c678a58 100644 --- a/tests/Jyxo/HtmlTest.php +++ b/tests/Jyxo/HtmlTest.php @@ -71,6 +71,10 @@ public function testIs() */ public function testRepair() { + if (!function_exists('\tidy_repair_string')) { + $this->markTestSkipped('Skipping, missing "tidy" extension.'); + } + $this->assertStringEqualsFile( $this->filePath . '/repair-expected.html', Html::repair(file_get_contents($this->filePath . '/repair.html')) diff --git a/tests/Jyxo/Mail/EmailTestHelpers.php b/tests/Jyxo/Mail/EmailTestHelpers.php new file mode 100644 index 0000000..e797c94 --- /dev/null +++ b/tests/Jyxo/Mail/EmailTestHelpers.php @@ -0,0 +1,43 @@ +setSubject('Novinky září 2009 ... a kreslící soutěž') + ->setFrom(new Email\Address('blog-noreply@blog.cz', 'Blog.cz')) + ->addTo(new Email\Address('test@blog.cz', 'Test Test')) + ->setBody(new Email\Body(\Jyxo\Html::toText($this->content))); + + return $email; + } + + /** + * Compares the actual and expected result. + * + * @param string $file FileAttachment with the expected result + * @param \Jyxo\Mail\Sender\Result $result + */ + private function assertResult(string $file, \Jyxo\Mail\Sender\Result $result) + { + $expected = file_get_contents($this->filePath . '/' . $file); + + // Replacing some headers that are created dynamically + $expected = preg_replace('~====b1[a-z0-9]{32}====~', '====b1' . substr($result->messageId, 0, 32) . '====', $expected); + $expected = preg_replace('~====b2[a-z0-9]{32}====~', '====b2' . substr($result->messageId, 0, 32) . '====', $expected); + $expected = preg_replace("~Date: [^\n]+~", 'Date: ' . $result->datetime->email, $expected); + $expected = preg_replace('~Message-ID: <[^>]+>~', 'Message-ID: <' . $result->messageId . '>', $expected); + + $this->assertEquals($expected, $result->source, sprintf('Failed test for file %s.', $file)); + } + +} diff --git a/tests/Jyxo/Mail/SenderIntegrationTest.php b/tests/Jyxo/Mail/SenderIntegrationTest.php new file mode 100644 index 0000000..63d0953 --- /dev/null +++ b/tests/Jyxo/Mail/SenderIntegrationTest.php @@ -0,0 +1,84 @@ +filePath = DIR_FILES . '/mail'; + $this->content = file_get_contents($this->filePath . '/email.html'); + } + + /** + * Tests sending using the mail() function. + */ + public function testSendMail() + { + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $this->markTestSkipped('Skipped on Windows'); + } + + $sender = new Sender(); + $sender->setEmail($this->getEmail()); + $result = $sender->send(Sender::MODE_MAIL); + $this->assertResult('sender-type-simple-text.eml', $result); + } + + /** + * Tests sending using a SMTP server. + */ + public function testSendSmtp() + { + // Skips the test if no smtp connection is set + if (empty($GLOBALS['smtp'])) { + $this->markTestSkipped('Smtp host not set'); + } + + $sender = new Sender(); + $sender->setEmail($this->getEmail()) + ->setSmtp($GLOBALS['smtp']); + $result = $sender->send(Sender::MODE_SMTP); + $this->assertResult('sender-type-simple-text.eml', $result); + } + +} diff --git a/tests/Jyxo/Mail/SenderTest.php b/tests/Jyxo/Mail/SenderTest.php index 478d4f3..c530608 100644 --- a/tests/Jyxo/Mail/SenderTest.php +++ b/tests/Jyxo/Mail/SenderTest.php @@ -23,6 +23,8 @@ */ class SenderTest extends \PHPUnit_Framework_TestCase { + use EmailTestHelpers; + /** * FileAttachment path. * @@ -46,38 +48,6 @@ protected function setUp() $this->content = file_get_contents($this->filePath . '/email.html'); } - /** - * Tests sending using the mail() function. - */ - public function testSendMail() - { - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $this->markTestSkipped('Skipped on Windows'); - } - - $sender = new Sender(); - $sender->setEmail($this->getEmail()); - $result = $sender->send(Sender::MODE_MAIL); - $this->assertResult('sender-type-simple-text.eml', $result); - } - - /** - * Tests sending using a SMTP server. - */ - public function testSendSmtp() - { - // Skips the test if no smtp connection is set - if (empty($GLOBALS['smtp'])) { - $this->markTestSkipped('Smtp host not set'); - } - - $sender = new Sender(); - $sender->setEmail($this->getEmail()) - ->setSmtp($GLOBALS['smtp']); - $result = $sender->send(Sender::MODE_SMTP); - $this->assertResult('sender-type-simple-text.eml', $result); - } - /** * Tests possible sending errors. */ diff --git a/tests/Jyxo/Time/TimeTest.php b/tests/Jyxo/Time/TimeTest.php index 5a91a1f..6129f78 100644 --- a/tests/Jyxo/Time/TimeTest.php +++ b/tests/Jyxo/Time/TimeTest.php @@ -176,7 +176,7 @@ public function testMagicGet() $this->assertEquals('2009-10-10T00:00:00+0700', $time->sql); $this->assertEquals('Sat, 10 Oct 09 00:00:00 +0700', $time->email); $this->assertEquals('2009-10-10T00:00:00+07:00', $time->web); - $this->assertEquals('Saturday, 10-Oct-2009 00:00:00 GMT-7', $time->cookie); + $this->assertEquals('Saturday, 10-Oct-2009 00:00:00 +07', $time->cookie); $this->assertEquals('Sat, 10 Oct 2009 00:00:00 +0700', $time->rss); $this->assertEquals('1255107600', $time->unix); $this->assertEquals('Fri, 09 Oct 2009 17:00:00 GMT', $time->http); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 68255a9..9a142c7 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -11,23 +11,9 @@ * https://github.com/jyxo/php/blob/master/license.txt */ -// Because of SessionTest -session_start(); +require __DIR__ . '/../vendor/autoload.php'; -// Autoload -spl_autoload_register(function($className) { - if (strpos($className, 'Jyxo') !== 0) { - return; - } - - $file = str_replace('\\', '/', $className) . '.php'; - foreach ([realpath(__DIR__ . '/..'), __DIR__] as $dir) { - $filePath = $dir . '/' . $file; - if (false !== stream_resolve_include_path($filePath)) { - require_once $filePath; - } - } -}); +date_default_timezone_set('Europe/Prague'); // File path define('DIR_FILES', __DIR__ . '/files');