admin_user = $this->drupalCreateUser($permissions); $this->drupalLogin($this->admin_user); } public function testLinkCheckerCreateNodeWithLinks() { // Enable all node type page for link extraction. variable_set('linkchecker_scan_node_page', TRUE); variable_set('linkchecker_scan_blocks', 1); // Core enables the URL filter for "Full HTML" by default. // -> Blacklist / Disable URL filter for testing. variable_set('linkchecker_filter_blacklist', array('filter_url' => 'filter_url')); // Extract from all link checker supported HTML tags. variable_set('linkchecker_extract_from_a', 1); variable_set('linkchecker_extract_from_audio', 1); variable_set('linkchecker_extract_from_embed', 1); variable_set('linkchecker_extract_from_iframe', 1); variable_set('linkchecker_extract_from_img', 1); variable_set('linkchecker_extract_from_object', 1); variable_set('linkchecker_extract_from_video', 1); $body = << Send email Execute JavaScript Test image 1 Test image 2 ../foo1/bar1 ./foo2/bar2 ../foo3/../foo4/foo5 ./foo4/../foo5/foo6 ./foo4/./foo5/foo6 ./test/foo bar/is_valid-hack.test URL with uncommon chars URL with space URL with ajax query params URL with standard anchor URL with standard anchor and space Anchor with space
No weather report visible? At MSN you are able to find the weather report missing here and the Flash plugin can be found at Adobe.
/video/foo3.mp4 EOT; // Save folder names in variables for reuse. $folder1 = $this->randomName(10); $folder2 = $this->randomName(5); // Fill node array. $langcode = LANGUAGE_NONE; $edit = array(); $edit['title'] = $this->randomName(32); $edit["body[$langcode][0][value]"] = $body; $edit['path[alias]'] = $folder1 . '/' . $folder2; $edit["body[$langcode][0][format]"] = 'full_html'; // Extract only full qualified URLs. variable_set('linkchecker_check_links_types', 1); // Verify path input field appears on add "Basic page" form. $this->drupalGet('node/add/page'); // Verify path input is present. $this->assertFieldByName('path[alias]', '', 'Path input field present on add Basic page form.'); // Save node. $this->drupalPost('node/add/page', $edit, t('Save')); $this->assertText(t('@type @title has been created.', array('@type' => 'Basic page', '@title' => $edit['title'])), 'Node was created.'); // Verify if the content links are extracted properly. $urls_fqdn = array( 'http://www.lagrandeepicerie.fr/#e-boutique/Les_produits_du_moment,2/coffret_vins_doux_naturels,149', 'http://wetterservice.msn.de/phclip.swf?zip=60329&ort=Frankfurt', 'http://www.msn.de/', 'http://www.adobe.com/', 'http://www.apple.com/qtactivex/qtplugin.cab', 'http://example.net/video/foo1.mov', 'http://example.net/video/foo2.mov', 'http://example.net/video/foo3.mov', 'http://example.org/video/foo1.mp4', 'http://example.org/video/foo2.mp4', 'http://example.org/video/foo3.mp4', 'http://example.org/video/foo4.mp4', 'http://example.org/video/foo5.mp4', 'http://example.org/video/foo6.mp4', 'http://example.org/video/player1.swf', 'http://example.org/video/player2.swf', 'http://example.org/video/player3.swf', 'http://example.com/iframe/', 'http://www.theora.org/cortado.jar', 'http://v2v.cc/~j/theora_testsuite/pixel_aspect_ratio.ogg', 'http://v2v.cc/~j/theora_testsuite/pixel_aspect_ratio.mov', 'http://v2v.cc/~j/theora_testsuite/320x240.ogg', 'http://example.com/foo bar/is_valid-hack.test', 'http://example.com/ajax.html#key1=value1&key2=value2', 'http://example.com/test.html#test', 'http://example.com/test.html#test%20ABC', ); foreach ($urls_fqdn as $org_url => $check_url) { $link = $this->getLinkCheckerLink($check_url); if ($link) { $this->assertIdentical($link->url, $check_url, format_string('Absolute URL %org_url matches expected result %check_url.', array('%org_url' => $org_url, '%check_url' => $check_url))); } else { $this->fail(format_string('URL %check_url not found.', array('%check_url' => $check_url))); } } // Check if the number of links is correct. // - Verifies if all HTML tag regexes matched. // - Verifies that the linkchecker filter blacklist works well. $urls_in_database = $this->getLinkCheckerLinksCount(); $urls_expected_count = count($urls_fqdn); $this->assertEqual($urls_in_database, $urls_expected_count, format_string('Found @urls_in_database URLs in database matches expected result of @urls_expected_count.', array('@urls_in_database' => $urls_in_database, '@urls_expected_count' => $urls_expected_count))); // Extract all URLs including relative path. variable_set('clean_url', 1); variable_set('linkchecker_check_links_types', 0); $node = $this->drupalGetNodeByTitle($edit['title']); $this->assertTrue($node, 'Node found in database.'); $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); $this->assertRaw(t('@type %title has been updated.', array('@type' => 'Basic page', '%title' => $edit['title']))); // @todo Path alias seems not saved!??? // $this->assertIdentical($node->path, $edit['path'], format_string('URL alias "@node-path" matches path "@edit-path".', array('@node-path' => $node->path, '@edit-path' => $edit['path']))); // Verify if the content links are extracted properly. global $base_root, $base_path; $urls_relative = array( '../foo1/test.png' => $base_root . $base_path . 'foo1/test.png', 'test.png' => $base_root . $base_path . $folder1 . '/test.png', '../foo1/bar1' => $base_root . $base_path . 'foo1/bar1', './foo2/bar2' => $base_root . $base_path . $folder1 . '/foo2/bar2', '../foo3/../foo4/foo5' => $base_root . $base_path . 'foo4/foo5', './foo4/../foo5/foo6' => $base_root . $base_path . $folder1 . '/foo5/foo6', './foo4/./foo5/foo6' => $base_root . $base_path . $folder1 . '/foo4/foo5/foo6', './test/foo bar/is_valid-hack.test' => $base_root . $base_path . $folder1 . '/test/foo bar/is_valid-hack.test', 'flash.png' => $base_root . $base_path . $folder1 . '/flash.png', 'ritmo.mid' => $base_root . $base_path . $folder1 . '/ritmo.mid', 'my_ogg_video.ogg' => $base_root . $base_path . $folder1 . '/my_ogg_video.ogg', 'video.ogv' => $base_root . $base_path . $folder1 . '/video.ogv', 'flvplayer1.swf' => $base_root . $base_path . $folder1 . '/flvplayer1.swf', 'flvplayer2.swf' => $base_root . $base_path . $folder1 . '/flvplayer2.swf', 'foo.ogg' => $base_root . $base_path . $folder1 . '/foo.ogg', ); $this->verbose(theme('item_list', array('items' => $urls_relative, 'title' => 'Verify if following relative URLs exists:'))); $links_debug = array(); $result = db_query('SELECT url FROM {linkchecker_link}'); foreach ($result as $row) { $links_debug[] = $row->url; } $this->verbose(theme('item_list', array('items' => $links_debug, 'title' => 'Following URLs exists:'))); foreach ($urls_relative as $org_url => $check_url) { $link = $this->getLinkCheckerLink($check_url); if ($link) { $this->assertIdentical($link->url, $check_url, format_string('Relative URL %org_url matches expected result %check_url.', array('%org_url' => $org_url, '%check_url' => $check_url))); } else { $this->fail(format_string('URL %check_url not found.', array('%check_url' => $check_url))); } } // Check if the number of links is correct. $urls_in_database = $this->getLinkCheckerLinksCount(); $urls_expected_count = count($urls_fqdn + $urls_relative); $this->assertEqual($urls_in_database, $urls_expected_count, format_string('Found @urls_in_database URLs in database matches expected result of @urls_expected_count.', array('@urls_in_database' => $urls_in_database, '@urls_expected_count' => $urls_expected_count))); // Verify if link check has been enabled for normal URLs. $urls = array( 'http://www.lagrandeepicerie.fr/#e-boutique/Les_produits_du_moment,2/coffret_vins_doux_naturels,149', 'http://wetterservice.msn.de/phclip.swf?zip=60329&ort=Frankfurt', 'http://www.msn.de/', 'http://www.adobe.com/', 'http://www.apple.com/qtactivex/qtplugin.cab', 'http://www.theora.org/cortado.jar', 'http://v2v.cc/~j/theora_testsuite/pixel_aspect_ratio.ogg', 'http://v2v.cc/~j/theora_testsuite/pixel_aspect_ratio.mov', 'http://v2v.cc/~j/theora_testsuite/320x240.ogg', $base_root . $base_path . 'foo1/test.png', $base_root . $base_path . $folder1 . '/test.png', $base_root . $base_path . 'foo1/bar1', $base_root . $base_path . $folder1 . '/foo2/bar2', $base_root . $base_path . 'foo4/foo5', $base_root . $base_path . $folder1 . '/foo5/foo6', $base_root . $base_path . $folder1 . '/foo4/foo5/foo6', $base_root . $base_path . $folder1 . '/test/foo bar/is_valid-hack.test', $base_root . $base_path . $folder1 . '/flash.png', $base_root . $base_path . $folder1 . '/ritmo.mid', $base_root . $base_path . $folder1 . '/my_ogg_video.ogg', $base_root . $base_path . $folder1 . '/video.ogv', $base_root . $base_path . $folder1 . '/flvplayer1.swf', $base_root . $base_path . $folder1 . '/flvplayer2.swf', $base_root . $base_path . $folder1 . '/foo.ogg', ); foreach ($urls as $url) { $this->assertTrue($this->getLinkcheckerLink($url)->status, format_string('Link check for %url is enabled.', array('%url' => $url))); } // Verify if link check has been disabled for example.com/net/org URLs. $documentation_urls = array( 'http://example.net/video/foo1.mov', 'http://example.net/video/foo2.mov', 'http://example.net/video/foo3.mov', 'http://example.org/video/foo1.mp4', 'http://example.org/video/foo2.mp4', 'http://example.org/video/foo3.mp4', 'http://example.org/video/foo4.mp4', 'http://example.org/video/foo5.mp4', 'http://example.org/video/foo6.mp4', 'http://example.org/video/player1.swf', 'http://example.org/video/player2.swf', 'http://example.org/video/player3.swf', 'http://example.com/iframe/', 'http://example.com/foo bar/is_valid-hack.test', 'http://example.com/ajax.html#key1=value1&key2=value2', 'http://example.com/test.html#test', 'http://example.com/test.html#test%20ABC', ); foreach ($documentation_urls as $documentation_url) { $this->assertFalse($this->getLinkcheckerLink($documentation_url)->status, format_string('Link check for %url is disabled.', array('%url' => $documentation_url))); } } /** * Get linkchecker link by url. * * @param string $url * URL of the link to find. * * @return object * The link object. */ function getLinkCheckerLink($url) { return db_query('SELECT * FROM {linkchecker_link} WHERE urlhash = :urlhash', array(':urlhash' => drupal_hash_base64($url)))->fetchObject(); } /** * Get the current number of links in linkchecker_links table. */ function getLinkCheckerLinksCount() { return db_query('SELECT COUNT(1) FROM {linkchecker_link}')->fetchField(); } }