[TASK] Replace setLocale() in tests with phpunit backup functionality 34/50334/7
authorAnja Leichsenring <aleichsenring@ab-softlab.de>
Mon, 24 Oct 2016 11:14:10 +0000 (13:14 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Tue, 25 Oct 2016 14:32:24 +0000 (16:32 +0200)
There is a phpunit shipped functionality to reliably fiddle with locale
settings and have the valid settings back afterwards.
This funcionality was not used in core unit tests yet, so it is
introduced now.

In this process, some sanitizing to prevent tests from fail due to
non existent locales on a certain system is added.

Resolves: #78387
Releases: master
Change-Id: Iebd9b9251590283e6d2889db09a62a31a595fdb3
Reviewed-on: https://review.typo3.org/50334
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/fluid/Tests/Unit/ViewHelpers/Form/SelectViewHelperTest.php
typo3/sysext/fluid/Tests/Unit/ViewHelpers/Format/DateViewHelperTest.php
typo3/sysext/form/Tests/Unit/Validator/FloatValidatorTest.php
typo3/sysext/form/Tests/Unit/Validator/IntegerValidatorTest.php
typo3/sysext/frontend/Tests/Unit/ContentObject/ContentObjectRendererTest.php

index 6aa5c2c..2f8c134 100644 (file)
@@ -26,21 +26,9 @@ class SelectViewHelperTest extends ViewHelperBaseTestcase
      */
     protected $viewHelper;
 
-    /**
-     * @var array Backup of current locale, it is manipulated in tests
-     */
-    protected $backupLocales = [];
-
     protected function setUp()
     {
         parent::setUp();
-        // Store all locale categories manipulated in tests for reconstruction in tearDown
-        $this->backupLocales = [
-            'LC_COLLATE' => setlocale(LC_COLLATE, 0),
-            'LC_CTYPE' => setlocale(LC_CTYPE, 0),
-            'LC_MONETARY' => setlocale(LC_MONETARY, 0),
-            'LC_TIME' => setlocale(LC_TIME, 0),
-        ];
         $this->arguments['name'] = '';
         $this->arguments['sortByOptionLabel'] = false;
         $this->viewHelper = $this->getAccessibleMock(\TYPO3\CMS\Fluid\ViewHelpers\Form\SelectViewHelper::class, ['setErrorClassAttribute', 'registerFieldNameForFormTokenGeneration']);
@@ -48,14 +36,6 @@ class SelectViewHelperTest extends ViewHelperBaseTestcase
         $this->viewHelper->_set('tag', $this->tagBuilder);
     }
 
-    protected function tearDown()
-    {
-        foreach ($this->backupLocales as $category => $locale) {
-            setlocale(constant($category), $locale);
-        }
-        parent::tearDown();
-    }
-
     /**
      * @test
      */
@@ -282,16 +262,18 @@ class SelectViewHelperTest extends ViewHelperBaseTestcase
     public function optionsAreSortedByLabelIfSortByOptionLabelIsSetAndLocaleEqualsUtf8()
     {
         $locale = 'de_DE.UTF-8';
-        if (!setlocale(LC_COLLATE, $locale)) {
+        try {
+            $this->setLocale(LC_COLLATE, $locale);
+            $this->setLocale(LC_CTYPE, $locale);
+            $this->setLocale(LC_MONETARY, $locale);
+            $this->setLocale(LC_TIME, $locale);
+        } catch (\PHPUnit_Framework_Exception $e) {
             $this->markTestSkipped('Locale ' . $locale . ' is not available.');
         }
-        if (stristr(PHP_OS, 'Darwin')) {
+        if (stristr(PHP_OS, 'Darwin') !== false) {
             $this->markTestSkipped('Test skipped caused by a bug in the C libraries on BSD/OSX');
         }
 
-        setlocale(LC_CTYPE, $locale);
-        setlocale(LC_MONETARY, $locale);
-        setlocale(LC_TIME, $locale);
         $this->tagBuilder->expects($this->once())->method('addAttribute')->with('name', 'myName');
         $this->viewHelper->expects($this->once())->method('registerFieldNameForFormTokenGeneration')->with('myName');
         $this->tagBuilder->expects($this->once())->method('setContent')->with('<option value="value1">Bamberg</option>' . chr(10) . '<option value="value2" selected="selected">Bämm</option>' . chr(10) . '<option value="value3">Bar</option>' . chr(10) . '<option value="value4">Bär</option>' . chr(10) . '<option value="value5">Burg</option>' . chr(10));
index 3f0cef9..a41984f 100644 (file)
@@ -23,11 +23,6 @@ use TYPO3\CMS\Fluid\ViewHelpers\Format\DateViewHelper;
 class DateViewHelperTest extends ViewHelperBaseTestcase
 {
     /**
-     * @var array Backup of current locale, it is manipulated in tests
-     */
-    protected $backupLocales = [];
-
-    /**
      * @var DateViewHelper|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\CMS\Core\Tests\AccessibleObjectInterface
      */
     protected $subject;
@@ -45,13 +40,6 @@ class DateViewHelperTest extends ViewHelperBaseTestcase
     protected function setUp()
     {
         parent::setUp();
-        // Store all locale categories manipulated in tests for reconstruction in tearDown
-        $this->backupLocales = [
-            'LC_COLLATE' => setlocale(LC_COLLATE, 0),
-            'LC_CTYPE' => setlocale(LC_CTYPE, 0),
-            'LC_MONETARY' => setlocale(LC_MONETARY, 0),
-            'LC_TIME' => setlocale(LC_TIME, 0),
-        ];
         $this->timezone = @date_default_timezone_get();
         $GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'] = 'Y-m-d';
         $this->viewHelper = new DateViewHelper();
@@ -60,9 +48,6 @@ class DateViewHelperTest extends ViewHelperBaseTestcase
 
     protected function tearDown()
     {
-        foreach ($this->backupLocales as $category => $locale) {
-            setlocale(constant($category), $locale);
-        }
         date_default_timezone_set($this->timezone);
         parent::tearDown();
     }
@@ -475,10 +460,14 @@ class DateViewHelperTest extends ViewHelperBaseTestcase
         // 2013-02-03 11:40 UTC
         $timestamp = '@1359891658';
 
-        if (!setlocale(LC_COLLATE, $locale)) {
+        try {
+            $this->setLocale(LC_COLLATE, $locale);
+            $this->setLocale(LC_CTYPE, $locale);
+            $this->setLocale(LC_MONETARY, $locale);
+            $this->setLocale(LC_TIME, $locale);
+        } catch (\PHPUnit_Framework_Exception $e) {
             $this->markTestSkipped('Locale ' . $locale . ' is not available.');
         }
-        $this->setCustomLocale($locale);
         $this->setArgumentsUnderTest(
             $this->viewHelper,
             [
@@ -489,14 +478,4 @@ class DateViewHelperTest extends ViewHelperBaseTestcase
         $actualResult = $this->viewHelper->initializeArgumentsAndRender();
         $this->assertEquals($expected, $actualResult);
     }
-
-    /**
-     * @param string $locale
-     */
-    protected function setCustomLocale($locale)
-    {
-        setlocale(LC_CTYPE, $locale);
-        setlocale(LC_MONETARY, $locale);
-        setlocale(LC_TIME, $locale);
-    }
 }
index 8941b9e..5cfc288 100644 (file)
@@ -25,28 +25,6 @@ class FloatValidatorTest extends AbstractValidatorTest
     protected $subjectClassName = \TYPO3\CMS\Form\Domain\Validator\FloatValidator::class;
 
     /**
-     * @var string
-     */
-    protected $currentLocale;
-
-    /**
-     * Sets up this test case.
-     */
-    protected function setUp()
-    {
-        $this->currentLocale = setlocale(LC_NUMERIC, 0);
-    }
-
-    /**
-     * Tears down this test case.
-     */
-    protected function tearDown()
-    {
-        setlocale(LC_NUMERIC, $this->currentLocale);
-        parent::tearDown();
-    }
-
-    /**
      * @return array
      */
     public function validFloatProvider()
@@ -56,13 +34,10 @@ class FloatValidatorTest extends AbstractValidatorTest
                 '12.1',
                 'en_US.utf8',
             ],
-            // @todo de_DE disabled currently, works locally but not on travis-ci.org
-            /**
             '12,1 for de_DE locale' => [
                 '12,1',
                 'de_DE.utf8',
             ],
-             */
         ];
     }
 
@@ -72,7 +47,11 @@ class FloatValidatorTest extends AbstractValidatorTest
      */
     public function validateForValidInputHasEmptyErrorResult($inputValue, $locale)
     {
-        setlocale(LC_NUMERIC, $locale);
+        try {
+            $this->setLocale(LC_NUMERIC, $locale);
+        } catch (\PHPUnit_Framework_Exception $e) {
+            $this->markTestSkipped('Locale ' . $locale . ' is not available.');
+        }
 
         $options = ['element' => uniqid('test'), 'errorMessage' => uniqid('error')];
         $subject = $this->createSubject($options);
index e04a849..db8e2f1 100644 (file)
@@ -24,28 +24,6 @@ class IntegerValidatorTest extends AbstractValidatorTest
      */
     protected $subjectClassName = \TYPO3\CMS\Form\Domain\Validator\IntegerValidator::class;
 
-    /**
-     * @var string
-     */
-    protected $currentLocale;
-
-    /**
-     * Sets up this test case.
-     */
-    protected function setUp()
-    {
-        $this->currentLocale = setlocale(LC_NUMERIC, 0);
-    }
-
-    /**
-     * Tears down this test case.
-     */
-    protected function tearDown()
-    {
-        setlocale(LC_NUMERIC, $this->currentLocale);
-        parent::tearDown();
-    }
-
     public function validateForValidInputHasEmptyErrorResultDataProvider()
     {
         return [
@@ -62,7 +40,11 @@ class IntegerValidatorTest extends AbstractValidatorTest
      */
     public function validateForValidInputHasEmptyErrorResult($value, $locale)
     {
-        setlocale(LC_NUMERIC, $locale);
+        try {
+            $this->setLocale(LC_NUMERIC, $locale);
+        } catch (\PHPUnit_Framework_Exception $e) {
+            $this->markTestSkipped('Locale ' . $locale . ' is not available.');
+        }
 
         $options = ['element' => uniqid('test'), 'errorMessage' => uniqid('error')];
         $subject = $this->createSubject($options);
@@ -79,13 +61,10 @@ class IntegerValidatorTest extends AbstractValidatorTest
                 12.1,
                 'en_US.utf8'
             ],
-            // @todo de_DE disabled currently, works locally but not on travis-ci.org
-            /**
             '12,1 for de_DE locale' => [
                 '12,1',
                 'de_DE.utf8'
             ],
-             */
         ];
     }
 
@@ -95,7 +74,11 @@ class IntegerValidatorTest extends AbstractValidatorTest
      */
     public function validateForInvalidInputHasNotEmptyErrorResult($value, $locale)
     {
-        setlocale(LC_NUMERIC, $locale);
+        try {
+            $this->setLocale(LC_NUMERIC, $locale);
+        } catch (\PHPUnit_Framework_Exception $e) {
+            $this->markTestSkipped('Locale ' . $locale . ' is not available.');
+        }
 
         $options = ['element' => uniqid('test'), 'errorMessage' => uniqid('error')];
         $subject = $this->createSubject($options);
index 2369d23..297c462 100644 (file)
@@ -57,10 +57,6 @@ use TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Fixtures\PageRepositoryFixture;
  */
 class ContentObjectRendererTest extends UnitTestCase
 {
-    /**
-     * @var string
-     */
-    protected $currentLocale;
 
     /**
      * @var array A backup of registered singleton instances
@@ -116,7 +112,6 @@ class ContentObjectRendererTest extends UnitTestCase
      */
     protected function setUp()
     {
-        $this->currentLocale = setlocale(LC_NUMERIC, 0);
         $this->singletonInstances = GeneralUtility::getSingletonInstances();
         $this->createMockedLoggerAndLogManager();
 
@@ -146,7 +141,6 @@ class ContentObjectRendererTest extends UnitTestCase
 
     protected function tearDown()
     {
-        setlocale(LC_NUMERIC, $this->currentLocale);
         GeneralUtility::resetSingletonInstances($this->singletonInstances);
         parent::tearDown();
     }
@@ -4215,7 +4209,9 @@ class ContentObjectRendererTest extends UnitTestCase
     public function stdWrap_bytes($expect, $content, $conf)
     {
         $locale = 'en_US.UTF-8';
-        if (!setlocale(LC_NUMERIC, $locale)) {
+        try {
+            $this->setLocale(LC_NUMERIC, $locale);
+        } catch (\PHPUnit_Framework_Exception $e) {
             $this->markTestSkipped('Locale ' . $locale . ' is not available.');
         }
         $conf = ['bytes.' => $conf];