forked from tidwall/geojson
-
Notifications
You must be signed in to change notification settings - Fork 0
/
object_test.go
112 lines (101 loc) · 2.15 KB
/
object_test.go
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
package geojson
import (
"encoding/json"
"fmt"
"math/rand"
"testing"
"time"
"github.com/tidwall/geojson/geometry"
"github.com/tidwall/pretty"
)
func init() {
seed := time.Now().UnixNano()
println(seed)
rand.Seed(seed)
}
func R(minX, minY, maxX, maxY float64) geometry.Rect {
return geometry.Rect{
Min: geometry.Point{X: minX, Y: minY},
Max: geometry.Point{X: maxX, Y: maxY},
}
}
func P(x, y float64) geometry.Point {
return geometry.Point{X: x, Y: y}
}
func PO(x, y float64) *Point {
return NewPoint(P(x, y))
}
func RO(minX, minY, maxX, maxY float64) *Rect {
return NewRect(R(minX, minY, maxX, maxY))
}
func LO(points []geometry.Point) *LineString {
return NewLineString(geometry.NewLine(points, nil))
}
func PPO(exterior []geometry.Point, holes [][]geometry.Point) *Polygon {
return NewPolygon(geometry.NewPoly(exterior, holes, nil))
}
func expectJSON(t testing.TB, data string, expect interface{}) Object {
if t != nil {
t.Helper()
}
return expectJSONOpts(t, data, expect, nil)
}
func expectJSONOpts(t testing.TB, data string, expect interface{}, opts *ParseOptions) Object {
if t != nil {
t.Helper()
}
var exerr error
var exstr string
switch expect := expect.(type) {
case string:
exstr = expect
case error:
exerr = expect
case nil:
exstr = data
}
obj, err := Parse(data, opts)
if err != exerr {
if t == nil {
panic(fmt.Sprintf("expected '%v', got '%v'", exerr, err))
} else {
t.Fatalf("expected '%v', got '%v'", exerr, err)
}
}
if exstr != "" {
if cleanJSON(exstr) != cleanJSON(string(obj.AppendJSON(nil))) {
if t == nil {
panic("json mismatch")
} else {
t.Fatal("json mismatch")
}
}
}
return obj
}
func expect(t testing.TB, what bool) {
if t != nil {
t.Helper()
}
if !what {
if t == nil {
panic("exception failure")
} else {
t.Fatal("expection failure")
}
}
}
func cleanJSON(data string) string {
var v interface{}
if err := json.Unmarshal([]byte(data), &v); err != nil {
println(string(data))
panic(err)
}
dst, err := json.Marshal(v)
if err != nil {
panic(err)
}
opts := *pretty.DefaultOptions
opts.Width = 99999999
return string(pretty.PrettyOptions(dst, &opts))
}