mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-27 21:15:40 +02:00
Currently if you run i18nSSLegacyAdapterTest twice in a row you get errors about classes not existing, because the class manifest doesn't get set correctly during the test setUp() method.
91 lines
3.0 KiB
PHP
91 lines
3.0 KiB
PHP
<?php
|
|
/**
|
|
* @package framework
|
|
* @subpackage i18n
|
|
*/
|
|
|
|
class i18nSSLegacyAdapterTest extends SapphireTest {
|
|
|
|
public function setUp() {
|
|
parent::setUp();
|
|
|
|
$this->alternateBasePath = $this->getCurrentAbsolutePath() . "/_fakewebroot";
|
|
$this->alternateBaseSavePath = TEMP_FOLDER . '/i18nTextCollectorTest_webroot';
|
|
FileSystem::makeFolder($this->alternateBaseSavePath);
|
|
Config::inst()->update('Director', 'alternate_base_folder', $this->alternateBasePath);
|
|
|
|
// Push a template loader running from the fake webroot onto the stack.
|
|
$templateManifest = new SS_TemplateManifest($this->alternateBasePath, null, false, true);
|
|
$templateManifest->regenerate(false);
|
|
SS_TemplateLoader::instance()->pushManifest($templateManifest);
|
|
$this->_oldTheme = Config::inst()->get('SSViewer', 'theme');
|
|
Config::inst()->update('SSViewer', 'theme', 'testtheme1');
|
|
|
|
$classManifest = new SS_ClassManifest($this->alternateBasePath, false, true, false);
|
|
SS_ClassLoader::instance()->pushManifest($classManifest);
|
|
|
|
$this->originalLocale = i18n::get_locale();
|
|
|
|
// Override default adapter to avoid cached translations between tests.
|
|
// Emulates behaviour in i18n::get_translators()
|
|
$this->origAdapter = i18n::get_translator('core');
|
|
$adapter = new Zend_Translate(array(
|
|
'adapter' => 'i18nSSLegacyAdapter',
|
|
'locale' => i18n::default_locale(),
|
|
'disableNotices' => true,
|
|
));
|
|
i18n::register_translator($adapter, 'core');
|
|
$adapter->removeCache();
|
|
i18n::include_by_locale('en');
|
|
}
|
|
|
|
public function tearDown() {
|
|
SS_TemplateLoader::instance()->popManifest();
|
|
SS_ClassLoader::instance()->popManifest();
|
|
i18n::set_locale($this->originalLocale);
|
|
Config::inst()->update('Director', 'alternate_base_folder', null);
|
|
Config::inst()->update('SSViewer', 'theme', $this->_oldTheme);
|
|
i18n::register_translator($this->origAdapter, 'core');
|
|
|
|
parent::tearDown();
|
|
}
|
|
|
|
public function testTranslate() {
|
|
i18n::set_locale('en_US');
|
|
$this->assertEquals(
|
|
'Legacy translation',
|
|
// defined in i18nothermodule/lang/en_US.php
|
|
i18n::_t('i18nOtherModule.LEGACY'),
|
|
'Finds original strings in PHP module files'
|
|
);
|
|
$this->assertEquals(
|
|
'Legacy translation',
|
|
// defined in themes/testtheme1/lang/en_US.php
|
|
i18n::_t('i18nOtherModule.LEGACYTHEME'),
|
|
'Finds original strings in theme files'
|
|
);
|
|
i18n::set_locale('de_DE');
|
|
$this->assertEquals(
|
|
'Legacy translation (de_DE)',
|
|
// defined in i18nothermodule/lang/de_DE.php
|
|
i18n::_t('i18nOtherModule.LEGACY'),
|
|
'Finds translations in PHP module files'
|
|
);
|
|
$this->assertEquals(
|
|
'Legacy translation (de_DE)',
|
|
// defined in themes/testtheme1/lang/de_DE.php
|
|
i18n::_t('i18nOtherModule.LEGACYTHEME'),
|
|
'Finds original strings in theme files'
|
|
);
|
|
// TODO Implement likely subtags solution
|
|
// i18n::set_locale('de');
|
|
// $this->assertEquals(
|
|
// 'Legacy translation (de_DE)',
|
|
// // defined in i18nothermodule/lang/de_DE.php
|
|
// i18n::_t('i18nOtherModule.LEGACY'),
|
|
// 'Finds translations in PHP module files if only language locale is set'
|
|
// );
|
|
}
|
|
|
|
}
|