<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(10); sfConfig::set('dm_backup_enabled', true); $backup = $helper->get('file_backup'); $rootDir = sfConfig::get('sf_root_dir'); $backupDir = $backup->getDir(); $t->is($backupDir, dmOs::join(sfConfig::get('sf_data_dir'), 'dm/backup/filesystem'), $backupDir); $t->ok(is_dir($backupDir), $backupDir . ' exists'); $t->ok(is_writable($backupDir), $backupDir . ' is writable'); $t->diag('Change backup dir to cache/backupTest'); $backup->setDir('cache/backupTest'); $t->ok(is_dir($backupDir), $backupDir . ' exists'); $t->ok(is_writable($backupDir), $backupDir . ' is writable'); $t->diag('clear backup'); $backup->clear(); $t->is($backup->getFiles(), array(), 'backup is empty'); $file = dmProject::rootify('config/ProjectConfiguration.class.php'); $t->diag('backup ' . $file); $backup->save($file); $backupFile = dmOs::join($backup->getDir(), 'config/ProjectConfiguration.class.php.' . date('Y-m-d_H-i-s')); $t->is(count($backup->getFiles()), 1, 'backup has one file'); $t->is($backup->getFiles(), array($backupFile), 'backup has ' . $backupFile); $t->is(file_get_contents($file), file_get_contents($backupFile), 'backup file is same as file'); $t->diag('clear backup'); $backup->clear(); $t->is($backup->getFiles(), array(), 'backup is empty');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(47); dm::loadHelpers(array('Dm')); sfConfig::set('sf_no_script_name', false); dmDb::table('DmPage')->checkBasicPages(); $sc = $helper->get('service_container'); $sc->mergeParameter('link_tag_record.options', array('current_span' => false))->mergeParameter('link_tag_page.options', array('current_span' => false)); $t->diag('link current_span is false'); $home = dmDb::table('DmPage')->getTree()->fetchRoot(); $helper->get('context')->setPage($home); $t->diag($home->name . ' is the current page'); $testPage = dmDb::create('DmPage', array('module' => 'main', 'action' => 'test' . dmString::random(12), 'name' => 'I am a root child', 'slug' => dmString::random())); $testPage->Node->insertAsLastChildOf($home); $scriptName = $helper->get('request')->getScriptName(); $t->diag('Current cli script name = ' . $scriptName); $t->is((string) _link('http://c2.com/cgi/wiki?DontRepeatYourself')->text('DRY'), $expected = '<a class="link" href="http://c2.com/cgi/wiki?DontRepeatYourself">DRY</a>', $expected); $t->like(£link()->render(), '|<a class="link dm_current|', '£link() has class dm_current'); $t->like(£link()->set('current_class', 'my_current')->render(), '|<a class="link my_current|', '£link() has class my_current'); $t->is((string) £link($home), (string) £link(), '£link($home) is £link()'); $t->is((string) £link('@homepage'), (string) £link($home), '£link("@homepage") is £link()'); $t->is((string) £link('main/root'), (string) £link($home), '£link("main/root") is £link()'); $t->is(£link()->getHref(), $scriptName, 'root href is ' . $scriptName); $t->is(£link()->getText(), $home->name, 'root link text is ' . $home->name); $expected = $helper->get('controller')->genUrl('dmAuth/signin'); $t->is(£link('+/dmAuth/signin')->getHref(), $expected, '+/dmAuth/signin href is ' . $expected); $rootLink = sprintf('<a class="%s" href="%s">%s</a>', 'link dm_current', $scriptName, $home->name); $t->is((string) £link(), $rootLink, 'root link is ' . $rootLink);
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(); $pageHelper = $helper->get('page_helper'); $t->is($pageHelper->getOption('widget_css_class_pattern'), dmArray::get($helper->get('service_container')->getParameter('page_helper.options'), 'widget_css_class_pattern'), 'widget_css_class_pattern : ' . $pageHelper->getOption('widget_css_class_pattern')); $widget = array('id' => 9999, 'module' => 'dmWidgetContent', 'action' => 'breadCrumb', 'value' => json_encode(array('text' => 'test title', 'tag' => 'h1')), 'css_class' => 'custom_class'); $pageHelper->setOption('widget_css_class_pattern', ''); $expected = array('dm_widget custom_class', 'dm_widget_inner'); $t->is($pageHelper->getWidgetContainerClasses($widget), $expected, 'widgetContainerClasses for breadCrumb : ' . implode(', ', $expected)); $widget['action'] = 'title'; $expected = array('dm_widget custom_class', 'dm_widget_inner'); $t->is($pageHelper->getWidgetContainerClasses($widget), $expected, 'widgetContainerClasses for title : ' . implode(', ', $expected)); $pageHelper->setOption('widget_css_class_pattern', '%module%_%action%'); $expected = array('dm_widget content_title custom_class', 'dm_widget_inner'); $t->is($pageHelper->getWidgetContainerClasses($widget), $expected, 'widgetContainerClasses for title : ' . implode(', ', $expected)); $pageHelper->setOption('widget_css_class_pattern', 'module_%module% action_%action%'); $expected = array('dm_widget module_content action_title custom_class', 'dm_widget_inner'); $t->is($pageHelper->getWidgetContainerClasses($widget), $expected, 'widgetContainerClasses for title : ' . implode(', ', $expected));
<?php require_once realpath(dirname(__FILE__) . '/../../..') . '/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $pager = $helper->get('service_container')->setParameter('doctrine_pager.model', 'DmTestPost')->getService('doctrine_pager')->setMaxPerPage(5)->setQuery($query = dmDb::query('DmTestPost t'))->setPage(1)->init(); $t = new lime_test(16); $t->isa_ok($pager, 'dmDoctrinePager', 'Got a dmDoctrinePager instance'); $t->is($pager->getNbResults(), 20, 'Pager has 20 results'); $pager = $helper->get('front_pager_view')->setPager($pager)->setOption('navigation_top', true)->setOption('navigation_bottom', true); $t->isa_ok($pager, 'dmFrontPagerView', 'Got a dmFrontPagerView instance'); $t->is($pager->getNbResults(), 20, 'Pager has 20 results'); // Countable interface $t->diag('Countable interface'); $t->is(count($pager), 20, 'Pager has 20 results'); // Iterator interface $t->diag('Iterator interface'); $pager->init(); $normal = 0; $iterated = 0; foreach ($pager->getResults() as $object) { $normal++; } foreach ($pager as $object) { $iterated++; } $t->is($iterated, $normal, '"Iterator" interface loops over objects in the current pager'); $t->is($pager->getCurrent(), $query->fetchOne(), 'Found the first post'); $t->comment('Render navigation top'); $pattern = '<div class="pager"><ul class="clearfix"><li class="page current"><span class="link">1</span></li><li class="page">.+</li></ul></div>'; $t->like($navigation = $pager->renderNavigationTop(), '|^' . $pattern . '$|', 'navigation top: ' . $navigation);
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(3); $user = $helper->get('user'); $defaultCulture = sfConfig::get('sf_default_culture'); $user->setCulture($defaultCulture); $widget = dmDb::create('DmWidget', array('module' => 'dmWidgetContent', 'action' => 'title', 'dm_zone_id' => dmDb::table('DmZone')->findOne()->id, 'value' => $defaultCulture . ' value'))->saveGet(); $widgetId = $widget->id; $wanted = array_merge($widget->toArray()); /* * Add fancy translations */ foreach (array('z1', 'c2', 'c3') as $culture) { $user->setCulture($culture); $widget->value = $culture . ' value'; $widget->save(); } $user->setCulture($defaultCulture); $widgetArray = dmDb::query('DmWidget w')->leftJoin('w.Translation t WITH t.lang = ?', $defaultCulture)->where('w.id = ?', $widgetId)->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY); $t->is($widgetArray, $wanted, 'Fetched widget array for existing culture'); $query = dmDb::query('DmWidget w')->leftJoin('w.Translation t WITH t.lang = ? OR t.lang = ?', array('__', $defaultCulture))->where('w.id = ?', $widgetId); $t->diag($query->getSqlQuery()); $widgetArray = $query->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY); $t->is($widgetArray, $wanted, 'Fetched widget array with i18n fallback for non existing culture'); $widgetArray = dmDb::query('DmWidget w')->leftJoin('w.Translation t WITH t.lang = ? OR t.lang = ?', array('z1', $defaultCulture))->where('w.id = ?', $widgetId)->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY); $wanted2 = $wanted; $wanted2['Translation']['z1'] = array('id' => $widget->id, 'value' => 'z1 value', 'lang' => 'z1'); $t->is($widgetArray, $wanted2, 'Fetched widget array for existing, non-default culture');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $sc = $helper->getServiceContainer(); // Configuration // -- this script is needed for some tests. It is located in plugin's test/unit/utils folder $dump_headers_url = 'http://diem-project.org/misc/dmWebBrowserTestDumpHeaders.php'; // tests $nb_test_orig = 63; $adapter_list = array('sfCurlAdapter', 'sfFopenAdapter', 'sfSocketsAdapter'); // -- sites used for testing requests $example_site_url = 'http://www.google.com'; $askeet_params = array('url' => 'http://www.askeet.com', 'login' => 'francois', 'password' => 'llactnevda2'); // -- cookies, file and directory automatically created $cookies_dir = dirname(__FILE__) . '/../data/sfCurlAdapter'; $cookies_file = $cookies_dir . '/cookies.txt'; /** * stub class * **/ class myTestWebBrowser extends dmWebBrowser { protected $requestMethod; public function call($uri, $method = 'GET', $parameters = array(), $headers = array(), $changeStack = true) { parent::call($uri, $method, $parameters, $headers, $changeStack); $this->requestMethod = $this->stack[$this->stackPosition]['method']; } public function getRequestMethod()
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(14); $user = $helper->get('user'); $t->ok($helper->get('i18n')->cultureExists($user->getCulture()), 'The user\'s culture exists'); $browser = $user->getBrowser(); $t->is($browser->isUnknown(), true, 'Cli browser is unknown'); $t->is($user->isAuthenticated(), false, 'User is not authenticated'); $t->is($user->can('admin'), false, 'User can not admin'); $randomCredential = dmString::random(); $t->is($user->can($randomCredential), false, 'User can not ' . $randomCredential); $t->diag('grant ' . $randomCredential . ' credential'); $user->addCredential($randomCredential); $t->is($user->can($randomCredential), false, 'User can still not ' . $randomCredential . ' because it\'s not authenticated'); $userRecord = dmDb::table('DmUser')->findOne(); $user->signin($userRecord); $t->is($user->isAuthenticated(), true, 'User is authenticated'); $t->diag('grant ' . $randomCredential . ' credential'); $user->addCredential($randomCredential); $t->is($user->can($randomCredential), true, 'Now user can ' . $randomCredential); $user->signout(); $t->is($user->isAuthenticated(), false, 'User is no more authenticated'); $t->is($user->can($randomCredential), false, 'user can no more ' . $randomCredential); // Testing DmUser records $username = dmString::random(8); $t->diag('Create user ' . $username); $userRecord = dmDb::create('DmUser', array('username' => $username, 'password' => 'changeme', 'email' => $username . '@diem-project.org'))->saveGet(); $t->ok($userRecord->exists(), 'User has been created');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(); $values = array('name' => 'Jo', 'email' => '*****@*****.**'); /** * @var dmMail */ $mail = $helper->get('mail')->setTemplate('test')->addValues($values); $template = $mail->getTemplate(); /** * @var Swift_Message */ $message = $mail->getMessage(); $t->ok(!$mail->isRendered(), 'Mail is not rendered'); $t->is_deeply($mail->getValues(), $values, 'Mail values are ' . print_r($values, true)); $t->ok(!$template->exists(), 'The mail template does not exist'); $mail->render(); $t->ok($mail->isRendered(), 'Mail is rendered'); $t->ok($template->exists(), 'The mail template exists'); $expected = array('*****@*****.**' => null); $t->is($message->getFrom(), $expected, 'Message from is ' . print_r($expected, true)); $template->from_email = '*****@*****.**'; $template->save(); /** * @var dmMail */ $mail = $helper->get('mail')->setTemplate('test')->addValues($values)->render(); /**
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $isFront = sfConfig::get('dm_context_type') == 'front'; $sc = $helper->get('service_container'); $t = new lime_test(); $user = $helper->get('user'); $theme = $user->getTheme(); $t->is($sc->getParameter('user.culture'), $user->getCulture(), 'culture is synchronized to ' . $user->getCulture()); $t->is($sc->getParameter('user.theme'), $user->getTheme(), 'theme is synchronized to ' . $user->getTheme()); foreach (sfConfig::get('dm_i18n_cultures') as $culture) { $user->setCulture($culture); $t->is($sc->getParameter('user.culture'), $user->getCulture(), 'culture is synchronized to ' . $user->getCulture()); } if ($isFront) { $themeManager = $sc->get('theme_manager'); foreach ($themeManager->getThemes() as $theme) { $user->setTheme($theme); $t->is($sc->getParameter('user.theme'), $user->getTheme(), 'theme is synchronized to ' . $user->getTheme()); } } class dmOtherBrowser extends dmBrowser { } $defaultBrowserClass = $sc->getParameter('browser.class'); $t->isa_ok($sc->get('browser'), $defaultBrowserClass, 'browser service is a ' . $defaultBrowserClass); $t->isa_ok($sc->get('browser', 'dmOtherBrowser'), 'dmOtherBrowser', 'browser service is a dmOtherBrowser'); $t->isa_ok($sc->get('browser'), $defaultBrowserClass, 'browser service is a ' . $defaultBrowserClass);
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(12); $sc = $helper->get('service_container'); $user = $helper->get('user'); $theme = $user->getTheme(); $user->setCulture('en'); $imageFullPath = $theme->getFullPath('images/testImage.jpg'); $sc->get('filesystem')->mkdir(dirname($imageFullPath)); copy(dmOs::join(sfConfig::get('dm_core_dir'), 'data/image/defaultMedia.jpg'), $imageFullPath); $t->ok(file_exists($imageFullPath), 'image copied : ' . $imageFullPath); $imageI18nFullPath = $theme->getFullPath('images/en/testImage.jpg'); $helper->get('filesystem')->mkdir(dirname($imageI18nFullPath)); copy(dmOs::join(sfConfig::get('dm_core_dir'), 'data/image/defaultMedia.jpg'), $imageI18nFullPath); $t->ok(file_exists($imageI18nFullPath), 'image copied : ' . $imageI18nFullPath); $res = $sc->getService('media_resource')->initialize('images/testImage.jpg'); $t->is($res->getPathFromWebDir(), $theme->getPath('images/testImage.jpg'), 'images/testImage.jpg : ' . $res->getPathFromWebDir()); $res = $sc->getService('media_resource')->initialize('images/en/testImage.jpg'); $t->is($res->getPathFromWebDir(), $theme->getPath('images/en/testImage.jpg'), 'images/en/testImage.jpg : ' . $res->getPathFromWebDir()); $res = $sc->getService('media_resource')->initialize('images/%culture%/testImage.jpg'); $t->is($res->getPathFromWebDir(), $theme->getPath('images/en/testImage.jpg'), 'images/%culture%/testImage.jpg : ' . $res->getPathFromWebDir()); $res = $sc->getService('media_resource')->initialize('testImage.jpg'); $t->is($res->getPathFromWebDir(), $theme->getPath('images/testImage.jpg'), 'testImage.jpg : ' . $res->getPathFromWebDir()); $res = $sc->getService('media_resource')->initialize('%culture%/testImage.jpg'); $t->is($res->getPathFromWebDir(), $theme->getPath('images/en/testImage.jpg'), '%culture%/testImage.jpg : ' . $res->getPathFromWebDir()); $res = $sc->getService('media_resource')->initialize($imageI18nFullPath); $t->is($res->getPathFromWebDir(), $theme->getPath('images/en/testImage.jpg'), '$imageI18nFullPath : ' . $res->getPathFromWebDir()); $user->setCulture('fr');
<?php require_once realpath(dirname(__FILE__) . '/../../..') . '/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('admin'); $t = new lime_test(1); $t->comment('Check config files order'); $configPath = 'config/dm/modules.yml'; $t->is($helper->getConfiguration()->getConfigPaths($configPath), array(dmOs::join(sfConfig::get('dm_core_dir'), $configPath), dmOs::join(sfConfig::get('dm_admin_dir'), $configPath), dmOs::join(sfConfig::get('dm_core_dir'), 'plugins/dmUserPlugin', $configPath), dmOs::join(sfConfig::get('sf_plugins_dir'), 'dmTagPlugin', $configPath), dmOs::join(sfConfig::get('sf_plugins_dir'), 'dmContactPlugin', $configPath), dmOs::join(sfConfig::get('sf_root_dir'), $configPath), dmOs::join(sfConfig::get('sf_apps_dir'), 'admin', $configPath)), 'config files are well ordered');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(); $helper->get('user')->setCulture('fr'); $msgs = $helper->get('markdown_translator')->execute(); $t->ok(isset($msgs['Link']), 'Link is translated'); $t->is($msgs['Link'], 'Lien', 'Link is translated to Lien'); $t->ok(isset($msgs['Heading 3']), 'Heading 3 is translated'); $t->is($msgs['Heading 3'], 'Titre 3', 'Heading 3 is translated to Titre 3');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(); $mtr = $helper->get('mime_type_resolver'); $t->is($mtr->getByFilename($file = __FILE__), $mt = 'application/x-httpd-php', $file . ' : ' . $mt); $t->is($mtr->getGroupByFilename($file = __FILE__), $mt = 'application', $file . ' : ' . $mt); $t->is($mtr->getByExtension($ext = 'php'), $mt = 'application/x-httpd-php', $ext . ' : ' . $mt); $t->is($mtr->getGroupByExtension($ext = 'php'), $mt = 'application', $ext . ' : ' . $mt);
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('admin'); $t = new lime_test(16); dm::loadHelpers(array('Dm')); $t->is((string) _link('http://c2.com/cgi/wiki?DontRepeatYourself')->text('DRY'), $expected = '<a class="link" href="http://c2.com/cgi/wiki?DontRepeatYourself">DRY</a>', $expected); $scriptName = $helper->get('request')->getRelativeUrlRoot(); $t->diag('Current cli script name = ' . $scriptName); $expected = $helper->get('controller')->genUrl('@homepage'); $t->is(_link()->getHref(), $expected, 'empty source is ' . $expected); $t->is(_link()->getHref('@homepage'), $expected, 'homepage href is ' . $expected); $expected = $helper->get('controller')->genUrl('dmAuthAdmin/signin'); $t->is(_link('+/dmAuthAdmin/signin')->getHref(), $expected, '+/dmAuthAdmin/signin href is ' . $expected); $expected = $helper->get('controller')->genUrl('dmAuthAdmin/signin'); $t->is($helper->get('helper')->link('+/dmAuthAdmin/signin')->getHref(), $expected, 'with helper service, +/dmAuthAdmin/signin href is ' . $expected); $frontScriptName = $helper->get('script_name_resolver')->get('front'); $t->is(_link('app:front')->getHref(), $frontScriptName, $frontScriptName); $t->is(_link('app:front/test')->getHref(), $expected = $frontScriptName . '/test', $expected); $t->is(_link('app:front/test?var1=val1&var2=val2')->getHref(), $expected = $frontScriptName . '/test?var1=val1&var2=val2', $expected); $t->comment('Create a test page'); $page = dmDb::create('DmPage', array('module' => dmString::random(), 'action' => dmString::random(), 'name' => dmString::random(), 'slug' => dmString::random())); $page->Node->insertAsFirstChildOf(dmDb::table('DmPage')->getTree()->fetchRoot()); $expected = $helper->get('script_name_resolver')->get('front'); $t->is(_link($page)->getHref(), $expected = $frontScriptName . '/' . $page->slug, $expected); $t->is(_link('page:' . $page->id)->getHref(), $expected = $frontScriptName . '/' . $page->slug, $expected); $t->is(_link('page:' . $page->id . '?var1=val1&var2=val2')->getHref(), $expected = $frontScriptName . '/' . $page->slug . '?var1=val1&var2=val2', $expected); $t->is(_link('page:' . $page->id . '?var1=val1&var2=val2#anchor')->getHref(), $expected = $frontScriptName . '/' . $page->slug . '?var1=val1&var2=val2#anchor', $expected); sfConfig::set('sf_debug', true); $badSource = 'page:9999999999999';
<?php require_once realpath(dirname(__FILE__) . '/../../../../..') . '/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(4); $module = $helper->get('module_manager')->getModule('dmContact'); $t->ok($module->isProject(), 'project module'); $t->ok($module->isPlugin(), 'plugin module'); $t->is($module->getPluginName(), 'dmContactPlugin', 'dmContact plugin is dmContactPlugin'); $t->ok(!$module->isOverridden(), 'dmContactPlugin is not overridden');
<?php require_once realpath(dirname(__FILE__) . '/../../..') . '/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(120); $helper->loremizeDatabase(15, $t); $fruit = dmDb::table('DmTestFruit')->findOne(); $domain = dmDb::table('DmTestDomain')->findOne(); $categ = dmDb::table('DmTestCateg')->findOne(); $post = dmDb::table('DmTestPost')->findOne(); $comment = dmDb::table('DmTestComment')->findOne(); $tag = dmDb::table('DmTestTag')->findOne(); $t->comment('Add more associations'); if (!$categ->Domains->count()) { $categ->Domains[] = dmDb::table('DmTestDomain')->findOne(); $categ->save(); $domain->refreshRelated('Categs'); } if (!$tag->Posts->count()) { dmDb::table('DmTestPostTag')->create(array('post_id' => $post->id, 'tag_id' => $tag->id))->save(); $tag->refreshRelated('Posts'); $post->refreshRelated('Tags'); } $t->diag('Related record tests with record hydration'); try { $fruit->getRelatedRecord('DmTestPost'); $ok = false; } catch (dmRecordException $e) { $ok = true; }
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->bootFast(); $t = new lime_test(); $nbAreas = dmDb::table('DmArea')->count(); $t->comment($nbAreas . ' areas'); $pageView = dmDb::table('DmPageView')->create(array('module' => dmString::random(), 'action' => dmString::random()))->saveGet(); $area = $pageView->Area; $t->ok($pageView->exists(), 'Created a pageView'); $t->ok($area->exists(), 'Created an area'); $t->is(dmDb::table('DmArea')->count(), $nbAreas + 1, $nbAreas . '+1 in db'); $pageView->delete(); $t->ok(!$pageView->exists(), 'Deleted the pageView'); $t->ok(!$area->exists(), 'Deleted the area by cascade'); $t->is(dmDb::table('DmArea')->count(), $nbAreas, $nbAreas . ' in db'); $layout = dmDb::table('DmLayout')->create(array('name' => dmString::random()))->saveGet(); $area = $layout->getArea('top'); $t->ok($layout->exists(), 'Created a layout'); $t->ok($area->exists(), 'Created a top area'); $t->is(dmDb::table('DmArea')->count(), $nbAreas + 1, $nbAreas . '+1 in db'); $layout->delete(); $t->ok(!$layout->exists(), 'Deleted the layout'); $t->ok(!$area->exists(), 'Deleted the area by cascade'); $t->is(dmDb::table('DmArea')->count(), $nbAreas, $nbAreas . ' in db');
<?php $config = getcwd() . '/config/ProjectConfiguration.class.php'; require_once $config; require_once dm::getDir() . '/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); // load both standard and alternative helpers dm::loadHelpers(array('Dm', 'DmAlternative', 'I18N')); $t = new lime_test(29); /* * $helper is the test helper. It acts as a service container * and can provide you all services with its get() method. * so here we get the 'helper' service which is the template helper instance */ $templateHelper = $helper->get('helper'); // £ function $t->is(£('div', 'content'), _tag('div', 'content'), '£ == _tag'); // £ method $t->is($templateHelper->£('div', 'content'), $templateHelper->tag('div', 'content'), '£ == _tag'); $t->is(£('div', 'content'), _tag('div', 'content'), '£ == _tag'); // £link method $t->is((string) $templateHelper->£link()->text('home'), (string) $templateHelper->link()->text('home'), '£link == _link'); $t->is((string) £link()->text('home'), (string) _link()->text('home'), '£link == _link'); $openDiv = '<div>'; $t->is(£o('div'), _tagO('div'), $openDiv); $openDiv = '<div class="test_class">'; $t->is(£o('div.test_class'), _tagO('div.test_class'), $openDiv); $openDiv = '<div id="test_id" class="test_class other_class">'; $t->is(£o('div#test_id.test_class.other_class'), _tagO('div#test_id.test_class.other_class'), $openDiv); $openDiv = '<div class="test_class other_class" id="test_id">';
<?php require_once realpath(dirname(__FILE__) . '/../../..') . '/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(39); $wtm = $helper->get('widget_type_manager'); $widgetType = $wtm->getWidgetType('dmWidgetNavigation', 'menu'); $formClass = $widgetType->getOption('form_class'); $page1 = dmDb::table('DmPage')->findOneByModuleAndAction('main', 'page1'); $t->comment('Create a menu widget'); $widget = dmDb::create('DmWidget', array('module' => $widgetType->getModule(), 'action' => $widgetType->getAction(), 'value' => '[]', 'dm_zone_id' => $page1->PageView->Area->Zones[0])); $t->comment('Create a ' . $formClass . ' instance'); $form = new $formClass($widget); $form->removeCsrfProtection(); $html = $form->render(); $t->like($html, '_^<form\\s(.|\\n)*</form>$_', 'Successfully obtained and rendered a ' . $formClass . ' instance'); $t->is(count($form->getStylesheets()), 2, 'This widget form requires 2 additional stylesheets'); $t->is(count($form->getJavascripts()), 3, 'This widget form requires 3 additional javascripts'); $t->comment('Submit an empty form'); $form->bind(array(), array()); $t->is($form->isValid(), true, 'The form is valid'); $t->comment('Save the widget'); $form->updateWidget()->save(); $t->ok($widget->exists(), 'Widget has been saved'); $expected = array('ulClass' => '', 'liClass' => '', 'items' => array()); $t->is_deeply($widget->values, $expected, 'Widget values are correct'); $t->comment('Recreate the form from the saved widget'); $form = new $formClass($widget); $form->removeCsrfProtection(); $t->is($form->getDefault('link'), array(), 'The form default text is correct');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('admin'); $t = new lime_test(2); $t->comment('Check config files order'); $configPath = 'config/dm/modules.yml'; $paths = $helper->getConfiguration()->getConfigPaths($configPath); $t->is($paths[0], dmOs::join(sfConfig::get('dm_core_dir'), $configPath), 'dmCore is first'); $t->is($paths[1], dmOs::join(sfConfig::get('dm_admin_dir'), $configPath), 'dmAdmin is second');
<?php require_once realpath(dirname(__FILE__) . '/../../..') . '/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(); if (strpos(getcwd(), 'hudson')) { return; } $helper->get('page_tree_watcher')->connect(); $nbPage = dmDb::table('DmPage')->count(); $domain = dmDb::table('DmTestDomain')->create(array('title' => dmString::random(), 'is_active' => false))->saveGet(); $t->ok($domain->exists(), 'Record has been saved'); $t->ok(!$domain->isActive, 'Record is not active'); $t->is(dmDb::table('DmPage')->count(), $nbPage, 'No new page'); /* * With some old version of sqlite, like on continuous integration server * This test will not work as expected */ if (strpos(getcwd(), 'hudson')) { return; } $t->ok($page = $domain->getDmPage(), 'Domain has a page'); $t->is(dmDb::table('DmPage')->count(), $nbPage + 1, 'One new page'); $t->is($page->isActive, false, 'The page is not active'); $t->is($page->Record, $domain, 'The page record is the domain'); $domain = dmDb::table('DmTestDomain')->create(array('title' => dmString::random(), 'is_active' => true))->saveGet(); $t->ok($domain->exists(), 'Record has been saved'); $t->ok($domain->isActive, 'Record is active'); $t->is(dmDb::table('DmPage')->count(), $nbPage + 1, 'No new page'); $t->ok($page = $domain->getDmPage(), 'Domain has a page');
public function initialize() { parent::initialize(); $this->folderTable = dmDb::table('dmMediaFolder'); $this->mediaTable = dmDb::table('dmMedia'); }
<?php $config = getcwd() . '/config/ProjectConfiguration.class.php'; require_once $config; require_once dm::getDir() . '/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(50); dm::loadHelpers(array('Dm', 'I18N')); $menu = $helper->get('menu')->name('Test Menu'); $root1 = $menu->getChild('Root 1'); $root1->addChild('Child 1'); $last = $root1->addChild('Child 2'); $root2 = $menu->getChild('Root 2'); $child1 = $root2->addChild('Child 1'); $child2 = $child1->addChild('Child 2'); $t->is($root1->getLevel(), 0, 'Test root level is 0'); $t->is($root2->getLevel(), 0, 'Test root level is 0'); $t->is($child1->getLevel(), 1, 'Test level is 1'); $t->is($child2->getLevel(), 2, 'Test level is 2'); $t->is($child2->getPathAsString(), 'Test Menu > Root 2 > Child 1 > Child 2', 'Test getPathAsString()'); $t->is(get_class($root1), get_class($menu), 'Test children are created as same class as parent'); // array access $t->is($menu['Root 1']['Child 1']->getName(), 'Child 1', 'Test name()'); // countable $t->is(count($menu), $menu->count(), 'Test sfSympalMenu Countable interface'); $t->is(count($root1), 2, 'Test sfSympalMenu Countable interface'); $count = 0; foreach ($root1 as $key => $value) { $count++; $t->is($key, 'Child ' . $count, 'Test iteratable');
<?php $config = getcwd() . '/config/ProjectConfiguration.class.php'; require_once $config; require_once dm::getDir() . '/dmCorePlugin/test/unit/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); // load both standard and alternative helpers dm::loadHelpers(array('Dm', 'DmAlternative', 'I18N')); $t = new lime_test(30); /* * $helper is the test helper. It acts as a service container * and can provide you all services with its get() method. * so here we get the 'helper' service which is the template helper instance */ $templateHelper = $helper->get('helper'); // £ function $t->is(£('div', 'content'), _tag('div', 'content'), '£ == _tag'); // £ method $t->is($templateHelper->£('div', 'content'), $templateHelper->tag('div', 'content'), '£ == _tag'); $t->is(£('div', 'content'), _tag('div', 'content'), '£ == _tag'); // £link method $t->is((string) $templateHelper->£link()->text('home'), (string) $templateHelper->link()->text('home'), '£link == _link'); $t->is((string) £link()->text('home'), (string) _link()->text('home'), '£link == _link'); $openDiv = '<div>'; $t->is(£o('div'), _tagO('div'), $openDiv); $openDiv = '<div class="test_class">'; $t->is(£o('div.test_class'), _tagO('div.test_class'), $openDiv); $openDiv = '<div id="test_id" class="test_class other_class">'; $t->is(£o('div#test_id.test_class.other_class'), _tagO('div#test_id.test_class.other_class'), $openDiv); $openDiv = '<div class="test_class other_class" id="test_id">';
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(19); $browser = $helper->get('browser'); $namorokaUbuntu = 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2pre) Gecko/20100116 Ubuntu/9.10 (karmic) Namoroka/3.6pre'; $namorokaMac = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko/20100105 Firefox/3.6'; $chromeMac = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.49 Safari/532.5'; $safariMac = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; fr-fr) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10'; $opera9Windows = 'Opera/9.61 (Windows NT 6.0; U; en) Presto/2.1.1'; $opera10Windows = 'Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10'; $googleBot = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'; $msnBot = 'msnbot/2.0b (+http://search.msn.com/msnbot.htm)'; $firefoxLinux = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.17) Gecko/2010010604 Linux Mint/7 (Gloria) Firefox/3.0.17'; $firefoxWindows = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6 (.NET CLR 3.5.30729)'; $firefoxOsx = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8'; //$firefoxWindowsSp2 = 'Gecko 2009122116Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.17) Gecko/2009122116 Firefox[xSP_2:077784879bbf239604c69a247f6786a0_220] 967907703 (.NET CLR 3.5.30729)'; $chromeLinux = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.43 Safari/532.5'; $speedySpider = 'Speedy Spider (http://www.entireweb.com/about/search_tech/speedy_spider/)'; $minefieldMac = 'Gecko 20100113Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.3a1pre) Gecko/20100113 Minefield/3.7a1pre'; $ie7Windows = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.5.30729; InfoPath.2; .NET CLR 3.0.30729; MSOffice 12)'; $ie6Windows = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; DigExt)'; $feedFetcherGoogle = 'Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 2 subscribers; feed-id=6924676383167400434)'; $iphone = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; de-de) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7D11'; $yahooBot = 'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)'; $tests = array($namorokaUbuntu => array('browser_name' => 'firefox', 'browser_version' => '3.6', 'is_unknown' => false), $namorokaMac => array('browser_name' => 'firefox', 'browser_version' => '3.6', 'is_unknown' => false), $chromeMac => array('browser_name' => 'chrome', 'browser_version' => '4.0', 'is_unknown' => false), $safariMac => array('browser_name' => 'safari', 'browser_version' => '4.0', 'is_unknown' => false), $googleBot => array('browser_name' => 'googlebot', 'browser_version' => '2.1', 'is_unknown' => false), $msnBot => array('browser_name' => 'msnbot', 'browser_version' => '2.0', 'is_unknown' => false), $yahooBot => array('browser_name' => 'yahoobot', 'browser_version' => null, 'is_unknown' => false), $opera9Windows => array('browser_name' => 'opera', 'browser_version' => '9.61', 'is_unknown' => false), $opera10Windows => array('browser_name' => 'opera', 'browser_version' => '10.10', 'is_unknown' => false), $firefoxLinux => array('browser_name' => 'firefox', 'browser_version' => '3.0', 'is_unknown' => false), $firefoxWindows => array('browser_name' => 'firefox', 'browser_version' => '3.5', 'is_unknown' => false), $firefoxOsx => array('browser_name' => 'firefox', 'browser_version' => '3.5', 'is_unknown' => false), $chromeLinux => array('browser_name' => 'chrome', 'browser_version' => '4.0', 'is_unknown' => false), $speedySpider => array('browser_name' => null, 'browser_version' => null, 'is_unknown' => true), $minefieldMac => array('browser_name' => 'firefox', 'browser_version' => '3.7', 'is_unknown' => false), $ie7Windows => array('browser_name' => 'msie', 'browser_version' => '7.0', 'is_unknown' => false), $ie6Windows => array('browser_name' => 'msie', 'browser_version' => '6.0', 'is_unknown' => false), $feedFetcherGoogle => array('browser_name' => null, 'browser_version' => null, 'is_unknown' => true), $iphone => array('browser_name' => 'applewebkit', 'browser_version' => '528.18', 'is_unknown' => false)); $parser = $helper->get('user_agent_parser'); foreach ($tests as $userAgent => $description) { $browser->configureFromUserAgentString($userAgent, $parser);
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(36); dm::loadHelpers(array('Dm', 'I18N')); $openDiv = '<div>'; $t->is(_open('div'), $openDiv, $openDiv); $openDiv = '<div class="test_class">'; $t->is(_open('div.test_class'), $openDiv, $openDiv); $openDiv = '<div id="test_id" class="test_class other_class">'; $t->is(_open('div#test_id.test_class.other_class'), $openDiv, $openDiv); $openDiv = '<div class="test_class other_class" id="test_id">'; $t->is(_open('div', array('id' => 'test_id', 'class' => 'test_class other_class')), $openDiv, $openDiv); $openDiv = '<div title="fancy title" class="first_class test_class other_class" id="test_id">'; $t->is(_open('div.first_class title="fancy title"', array('id' => 'test_id', 'class' => 'test_class other_class')), $openDiv, $openDiv); $t->is(£('div'), $expected = '<div></div>', $expected); $t->is(£('br'), $expected = '<br />', $div); $t->is(£('hr'), $expected = '<hr />', $expected); $t->is(£('img'), $expected = '<img />', $expected); $t->is(£('input'), $expected = '<input />', $expected); $div = '<div id="test_id" class="test_class other_class"></div>'; $t->is(£('div#test_id.test_class.other_class'), $div, $div); $div = '<div id="test_id" class="test_class">div content</div>'; $t->is(£('div#test_id.test_class', 'div content'), $div, $div); $div = '<div id="test_id" class="test_class">div content</div>'; $t->is(£('div#test_id.test_class', 'div content'), $div, $div); $div = '<div class="' . htmlentities('{"attr":"value"}') . '">div content</div>'; $t->is(£('div', array('json' => array('attr' => 'value')), 'div content'), $div, $div); $div = '<div id="test_id" class="test_class ' . htmlentities('{"attr":"value"}') . '">div content</div>';
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(33); $v = new dmValidatorCssIdAndClasses(); $t->diag('->clean()'); foreach (array('a', 'a_b', 'a-c', 'qieurgfbqoiuzbfvoqiuzZFZGPSOZDNZKFjflzkh986875OoihzyfvbxoquyfvxqozufyxqzUEFV', '9', '_', ' bla rebla ', '- _ 8', '.class', '.a b.c.d', '#myid.a b.c.d', '#myid class1 class2', 'class1 class2 #myid', '.a b#myid.c.d', '.a b#myid.c.d#myid', '.a b#myid.c.d #myid', '#my_id', '#my-id', ' #my-id ') as $classes) { try { $t->comment('"' . $classes . '" -> "' . $v->clean($classes) . '"'); $t->pass('->clean() checks that the value is a valid css class name + id'); } catch (sfValidatorError $e) { $t->fail('->clean() checks that the value is a valid css class name + id'); } } foreach (array('.zegze$g.zegf', '/', 'a/f', 'a^', 'a # @', 'é', '-{') as $nonClass) { $t->comment($nonClass); try { $v->clean($nonClass); $t->fail('->clean() throws an sfValidatorError if the value is not a valid css class name + id'); $t->skip('', 1); } catch (sfValidatorError $e) { $t->pass('->clean() throws an sfValidatorError if the value is not a valid css class name + id'); $t->is($e->getCode(), 'invalid', '->clean() throws a sfValidatorError'); } }
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); $t = new lime_test(26); $wtm = $helper->get('widget_type_manager'); $widgetType = $wtm->getWidgetType('dmWidgetContent', 'link'); $formClass = $widgetType->getOption('form_class'); $t->comment('Create a test page'); $testPage = dmDb::create('DmPage', array('module' => dmString::random(), 'action' => dmString::random(), 'name' => dmString::random(), 'slug' => dmString::random())); $testPage->Node->insertAsFirstChildOf(dmDb::table('DmPage')->getTree()->fetchRoot()); $t->comment('Create a test widget'); $widget = dmDb::create('DmWidget', array('module' => $widgetType->getModule(), 'action' => $widgetType->getAction(), 'value' => '[]', 'dm_zone_id' => $testPage->PageView->Area->Zones[0])); $t->comment('Create a ' . $formClass . ' instance'); dmDb::table('DmMediaFolder')->checkRoot(); $t->comment('Create a test image media'); $mediaFileName = 'test_' . dmString::random() . '.jpg'; copy(dmOs::join(sfConfig::get('dm_core_dir'), 'data/image/defaultMedia.jpg'), dmOs::join(sfConfig::get('sf_upload_dir'), $mediaFileName)); $media = dmDb::create('DmMedia', array('file' => $mediaFileName, 'dm_media_folder_id' => dmDb::table('DmMediaFolder')->checkRoot()->id))->saveGet(); $t->ok($media->exists(), 'A test media has been created'); $form = new $formClass($widget); $form->removeCsrfProtection(); $html = $form->render(); $t->like($html, '_^<form\\s(.|\\n)*</form>$_', 'Successfully obtained and rendered a ' . $formClass . ' instance'); $t->is($form->getStylesheets(), array(), 'This widget form requires no additional stylesheet'); $t->is($form->getJavascripts(), array(), 'This widget form requires no additional javascript'); $t->comment('Submit an empty form'); $form->bind(array(), array()); $t->is($form->isValid(), false, 'The form is not valid'); $t->comment('Use a bad href');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot('front'); clearstatcache(true); $isSqlite = Doctrine_Manager::getInstance()->getConnection('doctrine') instanceof Doctrine_Connection_Sqlite; $t = new lime_test(16 + ($isSqlite ? 0 : 1) + 3 * count($helper->get('i18n')->getCultures())); $user = $helper->get('user'); try { $index = $helper->get('search_index'); $t->fail('Can\'t create index without dir'); } catch (dmSearchIndexException $e) { $t->pass('Can\'t create index without dir'); } $engine = $helper->get('search_engine'); $t->isa_ok($engine, 'dmSearchEngine', 'Got a dmSearchEngine instance'); $expected = dmProject::rootify(dmArray::get($helper->get('service_container')->getParameter('search_engine.options'), 'dir')); $t->is($engine->getFullPath(), $expected, 'Current engine full path is ' . $expected); $t->ok(!file_exists(dmProject::rootify('segments.gen')), 'There is no segments.gen in project root dir'); $engine->setDir('cache/testIndex'); foreach ($helper->get('i18n')->getCultures() as $culture) { $user->setCulture($culture); $currentIndex = $engine->getCurrentIndex(); $t->is($currentIndex->getName(), 'dm_page_' . $culture, 'Current index name is ' . $currentIndex->getName()); $t->is($currentIndex->getCulture(), $culture, 'Current index culture is ' . $culture); $t->is($currentIndex->getFullPath(), dmProject::rootify('cache/testIndex/' . $currentIndex->getName()), 'Current index full path is ' . $currentIndex->getFullPath()); } $user->setCulture(sfConfig::get('sf_default_culture')); $currentIndex = $engine->getCurrentIndex(); $t->isa_ok($currentIndex->getLuceneIndex(), 'Zend_Search_Lucene_Proxy', 'The current index is instanceof Zend_Search_Lucene_Proxy');
<?php require_once dirname(__FILE__) . '/helper/dmUnitTestHelper.php'; $helper = new dmUnitTestHelper(); $helper->boot(); $t = new lime_test(8); $markdown = $helper->get('markdown'); $t->comment('Basic features'); $markdownText = 'this is a **markdown** text with *some basic* features'; $html = '<p class="dm_first_p">this is a <strong>markdown</strong> text with <em>some basic</em> features</p>'; $t->is($markdown->toHtml($markdownText), $html, $markdown->toHtml($markdownText)); $text = 'this is a markdown text with some basic features'; $t->is($markdown->toText($markdownText), $text, $markdown->toText($markdownText)); $text = 'this is a markdown text with some basic features'; $t->is($markdown->brutalToText($markdownText), $text, $markdown->brutalToText($markdownText)); $t->is($markdown->toHtml($markdownText), $html, $markdown->toHtml($markdownText)); $t->comment('Standart image inclusion'); $markdownText = 'this is a **markdown** ![image alt text](/uploads/image.png) [with](http://diem-project.org "link title") *advanced* features'; $text = 'this is a markdown with advanced features'; $t->is($markdown->toText($markdownText), $text, $markdown->toText($markdownText)); $text = 'this is a markdown image alt text with advanced features'; $t->is($markdown->brutalToText($markdownText), $text, $markdown->brutalToText($markdownText)); $text = 'this is a markdown image alt text with advanced features'; $t->is($markdown->brutalToText($markdownText), $text, $markdown->brutalToText($markdownText)); $text = <<<EOF ##Replace a Diem service Let's suppose we want to change the way Diem detect browsers. This is done with the *browser* service. We will tell Diem to use another class for the browser service in **config/dm/services.yml** ~~~ parameters: