| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/repo/tests/phpunit/includes/Rdf/DateTimeValueCleanerTest.php |
<?php
namespace Wikibase\Test\Rdf;
use DataValues\TimeValue;
use Wikibase\Rdf\DateTimeValueCleaner;
use Wikibase\Rdf\JulianDateTimeValueCleaner;
/**
* @covers Wikibase\Rdf\DateTimeValueCleaner
* @covers Wikibase\Rdf\JulianDateTimeValueCleaner
*
* @group Wikibase
* @group WikibaseRepo
* @group WikibaseRdf
*
* @license GPL-2.0+
* @author Stas Malyshev
*/
class DateTimeValueCleanerTest extends \PHPUnit_Framework_TestCase {
public function getDates() {
return array(
// Gregorian
array( "+00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q1985727", "2014-01-05T12:34:56Z" ),
array( "+00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q1985727", "2014-01-01T12:34:56Z",
TimeValue::PRECISION_YEAR ),
array( "-00000000200-00-00T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "-0200-01-01T00:00:00Z" ),
array( "+00000000200-00-00T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "0200-01-01T00:00:00Z" ),
array( "+00000000200-00-00T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "0200-01-01T00:00:00Z",
TimeValue::PRECISION_YEAR ),
array( "+02000000200-00-00T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "2000000200-01-01T00:00:00Z" ),
array( "+92000000200-05-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "92000000200-01-01T00:00:00Z",
TimeValue::PRECISION_Ma ),
array( "+92000000200-05-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "92000000200-05-31T00:00:00Z" ),
array( "-02000000200-05-22T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "-2000000200-05-22T00:00:00Z" ),
array( "-02000000200-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "-2000000200-02-29T00:00:00Z" ),
array( "+00000000200-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "0200-02-28T00:00:00Z" ),
array( "+00000000204-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "0204-02-29T00:00:00Z" ),
array( "+00000002204-04-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "2204-04-30T00:00:00Z" ),
array( "+00000002204-04-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", "2204-04-01T00:00:00Z",
TimeValue::PRECISION_MONTH ),
array( "+00000000000-04-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", null ),
array( "-00000000000-04-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727", null ),
// Julian
array( "+00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q1985786", "2014-01-18T12:34:56Z" ),
array( "-00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q1985786", "-2015-12-19T12:34:56Z" ),
array( "+00000000200-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985786", "0200-03-02T00:00:00Z" ),
array( "+00000000204-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985786", "0204-03-02T00:00:00Z" ),
array( "-02000000204-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985786", null ),
// Neither
array( "+00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q42", null ),
);
}
public function getDatesXSD11() {
return array(
// Gregorian
array( "-00000000200-00-00T00:00:00Z", "http://www.wikidata.org/entity/Q1985727",
"-0199-01-01T00:00:00Z" ),
array( "-02000000200-05-22T00:00:00Z", "http://www.wikidata.org/entity/Q1985727",
"-2000000200-01-01T00:00:00Z", TimeValue::PRECISION_10a ),
array( "-02000000200-02-31T00:00:00Z", "http://www.wikidata.org/entity/Q1985727",
"-2000000200-01-01T00:00:00Z", TimeValue::PRECISION_10a ),
// Julian
array( "-00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q1985786",
"-2014-12-19T12:34:56Z" ),
array( "-00000002014-01-05T12:34:56Z", "http://www.wikidata.org/entity/Q1985786",
"-2013-01-01T12:34:56Z", TimeValue::PRECISION_YEAR ),
array( "-0100-07-12T00:00:00Z", "http://www.wikidata.org/entity/Q1985786",
"-0099-07-10T00:00:00Z", TimeValue::PRECISION_DAY )
);
}
/**
* @dataProvider getDates
*/
public function testCleanDate( $date, $calendar, $expected, $precision = TimeValue::PRECISION_SECOND ) {
$julianCleaner = new JulianDateTimeValueCleaner( false );
$gregorianCleaner = new DateTimeValueCleaner( false );
$value = new TimeValue( $date, 0, 0, 0, $precision, $calendar );
$result = $julianCleaner->getStandardValue( $value );
$this->assertEquals( $expected, $result );
if ( $calendar == TimeValue::CALENDAR_GREGORIAN ) {
$result = $gregorianCleaner->getStandardValue( $value );
$this->assertEquals( $expected, $result );
}
}
/**
* @dataProvider getDatesXSD11
*/
public function testCleanDateXSD11( $date, $calendar, $expected, $precision = TimeValue::PRECISION_SECOND ) {
$julianCleaner = new JulianDateTimeValueCleaner();
$gregorianCleaner = new DateTimeValueCleaner( true );
$value = new TimeValue( $date, 0, 0, 0, $precision, $calendar );
$result = $julianCleaner->getStandardValue( $value );
$this->assertEquals( $expected, $result );
if ( $calendar == TimeValue::CALENDAR_GREGORIAN ) {
$result = $gregorianCleaner->getStandardValue( $value );
$this->assertEquals( $expected, $result );
}
}
}