jenkins-bot has submitted this change and it was merged. Change subject: Clean up minor bits after major HtmlTimeFormatter changes ......................................................................
Clean up minor bits after major HtmlTimeFormatter changes Most importantly: * The regex may fail. The later code triggers undefined index warnings then. This can easily be avoided. * Make the test independend from a class it should not depend on. * Try to make documentation more specific. Change-Id: If3c9f2827ca96a8d90ad2bb4e5e8da9649852020 --- M lib/includes/formatters/HtmlTimeFormatter.php M lib/tests/phpunit/formatters/HtmlTimeFormatterTest.php 2 files changed, 35 insertions(+), 33 deletions(-) Approvals: Daniel Kinzler: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/includes/formatters/HtmlTimeFormatter.php b/lib/includes/formatters/HtmlTimeFormatter.php index b998bc1..625e7a8 100644 --- a/lib/includes/formatters/HtmlTimeFormatter.php +++ b/lib/includes/formatters/HtmlTimeFormatter.php @@ -40,11 +40,9 @@ } /** - * Format a time data value - * * @since 0.5 * - * @param TimeValue $value The time to format + * @param TimeValue $value * * @return string HTML * @throws InvalidArgumentException @@ -71,11 +69,13 @@ * @return bool */ private function calendarNameNeeded( TimeValue $value ) { - // We assume this is an ISO-ish timestamp. - preg_match( '/^[-+]\d+\D/', $value->getTime(), $m ); + // Loose check if the timestamp string is ISO-ish and starts with a year. + if ( !preg_match( '/^[-+]?\d+\b/', $value->getTime(), $matches ) ) { + return true; + } - // NOTE: PHP will limit overly large values to PHP_INT_MAX. No overflow or wrap-around occurs. - $year = (int)$m[0]; + // NOTE: PHP limits overly large values to PHP_INT_MAX. No overflow or wrap-around occurs. + $year = (int)$matches[0]; $guessedCalendar = $this->getDefaultCalendar( $year ); // Always show the calendar if it's different from the "guessed" default. @@ -83,15 +83,15 @@ return true; } - // If precision is year or lower, don't show the calendar + // If precision is year or less precise, don't show the calendar. if ( $value->getPrecision() <= TimeValue::PRECISION_YEAR ) { return false; } // If the date is inside the "critical" range where Julian and Gregorian were used - // in parallel, always show the calendar. Gregorian started to be used in the 1580s, - // but the Julian calendar continued to be used into the 1920s (in Russia and Greece). - // See https://en.wikipedia.org/wiki/Julian_calendar + // in parallel, always show the calendar. Gregorian was made "official" in October 1582 but + // may already be used earlier. Julian continued to be official until the 1920s in Russia + // and Greece, see https://en.wikipedia.org/wiki/Julian_calendar. if ( $year > 1580 && $year < 1930 ) { return true; } diff --git a/lib/tests/phpunit/formatters/HtmlTimeFormatterTest.php b/lib/tests/phpunit/formatters/HtmlTimeFormatterTest.php index 76be7a5..952a796 100644 --- a/lib/tests/phpunit/formatters/HtmlTimeFormatterTest.php +++ b/lib/tests/phpunit/formatters/HtmlTimeFormatterTest.php @@ -5,7 +5,6 @@ use DataValues\TimeValue; use PHPUnit_Framework_TestCase; use ValueFormatters\FormatterOptions; -use ValueFormatters\TimeFormatter; use ValueFormatters\ValueFormatter; use Wikibase\Lib\HtmlTimeFormatter; @@ -52,47 +51,50 @@ } public function timeFormatProvider() { + $gregorian = 'http://www.wikidata.org/entity/Q1985727'; + $julian = 'http://www.wikidata.org/entity/Q1985786'; + return array( 'a gregorian day in 1520' => array( new TimeValue( '+1520-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-gregorian\)<\/sup>$/' ), 'a julian day in 1520' => array( new TimeValue( '+1520-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE$/' ), 'a gregorian day in 1920' => array( new TimeValue( '+1920-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-gregorian\)<\/sup>$/' ), 'a julian day in 1920' => array( new TimeValue( '+1920-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-julian\)<\/sup>$/' ), 'a julian day in 1980' => array( new TimeValue( '+1980-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-julian\)<\/sup>$/' ), 'a gregorian day in 1980' => array( new TimeValue( '+1980-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), @@ -100,56 +102,56 @@ new TimeValue( '-1000000-00-00T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-gregorian\)<\/sup>$/' ), 'a julian year in -1000000' => array( new TimeValue( '-1000000-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE$/' ), 'a gregorian year in 1520' => array( new TimeValue( '+1520-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-gregorian\)<\/sup>$/' ), 'a julian year in 1520' => array( new TimeValue( '+1520-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE$/' ), 'a gregorian year in 1920' => array( new TimeValue( '+1920-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), 'a julian year in 1920' => array( new TimeValue( '+1920-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-julian\)<\/sup>$/' ), 'a julian year in 1980' => array( new TimeValue( '+1980-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-julian\)<\/sup>$/' ), 'a gregorian year in 1980' => array( new TimeValue( '+1980-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_YEAR, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), @@ -157,7 +159,7 @@ new TimeValue( '+1980-05-01T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_MONTH, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), @@ -165,7 +167,7 @@ new TimeValue( '+1300-00-00T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_100a, - TimeFormatter::CALENDAR_JULIAN ), + $julian ), '/^MOCKDATE$/' ), @@ -173,35 +175,35 @@ new TimeValue( '+2014-10-10T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), '2014-10-10 with leading zeros' => array( new TimeValue( '+00000002014-10-10T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), 'massive year' => array( new TimeValue( '+00123452014-10-10T00:00:00Z', 1 * 60 * 60, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE$/' ), 'negative' => array( new TimeValue( '-1-01-01T00:00:00Z', 0, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-gregorian\)<\/sup>$/' ), '32-bit integer overflow' => array( new TimeValue( '-2147483649-01-01T00:00:00Z', 0, 0, 0, TimeValue::PRECISION_DAY, - TimeFormatter::CALENDAR_GREGORIAN ), + $gregorian ), '/^MOCKDATE<sup class="wb-calendar-name">\(valueview-expert-timevalue-calendar-gregorian\)<\/sup>$/' ), 'unknown calendar model' => array( -- To view, visit https://gerrit.wikimedia.org/r/209726 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: If3c9f2827ca96a8d90ad2bb4e5e8da9649852020 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Smalyshev <smalys...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits