'ABQIAAAAk-aSeht5vBRyVc9CjdBKLRRnhS8GMCOqu88EXp1O-QqtMSdzHhQM4y1gkHFQdUvwiZgZ6jaKlW40kw', //local 'api' => '2.x', 'zoom' => 16, 'lat' => null, 'lng' => null, 'type' => 'G_NORMAL_MAP' )); class GeocodeLibTest extends MyCakeTestCase { public function setUp() { parent::setUp(); $this->Geocode = new GeocodeLib(); } public function tearDown() { parent::tearDown(); unset($this->Geocode); } public function testObject() { $this->assertTrue(is_object($this->Geocode)); $this->assertInstanceOf('GeocodeLib', $this->Geocode); } public function testDistance() { $coords = array( array('name' => 'MUC/Pforzheim (269km road, 2:33h)', 'x' => array('lat' => 48.1391, 'lng' => 11.5802), 'y' => array('lat' => 48.8934, 'lng' => 8.70492), 'd' => 228), array('name' => 'MUC/London (1142km road, 11:20h)', 'x' => array('lat' => 48.1391, 'lng' => 11.5802), 'y' => array('lat' => 51.508, 'lng' => -0.124688), 'd' => 919), array('name' => 'MUC/NewYork (--- road, ---h)', 'x' => array('lat' => 48.1391, 'lng' => 11.5802), 'y' => array('lat' => 40.700943, 'lng' => -73.853531), 'd' => 6479) ); foreach ($coords as $coord) { $is = $this->Geocode->distance($coord['x'], $coord['y']); //echo $coord['name'].':'; //pr('is: '.$is.' - expected: '.$coord['d']); $this->assertEquals($coord['d'], $is); } } public function testBlur() { $coords = array( array(48.1391, 1, 0.002), //'y'=>array('lat'=>48.8934, 'lng'=>8.70492), 'd'=>228), array(11.5802, 1, 0.002), ); foreach ($coords as $coord) { $is = $this->Geocode->blur($coord[0], $coord[1]); //pr('is: '.$is.' - expected: '.$coord[0].' +- '.$coord[2]); $this->assertWithinMargin($is, $coord[0], $coord[2]); $this->assertNotWithinMargin($is, $coord[0], $coord[2] / 4); } } public function testConvert() { $values = array( array(3, 'M', 'K', 4.828032), array(3, 'K', 'M', 1.86411358), array(100000, 'I', 'K', 2.54), ); foreach ($values as $value) { $is = $this->Geocode->convert($value[0], $value[1], $value[2]); //echo $value[0].$value[1].' in '.$value[2].':'; //pr('is: '.returns($is).' - expected: '.$value[3]); $this->assertEquals($value[3], round($is, 8)); } } public function testUrl() { $is = $this->Geocode->url(); $this->assertFalse(empty($is)); $this->assertPattern('#https://maps.googleapis.com/maps/api/geocode/(json|xml)\?.+#', $is); } // not possible with protected method public function _testFetch() { $url = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=74523'; $is = $this->Geocode->_fetch($url); //debug($is); $this->assertTrue(!empty($is) && substr($is, 0, 38) === ''); $url = 'http://maps.google.com/maps/api/geocode/json?sensor=false&address=74523'; $is = $this->Geocode->_fetch($url); //debug($is); $this->assertTrue(!empty($is) && substr($is, 0, 1) === '{'); } public function testSetParams() { } public function testWithJson() { $this->Geocode->setOptions(array('output' => 'json')); $address = '74523 Deutschland'; //echo '

'.$address.'

'; $is = $this->Geocode->geocode($address); $this->assertTrue($is); $is = $this->Geocode->getResult(); //debug($is); $this->assertTrue(!empty($is)); } public function testSetOptions() { // should be the default $res = $this->Geocode->url(); $this->assertTextContains('maps.googleapis.com', $res); $this->Geocode->setOptions(array('host' => 'maps.google.it')); // should now be ".it" $res = $this->Geocode->url(); $this->assertTextContains('maps.google.it', $res); } public function testGeocode() { $address = '74523 Deutschland'; //echo '

'.$address.'

'; $is = $this->Geocode->geocode($address); //debug($is); $this->assertTrue($is); $is = $this->Geocode->getResult(); //debug($is); $this->assertTrue(!empty($is)); $is = $this->Geocode->error(); //debug($is); $this->assertTrue(empty($is)); $address = 'Leopoldstraße 100, München'; //echo '

'.$address.'

