-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse_test.go
110 lines (103 loc) · 2.28 KB
/
parse_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
package relaxng
import (
"strings"
"testing"
)
func TestSimpleParseSpecExample(t *testing.T) {
//http://relaxng.org/spec-20011203.html
example5p1 := `<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="foo.element"/>
</start>
<define name="foo.element">
<element>
<name ns="">foo</name>
<group>
<ref name="bar1.element"/>
<ref name="bar2.element"/>
</group>
</element>
</define>
<define name="bar1.element">
<element>
<name ns="http://www.example.com/n1">bar1</name>
<empty/>
</element>
</define>
<define name="bar2.element">
<element>
<name ns="http://www.example.com/n2">bar2</name>
<empty/>
</element>
</define>
</grammar>`
g, err := ParseGrammar([]byte(example5p1))
if err != nil {
panic(err)
}
s := g.String()
t.Logf("%s", s)
if !strings.Contains(s, `ref name="bar2.element"`) {
t.Fatalf("expected ref name bar2.element in group")
}
if !strings.Contains(s, `ref name="bar1.element"`) {
t.Fatalf("expected ref name bar1.element in group")
}
if !strings.Contains(s, `<define name="bar1.element">`) {
t.Fatalf("expected define bar1")
}
}
func TestSimpleParseChoice(t *testing.T) {
choice := `<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="element1"/>
</start>
<define name="element1">
<element>
<name>foo</name>
<choice>
<ref name="a"/>
<ref name="b"/>
</choice>
</element>
</define>
</grammar>`
g, err := ParseGrammar([]byte(choice))
if err != nil {
t.Fatal(err)
}
s := g.String()
t.Logf(s)
if !strings.Contains(s, `choice`) {
t.Fatalf("expected choice")
}
if !strings.Contains(s, `ref name="a"`) {
t.Fatalf("expected ref name a in choice")
}
}
func TestSimpleParse94(t *testing.T) {
s94 := `<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="element1"/>
</start>
<define name="element1">
<element>
<name ns="">foo</name>
<attribute>
<name ns="">bar</name>
<text/>
</attribute>
</element>
</define>
</grammar>`
g, err := ParseGrammar([]byte(s94))
if err != nil {
t.Fatal(err)
}
s := g.String()
t.Logf(s)
if !strings.Contains(s, `attribute`) {
t.Fatalf("expected attribute")
}
}