--- /dev/null
+<?php
+
+namespace Nominatim;
+
+@define('CONST_BasePath', '../../');
+
+require_once '../../lib/db.php';
+require_once '../../lib/cmd.php';
+require_once '../../lib/TokenList.php';
+
+class TokenTest extends \PHPUnit_Framework_TestCase
+{
+ protected function setUp()
+ {
+ $this->oNormalizer = $this->getMock(\MockNormalizer::class, array('transliterate'));
+ $this->oNormalizer->method('transliterate')
+ ->will($this->returnCallback(function ($text) {
+ return strtolower($text);
+ }));
+ }
+
+ private function wordResult($aFields)
+ {
+ $aRow = array(
+ 'word_id' => null,
+ 'word_token' => null,
+ 'word' => null,
+ 'class' => null,
+ 'type' => null,
+ 'country_code' => null,
+ 'count' => 0
+ );
+ return array_merge($aRow, $aFields);
+ }
+
+ public function testList()
+ {
+ $TL = new TokenList;
+
+ $this->assertEquals(0, $TL->count());
+
+ $TL->addToken('word1', 'token1');
+ $TL->addToken('word1', 'token2');
+
+ $this->assertEquals(1, $TL->count());
+
+ $this->assertTrue($TL->contains('word1'));
+ $this->assertEquals(array('token1', 'token2'), $TL->get('word1'));
+
+ $this->assertFalse($TL->contains('unknownword'));
+ $this->assertEquals(array(), $TL->get('unknownword'));
+ }
+
+ public function testAddress()
+ {
+ $this->expectOutputRegex('/<p><tt>/');
+
+ $oDbStub = $this->getMock(\DB::class, array('getAll'));
+ $oDbStub->method('getAll')
+ ->will($this->returnCallback(function ($sql) {
+ $aResults = array();
+ if (preg_match('/1051/', $sql)) {
+ $aResults[] = $this->wordResult(array(
+ 'word_id' => 999,
+ 'word_token' => '1051',
+ 'class' => 'place',
+ 'type' => 'house'
+ ));
+ }
+ if (preg_match('/64286/', $sql)) {
+ $aResults[] = $this->wordResult(array(
+ 'word_id' => 999,
+ 'word_token' => '64286',
+ 'word' => '64286',
+ 'class' => 'place',
+ 'type' => 'postcode'
+ ));
+ }
+ if (preg_match('/darmstadt/', $sql)) {
+ $aResults[] = $this->wordResult(array(
+ 'word_id' => 999,
+ 'word_token' => 'darmstadt',
+ 'count' => 533
+ ));
+ }
+ if (preg_match('/alemagne/', $sql)) {
+ $aResults[] = $this->wordResult(array(
+ 'word_id' => 999,
+ 'word_token' => 'alemagne',
+ 'country_code' => 'de',
+ ));
+ }
+ if (preg_match('/mexico/', $sql)) {
+ $aResults[] = $this->wordResult(array(
+ 'word_id' => 999,
+ 'word_token' => 'mexico',
+ 'country_code' => 'mx',
+ ));
+ }
+ return $aResults;
+ }));
+
+ $aCountryCodes = array('de', 'fr');
+ $sNormQuery = '1051 hauptstr 64286 darmstadt alemagne mexico';
+ $aTokens = explode(' ', $sNormQuery);
+
+ $TL = new TokenList;
+ $TL->addTokensFromDB($oDbStub, $aTokens, $aCountryCodes, $sNormQuery, $this->oNormalizer);
+ $this->assertEquals(4, $TL->count());
+
+ $this->assertEquals(array(new Token\HouseNumber(999, '1051')), $TL->get('1051'));
+ $this->assertEquals(array(new Token\Country(999, 'de')), $TL->get('alemagne'));
+ $this->assertEquals(array(new Token\Postcode(999, '64286')), $TL->get('64286'));
+ $this->assertEquals(array(new Token\Word(999, true, 533)), $TL->get('darmstadt'));
+ }
+}
echo "Does the URL point to a directory containing OSM update data?\n\n";
fail('replication URL not reachable.');
}
+ // sanity check for pyosmium-get-changes
+ if (!CONST_Pyosmium_Binary) {
+ echo "\nCONST_Pyosmium_Binary not configured.\n";
+ echo "You need to install pyosmium and set up the path to pyosmium-get-changes\n";
+ echo "in your local settings file.\n\n";
+ fail('CONST_Pyosmium_Binary not configured');
+ }
+ $aOutput = 0;
+ $sCmd = CONST_Pyosmium_Binary.' --help';
+ exec($sCmd, $aOutput, $iRet);
+ if ($iRet != 0) {
+ echo "Cannot execute pyosmium-get-changes.\n";
+ echo "Make sure you have pyosmium installed correctly\n";
+ echo "and have set up CONST_Pyosmium_Binary to point to pyosmium-get-changes.\n";
+ fail('pyosmium-get-changes not found or not usable');
+ }
$sSetup = CONST_InstallPath.'/utils/setup.php';
$iRet = -1;
passthru($sSetup.' --create-functions --enable-diff-updates', $iRet);