-
Notifications
You must be signed in to change notification settings - Fork 325
/
Copy pathMultiLineStringTest.php
124 lines (105 loc) · 4.67 KB
/
MultiLineStringTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
use Grimzy\LaravelMysqlSpatial\Types\LineString;
use Grimzy\LaravelMysqlSpatial\Types\MultiLineString;
use Grimzy\LaravelMysqlSpatial\Types\Point;
class MultiLineStringTest extends BaseTestCase
{
public function testFromWKT()
{
$multilinestring = MultiLineString::fromWKT('MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))');
$this->assertInstanceOf(MultiLineString::class, $multilinestring);
$this->assertSame(2, $multilinestring->count());
}
public function testToWKT()
{
$collection = new LineString([
new Point(0, 0),
new Point(0, 1),
new Point(1, 1),
new Point(1, 0),
new Point(0, 0),
]);
$multilinestring = new MultiLineString([$collection]);
$this->assertSame('MULTILINESTRING((0 0,1 0,1 1,0 1,0 0))', $multilinestring->toWKT());
}
public function testFromJson()
{
$multiLineString = MultiLineString::fromJson('{"type":"MultiLineString","coordinates":[[[1,1],[1,2],[1,3]],[[2,1],[2,2],[2,3]]]}');
$this->assertInstanceOf(MultiLineString::class, $multiLineString);
$multiLineStringLineStrings = $multiLineString->getGeometries();
$this->assertEquals(2, count($multiLineStringLineStrings));
$this->assertEquals(new Point(1, 1), $multiLineStringLineStrings[0][0]);
$this->assertEquals(new Point(2, 1), $multiLineStringLineStrings[0][1]);
$this->assertEquals(new Point(3, 1), $multiLineStringLineStrings[0][2]);
$this->assertEquals(new Point(1, 2), $multiLineStringLineStrings[1][0]);
$this->assertEquals(new Point(2, 2), $multiLineStringLineStrings[1][1]);
$this->assertEquals(new Point(3, 2), $multiLineStringLineStrings[1][2]);
}
public function testInvalidGeoJsonException()
{
$this->assertException(
\Grimzy\LaravelMysqlSpatial\Exceptions\InvalidGeoJsonException::class,
sprintf('Expected %s, got %s', GeoJson\Geometry\MultiLineString::class, GeoJson\Geometry\Point::class)
);
MultiLineString::fromJson('{"type":"Point","coordinates":[3.4,1.2]}');
}
public function testJsonSerialize()
{
$multilinestring = MultiLineString::fromWKT('MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))');
$this->assertInstanceOf(\GeoJson\Geometry\MultiLineString::class, $multilinestring->jsonSerialize());
$this->assertSame('{"type":"MultiLineString","coordinates":[[[0,0],[1,1],[1,2]],[[2,3],[3,2],[5,4]]]}', json_encode($multilinestring));
}
public function testToGeoJson()
{
$multilinestring = MultiLineString::fromWKT('MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))');
$this->assertJson($multilinestring->toGeoJson());
$this->assertJsonStringEqualsJsonString('{"type":"Feature","geometry":{"type":"MultiLineString","coordinates":[[[0,0],[1,1],[1,2]],[[2,3],[3,2],[5,4]]]},"properties":{}}', $multilinestring->toGeoJson());
}
public function testInvalidArgumentExceptionAtLeastOneEntry()
{
$this->assertException(
InvalidArgumentException::class,
'Grimzy\LaravelMysqlSpatial\Types\MultiLineString must contain at least 1 entry'
);
$multilinestring = new MultiLineString([]);
}
public function testInvalidArgumentExceptionNotArrayOfLineString()
{
$this->assertException(
InvalidArgumentException::class,
'Grimzy\LaravelMysqlSpatial\Types\MultiLineString must be a collection of Grimzy\LaravelMysqlSpatial\Types\LineString'
);
$multilinestring = new MultiLineString([
new LineString([new Point(0, 0), new Point(1, 1)]),
new Point(0, 1),
]);
}
public function testArrayAccess()
{
$linestring0 = new LineString([
new Point(0, 0),
new Point(1, 1),
]);
$linestring1 = new LineString([
new Point(1, 1),
new Point(2, 2),
]);
$multilinestring = new MultiLineString([$linestring0, $linestring1]);
// assert getting
$this->assertEquals($linestring0, $multilinestring[0]);
$this->assertEquals($linestring1, $multilinestring[1]);
// assert setting
$linestring2 = new LineString([
new Point(2, 2),
new Point(3, 3),
]);
$multilinestring[] = $linestring2;
$this->assertEquals($linestring2, $multilinestring[2]);
// assert invalid
$this->assertException(
InvalidArgumentException::class,
'Grimzy\LaravelMysqlSpatial\Types\MultiLineString must be a collection of Grimzy\LaravelMysqlSpatial\Types\LineString'
);
$multilinestring[] = 1;
}
}