* && phpunit6 tests/phpunit/E2E/Core/LocalizedDataTest.php
*/
public function testLocalizedData() {
- $getSql = function($locale) {
- $path = \Civi::paths()->getPath("[civicrm.root]/sql/civicrm_data.{$locale}.mysql");
- $this->assertFileExists($path);
- return file_get_contents($path);
- };
+ $getSql = $this->getSqlFunc();
+
$sqls = [
'de_DE' => $getSql('de_DE'),
'fr_FR' => $getSql('fr_FR'),
$this->assertFalse($match('fr_FR', 'de_DE'), 'The French SQL should not match the German pattern.');
}
+ /**
+ * @return callable
+ * The SQL loader -- function(string $locale): string
+ */
+ private function getSqlFunc() {
+ // Some deployment styles use stored files, and some generate SQL programmatically.
+ // This heuristic discerns the style by UF name, although a better heuristic might be to check
+ // for composer at CMS root. This works in a pinch.
+ $uf = CIVICRM_UF;
+ $installerTypes = [
+ 'Drupal' => [$this, '_getSqlFile'],
+ 'Drupal8' => [$this, '_getSqlLive'],
+ 'WordPress' => [$this, '_getSqlFile'],
+ 'Backdrop' => [$this, '_getSqlFile'],
+ 'Joomla' => [$this, '_getSqlFile'],
+ ];
+ if (isset($installerTypes[$uf])) {
+ return $installerTypes[$uf];
+ }
+ else {
+ throw new \RuntimeException("Failed to determine installation type for $uf");
+ }
+ }
+
+ private function _getSqlFile($locale) {
+ $path = \Civi::paths()->getPath("[civicrm.root]/sql/civicrm_data.{$locale}.mysql");
+ $this->assertFileExists($path);
+ return file_get_contents($path);
+ }
+
+ private function _getSqlLive($locale) {
+ $schema = new \CRM_Core_CodeGen_Schema(\Civi\Test::codeGen());
+ $files = $schema->generateLocaleDataSql($locale);
+ foreach ($files as $file => $content) {
+ if (preg_match(';^civicrm_data\.;', $file)) {
+ return $content;
+ }
+ }
+ throw new \Exception("Faield to generate $locale");
+ }
+
}