[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/search/tests/cases/indexer/ -> lmbFullTextSearchIndexerTest.class.php (source)

   1  <?php
   2  /*
   3   * Limb PHP Framework
   4   *
   5   * @link http://limb-project.com 
   6   * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
   7   * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
   8   */
   9  lmb_require('limb/net/src/lmbUri.class.php');
  10  lmb_require('limb/dbal/src/lmbSimpleDb.class.php');
  11  lmb_require('limb/search/src/indexer/lmbFullTextSearchIndexer.class.php');
  12  lmb_require('limb/search/src/indexer/lmbSearchTextNormalizer.class.php');
  13  
  14  Mock :: generate('lmbSearchTextNormalizer', 'MockSearchTextNormalizer');
  15  
  16  class lmbFullTextSearchIndexerTest extends UnitTestCase
  17  {
  18    protected $db;
  19  
  20    function setUp()
  21    {
  22      $conn = lmbToolkit :: instance()->getDefaultDbConnection();
  23      $this->db = new lmbSimpleDb($conn);
  24  
  25      $this->_cleanUp();
  26    }
  27  
  28    function tearDown()
  29    {
  30      $this->_cleanUp();
  31    }
  32  
  33    function _cleanUp()
  34    {
  35      $this->db->delete(FULL_TEXT_SEARCH_INDEXER_TABLE);
  36    }
  37  
  38    function testNormalizeContent()
  39    {
  40      $uri = new lmbUri('index.html');
  41      $content = 'content';
  42      $processed_content = 'new content';
  43  
  44      $normalizer = new MockSearchTextNormalizer($this);
  45      $indexer = new lmbFullTextSearchIndexer($normalizer);
  46  
  47      $normalizer->expectOnce('process', array($content));
  48      $normalizer->setReturnValue('process', $processed_content, array($content));
  49  
  50      $indexer->index($uri, $content);
  51  
  52      $rs = $this->db->select(FULL_TEXT_SEARCH_INDEXER_TABLE);
  53      $arr = $rs->getArray();
  54  
  55      $this->assertEqual($arr[0]['content'], $processed_content);
  56    }
  57  
  58    function testNOINDEX()
  59    {
  60      $uri = new lmbUri('index.html');
  61  
  62      $content = "must be indexed\n<!-- no index start -->ignored by indexer<!-- no index end -->must be indexed also";
  63  
  64      $expected = "must be indexed\n must be indexed also";
  65  
  66      $normalizer = new MockSearchTextNormalizer($this);
  67      $indexer = new lmbFullTextSearchIndexer($normalizer);
  68      $indexer->useNOINDEX();
  69  
  70      $normalizer->expectOnce('process', array($expected));
  71      $normalizer->setReturnValue('process', 'whatever');
  72  
  73      $indexer->index($uri, $content);
  74    }
  75  
  76    function testSwitchOffNOINDEX()
  77    {
  78      $uri = new lmbUri('index.html');
  79  
  80      $content = "must be indexed\n<!-- no index start -->ignored by indexer<!-- no index end -->must be indexed also";
  81  
  82      $expected = "must be indexed\n<!-- no index start -->ignored by indexer<!-- no index end -->must be indexed also";
  83  
  84      $normalizer = new MockSearchTextNormalizer($this);
  85      $indexer = new lmbFullTextSearchIndexer($normalizer);
  86      $indexer->useNOINDEX(false);
  87  
  88      $normalizer->expectOnce('process', array($expected));
  89      $normalizer->setReturnValue('process', 'whatever', array($expected));
  90  
  91      $indexer->index($uri, $content);
  92    }
  93  
  94    function testNOINDEXMultiline()
  95    {
  96      $uri = new lmbUri('index.html');
  97  
  98      $content = "\nmust be indexed\n\n<!-- no index start -->ignored by indexer\n<!-- no index end -->\n must be indexed also";
  99  
 100      $expected = "\nmust be indexed\n\n \n must be indexed also";
 101  
 102      $normalizer = new MockSearchTextNormalizer($this);
 103      $indexer = new lmbFullTextSearchIndexer($normalizer);
 104      $indexer->useNOINDEX();
 105  
 106      $normalizer->expectOnce('process', array($expected));
 107      $normalizer->setReturnValue('process', 'whatever');
 108  
 109      $indexer->index($uri, $content);
 110    }
 111  
 112    function testIndexNew()
 113    {
 114      $uri = new lmbUri('index.html');
 115      $content = '<title>test title</title>content';
 116      $indexer = new lmbFullTextSearchIndexer(new lmbSearchTextNormalizer());
 117      $indexer->index($uri, $content);
 118  
 119      $rs = $this->db->select(FULL_TEXT_SEARCH_INDEXER_TABLE);
 120      $arr = $rs->getArray();
 121  
 122      $this->assertEqual(sizeof($arr), 1);
 123      $this->assertEqual($arr[0]['uri'], $uri->toString());
 124      $this->assertEqual($arr[0]['content'], 'test title content');
 125      $this->assertEqual($arr[0]['title'], 'test title');
 126      $this->assertTrue($arr[0]['last_modified'] > 0 && $arr[0]['last_modified'] <= time());
 127    }
 128  
 129    function testIndexNewUtf8Text()
 130    {
 131      $uri = new lmbUri('index.html');
 132      $content = '<title>Растения</title>Доставка';
 133      $indexer = new lmbFullTextSearchIndexer(new lmbSearchTextNormalizer());
 134      $indexer->index($uri, $content);
 135  
 136      $rs = $this->db->select(FULL_TEXT_SEARCH_INDEXER_TABLE);
 137      $arr = $rs->getArray();
 138  
 139      $this->assertEqual(sizeof($arr), 1);
 140      $this->assertEqual($arr[0]['uri'], $uri->toString());
 141      $this->assertEqual($arr[0]['content'], 'растения доставка');
 142      $this->assertEqual($arr[0]['title'], 'Растения');
 143      $this->assertTrue($arr[0]['last_modified'] > 0 && $arr[0]['last_modified'] <= time());
 144    }
 145  
 146    function testExtractTitleAnyway()
 147    {
 148      $uri = new lmbUri('index.html');
 149      $content = '<!-- no index start --><title>test title</title>content ignored<!-- no index end -->content';
 150  
 151      $indexer = new lmbFullTextSearchIndexer(new lmbSearchTextNormalizer());
 152      $indexer->useNOINDEX();
 153      $indexer->index($uri, $content);
 154  
 155      $rs = $this->db->select(FULL_TEXT_SEARCH_INDEXER_TABLE);
 156      $arr = $rs->getArray();
 157  
 158      $this->assertEqual(sizeof($arr), 1);
 159      $this->assertEqual($arr[0]['uri'], $uri->toString());
 160      $this->assertEqual($arr[0]['content'], 'content');
 161      $this->assertEqual($arr[0]['title'], 'test title');
 162      $this->assertTrue($arr[0]['last_modified'] > 0 && $arr[0]['last_modified'] <= time());
 163    }
 164  
 165    function testIndexUpdate()
 166    {
 167      $uri = new lmbUri('index.html');
 168  
 169      $this->db->insert(FULL_TEXT_SEARCH_INDEXER_TABLE,
 170                            array('uri' => $uri->toString(),
 171                                  'content' => 'content1',
 172                                  'title' => 'title1',
 173                                  'last_modified' => $time1 = 200));
 174  
 175      $new_content = '<title>title2</title>content2';
 176  
 177      $indexer = new lmbFullTextSearchIndexer(new lmbSearchTextNormalizer());
 178      $indexer->index($uri, $new_content);
 179  
 180      $rs = $this->db->select(FULL_TEXT_SEARCH_INDEXER_TABLE);
 181      $arr = $rs->getArray();
 182  
 183      $this->assertEqual(sizeof($arr), 1);
 184      $this->assertEqual($arr[0]['uri'], $uri->toString());
 185      $this->assertEqual($arr[0]['content'], 'title2 content2');
 186      $this->assertEqual($arr[0]['title'], 'title2');
 187      $this->assertTrue($arr[0]['last_modified'] > $time1 && $arr[0]['last_modified'] <= time());
 188    }
 189  
 190    function testFindIndexRecordByUri()
 191    {
 192      $uri1 = new lmbUri('index.html');
 193      $content1 = '<title>title1</title>content1';
 194  
 195      $indexer = new lmbFullTextSearchIndexer(new lmbSearchTextNormalizer());
 196      $indexer->index($uri1, $content1);
 197  
 198      $uri2 = new lmbUri('page1.html');
 199      $content2 = '<title>title2</title>content2';
 200  
 201      $indexer->index($uri2, $content2);
 202  
 203      $record = $indexer->findIndexRecordByUri($uri1)->export();
 204      $this->assertEqual($record['uri'], $uri1->toString());
 205      $this->assertEqual($record['content'], 'title1 content1');
 206      $this->assertEqual($record['title'], 'title1');
 207  
 208      $record = $indexer->findIndexRecordByUri($uri2)->export();
 209      $this->assertEqual($record['uri'], $uri2->toString());
 210      $this->assertEqual($record['content'], 'title2 content2');
 211      $this->assertEqual($record['title'], 'title2');
 212    }
 213  }
 214  
 215  ?>


Generated: Sat Nov 22 03:48:54 2008 Cross-referenced by PHPXref 0.7