Skip to content
Extraits de code Groupes Projets
TranslationWriterTest.php 5,06 ko
Newer Older
  • Learn to ignore specific revisions
  • sgiehl's avatar
    sgiehl a validé
    <?php
    
    sgiehl's avatar
    sgiehl a validé
    /**
     * Piwik - Open source web analytics
     *
     * @link http://piwik.org
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
     */
    class TranslationWriterTest extends PHPUnit_Framework_TestCase
    {
        /**
         * Dataprovider for testClean
         */
        public function getCleanTestData()
        {
            return array(
                // empty string
                array("", ''),
                // newline
                array("\n", ''),
                // leading and trailing whitespace
                array(" a \n", 'a'),
                // single / double quotes
                array(" &quot;it&#039;s&quot; ", '"it\'s"'),
                // html special characters
                array("&lt;tag&gt;", '<tag>'),
                // other html entities
                array("&hellip;", '…'),
            );
        }
    
        /**
         * @group Core
         * @group TranslationWriter
         * @dataProvider getCleanTestData
         */
        public function testClean($data, $expected)
        {
    
            $this->assertEquals($expected, TranslationWriter::clean($data));
    
    sgiehl's avatar
    sgiehl a validé
        }
    
        /**
         * Dataprovider for testQuote
         */
        public function getQuoteTestData()
        {
            return array(
                // alphanumeric
                array('abc 123', "'abc 123'"),
                // newline
    
    sgiehl's avatar
    sgiehl a validé
                array("\n", "'\n'"),
    
    sgiehl's avatar
    sgiehl a validé
                // tab
                array('	', "'	'"),
                // single quote
                array("it's", "'it\'s'"),
            );
        }
    
        /**
         * @group Core
         * @group TranslationWriter
         * @dataProvider getQuoteTestData
         */
        public function testQuote($data, $expected)
        {
    
            if (Common::isWindows() && $data == "\n") {
    
    sgiehl's avatar
    sgiehl a validé
                return;
            }
    
            $this->assertEquals($expected, TranslationWriter::quote($data));
    
    sgiehl's avatar
    sgiehl a validé
        }
    
        /**
         * @group Core
         * @group TranslationWriter
         */
        public function testGetTranslationPathInvalidLang()
        {
    
                $path = TranslationWriter::getTranslationPath('../index');
    
            } catch (Exception $e) {
                return;
            }
            $this->fail('Expected exception not raised');
    
    sgiehl's avatar
    sgiehl a validé
        }
    
    sgiehl's avatar
    sgiehl a validé
        /**
         * @group Core
         * @group TranslationWriter
         */
        public function testGetTranslationPathInvalidBasePath()
        {
    
                $path = TranslationWriter::getTranslationPath('en', 'core');
    
            } catch (Exception $e) {
                return;
            }
            $this->fail('Expected exception not raised');
    
    sgiehl's avatar
    sgiehl a validé
        }
    
    sgiehl's avatar
    sgiehl a validé
        /**
         * @group Core
         * @group TranslationWriter
         */
        public function testGetTranslationPath()
        {
            // implicit base path
    
            $this->assertEquals(PIWIK_INCLUDE_PATH . '/lang/en.json', TranslationWriter::getTranslationPath('en'));
    
    sgiehl's avatar
    sgiehl a validé
    
            // explicit base path
    
            $this->assertEquals(PIWIK_INCLUDE_PATH . '/lang/en.json', TranslationWriter::getTranslationPath('en', 'lang'));
            $this->assertEquals(PIWIK_INCLUDE_PATH . '/tmp/en.json', TranslationWriter::getTranslationPath('en', 'tmp'));
    
    sgiehl's avatar
    sgiehl a validé
        }
    
        /**
         * @group Core
         * @group TranslationWriter
         */
        public function testLoadTranslationInvalidLang()
        {
    
                $translations = TranslationWriter::loadTranslation('a');
    
            } catch (Exception $e) {
                return;
            }
            $this->fail('Expected exception not raised');
    
    sgiehl's avatar
    sgiehl a validé
        }
    
    sgiehl's avatar
    sgiehl a validé
        /**
         * @group Core
         * @group TranslationWriter
         */
        public function testLoadTranslation()
        {
    
            $data = file_get_contents(PIWIK_INCLUDE_PATH . '/lang/en.json');
            $translations = json_decode($data, true);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertTrue(is_array($translations));
    
    
            $englishTranslations = TranslationWriter::loadTranslation('en');
    
    sgiehl's avatar
    sgiehl a validé
    
    
            $this->assertEquals(count($translations, COUNT_RECURSIVE), count($englishTranslations, COUNT_RECURSIVE));
    
    Fabian Becker's avatar
    Fabian Becker a validé
            foreach($translations as $key => $value) {
                $this->assertEquals(0,
                    count(array_diff($translations[$key], $englishTranslations[$key]))
                );
            }
    
    Fabian Becker's avatar
    Fabian Becker a validé
            foreach($translations as $key => $value) {
                $this->assertEquals(0,
                    count(array_diff_assoc($translations[$key], $englishTranslations[$key]))
                );
            }
    
    sgiehl's avatar
    sgiehl a validé
        }
    
        /**
         * @group Core
         * @group TranslationWriter
         */
        public function testSaveTranslation()
        {
    
            $path = TranslationWriter::getTranslationPath('en', 'tmp');
    
    sgiehl's avatar
    sgiehl a validé
    
            $translations = array(
    
                'General' => array(
                    'Locale' => 'en_CA.UTF-8',
                    'Id'     => 'Id'
                ),
                'Goals' => array(
                    'Goals'  => 'Goals',
                ),
                'Plugin' => array(
                    'Body'    => "Message\nBody"
                )
    
    sgiehl's avatar
    sgiehl a validé
            );
    
            @unlink($path);
    
    
            $rc = TranslationWriter::saveTranslation($translations, $path);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertNotEquals(false, $rc);
    
            $contents = file_get_contents($path);
    
            $expected = '{"General":{"Locale":"en_CA.UTF-8","Id":"Id"},"Goals":{"Goals":"Goals"},"Plugin":{"Body":"Message\nBody"}}';
    
            if (Common::isWindows()) $expected = str_replace("\r\n", "\n", $expected);
    
    sgiehl's avatar
    sgiehl a validé
            $this->assertEquals($expected, $contents);
        }
    }