Skip to content

Commit 21f6e04

Browse files
committed
In Progress: unit test cases
1 parent 5c6fa3f commit 21f6e04

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

utils/url_test.go

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
/*!
2+
* rest-api-framework
3+
* Copyright(c) 2019 Roshan Gade
4+
* MIT Licensed
5+
*/
6+
package utils
7+
8+
import (
9+
"regexp"
10+
"testing"
11+
)
12+
13+
func validateRegExp(t *testing.T, from string, regex *regexp.Regexp, _regex *regexp.Regexp, keys int, expKeys int, err error) {
14+
t.Log("case: ", from)
15+
if err != nil {
16+
t.Error("caught an error - ", err)
17+
}
18+
if keys != expKeys {
19+
t.Error("wrong number of keys - ", keys)
20+
}
21+
if regex.String() != _regex.String() {
22+
t.Error("regexp does not match - ", regex.String())
23+
}
24+
}
25+
26+
// wildcard
27+
func TestCompile1(t *testing.T) {
28+
var regex *regexp.Regexp
29+
var _regex *regexp.Regexp
30+
var keys []string
31+
var err error
32+
33+
// case 1
34+
regex, keys, err = Compile("/*")
35+
_regex, _ = regexp.Compile("^(?:/(.*))/?$")
36+
validateRegExp(t, "wildcard 1", regex, _regex, len(keys), 1, err)
37+
38+
// case 2
39+
regex, keys, err = Compile("/foo/:bar/*")
40+
_regex, _ = regexp.Compile("^/foo/([^/]+?)(?:/(.*))/?$")
41+
validateRegExp(t, "wildcard 2", regex, _regex, len(keys), 2, err)
42+
43+
// case 3 - wrong example
44+
regex, keys, err = Compile("/:foo/:bar?/*")
45+
_regex, _ = regexp.Compile("^/([^/]+?)(?:/([^/]+?))?(?:/(.*))/?$")
46+
validateRegExp(t, "wildcard 3", regex, _regex, len(keys), 3, err)
47+
48+
}
49+
50+
// params
51+
func TestCompile2(t *testing.T) {
52+
var regex *regexp.Regexp
53+
var _regex *regexp.Regexp
54+
var keys []string
55+
var err error
56+
57+
// case 1
58+
regex, keys, err = Compile("/:foo/:bar")
59+
_regex, _ = regexp.Compile("^/([^/]+?)/([^/]+?)/?$")
60+
validateRegExp(t, "params 1", regex, _regex, len(keys), 2, err)
61+
62+
// case 2
63+
regex, keys, err = Compile("/foo/:bar")
64+
_regex, _ = regexp.Compile("^/foo/([^/]+?)/?$")
65+
validateRegExp(t, "params 2", regex, _regex, len(keys), 1, err)
66+
67+
// case 3
68+
regex, keys, err = Compile("/:foo/bar")
69+
_regex, _ = regexp.Compile("^/([^/]+?)/bar/?$")
70+
validateRegExp(t, "params 3", regex, _regex, len(keys), 1, err)
71+
72+
// case 4
73+
regex, keys, err = Compile("/::foo")
74+
_regex, _ = regexp.Compile("^/([^/]+?)/?$")
75+
validateRegExp(t, "params 4", regex, _regex, len(keys), 1, err)
76+
77+
}
78+
79+
// plain text
80+
func TestCompile3(t *testing.T) {
81+
var regex *regexp.Regexp
82+
var _regex *regexp.Regexp
83+
var keys []string
84+
var err error
85+
86+
// case 1
87+
regex, keys, err = Compile("/foo/bar")
88+
_regex, _ = regexp.Compile("^/foo/bar/?$")
89+
validateRegExp(t, "plain text 1", regex, _regex, len(keys), 0, err)
90+
91+
// case 2
92+
regex, keys, err = Compile("/foo*")
93+
_regex, _ = regexp.Compile("^/foo*/?$")
94+
validateRegExp(t, "plain text 2", regex, _regex, len(keys), 0, err)
95+
96+
// case 2
97+
regex, keys, err = Compile("/")
98+
_regex, _ = regexp.Compile("^/?$")
99+
validateRegExp(t, "plain text 3", regex, _regex, len(keys), 0, err)
100+
101+
}
102+
103+
// optional param
104+
func TestCompile4(t *testing.T) {
105+
var regex *regexp.Regexp
106+
var _regex *regexp.Regexp
107+
var keys []string
108+
var err error
109+
110+
// case 1
111+
regex, keys, err = Compile("/:foo/:bar?")
112+
_regex, _ = regexp.Compile("^/([^/]+?)(?:/([^/]+?))?/?$")
113+
validateRegExp(t, "optional param 1", regex, _regex, len(keys), 2, err)
114+
115+
// case 2 - wrong example (handle error)
116+
regex, keys, err = Compile("/:foo/:?")
117+
_regex, _ = regexp.Compile("^/([^/]+?)(?:/([^/]+?))?/?$")
118+
validateRegExp(t, "optional param 2", regex, _regex, len(keys), 2, err)
119+
}
120+
121+
// wildcard character
122+
var regex1, keys1, _ = Compile("/*")
123+
var str1 = []byte("/foo/bar")
124+
125+
func BenchmarkExec1(b *testing.B) {
126+
for n := 0; n < b.N; n++ {
127+
_ = Exec(regex1, keys1, str1)
128+
}
129+
}
130+
131+
// params
132+
var regex2, keys2, _ = Compile("/:foo/:bar")
133+
var str2 = []byte("/foo/bar")
134+
135+
func BenchmarkExec2(b *testing.B) {
136+
for n := 0; n < b.N; n++ {
137+
_ = Exec(regex2, keys2, str2)
138+
}
139+
}
140+
141+
// plain text
142+
var regex3, keys3, _ = Compile("/foo/bar")
143+
var str3 = []byte("/foo/bar")
144+
145+
func BenchmarkExec3(b *testing.B) {
146+
for n := 0; n < b.N; n++ {
147+
_ = Exec(regex3, keys3, str3)
148+
}
149+
}
150+
151+
// optional param
152+
var regex4, keys4, _ = Compile("/foo/:bar?")
153+
var str4 = []byte("/foo/bar")
154+
155+
func BenchmarkExec4(b *testing.B) {
156+
for n := 0; n < b.N; n++ {
157+
_ = Exec(regex4, keys4, str4)
158+
}
159+
}

0 commit comments

Comments
 (0)