Added unit test in files app for sort function in helper class
Added unit test for the Helper class in the files app that tests the different sort orders.
This commit is contained in:
parent
c0e5975ab6
commit
af22e7ec95
|
@ -1,7 +1,16 @@
|
||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
namespace OCA\Files;
|
namespace OCA\Files;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class for manipulating file information
|
||||||
|
*/
|
||||||
class Helper
|
class Helper
|
||||||
{
|
{
|
||||||
public static function buildFileStorageStatistics($dir) {
|
public static function buildFileStorageStatistics($dir) {
|
||||||
|
@ -57,7 +66,7 @@ class Helper
|
||||||
* @param \OCP\Files\FileInfo $b file
|
* @param \OCP\Files\FileInfo $b file
|
||||||
* @return int -1 if $a must come before $b, 1 otherwise
|
* @return int -1 if $a must come before $b, 1 otherwise
|
||||||
*/
|
*/
|
||||||
public static function fileCmp($a, $b) {
|
public static function compareFileNames($a, $b) {
|
||||||
$aType = $a->getType();
|
$aType = $a->getType();
|
||||||
$bType = $b->getType();
|
$bType = $b->getType();
|
||||||
if ($aType === 'dir' and $bType !== 'dir') {
|
if ($aType === 'dir' and $bType !== 'dir') {
|
||||||
|
@ -76,7 +85,7 @@ class Helper
|
||||||
* @param \OCP\Files\FileInfo $b file
|
* @param \OCP\Files\FileInfo $b file
|
||||||
* @return int -1 if $a must come before $b, 1 otherwise
|
* @return int -1 if $a must come before $b, 1 otherwise
|
||||||
*/
|
*/
|
||||||
public static function mtimeCmp($a, $b) {
|
public static function compareTimestamp($a, $b) {
|
||||||
$aTime = $a->getMTime();
|
$aTime = $a->getMTime();
|
||||||
$bTime = $b->getMTime();
|
$bTime = $b->getMTime();
|
||||||
return $aTime - $bTime;
|
return $aTime - $bTime;
|
||||||
|
@ -89,7 +98,7 @@ class Helper
|
||||||
* @param \OCP\Files\FileInfo $b file
|
* @param \OCP\Files\FileInfo $b file
|
||||||
* @return int -1 if $a must come before $b, 1 otherwise
|
* @return int -1 if $a must come before $b, 1 otherwise
|
||||||
*/
|
*/
|
||||||
public static function sizeCmp($a, $b) {
|
public static function compareSize($a, $b) {
|
||||||
$aSize = $a->getSize();
|
$aSize = $a->getSize();
|
||||||
$bSize = $b->getSize();
|
$bSize = $b->getSize();
|
||||||
return $aSize - $bSize;
|
return $aSize - $bSize;
|
||||||
|
@ -165,11 +174,11 @@ class Helper
|
||||||
* @return \OCP\Files\FileInfo[] sorted files
|
* @return \OCP\Files\FileInfo[] sorted files
|
||||||
*/
|
*/
|
||||||
public static function sortFiles($files, $sortAttribute = 'name', $sortDescending = false) {
|
public static function sortFiles($files, $sortAttribute = 'name', $sortDescending = false) {
|
||||||
$sortFunc = 'fileCmp';
|
$sortFunc = 'compareFileNames';
|
||||||
if ($sortAttribute === 'mtime') {
|
if ($sortAttribute === 'mtime') {
|
||||||
$sortFunc = 'mtimeCmp';
|
$sortFunc = 'compareTimestamp';
|
||||||
} else if ($sortAttribute === 'size') {
|
} else if ($sortAttribute === 'size') {
|
||||||
$sortFunc = 'sizeCmp';
|
$sortFunc = 'compareSize';
|
||||||
}
|
}
|
||||||
usort($files, array('\OCA\Files\Helper', $sortFunc));
|
usort($files, array('\OCA\Files\Helper', $sortFunc));
|
||||||
if ($sortDescending) {
|
if ($sortDescending) {
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../lib/helper.php';
|
||||||
|
|
||||||
|
use OCA\Files;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Test_Files_Helper
|
||||||
|
*/
|
||||||
|
class Test_Files_Helper extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
|
private function makeFileInfo($name, $size, $mtime, $isDir = false) {
|
||||||
|
return new \OC\Files\FileInfo(
|
||||||
|
'/',
|
||||||
|
null,
|
||||||
|
'/',
|
||||||
|
array(
|
||||||
|
'name' => $name,
|
||||||
|
'size' => $size,
|
||||||
|
'mtime' => $mtime,
|
||||||
|
'type' => $isDir ? 'dir' : 'file',
|
||||||
|
'mimetype' => $isDir ? 'httpd/unix-directory' : 'application/octet-stream'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a file list for testing
|
||||||
|
*/
|
||||||
|
private function getTestFileList() {
|
||||||
|
return array(
|
||||||
|
self::makeFileInfo('a.txt', 4, 1000),
|
||||||
|
self::makeFileInfo('q.txt', 5, 150),
|
||||||
|
self::makeFileInfo('subdir2', 87, 128, true),
|
||||||
|
self::makeFileInfo('b.txt', 166, 800),
|
||||||
|
self::makeFileInfo('o.txt', 12, 100),
|
||||||
|
self::makeFileInfo('subdir', 88, 125, true),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortDataProvider() {
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
'name',
|
||||||
|
false,
|
||||||
|
array('subdir', 'subdir2', 'a.txt', 'b.txt', 'o.txt', 'q.txt'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name',
|
||||||
|
true,
|
||||||
|
array('q.txt', 'o.txt', 'b.txt', 'a.txt', 'subdir2', 'subdir'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'size',
|
||||||
|
false,
|
||||||
|
array('a.txt', 'q.txt', 'o.txt', 'subdir2', 'subdir', 'b.txt'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'size',
|
||||||
|
true,
|
||||||
|
array('b.txt', 'subdir', 'subdir2', 'o.txt', 'q.txt', 'a.txt'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'mtime',
|
||||||
|
false,
|
||||||
|
array('o.txt', 'subdir', 'subdir2', 'q.txt', 'b.txt', 'a.txt'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'mtime',
|
||||||
|
true,
|
||||||
|
array('a.txt', 'b.txt', 'q.txt', 'subdir2', 'subdir', 'o.txt'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider sortDataProvider
|
||||||
|
*/
|
||||||
|
public function testSortByName($sort, $sortDescending, $expectedOrder) {
|
||||||
|
$files = self::getTestFileList();
|
||||||
|
$files = \OCA\Files\Helper::sortFiles($files, $sort, $sortDescending);
|
||||||
|
$fileNames = array();
|
||||||
|
foreach ($files as $fileInfo) {
|
||||||
|
$fileNames[] = $fileInfo->getName();
|
||||||
|
}
|
||||||
|
$this->assertEquals(
|
||||||
|
$expectedOrder,
|
||||||
|
$fileNames
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue