예제 #1
0
$t->info('9 - Test i18n functionaliy.');
$menu = new ioMenuItem('i18n');
$menu->addChild('admin');
$t->info('  9.1 - Test the setCulture() and getCulture() methods');
$context->getUser()->setCulture('es');
$t->is($menu->getCulture(), 'es', '->getCulture() returns the user default culture if none is set.');
$menu->setCulture('klingon');
$t->is($menu->getCulture(), 'klingon', '->getCulture() returns the culture that was explicitly set.');
$t->is($menu['admin']->getCulture(), 'klingon', '->getCulture() returns the parent menu items culture if not set.');
$menu['admin']->setCulture('mars');
$t->is($menu['admin']->getCulture(), 'mars', '->getCulture() returns the set culture, not the parent\'s culture.');
$t->info('  9.2 - Test the useI18n() and get/setLabel() methods');
$menu = new ioMenuItem('admin');
$context->getUser()->setCulture('en');
$t->is($menu->useI18n(), false, '->useI18n() returns false, there are no i18n labels set.');
$menu->setLabel('administración', 'es');
$t->is($menu->useI18n(), true, '->useI18n() returns true after an i18n label is set.');
$t->is($menu->getLabel('es'), 'administración', '->getLabel(es) correctly returns the spanish label I just set.');
$t->is($menu->getLabel(), 'admin', '->getLabel() still returns "admin", which is the name since no en label is set.');
$menu->setLabel('admin default');
$t->is($menu->getLabel(), 'admin default', '->getLabel() returns "admin default", the default label');
$menu->setLabel('administration', 'en');
$t->is($menu->getLabel(), 'administration', '->getLabel() returns "administration", the "en" culture label');
sfConfig::set('sf_default_culture', 'es');
$t->is($menu->getLabel('fake'), 'administración', '->getLabel() retrieves the sf_default_culture label if the given culture does not have a label.');
$menu->setCulture('es');
$t->is($menu->getLabel(), 'administración', '->getLabel() returns the label of the culture on the label');
$t->info('  9.3 - Test toArray() and fromArray()');
$arr = $menu->toArray();
$t->is($arr['i18n_labels'], array('es' => 'administración', 'en' => 'administration'), '->toArray() exports an i18n_labels array');
$newMenu = ioMenuItem::createFromArray($arr);
$t->is($result['columns'], array('“Root li”'), '$result[columns] = array(Root li) .');

$t->is(count($result['items']), 2, '$result[items] count is 2 (pt1, pt2).');
$t->is(count($result['items'][0]['children']), 3, '$result[items][0][items] count is 3 (ch1, ch2, ch3).');
$t->is(count($result['items'][1]['children']), 1, '$result[items][1][items] count is 1 (ch4).');

$t->is($result['items'][0]['id'], $arr['pt1']->id, '$result[items][0][id] is pt1\'s id');
$t->is($result['items'][0]['level'], 1, '$result[items][0][level] is 1');
$t->is($result['items'][0]['info'], array('<strong>Parent 1</strong>'), '$result[items][0][info] is array(Parent 1)');

$t->is($result['items'][0]['children'][0]['level'], 2, '$result[items][0][children][0][level] is 2');
*/
$t->is($result['items'][0], $expected['items'][0], '->generateNestedSortableArray() returns the correctly formatted array.');
$t->info('5 - Test the i18n functionality');
$t->info('  5.1 - Create an ioMenuItem with i18n labels and persist it');
Doctrine_Query::create()->from('ioDoctrineMenuItem')->delete()->execute();
sfConfig::set('sf_default_culture', 'en');
// make sure en is the default culture
$menu = new ioMenuItem('primary');
$menu->setLabel('Homepage');
$menu->setLabel('Página principal', 'es');
$doctrineMenu = Doctrine_Core::getTable('ioDoctrineMenuItem')->persist($menu);
$t->is($doctrineMenu['Translation']['en']['label'], 'Homepage', 'The default label is set on the sf_default_culture Translation.');
$t->is($doctrineMenu['Translation']['es']['label'], 'Página principal', 'The es label was saved on the es Translation.');
$t->info('  5.2 - Fetch an i18n menu from the database');
$menu = Doctrine_Core::getTable('ioDoctrineMenuItem')->fetchMenu('primary');
$arr = $menu->toArray();
$t->is($arr['label'], 'Homepage', 'The sf_default_culture is set as the default label.');
$t->is($arr['i18n_labels'], array('en' => 'Homepage', 'es' => 'Página principal'), 'The i18n labels are loaded in correctly from the database.');
$menu->setCulture('es');
$t->is($menu->getLabel(), 'Página principal', 'For good measure, we can see that the spanish translation of the menu returns the spanish translation.');
$menu = new ioMenuItem('Root li');
$t->info('  2.1 - First try it without any children - should just update root values.');
$t->info('    2.1.1 - Persist a menu with mostly blank fields.');
$rt = create_root('rt');
$menu->setAttributes(array());
// clear the default "root" class attribute
$rt->persistFromMenuArray($menu->toArray(false));
$t->is($rt->getName(), 'Root li', '->getName() returns "Root li".');
$t->is($rt->getLabel(), null, '->getLabel() returns null.');
$t->is($rt->getRoute(), null, '->getRoute() returns null.');
$t->is($rt->getAttributes(), '', '->getAttributes() returns an empty string.');
$t->is($rt->getRequiresAuth(), false, '->getRequiresAuth() returns false.');
$t->is($rt->getRequiresNoAuth(), false, '->getRequiresNoAuth() returns false.');
$t->is(count($rt->Permissions), 0, '->Permissions matches 0 items');
// setup some interesting values to persist
$menu->setLabel('sympal');
$menu->setRoute('http://www.sympalphp.org');
$menu->setAttributes(array('class' => 'root', 'id' => 'sympal_menu'));
$menu->requiresAuth(true);
$menu->requiresNoAuth(false);
$menu->setCredentials(array(array('c1', 'c2')));
$t->info('    2.1.2 - Persisting a menu with multi-level credentials is not supported - an exception is thrown.');
$rt = create_root('rt');
try {
    $rt->persistFromMenuArray($menu->toArray(false));
    $t->fail('Exception not thrown');
} catch (sfException $e) {
    $t->pass('Exception thrown: ' . $e->getMessage());
}
$t->info('    2.1.3 - Persist a valid menu item with several different fields filled in (no refresh).');
$rt = create_root('rt');