These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | declare( strict_types = 1 ); |
||
4 | |||
5 | namespace Tests\DataValues\Geo\Values; |
||
6 | |||
7 | use DataValues\Geo\Values\GlobeCoordinateValue; |
||
8 | use DataValues\Geo\Values\LatLongValue; |
||
9 | use DataValues\IllegalValueException; |
||
10 | use PHPUnit\Framework\TestCase; |
||
11 | |||
12 | /** |
||
13 | * @covers \DataValues\Geo\Values\GlobeCoordinateValue |
||
14 | * |
||
15 | * @license GPL-2.0-or-later |
||
16 | * @author Jeroen De Dauw < [email protected] > |
||
17 | */ |
||
18 | class GlobeCoordinateValueTest extends TestCase { |
||
19 | |||
20 | public function testGetLatitudeReturnsConstructorValue() { |
||
21 | $this->assertSame( |
||
22 | 12.34, |
||
23 | ( new GlobeCoordinateValue( new LatLongValue( 12.34, 56.78 ) ) )->getLatitude() |
||
24 | ); |
||
25 | } |
||
26 | |||
27 | public function testGetLongitudeReturnsConstructorValue() { |
||
28 | $this->assertSame( |
||
29 | 56.78, |
||
30 | ( new GlobeCoordinateValue( new LatLongValue( 12.34, 56.78 ) ) )->getLongitude() |
||
31 | ); |
||
32 | } |
||
33 | |||
34 | /** |
||
35 | * @dataProvider validNonNullGlobeProvider |
||
36 | */ |
||
37 | public function testGetGlobeReturnsConstructorValue( ?string $globe ) { |
||
38 | $this->assertSame( |
||
39 | $globe, |
||
40 | ( new GlobeCoordinateValue( |
||
41 | new LatLongValue( 12.34, 56.78 ), |
||
42 | null, |
||
43 | $globe |
||
44 | ) )->getGlobe() |
||
45 | ); |
||
46 | } |
||
47 | |||
48 | public function validNonNullGlobeProvider() { |
||
49 | yield [ GlobeCoordinateValue::GLOBE_EARTH ]; |
||
50 | yield [ "coruscant" ]; |
||
51 | yield [ "Schar's World" ]; |
||
52 | yield [ 'a' ]; |
||
53 | yield [ '0' ]; |
||
54 | } |
||
55 | |||
56 | public function testNullGlobeDefaultToEarth() { |
||
57 | $this->assertSame( |
||
58 | GlobeCoordinateValue::GLOBE_EARTH, |
||
59 | ( new GlobeCoordinateValue( new LatLongValue( 12.34, 56.78 ) ) )->getGlobe() |
||
60 | ); |
||
61 | } |
||
62 | |||
63 | /** |
||
64 | * @dataProvider validPrecisionProvider |
||
65 | */ |
||
66 | public function testGetPrecisionReturnsConstructorValue( float $precision ) { |
||
67 | $this->assertSame( |
||
68 | $precision, |
||
69 | ( new GlobeCoordinateValue( new LatLongValue( 12.34, 56.78 ), $precision ) )->getPrecision() |
||
70 | ); |
||
71 | } |
||
72 | |||
73 | public function validPrecisionProvider() { |
||
74 | yield [ 360 ]; |
||
75 | yield [ 359.9 ]; |
||
76 | yield [ -360 ]; |
||
77 | yield [ -359.9 ]; |
||
78 | yield [ 0 ]; |
||
79 | yield [ 1 ]; |
||
80 | yield [ -1 ]; |
||
81 | yield [ 0.1 ]; |
||
82 | yield [ -0.1 ]; |
||
83 | yield [ 123 ]; |
||
84 | yield [ -123 ]; |
||
85 | yield [ 123.4567890123456789 ]; |
||
86 | } |
||
87 | |||
88 | /** |
||
89 | * @dataProvider illegalArrayValueProvider |
||
90 | */ |
||
91 | public function testNewFromArrayErrorHandling( $data ) { |
||
92 | $this->expectException( IllegalValueException::class ); |
||
93 | GlobeCoordinateValue::newFromArray( $data ); |
||
0 ignored issues
–
show
|
|||
94 | } |
||
95 | |||
96 | public function illegalArrayValueProvider() { |
||
97 | return [ |
||
98 | [ null ], |
||
99 | [ '' ], |
||
100 | [ [] ], |
||
101 | [ [ 'latitude' => 0 ] ], |
||
102 | [ [ 'longitude' => 0 ] ], |
||
103 | ]; |
||
104 | } |
||
105 | |||
106 | public function testArrayValueCompatibility() { |
||
107 | // These serializations where generated using revision f91f65f989cc3ffacbe924012d8f5b574e0b710c |
||
108 | // The strings are the result of calling getArrayValue on the objects and then feeding this to serialize. |
||
109 | |||
110 | $serialization = 'a:5:{s:8:"latitude";d:-4.2000000000000002;' |
||
111 | . 's:9:"longitude";d:42;' |
||
112 | . 's:8:"altitude";N;' |
||
113 | . 's:9:"precision";d:0.01;' |
||
114 | . 's:5:"globe";s:4:"mars";}'; |
||
115 | |||
116 | $arrayForm = unserialize( $serialization ); |
||
117 | $globeCoordinate = GlobeCoordinateValue::newFromArray( $arrayForm ); |
||
0 ignored issues
–
show
The method
DataValues\Geo\Values\Gl...teValue::newFromArray() has been deprecated with message: since 2.0.1. Static DataValue::newFromArray constructors like this are underspecified (not in the DataValue interface), and misleadingly named (should be named newFromArrayValue). Instead, use DataValue builder callbacks in @see DataValueDeserializer.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.
Loading history...
|
|||
118 | |||
119 | $this->assertSame( -4.2, $globeCoordinate->getLatitude() ); |
||
120 | $this->assertSame( 42.0, $globeCoordinate->getLongitude() ); |
||
121 | $this->assertSame( 0.01, $globeCoordinate->getPrecision() ); |
||
122 | $this->assertSame( 'mars', $globeCoordinate->getGlobe() ); |
||
123 | |||
124 | $serialization = 'a:5:{s:8:"latitude";d:-4.2000000000000002;' |
||
125 | . 's:9:"longitude";d:-42;' |
||
126 | . 's:8:"altitude";d:9001;' |
||
127 | . 's:9:"precision";d:1;' |
||
128 | . 's:5:"globe";s:33:"http://www.wikidata.org/entity/Q2";}'; |
||
129 | |||
130 | $arrayForm = unserialize( $serialization ); |
||
131 | $globeCoordinate = GlobeCoordinateValue::newFromArray( $arrayForm ); |
||
0 ignored issues
–
show
The method
DataValues\Geo\Values\Gl...teValue::newFromArray() has been deprecated with message: since 2.0.1. Static DataValue::newFromArray constructors like this are underspecified (not in the DataValue interface), and misleadingly named (should be named newFromArrayValue). Instead, use DataValue builder callbacks in @see DataValueDeserializer.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.
Loading history...
|
|||
132 | |||
133 | $this->assertSame( -4.2, $globeCoordinate->getLatitude() ); |
||
134 | $this->assertSame( -42.0, $globeCoordinate->getLongitude() ); |
||
135 | $this->assertSame( 1.0, $globeCoordinate->getPrecision() ); |
||
136 | $this->assertSame( 'http://www.wikidata.org/entity/Q2', $globeCoordinate->getGlobe() ); |
||
137 | } |
||
138 | |||
139 | public function testSerializeCompatibility() { |
||
140 | $globeCoordinate = unserialize( |
||
141 | 'C:42:"DataValues\Geo\Values\GlobeCoordinateValue":27:{[-4.2,-42,null,0.01,"mars"]}' |
||
142 | ); |
||
143 | $this->assertInstanceOf( GlobeCoordinateValue::class, $globeCoordinate ); |
||
144 | |||
145 | $this->assertSame( -4.2, $globeCoordinate->getLatitude() ); |
||
146 | $this->assertSame( -42.0, $globeCoordinate->getLongitude() ); |
||
147 | $this->assertSame( 0.01, $globeCoordinate->getPrecision() ); |
||
148 | $this->assertSame( 'mars', $globeCoordinate->getGlobe() ); |
||
149 | |||
150 | $globeCoordinate = unserialize( |
||
151 | 'C:42:"DataValues\Geo\Values\GlobeCoordinateValue":27:{[-4.2,-42,9001,0.01,"mars"]}' |
||
152 | ); |
||
153 | $this->assertInstanceOf( GlobeCoordinateValue::class, $globeCoordinate ); |
||
154 | } |
||
155 | |||
156 | public function testHashIsConsistentAcrossDifferentRuntimeEnvironments() { |
||
157 | $latLongValue = new LatLongValue( 12.2, 12.2 ); |
||
158 | |||
159 | $globeCoordinateValue = new GlobeCoordinateValue( $latLongValue, 0.1, 'does not matter' ); |
||
160 | |||
161 | $this->assertSame( '08a33f1bbb4c8bd91b6531b5bffd91fd', $globeCoordinateValue->getHash() ); |
||
162 | } |
||
163 | |||
164 | public function testGetLatLong() { |
||
165 | $latLong = new LatLongValue( 1, 2 ); |
||
166 | |||
167 | $this->assertSame( |
||
168 | $latLong, |
||
169 | ( new GlobeCoordinateValue( $latLong ) )->getLatLong() |
||
170 | ); |
||
171 | } |
||
172 | |||
173 | public function testTooHighPrecisionCausesInvalidArgumentException() { |
||
174 | $this->expectException( \InvalidArgumentException::class ); |
||
175 | new GlobeCoordinateValue( new LatLongValue( 1, 2 ), 360.1 ); |
||
176 | } |
||
177 | |||
178 | public function testTooLowPrecisionCausesInvalidArgumentException() { |
||
179 | $this->expectException( \InvalidArgumentException::class ); |
||
180 | new GlobeCoordinateValue( new LatLongValue( 1, 2 ), -360.1 ); |
||
181 | } |
||
182 | |||
183 | public function testEmptyGlobeCausesInvalidArgumentException() { |
||
184 | $this->expectException( \InvalidArgumentException::class ); |
||
185 | new GlobeCoordinateValue( new LatLongValue( 1, 2 ), null, '' ); |
||
186 | } |
||
187 | |||
188 | /** |
||
189 | * @dataProvider instanceProvider |
||
190 | */ |
||
191 | public function testValuesEqualThemselves( GlobeCoordinateValue $globeValue ) { |
||
192 | $this->assertTrue( $globeValue->equals( $globeValue ) ); |
||
193 | } |
||
194 | |||
195 | public function instanceProvider() { |
||
196 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), 1 ) ]; |
||
197 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 42 ), 1 ) ]; |
||
198 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 42, 4.2 ), 0.1 ) ]; |
||
199 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 42, 42 ), 0.1 ) ]; |
||
200 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( -4.2, -4.2 ), 0.1 ) ]; |
||
201 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, -42 ), 0.1 ) ]; |
||
202 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( -42, 4.2 ), 10 ) ]; |
||
203 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 0, 0 ), 0.001 ) ]; |
||
204 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 0, 0 ), 360 ) ]; |
||
205 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 0, 0 ), -360 ) ]; |
||
206 | |||
207 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), 1, GlobeCoordinateValue::GLOBE_EARTH ) ]; |
||
208 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), 1, 'terminus' ) ]; |
||
209 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), 1, "Schar's World" ) ]; |
||
210 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), 1, 'coruscant' ) ]; |
||
211 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), 1, null ) ]; |
||
212 | $argLists[] = yield [ new GlobeCoordinateValue( new LatLongValue( 4.2, 4.2 ), null ) ]; |
||
213 | } |
||
214 | |||
215 | /** |
||
216 | * @dataProvider instanceProvider |
||
217 | */ |
||
218 | public function testIdenticalValuesAreEqual( GlobeCoordinateValue $globeValue ) { |
||
219 | $this->assertTrue( $globeValue->equals( $globeValue->getCopy() ) ); |
||
220 | } |
||
221 | |||
222 | /** |
||
223 | * @dataProvider instanceProvider |
||
224 | */ |
||
225 | public function testSerializeRountripsWithUnserialize( GlobeCoordinateValue $globeValue ) { |
||
226 | $this->assertEquals( |
||
227 | $globeValue, |
||
228 | unserialize( serialize( $globeValue ) ) |
||
229 | ); |
||
230 | } |
||
231 | |||
232 | /** |
||
233 | * @dataProvider instanceProvider |
||
234 | */ |
||
235 | public function testGetArrayValueAndNewFromArrayRoundtrip( GlobeCoordinateValue $globeValue ) { |
||
236 | $this->assertEquals( |
||
237 | $globeValue, |
||
238 | GlobeCoordinateValue::newFromArray( $globeValue->getArrayValue() ) |
||
0 ignored issues
–
show
The method
DataValues\Geo\Values\Gl...teValue::newFromArray() has been deprecated with message: since 2.0.1. Static DataValue::newFromArray constructors like this are underspecified (not in the DataValue interface), and misleadingly named (should be named newFromArrayValue). Instead, use DataValue builder callbacks in @see DataValueDeserializer.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.
Loading history...
|
|||
239 | ); |
||
240 | } |
||
241 | |||
242 | /** |
||
243 | * @dataProvider instanceProvider |
||
244 | */ |
||
245 | public function testGetSortkeyReturnsLatitude( GlobeCoordinateValue $globeValue ) { |
||
246 | $this->assertSame( |
||
247 | $globeValue->getLatitude(), |
||
248 | $globeValue->getSortKey() |
||
249 | ); |
||
250 | } |
||
251 | |||
252 | /** |
||
253 | * @dataProvider instanceProvider |
||
254 | */ |
||
255 | public function testGetValueReturnsItself( GlobeCoordinateValue $globeValue ) { |
||
256 | $this->assertSame( |
||
257 | $globeValue, |
||
258 | $globeValue->getValue() |
||
259 | ); |
||
260 | } |
||
261 | |||
262 | } |
||
263 |
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.