'; $is = $this->Geocode->geocode($address); //debug($is); $this->assertTrue($is); //pr($this->Geocode->debug()); $is = $this->Geocode->getResult(); //debug($is); $this->assertTrue(!empty($is)); $is = $this->Geocode->error(); //debug($is); $this->assertTrue(empty($is)); $address = 'Oranienburger Straße 87, 10178 Berlin, Deutschland'; //echo '

'.$address.'

'; $is = $this->Geocode->geocode($address); //debug($is); $this->assertTrue($is); //pr($this->Geocode->debug()); $is = $this->Geocode->getResult(); //debug($is); $this->assertTrue(!empty($is)); $is = $this->Geocode->error(); //debug($is); $this->assertTrue(empty($is)); } public function testGeocodeBadApiKey() { $address = 'Oranienburger Straße 87, 10178 Berlin, Deutschland'; $is = $this->Geocode->geocode($address, array('sensor' => false, 'key' => 'testingBadApiKey')); $this->assertFalse($is); //pr($this->Geocode->debug()); $is = $this->Geocode->error(); $this->assertEqual('Error REQUEST_DENIED (The provided API key is invalid.)', $is); } public function testGeocodeInvalid() { $address = 'Hjfjosdfhosj, 78878 Mdfkufsdfk'; //echo '

'.$address.'

'; $is = $this->Geocode->geocode($address); //debug($is); $this->assertFalse($is); //pr($this->Geocode->debug()); $is = $this->Geocode->error(); //debug($is); $this->assertTrue(!empty($is)); } public function testGetMaxAddress() { $this->assertEqual($this->Geocode->_getMaxAccuracy(array('street_address' => 'abc')), GeocodeLib::ACC_STREET); $this->assertEqual($this->Geocode->_getMaxAccuracy(array('intersection' => 'abc')), GeocodeLib::ACC_INTERSEC); $this->assertEqual($this->Geocode->_getMaxAccuracy(array('route' => 'abc')), GeocodeLib::ACC_ROUTE); $this->assertEqual($this->Geocode->_getMaxAccuracy(array('sublocality' => 'abc')), GeocodeLib::ACC_SUBLOC); $this->assertEqual($this->Geocode->_getMaxAccuracy(array('locality' => 'abc')), GeocodeLib::ACC_LOC); $this->assertEqual($this->Geocode->_getMaxAccuracy(array('postal_code' => 'abc')), GeocodeLib::ACC_POSTAL); $this->assertEqual($this->Geocode->_getMaxAccuracy(array('country' => 'aa')), GeocodeLib::ACC_COUNTRY); $this->assertEqual($this->Geocode->_getMaxAccuracy(array()), GeocodeLib::ACC_COUNTRY); // mixed $this->assertEqual($this->Geocode->_getMaxAccuracy(array( 'country' => 'aa', 'postal_code' => 'abc', 'locality' => '', 'street_address' => '', )), GeocodeLib::ACC_POSTAL); } public function testGeocodeMinAcc() { // address = postal_code, minimum = street level $address = 'Deutschland'; $this->Geocode->setOptions(array('min_accuracy' => GeocodeLib::ACC_STREET)); $is = $this->Geocode->geocode($address); $this->assertFalse($is); $is = $this->Geocode->error(); $this->assertTrue(!empty($is)); } public function testGeocodeInconclusive() { // seems like there is no inconclusive result anymore!!! $address = 'Neustadt'; // allow_inconclusive = TRUE $this->Geocode->setOptions(array('allow_inconclusive' => true, 'min_accuracy' => GeocodeLib::ACC_POSTAL)); $is = $this->Geocode->geocode($address); $this->assertTrue($is); $res = $this->Geocode->getResult(); $this->assertTrue(count($res) > 4); $is = $this->Geocode->isInconclusive(); $this->assertTrue($is); $this->Geocode->setOptions(array('allow_inconclusive' => false)); $is = $this->Geocode->geocode($address); $this->assertFalse($is); } public function testReverseGeocode() { $coords = array( array(-34.594445, -58.37446, 'Calle Florida 1134-1200, Buenos Aires'), array(48.8934, 8.70492, 'B294, 75175 Pforzheim, Deutschland') ); foreach ($coords as $coord) { $is = $this->Geocode->reverseGeocode($coord[0], $coord[1]); $this->assertTrue($is); $is = $this->Geocode->getResult(); $this->assertTrue(!empty($is)); //debug($is); $address = isset($is[0]) ? $is[0]['formatted_address'] : $is['formatted_address']; $this->assertTextContains($coord[2], $address); } } public function testGetResult() { } }