-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbank_test.go
93 lines (77 loc) · 1.63 KB
/
bank_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
package sparql
import (
"bytes"
"testing"
)
const testBank = `
# Comments will be ignored, excepts those tagging a query
# tag: q0
SELECT * WHERE { ?s ?p ?o }
# tag: q1
SELECT *
WHERE
{
?s ?p ?o
FILTER(?s = <{{.Subj}}>)
}
# another comment
# tag: q2
SELECT ?s
WHERE { ?s ?p ?o }
LIMIT {{.L}}
OFFSET {{.O}}
# tag: myq
SELECT *
WHERE {
{ <{{.Res}}> ?p ?o }
UNION
{ ?s ?p <{{.Res}}> }
}
`
func TestLoadBank(t *testing.T) {
f := bytes.NewBufferString(testBank)
b := LoadBank(f)
if len(b) != 4 {
t.Errorf("len(bank) => %d, want 4", len(b))
}
}
func TestBankPrepare(t *testing.T) {
f := bytes.NewBufferString(testBank)
b := LoadBank(f)
q0, err := b.Prepare("q0")
if err != nil {
t.Fatal(err)
}
want := "SELECT * WHERE { ?s ?p ?o } "
if q0 != want {
t.Errorf("got %v, want %v", q0, want)
}
q1, err := b.Prepare("q1", struct{ Subj string }{"http://example.org/s1"})
if err != nil {
t.Fatal(err)
}
want = "SELECT * WHERE { ?s ?p ?o FILTER(?s = <http://example.org/s1>) } "
if q1 != want {
t.Errorf("got %v, want %v", q1, want)
}
q2, err := b.Prepare("q2", struct{ L, O int }{10, 33})
if err != nil {
t.Fatal(err)
}
want = "SELECT ?s WHERE { ?s ?p ?o } LIMIT 10 OFFSET 33 "
if q2 != want {
t.Errorf("got %v, want %v", q2, want)
}
q3, err := b.Prepare("myq", struct{ Res string }{"http://r.com"})
if err != nil {
t.Fatal(err)
}
want = "SELECT * WHERE { { <http://r.com> ?p ?o } UNION { ?s ?p <http://r.com> } } "
if q3 != want {
t.Errorf("got %v, want %v", q3, want)
}
_, err = b.Prepare("q3")
if err == nil {
t.Error("calling prepare() with a non-existing query should result in an error")
}
}