summaryrefslogtreecommitdiffstats
path: root/tests/lib/Preview
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2016-05-20 15:38:20 +0200
committerThomas Müller <DeepDiver1975@users.noreply.github.com>2016-05-20 15:38:20 +0200
commit94ad54ec9b96d41a614fbbad4a97b34c41a6901f (patch)
treef3eb7cdda2704aaf0cd59d58efe66bcbd34cb67d /tests/lib/Preview
parent2ef751b1ec28f7b5c7113af60ec8c9fa0ae1cf87 (diff)
downloadnextcloud-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.php43
-rw-r--r--tests/lib/Preview/ImageTest.php43
-rw-r--r--tests/lib/Preview/MP3Test.php43
-rw-r--r--tests/lib/Preview/MovieTest.php53
-rw-r--r--tests/lib/Preview/OfficeTest.php50
-rw-r--r--tests/lib/Preview/Provider.php188
-rw-r--r--tests/lib/Preview/SVGTest.php48
-rw-r--r--tests/lib/Preview/TXTTest.php44
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;
+ }
+
+}