t('GeSHi input filter'), 'desc' => t('Test the GeSHi input filter.'), 'group' => t('GeSHi module'), ); } /** * SimpleTest core method: code run before each and every test method. * * Optional. You only need this if you have setup tasks. */ function setUp() { // Always call the setUp() function from the parent class. parent::setUp(); // Make sure that Geshi filter module is enabled. $this->drupalModuleEnable('geshifilter'); // Disable CAPTCHA module so users can post without trouble (just in case) $this->drupalModuleDisable('captcha'); // Create a filter admin user $permissions = array( 'administer filters', 'access devel information', ); $this->filter_admin_user = $this->drupalCreateUserRolePerm($permissions); // Create a normal user for page creation $permissions = array( 'access devel information', 'edit own page content', 'create page content' ); $this->normal_user = $this->drupalCreateUserRolePerm($permissions); // log in with filter admin user $this->drupalLoginUser($this->filter_admin_user); // add an input format with only geshi filter $edit = array( 'name' => $this->randomName(10, 'inputformat_'), 'filters[geshifilter/0]' => TRUE, 'roles[2]' => TRUE, ); $this->drupalPostRequest('admin/settings/filters/add', $edit, t('Save configuration')); // store the format id of the created input format $this->input_format_id = db_result(db_query("SELECT format FROM {filter_formats} WHERE name = '%s'", $edit['name'])); $this->assertTrue($this->input_format_id, t('Input format id (%s)')); // set some default GeSHi filter admin settings $this->drupalVariableSet('geshifilter_format_specific_options', FALSE); $this->drupalVariableSet('geshifilter_brackets', GESHIFILTER_BRACKETS_BOTH); $this->drupalVariableSet('geshifilter_default_line_numbering', GESHIFILTER_LINE_NUMBERS_DEFAULT_NONE); // log out as filter admin $this->drupalGet(url('logout', NULL, NULL, TRUE)); // log in as the normal user for adding pages $this->drupalLoginUser($this->normal_user); // include GeSHi filtering functions require_once(drupal_get_path('module', 'geshifilter') .'/geshifilter.pages.inc'); } /** * SimpleTest core method: code run after each and every test method. * * Optional. You only need this if you have setup tasks. */ function tearDown() { // log in as filter admin $this->drupalGet(url('logout', NULL, NULL, TRUE)); $this->drupalLoginUser($this->filter_admin_user); // remove input format $this->drupalPostRequest('admin/settings/filters/delete/'. $this->input_format_id, array(), t('Delete')); // Always call the tearDown() function from the parent class. parent::tearDown(); } /** * Assert function for testing if GeSHi highlighting works */ function assertGeshiFilterHighlighting($open_tag, $source_code, $close_tag, $lang, $description) { // Create content. $edit = array( 'title' => $this->randomName(32, 'pagetitle_'), 'body' => $open_tag . $source_code . $close_tag, 'format' => $this->input_format_id, ); $this->drupalPostRequest('node/add/page', $edit, t('Submit')); // check posted node $node = node_load(array('title' => $edit['title'])); $this->assertTrue($node, 'Node found in database. %s'); // check if highlighting succeeded $highlighted = geshifilter_geshi_process($source_code, $lang); $this->assertWantedRaw($highlighted, $description); } /** * Check if tags like [c++] and [c#] work * Problem described in http://drupal.org/node/208720 */ function testSpecialTags() { // Enabled the tags $this->drupalVariableSet('geshifilter_language_enabled_cpp', TRUE); $this->drupalVariableSet('geshifilter_language_tags_cpp', 'c++'); $this->drupalVariableSet('geshifilter_language_enabled_csharp', TRUE); $this->drupalVariableSet('geshifilter_language_tags_csharp', 'c#'); // Test the tags $this->assertGeshiFilterHighlighting('', "//C++ source code\nfor (int i=0; i<10; ++i) {\n fun(i);\n}", '', 'cpp', t('Source code in ... should work')); $this->assertGeshiFilterHighlighting('[c++]', "//C++ source code\nfor (int i=0; i<10; ++i) {\n fun(i);\n}", '[/c++]', 'cpp', t('Source code in [c++]...[/c++] should work')); $this->assertGeshiFilterHighlighting('', "//C# source code\nfor (int i=0; i<10; ++i) {\n fun(i);\n}", '', 'csharp', t('Source code in ... should work')); $this->assertGeshiFilterHighlighting('[c#]', "//C# source code\nfor (int i=0; i<10; ++i) {\n fun(i);\n}", '[/c#]', 'csharp', t('Source code in [c#]...[/c#] should work')); } /** * Test if tags like [cpp], [css], [csharp] aren't highjacked by [c] */ function testPrefixTags() { // enabled the tags $this->drupalVariableSet('geshifilter_language_enabled_c', TRUE); $this->drupalVariableSet('geshifilter_language_tags_c', 'c'); $this->drupalVariableSet('geshifilter_language_enabled_cpp', TRUE); $this->drupalVariableSet('geshifilter_language_tags_cpp', 'cpp'); $this->drupalVariableSet('geshifilter_language_enabled_csharp', TRUE); $this->drupalVariableSet('geshifilter_language_tags_csharp', 'csharp'); $this->drupalVariableSet('geshifilter_language_enabled_css', TRUE); $this->drupalVariableSet('geshifilter_language_tags_css', 'css'); // Test the tags $this->assertGeshiFilterHighlighting('', "//C++ source code\nfor (int i=0; i<10; ++i) {\n fun(i);\n}", '', 'cpp', t('Source code in ... should work when ... is also enabled')); $this->assertGeshiFilterHighlighting('', "//C# source code\nfor (int i=0; i<10; ++i) {\n fun(i);\n}", '', 'csharp', t('Source code in ... should work when ... is also enabled')); $this->assertGeshiFilterHighlighting('', "//CSS source code\nbody {\n color: black; text-align: right; \n}", '', 'css', t('Source code in ... should work when ... is also enabled')); } }