diff options
author | Joas Schilling <nickvergessen@gmx.de> | 2016-05-20 15:38:20 +0200 |
---|---|---|
committer | Thomas Müller <DeepDiver1975@users.noreply.github.com> | 2016-05-20 15:38:20 +0200 |
commit | 94ad54ec9b96d41a614fbbad4a97b34c41a6901f (patch) | |
tree | f3eb7cdda2704aaf0cd59d58efe66bcbd34cb67d /tests/lib/Preview | |
parent | 2ef751b1ec28f7b5c7113af60ec8c9fa0ae1cf87 (diff) | |
download | nextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.tar.gz nextcloud-server-94ad54ec9b96d41a614fbbad4a97b34c41a6901f.zip |
Move tests/ to PSR-4 (#24731)
* Move a-b to PSR-4
* Move c-d to PSR-4
* Move e+g to PSR-4
* Move h-l to PSR-4
* Move m-r to PSR-4
* Move s-u to PSR-4
* Move files/ to PSR-4
* Move remaining tests to PSR-4
* Remove Test\ from old autoloader
Diffstat (limited to 'tests/lib/Preview')
-rw-r--r-- | tests/lib/Preview/BitmapTest.php | 43 | ||||
-rw-r--r-- | tests/lib/Preview/ImageTest.php | 43 | ||||
-rw-r--r-- | tests/lib/Preview/MP3Test.php | 43 | ||||
-rw-r--r-- | tests/lib/Preview/MovieTest.php | 53 | ||||
-rw-r--r-- | tests/lib/Preview/OfficeTest.php | 50 | ||||
-rw-r--r-- | tests/lib/Preview/Provider.php | 188 | ||||
-rw-r--r-- | tests/lib/Preview/SVGTest.php | 48 | ||||
-rw-r--r-- | tests/lib/Preview/TXTTest.php | 44 |
8 files changed, 512 insertions, 0 deletions
diff --git a/tests/lib/Preview/BitmapTest.php b/tests/lib/Preview/BitmapTest.php new file mode 100644 index 00000000000..32d6ce896e4 --- /dev/null +++ b/tests/lib/Preview/BitmapTest.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class BitmapTest + * + * @group DB + * + * @package Test\Preview + */ +class BitmapTest extends Provider { + + public function setUp() { + parent::setUp(); + + $fileName = 'testimage.eps'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + $this->width = 2400; + $this->height = 1707; + $this->provider = new \OC\Preview\Postscript; + } + +} diff --git a/tests/lib/Preview/ImageTest.php b/tests/lib/Preview/ImageTest.php new file mode 100644 index 00000000000..a55433a2682 --- /dev/null +++ b/tests/lib/Preview/ImageTest.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class ImageTest + * + * @group DB + * + * @package Test\Preview + */ +class ImageTest extends Provider { + + public function setUp() { + parent::setUp(); + + $fileName = 'testimage.jpg'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + $this->width = 1680; + $this->height = 1050; + $this->provider = new \OC\Preview\JPEG(); + } + +} diff --git a/tests/lib/Preview/MP3Test.php b/tests/lib/Preview/MP3Test.php new file mode 100644 index 00000000000..576eea20b8b --- /dev/null +++ b/tests/lib/Preview/MP3Test.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class MP3Test + * + * @group DB + * + * @package Test\Preview + */ +class MP3Test extends Provider { + + public function setUp() { + parent::setUp(); + + $fileName = 'testimage.mp3'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + $this->width = 200; + $this->height = 200; + $this->provider = new \OC\Preview\MP3; + } + +} diff --git a/tests/lib/Preview/MovieTest.php b/tests/lib/Preview/MovieTest.php new file mode 100644 index 00000000000..0c174a40ca6 --- /dev/null +++ b/tests/lib/Preview/MovieTest.php @@ -0,0 +1,53 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class MovieTest + * + * @group DB + * + * @package Test\Preview + */ +class MovieTest extends Provider { + + public function setUp() { + $avconvBinary = \OC_Helper::findBinaryPath('avconv'); + $ffmpegBinary = ($avconvBinary) ? null : \OC_Helper::findBinaryPath('ffmpeg'); + + if ($avconvBinary || $ffmpegBinary) { + parent::setUp(); + + \OC\Preview\Movie::$avconvBinary = $avconvBinary; + \OC\Preview\Movie::$ffmpegBinary = $ffmpegBinary; + + $fileName = 'testimage.mp4'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + $this->width = 560; + $this->height = 320; + $this->provider = new \OC\Preview\Movie; + } else { + $this->markTestSkipped('No Movie provider present'); + } + } + +} diff --git a/tests/lib/Preview/OfficeTest.php b/tests/lib/Preview/OfficeTest.php new file mode 100644 index 00000000000..15d66352c18 --- /dev/null +++ b/tests/lib/Preview/OfficeTest.php @@ -0,0 +1,50 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class OfficeTest + * + * @group DB + * + * @package Test\Preview + */ +class OfficeTest extends Provider { + + public function setUp() { + $libreofficeBinary = \OC_Helper::findBinaryPath('libreoffice'); + $openofficeBinary = ($libreofficeBinary) ? null : \OC_Helper::findBinaryPath('openoffice'); + + if ($libreofficeBinary || $openofficeBinary) { + parent::setUp(); + + $fileName = 'testimage.odt'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + $this->width = 595; + $this->height = 842; + $this->provider = new \OC\Preview\OpenDocument; + } else { + $this->markTestSkipped('No Office provider present'); + } + } + +} diff --git a/tests/lib/Preview/Provider.php b/tests/lib/Preview/Provider.php new file mode 100644 index 00000000000..5377f30df82 --- /dev/null +++ b/tests/lib/Preview/Provider.php @@ -0,0 +1,188 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +abstract class Provider extends \Test\TestCase { + + /** @var string */ + protected $imgPath; + /** @var int */ + protected $width; + /** @var int */ + protected $height; + /** @var \OC\Preview\Provider */ + protected $provider; + /** @var int */ + protected $maxWidth = 1024; + /** @var int */ + protected $maxHeight = 1024; + /** @var bool */ + protected $scalingUp = false; + /** @var int */ + protected $userId; + /** @var \OC\Files\View */ + protected $rootView; + /** @var \OC\Files\Storage\Storage */ + protected $storage; + + protected function setUp() { + parent::setUp(); + + $userManager = \OC::$server->getUserManager(); + $userManager->clearBackends(); + $backend = new \Test\Util\User\Dummy(); + $userManager->registerBackend($backend); + + $userId = $this->getUniqueID(); + $backend->createUser($userId, $userId); + $this->loginAsUser($userId); + + $this->storage = new \OC\Files\Storage\Temporary([]); + \OC\Files\Filesystem::mount($this->storage, [], '/' . $userId . '/'); + + $this->rootView = new \OC\Files\View(''); + $this->rootView->mkdir('/' . $userId); + $this->rootView->mkdir('/' . $userId . '/files'); + + $this->userId = $userId; + } + + protected function tearDown() { + $this->logout(); + + parent::tearDown(); + } + + public static function dimensionsDataProvider() { + return [ + [-rand(5, 100), -rand(5, 100)], + [rand(5, 100), rand(5, 100)], + [-rand(5, 100), rand(5, 100)], + [rand(5, 100), -rand(5, 100)], + ]; + } + + /** + * Launches all the tests we have + * + * @dataProvider dimensionsDataProvider + * @requires extension imagick + * + * @param int $widthAdjustment + * @param int $heightAdjustment + */ + public function testGetThumbnail($widthAdjustment, $heightAdjustment) { + $ratio = round($this->width / $this->height, 2); + $this->maxWidth = $this->width - $widthAdjustment; + $this->maxHeight = $this->height - $heightAdjustment; + + // Testing code + /*print_r("w $this->width "); + print_r("h $this->height "); + print_r("r $ratio ");*/ + + $preview = $this->getPreview($this->provider); + // The TXT provider uses the max dimensions to create its canvas, + // so the ratio will always be the one of the max dimension canvas + if (!$this->provider instanceof \OC\Preview\TXT) { + $this->doesRatioMatch($preview, $ratio); + } + $this->doesPreviewFit($preview); + } + + /** + * Adds the test file to the filesystem + * + * @param string $fileName name of the file to create + * @param string $fileContent path to file to use for test + * + * @return string + */ + protected function prepareTestFile($fileName, $fileContent) { + $imgData = file_get_contents($fileContent); + $imgPath = '/' . $this->userId . '/files/' . $fileName; + $this->rootView->file_put_contents($imgPath, $imgData); + + $scanner = $this->storage->getScanner(); + $scanner->scan(''); + + return $imgPath; + } + + /** + * Retrieves a max size thumbnail can be created + * + * @param \OC\Preview\Provider $provider + * + * @return bool|\OCP\IImage + */ + private function getPreview($provider) { + $preview = $provider->getThumbnail($this->imgPath, $this->maxWidth, $this->maxHeight, $this->scalingUp, $this->rootView); + + $this->assertNotEquals(false, $preview); + $this->assertEquals(true, $preview->valid()); + + return $preview; + } + + /** + * Checks if the preview ratio matches the original ratio + * + * @param \OCP\IImage $preview + * @param int $ratio + */ + private function doesRatioMatch($preview, $ratio) { + $previewRatio = round($preview->width() / $preview->height(), 2); + $this->assertEquals($ratio, $previewRatio); + } + + /** + * Tests if a max size preview of smaller dimensions can be created + * + * @param \OCP\IImage $preview + */ + private function doesPreviewFit($preview) { + $maxDimRatio = round($this->maxWidth / $this->maxHeight, 2); + $previewRatio = round($preview->width() / $preview->height(), 2); + + // Testing code + /*print_r("mw $this->maxWidth "); + print_r("mh $this->maxHeight "); + print_r("mr $maxDimRatio "); + $pw = $preview->width(); + $ph = $preview->height(); + print_r("pw $pw "); + print_r("ph $ph "); + print_r("pr $previewRatio ");*/ + + if ($maxDimRatio < $previewRatio) { + $this->assertLessThanOrEqual($this->maxWidth, $preview->width()); + $this->assertLessThan($this->maxHeight, $preview->height()); + } elseif ($maxDimRatio > $previewRatio) { + $this->assertLessThan($this->maxWidth, $preview->width()); + $this->assertLessThanOrEqual($this->maxHeight, $preview->height()); + } else { // Original had to be resized + $this->assertLessThanOrEqual($this->maxWidth, $preview->width()); + $this->assertLessThanOrEqual($this->maxHeight, $preview->height()); + } + } +} diff --git a/tests/lib/Preview/SVGTest.php b/tests/lib/Preview/SVGTest.php new file mode 100644 index 00000000000..39bf3f1dfc9 --- /dev/null +++ b/tests/lib/Preview/SVGTest.php @@ -0,0 +1,48 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class SVGTest + * + * @group DB + * + * @package Test\Preview + */ +class SVGTest extends Provider { + + public function setUp() { + $checkImagick = new \Imagick(); + if (count($checkImagick->queryFormats('SVG')) === 1) { + parent::setUp(); + + $fileName = 'testimagelarge.svg'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + $this->width = 3000; + $this->height = 2000; + $this->provider = new \OC\Preview\SVG; + } else { + $this->markTestSkipped('No SVG provider present'); + } + } + +} diff --git a/tests/lib/Preview/TXTTest.php b/tests/lib/Preview/TXTTest.php new file mode 100644 index 00000000000..dfa0b920e16 --- /dev/null +++ b/tests/lib/Preview/TXTTest.php @@ -0,0 +1,44 @@ +<?php +/** + * @author Olivier Paroz <owncloud@interfasys.ch> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Preview; + +/** + * Class TXTTest + * + * @group DB + * + * @package Test\Preview + */ +class TXTTest extends Provider { + + public function setUp() { + parent::setUp(); + + $fileName = 'lorem-big.txt'; + $this->imgPath = $this->prepareTestFile($fileName, \OC::$SERVERROOT . '/tests/data/' . $fileName); + // Arbitrary width and length which won't be used to calculate the ratio + $this->width = 500; + $this->height = 200; + $this->provider = new \OC\Preview\TXT; + } + +} |