summaryrefslogtreecommitdiff
path: root/modules/search
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-05-01 08:10:26 +0000
committerDries Buytaert <dries@buytaert.net>2010-05-01 08:10:26 +0000
commit2a2f4cc0be547f515ccd4212e9aeca7765a4968b (patch)
treeae5e9219a9cf20d279493f6e5d3473bb39de2c18 /modules/search
parent83e4f6566a9b18a755c42920bffdbe58c84df29b (diff)
downloadbrdo-2a2f4cc0be547f515ccd4212e9aeca7765a4968b.tar.gz
brdo-2a2f4cc0be547f515ccd4212e9aeca7765a4968b.tar.bz2
- Patch #719686 by duellj: tests for search weighting for HTML tags.
Diffstat (limited to 'modules/search')
-rw-r--r--modules/search/search.test82
1 files changed, 82 insertions, 0 deletions
diff --git a/modules/search/search.test b/modules/search/search.test
index 160e4164b..fe2062dff 100644
--- a/modules/search/search.test
+++ b/modules/search/search.test
@@ -414,6 +414,88 @@ class SearchRankingTestCase extends DrupalWebTestCase {
}
/**
+ * Test rankings of HTML tags.
+ */
+ function testHTMLRankings() {
+ // Login with sufficient privileges.
+ $this->drupalLogin($this->drupalCreateUser(array('create page content')));
+
+ // Test HTML tags with different weights.
+ $sorted_tags = array('h1', 'h2', 'h3', 'h4', 'a', 'h5', 'h6', 'notag');
+ $shuffled_tags = $sorted_tags;
+
+ // Shuffle tags to ensure HTML tags are ranked properly.
+ shuffle($shuffled_tags);
+ $settings = array(
+ 'type' => 'page',
+ 'title' => array(LANGUAGE_NONE => array(array('value' => 'Simple node'))),
+ );
+ foreach ($shuffled_tags as $tag) {
+ switch ($tag) {
+ case 'a':
+ $settings['body'] = array(LANGUAGE_NONE => array(array('value' => l('Drupal Rocks', 'node'), 'format' => 3)));
+ break;
+ case 'notag':
+ $settings['body'] = array(LANGUAGE_NONE => array(array('value' => 'Drupal Rocks')));
+ break;
+ default:
+ $settings['body'] = array(LANGUAGE_NONE => array(array('value' => "<$tag>Drupal Rocks</$tag>", 'format' => 3)));
+ break;
+ }
+ $nodes[$tag] = $this->drupalCreateNode($settings);
+ }
+
+ // Update the search index.
+ module_invoke_all('update_index');
+ search_update_totals();
+
+ // Refresh variables after the treatment.
+ $this->refreshVariables();
+
+ // Disable all other rankings.
+ $node_ranks = array('sticky', 'promote', 'recent', 'comments', 'views');
+ foreach ($node_ranks as $node_rank) {
+ variable_set('node_rank_' . $node_rank, 0);
+ }
+ $set = node_search_execute('rocks');
+
+ // Test the ranking of each tag.
+ foreach ($sorted_tags as $tag_rank => $tag) {
+ // Assert the results.
+ if ($tag == 'notag') {
+ $this->assertEqual($set[$tag_rank]['node']->nid, $nodes[$tag]->nid, 'Search tag ranking for plain text order.');
+ } else {
+ $this->assertEqual($set[$tag_rank]['node']->nid, $nodes[$tag]->nid, 'Search tag ranking for "&lt;' . $sorted_tags[$tag_rank] . '&gt;" order.');
+ }
+ }
+
+ // Test tags with the same weight against the sorted tags.
+ $unsorted_tags = array('u', 'b', 'i', 'strong', 'em');
+ foreach ($unsorted_tags as $tag) {
+ $settings['body'] = array(LANGUAGE_NONE => array(array('value' => "<$tag>Drupal Rocks</$tag>", 'format' => 3)));
+ $node = $this->drupalCreateNode($settings);
+
+ // Update the search index.
+ module_invoke_all('update_index');
+ search_update_totals();
+
+ // Refresh variables after the treatment.
+ $this->refreshVariables();
+
+ $set = node_search_execute('rocks');
+
+ // Ranking should always be second to last.
+ $set = array_slice($set, -2, 1);
+
+ // Assert the results.
+ $this->assertEqual($set[0]['node']->nid, $node->nid, 'Search tag ranking for "&lt;' . $tag . '&gt;" order.');
+
+ // Delete node so it doesn't show up in subsequent search results.
+ node_delete($node->nid);
+ }
+ }
+
+ /**
* Verifies that if we combine two rankings, search still works.
*
* See issue http://drupal.org/node/771596