Skip to content

Commit 6b570b5

Browse files
committed
Fix #412
1 parent 7c6928a commit 6b570b5

File tree

4 files changed

+89
-2
lines changed

4 files changed

+89
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Geocoder\Exception;
4+
5+
class CollectionIsEmpty extends \RuntimeException implements Exception
6+
{
7+
}

src/Geocoder/Model/AddressCollection.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace Geocoder\Model;
44

5+
use Geocoder\Exception\CollectionIsEmpty;
6+
57
final class AddressCollection implements \IteratorAggregate, \Countable
68
{
79
/**
@@ -34,12 +36,12 @@ public function count()
3436
}
3537

3638
/**
37-
* @return Address|null
39+
* @return Address
3840
*/
3941
public function first()
4042
{
4143
if (empty($this->addresses)) {
42-
return null;
44+
throw new CollectionIsEmpty('The AddressCollection instance is empty.');
4345
}
4446

4547
return reset($this->addresses);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
s:1907:"{
2+
"results" : [
3+
{
4+
"address_components" : [
5+
{
6+
"long_name" : "10",
7+
"short_name" : "10",
8+
"types" : [ "street_number" ]
9+
},
10+
{
11+
"long_name" : "Avenue Gambetta",
12+
"short_name" : "Avenue Gambetta",
13+
"types" : [ "route" ]
14+
},
15+
{
16+
"long_name" : "Paris",
17+
"short_name" : "Paris",
18+
"types" : [ "locality", "political" ]
19+
},
20+
{
21+
"long_name" : "Paris",
22+
"short_name" : "75",
23+
"types" : [ "administrative_area_level_2", "political" ]
24+
},
25+
{
26+
"long_name" : "Île-de-France",
27+
"short_name" : "IDF",
28+
"types" : [ "administrative_area_level_1", "political" ]
29+
},
30+
{
31+
"long_name" : "France",
32+
"short_name" : "FR",
33+
"types" : [ "country", "political" ]
34+
},
35+
{
36+
"long_name" : "75020",
37+
"short_name" : "75020",
38+
"types" : [ "postal_code" ]
39+
}
40+
],
41+
"formatted_address" : "10 Avenue Gambetta, 75020 Paris, France",
42+
"geometry" : {
43+
"location" : {
44+
"lat" : 48.8631013,
45+
"lng" : 2.3888086
46+
},
47+
"location_type" : "ROOFTOP",
48+
"viewport" : {
49+
"northeast" : {
50+
"lat" : 48.8644502802915,
51+
"lng" : 2.390157580291502
52+
},
53+
"southwest" : {
54+
"lat" : 48.8617523197085,
55+
"lng" : 2.387459619708498
56+
}
57+
}
58+
},
59+
"place_id" : "ChIJ4b303vJt5kcRF9AQdh4ZjWc",
60+
"types" : [ "street_address" ]
61+
}
62+
],
63+
"status" : "OK"
64+
}
65+
";

tests/Geocoder/Tests/Model/AddressFactoryTest.php

+13
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,17 @@ public function testFormatStringWithLeadingNumeral()
5959

6060
$this->assertEquals('1st ave 1A', $addresses->first()->getStreetName());
6161
}
62+
63+
/**
64+
* @expectedException \Geocoder\Exception\CollectionIsEmpty
65+
*/
66+
public function testCreateFromEmptyArray()
67+
{
68+
$addresses = $this->factory->createFromArray([]);
69+
70+
$this->assertInstanceOf('Geocoder\Model\AddressCollection', $addresses);
71+
$this->assertCount(0, $addresses);
72+
73+
$addresses->first(); // expecting exception here
74+
}
6275
}

0 commit comments

Comments
 (0)