Media: improve the human_readable_duration function and tests.

Improve the `human_readable_duration` added in #39667:
* Remove upper limit.
* More resilient handling: remove negative prefix, trim.
* Correct @since to 5.1.0.
* Adds more test cases and improve inline docs.

Props birgire.
Fixes #39667.


git-svn-id: https://develop.svn.wordpress.org/trunk@44481 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Adam Silverstein
2019-01-08 19:55:31 +00:00
parent 559056f62f
commit f968e9d52f
2 changed files with 98 additions and 45 deletions

View File

@@ -1579,22 +1579,60 @@ class Tests_Functions extends WP_UnitTestCase {
}
/**
* Test the human_readable_duration function.
* Test human_readable_duration().
*
* @ticket 39667
* @dataProvider _datahuman_readable_duration()
* @dataProvider data_test_human_readable_duration
*
* @param $input
* @param $expected
* @param string $input Duration.
* @param string $expected Expected human readable duration.
*/
public function test_duration_format( $input, $expected ) {
public function test_human_readable_duration( $input, $expected ) {
$this->assertSame( $expected, human_readable_duration( $input ) );
}
public function _datahuman_readable_duration() {
/**
* Dataprovider for test_duration_format().
*
* @return array {
* @type array {
* @type string $input Duration.
* @type string $expect Expected human readable duration.
* }
* }
*/
public function data_test_human_readable_duration() {
return array(
array( array(), false ),
// Valid ii:ss cases.
array( '0:0', '0 minutes, 0 seconds' ),
array( '00:00', '0 minutes, 0 seconds' ),
array( '0:5', '0 minutes, 5 seconds' ),
array( '0:05', '0 minutes, 5 seconds' ),
array( '01:01', '1 minute, 1 second' ),
array( '30:00', '30 minutes, 0 seconds' ),
array( ' 30:00 ', '30 minutes, 0 seconds' ),
// Valid HH:ii:ss cases.
array( '0:0:0', '0 hours, 0 minutes, 0 seconds' ),
array( '00:00:00', '0 hours, 0 minutes, 0 seconds' ),
array( '00:30:34', '0 hours, 30 minutes, 34 seconds' ),
array( '01:01:01', '1 hour, 1 minute, 1 second' ),
array( '1:02:00', '1 hour, 2 minutes, 0 seconds' ),
array( '10:30:34', '10 hours, 30 minutes, 34 seconds' ),
array( '1234567890:59:59', '1234567890 hours, 59 minutes, 59 seconds' ),
// Valid ii:ss cases with negative sign.
array( '-00:00', '0 minutes, 0 seconds' ),
array( '-3:00', '3 minutes, 0 seconds' ),
array( '-03:00', '3 minutes, 0 seconds' ),
array( '-30:00', '30 minutes, 0 seconds' ),
// Valid HH:ii:ss cases with negative sign.
array( '-00:00:00', '0 hours, 0 minutes, 0 seconds' ),
array( '-1:02:00', '1 hour, 2 minutes, 0 seconds' ),
// Invalid cases.
array( null, false ),
array( '', false ),
array( ':', false ),
array( '::', false ),
array( array(), false ),
array( 'Batman Begins !', false ),
array( '', false ),
array( '-1', false ),
@@ -1602,18 +1640,19 @@ class Tests_Functions extends WP_UnitTestCase {
array( 0, false ),
array( 1, false ),
array( '00', false ),
array( '00:00', '0 minutes, 0 seconds' ),
array( '00:00:00', '0 hours, 0 minutes, 0 seconds' ),
array( '10:30:34', '10 hours, 30 minutes, 34 seconds' ),
array( '00:30:34', '0 hours, 30 minutes, 34 seconds' ),
array( 'MM:30:00', false ),
array( '30:MM', false ),
array( 'MM:00', false ),
array( 'MM:MM', false ),
array( '01:01', '1 minute, 1 second' ),
array( '01:01:01', '1 hour, 1 minute, 1 second' ),
array( '0:05', '5 seconds' ),
array( '1:02:00', '1 hour, 2 minutes, 0 seconds' ),
array( '30:-10', false ),
array( ':30:00', false ), // Missing HH.
array( 'MM:30:00', false ), // Invalid HH.
array( '30:MM:00', false ), // Invalid ii.
array( '30:30:MM', false ), // Invalid ss.
array( '30:MM', false ), // Invalid ss.
array( 'MM:00', false ), // Invalid ii.
array( 'MM:MM', false ), // Invalid ii and ss.
array( '10 :30', false ), // Containing a space.
array( '59:61', false ), // Out of bound.
array( '61:59', false ), // Out of bound.
array( '3:59:61', false ), // Out of bound.
array( '03:61:59', false ), // Out of bound.
);
}
}