Add file size formatting

This commit is contained in:
Dennis Eichhorn 2020-09-12 22:12:33 +02:00
parent 7275e7b475
commit 80dee41e9e
2 changed files with 53 additions and 0 deletions

View File

@ -15,6 +15,7 @@ declare(strict_types=1);
namespace phpOMS\Utils\Converter;
use phpOMS\Stdlib\Base\Enum;
use phpOMS\Utils\Converter\Measurement;
/**
* File size type enum.
@ -45,4 +46,26 @@ abstract class FileSizeType extends Enum
public const KILOBIT = 'kbit';
public const BIT = 'bit';
/**
* Auto format file size in bytes
*
* @param float $size File size
*
* @return array
*
* @since 1.0.0
*/
public static function autoFormat(float $size) : array
{
if ($size < 300) {
return [$size, 'B'];
} elseif ($size < 1000) {
return [Measurement::convertFileSize($size, FileSizeType::BYTE, FileSizeType::KILOBYTE), 'KB'];
} elseif ($size < 1000 * 1000 * 1000) {
return [Measurement::convertFileSize($size, FileSizeType::BYTE, FileSizeType::MEGABYTE), 'MB'];
}
return [Measurement::convertFileSize($size, FileSizeType::BYTE, FileSizeType::GIGABYTE), 'GB'];
}
}

View File

@ -17,6 +17,8 @@ namespace phpOMS\tests\Utils\Converter;
use phpOMS\Utils\Converter\FileSizeType;
/**
* @testdox phpOMS\tests\Utils\Converter\FileSizeTypeTest: File size types
*
* @internal
*/
class FileSizeTypeTest extends \PHPUnit\Framework\TestCase
@ -56,4 +58,32 @@ class FileSizeTypeTest extends \PHPUnit\Framework\TestCase
self::assertEquals('kbit', FileSizeType::KILOBIT);
self::assertEquals('bit', FileSizeType::BIT);
}
/**
* @testdox File sizes can get automatically formatted according to their size
* @covers phpOMS\Utils\Converter\FileSizeType
* @group framework
*/
public function testAutoFormat() : void
{
self::assertEquals(
[250.0, 'B'],
FileSizeType::autoFormat(250)
);
self::assertEquals(
[0.5, 'KB'],
FileSizeType::autoFormat(500)
);
self::assertEquals(
[1.024, 'MB'],
FileSizeType::autoFormat(1024 * 1000)
);
self::assertEquals(
[1.024, 'GB'],
FileSizeType::autoFormat(1024 * 1000 * 1000)
);
}
}