[ci] Testing with UTC hides bugs

This commit is contained in:
Nicolas Grekas 2016-11-17 10:59:01 -05:00
parent ef40651dd3
commit e0f9bda49a
26 changed files with 72 additions and 75 deletions

View File

@ -47,6 +47,7 @@ before_install:
# A sigchild-enabled-PHP is used to test the Process component on the lowest PHP matrix line
- if [[ ! $deps && $PHP = ${MIN_PHP%.*} && ! -d php-$MIN_PHP/sapi ]]; then wget http://museum.php.net/php5/php-$MIN_PHP.tar.bz2 -O - | tar -xj; (cd php-$MIN_PHP; ./configure --enable-sigchild --enable-pcntl; make -j2); fi
- if [[ ! $PHP = hhvm* ]]; then INI_FILE=~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; else INI_FILE=/etc/hhvm/php.ini; fi
- if [[ ! $skip ]]; then echo date.timezone = Europe/Paris >> $INI_FILE; fi
- if [[ ! $skip ]]; then echo memory_limit = -1 >> $INI_FILE; fi
- if [[ ! $skip ]]; then echo session.gc_probability = 0 >> $INI_FILE; fi
- if [[ ! $skip && $PHP = 5.* ]]; then echo extension = mongo.so >> $INI_FILE; fi

View File

@ -33,7 +33,7 @@ install:
- cd ..
- copy /Y php.ini-development php.ini-min
- echo max_execution_time=1200 >> php.ini-min
- echo date.timezone="UTC" >> php.ini-min
- echo date.timezone="America/Los_Angeles" >> php.ini-min
- echo extension_dir=ext >> php.ini-min
- copy /Y php.ini-min php.ini-max
- echo extension=php_openssl.dll >> php.ini-max

View File

@ -87,7 +87,7 @@ class IntegerToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCas
public function testReverseTransform()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -109,7 +109,7 @@ class IntegerToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCas
public function testReverseTransformWithGrouping()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');

View File

@ -19,7 +19,7 @@ class MoneyToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testTransform()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -47,7 +47,7 @@ class MoneyToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransform()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');

View File

