-
Notifications
You must be signed in to change notification settings - Fork 1
/
parser_test.go
59 lines (55 loc) · 1.35 KB
/
parser_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
package huffy
import (
"bytes"
"math/rand"
"strings"
"testing"
"unicode"
"github.com/stretchr/testify/assert"
)
func parse(str string) []string {
var prevUppercase = false
var tokens []string
var acc = &bytes.Buffer{}
for _, r := range str {
var isUpper = unicode.IsUpper(r)
var emptyAcc = acc.Len() == 0
var uppecaseChain = isUpper && prevUppercase
var startOfToken = isUpper != prevUppercase && !prevUppercase
if (startOfToken || uppecaseChain) && !emptyAcc {
tokens = append(tokens, acc.String())
acc.Reset()
}
acc.WriteRune(r)
prevUppercase = isUpper
}
if acc.Len() != 0 {
tokens = append(tokens, acc.String())
}
return tokens
}
func TestParser(test *testing.T) {
type TCase struct {
Input string
Expected []string
}
var wordParts = strings.Fields(`Decode reads the next json encoded value from its input and stores it in the value pointed to by v`)
(&Tester{
Generator: func(rnd *rand.Rand, i int) interface{} {
var n = len(wordParts)
var tokens []string
for range r(i%5 + 1) {
var word = wordParts[rnd.Intn(n)]
tokens = append(tokens, strings.Title(word))
}
return TCase{
Input: strings.Join(tokens, ""),
Expected: tokens,
}
},
Unit: func(test *testing.T, data interface{}) {
var tcase = data.(TCase)
assert.Equal(test, tcase.Expected, parse(tcase.Input))
},
}).R(test)
}