summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-04-04 16:21:50 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2014-04-04 16:21:50 +0200
commitccf1287fbf8baa083c7c043b0ed0df054ecaf9c1 (patch)
tree3994c0b9ced2b48191c4d15735bd18c65cfe598c
parentf029312e5b20a540aa94f2ead4581a8b653b1c5c (diff)
downloadnextcloud-server-ccf1287fbf8baa083c7c043b0ed0df054ecaf9c1.tar.gz
nextcloud-server-ccf1287fbf8baa083c7c043b0ed0df054ecaf9c1.zip
adding unit test for cache mechanism
-rwxr-xr-xlib/private/preview.php98
-rw-r--r--tests/lib/preview.php136
2 files changed, 145 insertions, 89 deletions
diff --git a/lib/private/preview.php b/lib/private/preview.php
index 0fecb25341b..995cfc3f6dc 100755
--- a/lib/private/preview.php
+++ b/lib/private/preview.php
@@ -41,8 +41,8 @@ class Preview {
private $file;
private $maxX;
private $maxY;
- private $scalingup;
- private $mimetype;
+ private $scalingUp;
+ private $mimeType;
//filemapper used for deleting previews
// index is path, value is fileinfo
@@ -137,7 +137,7 @@ class Preview {
* @return bool
*/
public function getScalingUp() {
- return $this->scalingup;
+ return $this->scalingUp;
}
/**
@@ -194,18 +194,18 @@ class Preview {
if ($file !== '') {
$this->getFileInfo();
if($this->info !== null && $this->info !== false) {
- $this->mimetype = $this->info->getMimetype();
+ $this->mimeType = $this->info->getMimetype();
}
}
return $this;
}
/**
- * @brief set mimetype explicitly
- * @param string $mimetype
+ * @brief set mime type explicitly
+ * @param string $mimeType
*/
- public function setMimetype($mimetype) {
- $this->mimetype = $mimetype;
+ public function setMimetype($mimeType) {
+ $this->mimeType = $mimeType;
}
/**
@@ -257,7 +257,7 @@ class Preview {
if ($this->getMaxScaleFactor() === 1) {
$scalingUp = false;
}
- $this->scalingup = $scalingUp;
+ $this->scalingUp = $scalingUp;
return $this;
}
@@ -320,7 +320,7 @@ class Preview {
* @param int $fileId fileId of the original image
* @return string|false path to thumbnail if it exists or false
*/
- private function isCached($fileId) {
+ public function isCached($fileId) {
if (is_null($fileId)) {
return false;
}
@@ -406,7 +406,7 @@ class Preview {
$x = (int) $size[0];
$y = (int) $size[1];
$aspectRatio = (float) ($x / $y);
- return array('x' => $x,'y' => $y,'aspectRatio' => $aspectRatio);
+ return array($x, $y, $aspectRatio);
}
private function unscalable($x, $y) {
@@ -464,8 +464,8 @@ class Preview {
if (is_null($this->preview)) {
$preview = null;
- foreach (self::$providers as $supportedMimetype => $provider) {
- if (!preg_match($supportedMimetype, $this->mimetype)) {
+ foreach (self::$providers as $supportedMimeType => $provider) {
+ if (!preg_match($supportedMimeType, $this->mimeType)) {
continue;
}
@@ -534,7 +534,7 @@ class Preview {
$x = $this->getMaxX();
$y = $this->getMaxY();
$scalingUp = $this->getScalingUp();
- $maxscalefactor = $this->getMaxScaleFactor();
+ $maxScaleFactor = $this->getMaxScaleFactor();
if (!($image instanceof \OC_Image)) {
\OC_Log::write('core', '$this->preview is not an instance of OC_Image', \OC_Log::DEBUG);
@@ -543,16 +543,16 @@ class Preview {
$image->fixOrientation();
- $realx = (int)$image->width();
- $realy = (int)$image->height();
+ $realX = (int)$image->width();
+ $realY = (int)$image->height();
- if ($x === $realx && $y === $realy) {
+ if ($x === $realX && $y === $realY) {
$this->preview = $image;
return;
}
- $factorX = $x / $realx;
- $factorY = $y / $realy;
+ $factorX = $x / $realX;
+ $factorY = $y / $realY;
if ($factorX >= $factorY) {
$factor = $factorX;
@@ -566,25 +566,25 @@ class Preview {
}
}
- if (!is_null($maxscalefactor)) {
- if ($factor > $maxscalefactor) {
- \OC_Log::write('core', 'scalefactor reduced from ' . $factor . ' to ' . $maxscalefactor, \OC_Log::DEBUG);
- $factor = $maxscalefactor;
+ if (!is_null($maxScaleFactor)) {
+ if ($factor > $maxScaleFactor) {
+ \OC_Log::write('core', 'scale factor reduced from ' . $factor . ' to ' . $maxScaleFactor, \OC_Log::DEBUG);
+ $factor = $maxScaleFactor;
}
}
- $newXsize = (int)($realx * $factor);
- $newYsize = (int)($realy * $factor);
+ $newXSize = (int)($realX * $factor);
+ $newYSize = (int)($realY * $factor);
- $image->preciseResize($newXsize, $newYsize);
+ $image->preciseResize($newXSize, $newYSize);
- if ($newXsize === $x && $newYsize === $y) {
+ if ($newXSize === $x && $newYSize === $y) {
$this->preview = $image;
return;
}
- if ($newXsize >= $x && $newYsize >= $y) {
- $cropX = floor(abs($x - $newXsize) * 0.5);
+ if ($newXSize >= $x && $newYSize >= $y) {
+ $cropX = floor(abs($x - $newXSize) * 0.5);
//don't crop previews on the Y axis, this sucks if it's a document.
//$cropY = floor(abs($y - $newYsize) * 0.5);
$cropY = 0;
@@ -595,36 +595,36 @@ class Preview {
return;
}
- if ($newXsize < $x || $newYsize < $y) {
- if ($newXsize > $x) {
- $cropX = floor(($newXsize - $x) * 0.5);
- $image->crop($cropX, 0, $x, $newYsize);
+ if ($newXSize < $x || $newYSize < $y) {
+ if ($newXSize > $x) {
+ $cropX = floor(($newXSize - $x) * 0.5);
+ $image->crop($cropX, 0, $x, $newYSize);
}
- if ($newYsize > $y) {
- $cropY = floor(($newYsize - $y) * 0.5);
- $image->crop(0, $cropY, $newXsize, $y);
+ if ($newYSize > $y) {
+ $cropY = floor(($newYSize - $y) * 0.5);
+ $image->crop(0, $cropY, $newXSize, $y);
}
- $newXsize = (int)$image->width();
- $newYsize = (int)$image->height();
+ $newXSize = (int)$image->width();
+ $newYSize = (int)$image->height();
//create transparent background layer
- $backgroundlayer = imagecreatetruecolor($x, $y);
- $white = imagecolorallocate($backgroundlayer, 255, 255, 255);
- imagefill($backgroundlayer, 0, 0, $white);
+ $backgroundLayer = imagecreatetruecolor($x, $y);
+ $white = imagecolorallocate($backgroundLayer, 255, 255, 255);
+ imagefill($backgroundLayer, 0, 0, $white);
$image = $image->resource();
- $mergeX = floor(abs($x - $newXsize) * 0.5);
- $mergeY = floor(abs($y - $newYsize) * 0.5);
+ $mergeX = floor(abs($x - $newXSize) * 0.5);
+ $mergeY = floor(abs($y - $newYSize) * 0.5);
- imagecopy($backgroundlayer, $image, $mergeX, $mergeY, 0, 0, $newXsize, $newYsize);
+ imagecopy($backgroundLayer, $image, $mergeX, $mergeY, 0, 0, $newXSize, $newYSize);
//$black = imagecolorallocate(0,0,0);
//imagecolortransparent($transparentlayer, $black);
- $image = new \OC_Image($backgroundlayer);
+ $image = new \OC_Image($backgroundLayer);
$this->preview = $image;
return;
@@ -706,9 +706,9 @@ class Preview {
}
/**
- * @param string $mimetype
+ * @param string $mimeType
*/
- public static function isMimeSupported($mimetype) {
+ public static function isMimeSupported($mimeType) {
if (!\OC_Config::getValue('enable_previews', true)) {
return false;
}
@@ -720,8 +720,8 @@ class Preview {
//remove last element because it has the mimetype *
$providers = array_slice(self::$providers, 0, -1);
- foreach ($providers as $supportedMimetype => $provider) {
- if (preg_match($supportedMimetype, $mimetype)) {
+ foreach ($providers as $supportedMimeType => $provider) {
+ if (preg_match($supportedMimeType, $mimeType)) {
return true;
}
}
diff --git a/tests/lib/preview.php b/tests/lib/preview.php
index fb1c959b45a..4ef61fb8257 100644
--- a/tests/lib/preview.php
+++ b/tests/lib/preview.php
@@ -10,66 +10,73 @@ namespace Test;
class Preview extends \PHPUnit_Framework_TestCase {
- public function testIsPreviewDeleted() {
- $user = $this->initFS();
+ /**
+ * @var string
+ */
+ private $user;
- $rootView = new \OC\Files\View('');
- $rootView->mkdir('/'.$user);
- $rootView->mkdir('/'.$user.'/files');
+ /**
+ * @var \OC\Files\View
+ */
+ private $rootView;
- $sampleFile = '/'.$user.'/files/test.txt';
+ public function setUp() {
+ $this->user = $this->initFS();
- $rootView->file_put_contents($sampleFile, 'dummy file data');
+ $this->rootView = new \OC\Files\View('');
+ $this->rootView->mkdir('/'.$this->user);
+ $this->rootView->mkdir('/'.$this->user.'/files');
+ }
+
+ public function testIsPreviewDeleted() {
+
+ $sampleFile = '/'.$this->user.'/files/test.txt';
+
+ $this->rootView->file_put_contents($sampleFile, 'dummy file data');
$x = 50;
$y = 50;
- $preview = new \OC\Preview($user, 'files/', 'test.txt', $x, $y);
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', $x, $y);
$preview->getPreview();
- $fileInfo = $rootView->getFileInfo($sampleFile);
+ $fileInfo = $this->rootView->getFileInfo($sampleFile);
$fileId = $fileInfo['fileid'];
- $thumbCacheFile = '/' . $user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/' . $x . '-' . $y . '.png';
+ $thumbCacheFile = '/' . $this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/' . $x . '-' . $y . '.png';
- $this->assertEquals($rootView->file_exists($thumbCacheFile), true);
+ $this->assertEquals($this->rootView->file_exists($thumbCacheFile), true);
$preview->deletePreview();
- $this->assertEquals($rootView->file_exists($thumbCacheFile), false);
+ $this->assertEquals($this->rootView->file_exists($thumbCacheFile), false);
}
public function testAreAllPreviewsDeleted() {
- $user = $this->initFS();
-
- $rootView = new \OC\Files\View('');
- $rootView->mkdir('/'.$user);
- $rootView->mkdir('/'.$user.'/files');
- $sampleFile = '/'.$user.'/files/test.txt';
+ $sampleFile = '/'.$this->user.'/files/test.txt';
- $rootView->file_put_contents($sampleFile, 'dummy file data');
+ $this->rootView->file_put_contents($sampleFile, 'dummy file data');
$x = 50;
$y = 50;
- $preview = new \OC\Preview($user, 'files/', 'test.txt', $x, $y);
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', $x, $y);
$preview->getPreview();
- $fileInfo = $rootView->getFileInfo($sampleFile);
+ $fileInfo = $this->rootView->getFileInfo($sampleFile);
$fileId = $fileInfo['fileid'];
- $thumbCacheFolder = '/' . $user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/';
+ $thumbCacheFolder = '/' . $this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/';
- $this->assertEquals($rootView->is_dir($thumbCacheFolder), true);
+ $this->assertEquals($this->rootView->is_dir($thumbCacheFolder), true);
$preview->deleteAllPreviews();
- $this->assertEquals($rootView->is_dir($thumbCacheFolder), false);
+ $this->assertEquals($this->rootView->is_dir($thumbCacheFolder), false);
}
public function testIsMaxSizeWorking() {
- $user = $this->initFS();
$maxX = 250;
$maxY = 250;
@@ -77,15 +84,11 @@ class Preview extends \PHPUnit_Framework_TestCase {
\OC_Config::setValue('preview_max_x', $maxX);
\OC_Config::setValue('preview_max_y', $maxY);
- $rootView = new \OC\Files\View('');
- $rootView->mkdir('/'.$user);
- $rootView->mkdir('/'.$user.'/files');
+ $sampleFile = '/'.$this->user.'/files/test.txt';
- $sampleFile = '/'.$user.'/files/test.txt';
+ $this->rootView->file_put_contents($sampleFile, 'dummy file data');
- $rootView->file_put_contents($sampleFile, 'dummy file data');
-
- $preview = new \OC\Preview($user, 'files/', 'test.txt', 1000, 1000);
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', 1000, 1000);
$image = $preview->getPreview();
$this->assertEquals($image->width(), $maxX);
@@ -108,18 +111,13 @@ class Preview extends \PHPUnit_Framework_TestCase {
* @dataProvider txtBlacklist
*/
public function testIsTransparent($extension, $data, $expectedResult) {
- $user = $this->initFS();
-
- $rootView = new \OC\Files\View('');
- $rootView->mkdir('/'.$user);
- $rootView->mkdir('/'.$user.'/files');
$x = 32;
$y = 32;
- $sample = '/'.$user.'/files/test.'.$extension;
- $rootView->file_put_contents($sample, $data);
- $preview = new \OC\Preview($user, 'files/', 'test.'.$extension, $x, $y);
+ $sample = '/'.$this->user.'/files/test.'.$extension;
+ $this->rootView->file_put_contents($sample, $data);
+ $preview = new \OC\Preview($this->user, 'files/', 'test.'.$extension, $x, $y);
$image = $preview->getPreview();
$resource = $image->resource();
@@ -133,6 +131,64 @@ class Preview extends \PHPUnit_Framework_TestCase {
);
}
+ public function testCreationFromCached() {
+
+ $sampleFile = '/'.$this->user.'/files/test.txt';
+
+ $this->rootView->file_put_contents($sampleFile, 'dummy file data');
+
+ // create base preview
+ $x = 150;
+ $y = 150;
+
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', $x, $y);
+ $preview->getPreview();
+
+ $fileInfo = $this->rootView->getFileInfo($sampleFile);
+ $fileId = $fileInfo['fileid'];
+
+ $thumbCacheFile = '/' . $this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/' . $x . '-' . $y . '.png';
+
+ $this->assertEquals($this->rootView->file_exists($thumbCacheFile), true);
+
+
+ // create smaller previews
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', 50, 50);
+ $isCached = $preview->isCached($fileId);
+
+ $this->assertEquals($this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/150-150.png', $isCached);
+ }
+
+ /*
+ public function testScalingUp() {
+
+ $sampleFile = '/'.$this->user.'/files/test.txt';
+
+ $this->rootView->file_put_contents($sampleFile, 'dummy file data');
+
+ // create base preview
+ $x = 150;
+ $y = 150;
+
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', $x, $y);
+ $preview->getPreview();
+
+ $fileInfo = $this->rootView->getFileInfo($sampleFile);
+ $fileId = $fileInfo['fileid'];
+
+ $thumbCacheFile = '/' . $this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/' . $x . '-' . $y . '.png';
+
+ $this->assertEquals($this->rootView->file_exists($thumbCacheFile), true);
+
+
+ // create bigger previews - with scale up
+ $preview = new \OC\Preview($this->user, 'files/', 'test.txt', 250, 250);
+ $isCached = $preview->isCached($fileId);
+
+ $this->assertEquals($this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/150-150.png', $isCached);
+ }
+ */
+
private function initFS() {
// create a new user with his own filesystem view
// this gets called by each test in this test class