@ -42,7 +42,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testTransform($from, $to, $locale)
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault($locale);
@ -68,7 +68,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testTransformWithGrouping($from, $to, $locale)
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault($locale);
@ -80,7 +80,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testTransformWithScale()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -185,7 +185,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testTransformWithRounding($scale, $input, $output, $roundingMode)
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -197,7 +197,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testTransformDoesNotRoundIfNoScale()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -212,7 +212,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransform($to, $from, $locale)
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault($locale);
@ -227,7 +227,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransformWithGrouping($to, $from, $locale)
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault($locale);
@ -244,7 +244,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransformWithGroupingAndFixedSpaces()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('ru');
@ -256,7 +256,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransformWithGroupingButWithoutGroupSeparator()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -376,7 +376,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testDecimalSeparatorMayBeDotIfGroupingSeparatorIsNotDot()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('fr');
$transformer = new NumberToLocalizedStringTransformer(null, true);
@ -396,7 +396,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testDecimalSeparatorMayNotBeDotIfGroupingSeparatorIsDot()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -411,7 +411,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testDecimalSeparatorMayNotBeDotIfGroupingSeparatorIsDotWithNoGroupSep()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -423,7 +423,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testDecimalSeparatorMayBeDotIfGroupingSeparatorIsDotButNoGroupingUsed()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('fr');
$transformer = new NumberToLocalizedStringTransformer();
@ -435,7 +435,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testDecimalSeparatorMayBeCommaIfGroupingSeparatorIsNotComma()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('bg');
$transformer = new NumberToLocalizedStringTransformer(null, true);
@ -588,7 +588,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransformDisallowsCenteredExtraCharactersMultibyte()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('ru');
@ -605,7 +605,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransformIgnoresTrailingSpacesInExceptionMessage()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('ru');
@ -633,7 +633,7 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
public function testReverseTransformDisallowsTrailingExtraCharactersMultibyte()
{
// Since we test against other locales, we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('ru');

View File

@ -53,7 +53,7 @@ class PercentToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCas
public function testTransformWithScale()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -92,7 +92,7 @@ class PercentToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCas
public function testReverseTransformWithScale()
{
// Since we test against "de_AT", we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');

View File

@ -19,7 +19,7 @@ class CountryTypeTest extends TestCase
{
protected function setUp()
{
IntlTestHelper::requireIntl($this);
IntlTestHelper::requireIntl($this, false);
parent::setUp();
}

View File

@ -19,7 +19,7 @@ class CurrencyTypeTest extends TestCase
{
protected function setUp()
{
IntlTestHelper::requireIntl($this);
IntlTestHelper::requireIntl($this, false);
parent::setUp();
}

View File

@ -70,7 +70,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromSingleTextDateTime()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -91,7 +91,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromSingleTextString()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -112,7 +112,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromSingleTextTimestamp()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -135,7 +135,7 @@ class DateTypeTest extends TestCase
public function testSubmitFromSingleTextRaw()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -399,7 +399,7 @@ class DateTypeTest extends TestCase
public function testSetDataWithNegativeTimezoneOffsetStringInput()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -421,7 +421,7 @@ class DateTypeTest extends TestCase
public function testSetDataWithNegativeTimezoneOffsetDateTimeInput()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -495,7 +495,7 @@ class DateTypeTest extends TestCase
public function testMonthsOptionLongFormat()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -515,7 +515,7 @@ class DateTypeTest extends TestCase
public function testMonthsOptionLongFormatWithDifferentTimezone()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -621,7 +621,7 @@ class DateTypeTest extends TestCase
public function testPassDatePatternToView()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -634,7 +634,7 @@ class DateTypeTest extends TestCase
public function testPassDatePatternToViewDifferentFormat()
{
// we test against "de_AT", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_AT');
@ -682,7 +682,7 @@ class DateTypeTest extends TestCase
public function testDatePatternFormatWithQuotedStrings()
{
// we test against "es_ES", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('es_ES');

View File

@ -18,7 +18,7 @@ class IntegerTypeTest extends TestCase
{
protected function setUp()
{
IntlTestHelper::requireIntl($this);
IntlTestHelper::requireIntl($this, false);
parent::setUp();
}

View File

@ -19,7 +19,7 @@ class LanguageTypeTest extends TestCase
{
protected function setUp()
{
IntlTestHelper::requireIntl($this);
IntlTestHelper::requireIntl($this, false);
parent::setUp();
}

View File

@ -19,7 +19,7 @@ class LocaleTypeTest extends TestCase
{
protected function setUp()
{
IntlTestHelper::requireIntl($this);
IntlTestHelper::requireIntl($this, false);
parent::setUp();
}

View File

@ -20,7 +20,7 @@ class MoneyTypeTest extends TestCase
{
// we test against different locales, so we need the full
// implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
parent::setUp();
}

View File

@ -21,7 +21,7 @@ class NumberTypeTest extends TestCase
parent::setUp();
// we test against "de_DE", so we need the full implementation
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('de_DE');
}

View File

@ -24,7 +24,7 @@ class CollatorTest extends AbstractCollatorTest
{
protected function setUp()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
parent::setUp();
}

View File

@ -908,9 +908,7 @@ abstract class AbstractIntlDateFormatterTest extends \PHPUnit_Framework_TestCase
{
$dateTime = new \DateTime();
$dateTime->setTimestamp(null === $timestamp ? time() : $timestamp);
if (null !== $timeZone) {
$dateTime->setTimezone(new \DateTimeZone($timeZone));
}
$dateTime->setTimezone(new \DateTimeZone($timeZone ?: getenv('TZ') ?: 'UTC'));
return $dateTime;
}

View File

@ -25,7 +25,7 @@ class IntlDateFormatterTest extends AbstractIntlDateFormatterTest
{
protected function setUp()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
parent::setUp();
}
@ -45,6 +45,8 @@ class IntlDateFormatterTest extends AbstractIntlDateFormatterTest
protected function getDateFormatter($locale, $datetype, $timetype, $timezone = null, $calendar = IntlDateFormatter::GREGORIAN, $pattern = null)
{
IntlTestHelper::requireFullIntl($this, '55.1');
if (!$formatter = new \IntlDateFormatter($locale, $datetype, $timetype, $timezone, $calendar, $pattern)) {
throw new \InvalidArgumentException(intl_get_error_message());
}

View File

@ -24,7 +24,7 @@ class IntlGlobalsTest extends AbstractIntlGlobalsTest
{
protected function setUp()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
parent::setUp();
}

View File

@ -24,7 +24,7 @@ class LocaleTest extends AbstractLocaleTest
{
protected function setUp()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
parent::setUp();
}

View File

@ -22,7 +22,7 @@ class NumberFormatterTest extends AbstractNumberFormatterTest
{
protected function setUp()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, '55.1');
parent::setUp();
}
@ -32,6 +32,13 @@ class NumberFormatterTest extends AbstractNumberFormatterTest
$this->assertInstanceOf('\NumberFormatter', \NumberFormatter::create('en', \NumberFormatter::DECIMAL));
}
public function testGetTextAttribute()
{
IntlTestHelper::requireFullIntl($this);
parent::testGetTextAttribute();
}
protected function getNumberFormatter($locale = 'en', $style = null, $pattern = null)
{
return new \NumberFormatter($locale, $style, $pattern);

View File

@ -28,19 +28,21 @@ class IntlTestHelper
{
/**
* Should be called before tests that work fine with the stub implementation.
*
* @param \PhpUnit_Framework_TestCase $testCase
*/
public static function requireIntl(\PHPUnit_Framework_TestCase $testCase)
public static function requireIntl(\PHPUnit_Framework_TestCase $testCase, $minimumIcuVersion = null)
{
if (null === $minimumIcuVersion) {
$minimumIcuVersion = Intl::getIcuStubVersion();
}
// We only run tests if the version is *one specific version*.
// This condition is satisfied if
//
// * the intl extension is loaded with version Intl::getIcuStubVersion()
// * the intl extension is not loaded
if (IcuVersion::compare(Intl::getIcuVersion(), Intl::getIcuStubVersion(), '!=', 1)) {
$testCase->markTestSkipped('ICU version '.Intl::getIcuStubVersion().' is required.');
if (($minimumIcuVersion || defined('HHVM_VERSION_ID')) && IcuVersion::compare(Intl::getIcuVersion(), $minimumIcuVersion, '!=', 1)) {
$testCase->markTestSkipped('ICU version '.$minimumIcuVersion.' is required.');
}
// Normalize the default locale in case this is not done explicitly
@ -60,24 +62,15 @@ class IntlTestHelper
/**
* Should be called before tests that require a feature-complete intl
* implementation.
*
* @param \PhpUnit_Framework_TestCase $testCase
*/
public static function requireFullIntl(\PHPUnit_Framework_TestCase $testCase)
public static function requireFullIntl(\PHPUnit_Framework_TestCase $testCase, $minimumIcuVersion = null)
{
// We only run tests if the intl extension is loaded...
if (!Intl::isExtensionLoaded()) {
$testCase->markTestSkipped('Extension intl is required.');
}
// ... and only if the version is *one specific version*
if (IcuVersion::compare(Intl::getIcuVersion(), Intl::getIcuStubVersion(), '!=', 1)) {
$testCase->markTestSkipped('ICU version '.Intl::getIcuStubVersion().' is required.');
}
// Normalize the default locale in case this is not done explicitly
// in the test
\Locale::setDefault('en');
self::requireIntl($testCase, $minimumIcuVersion);
// Consequently, tests will
//
@ -89,8 +82,6 @@ class IntlTestHelper
/**
* Skips the test unless the current system has a 32bit architecture.
*
* @param \PhpUnit_Framework_TestCase $testCase
*/
public static function require32Bit(\PHPUnit_Framework_TestCase $testCase)
{
@ -101,8 +92,6 @@ class IntlTestHelper
/**
* Skips the test unless the current system has a 64bit architecture.
*
* @param \PhpUnit_Framework_TestCase $testCase
*/
public static function require64Bit(\PHPUnit_Framework_TestCase $testCase)
{

View File

@ -36,7 +36,7 @@ class LocaleTest extends \PHPUnit_Framework_TestCase
public function testGetDisplayCountriesForSwitzerland()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
$countries = Locale::getDisplayCountries('de_CH');
$this->assertEquals('Schweiz', $countries['CH']);

View File

@ -60,7 +60,7 @@ class IdentityTranslatorTest extends \PHPUnit_Framework_TestCase
public function testGetLocaleReturnsDefaultLocaleIfNotSet()
{
// in order to test with "pt_BR"
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
$translator = new IdentityTranslator();

View File

@ -96,7 +96,7 @@ class CountryValidatorTest extends AbstractConstraintValidatorTest
public function testValidateUsingCountrySpecificLocale()
{
// in order to test with "en_GB"
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('en_GB');

View File

@ -65,7 +65,7 @@ class CurrencyValidatorTest extends AbstractConstraintValidatorTest
**/
public function testValidCurrenciesWithCountrySpecificLocale($currency)
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('en_GB');

View File

@ -95,7 +95,7 @@ class LanguageValidatorTest extends AbstractConstraintValidatorTest
public function testValidateUsingCountrySpecificLocale()
{
IntlTestHelper::requireFullIntl($this);
IntlTestHelper::requireFullIntl($this, false);
\Locale::setDefault('fr_FR');
$existingLanguage = 'en';