summaryrefslogtreecommitdiff
path: root/src/pattern_test.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2015-01-02 04:49:30 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2015-01-04 00:37:29 +0900
commitf3177305d5572b26f135fc045481358b4eb1bf69 (patch)
treed59fd9587e44e998581a131875bf45e243df6c6e /src/pattern_test.go
parent7ba93d9f8351be64b37c65ae04d594ee261d5d26 (diff)
downloadfzf-f3177305d5572b26f135fc045481358b4eb1bf69.tar.gz
Rewrite fzf in Go
Diffstat (limited to 'src/pattern_test.go')
-rw-r--r--src/pattern_test.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/pattern_test.go b/src/pattern_test.go
new file mode 100644
index 00000000..a1ce6263
--- /dev/null
+++ b/src/pattern_test.go
@@ -0,0 +1,87 @@
+package fzf
+
+import "testing"
+
+func TestParseTermsExtended(t *testing.T) {
+ terms := parseTerms(MODE_EXTENDED,
+ "aaa 'bbb ^ccc ddd$ !eee !'fff !^ggg !hhh$")
+ if len(terms) != 8 ||
+ terms[0].typ != TERM_FUZZY || terms[0].inv ||
+ terms[1].typ != TERM_EXACT || terms[1].inv ||
+ terms[2].typ != TERM_PREFIX || terms[2].inv ||
+ terms[3].typ != TERM_SUFFIX || terms[3].inv ||
+ terms[4].typ != TERM_FUZZY || !terms[4].inv ||
+ terms[5].typ != TERM_EXACT || !terms[5].inv ||
+ terms[6].typ != TERM_PREFIX || !terms[6].inv ||
+ terms[7].typ != TERM_SUFFIX || !terms[7].inv {
+ t.Errorf("%s", terms)
+ }
+ for idx, term := range terms {
+ if len(term.text) != 3 {
+ t.Errorf("%s", term)
+ }
+ if idx > 0 && len(term.origText) != 4+idx/5 {
+ t.Errorf("%s", term)
+ }
+ }
+}
+
+func TestParseTermsExtendedExact(t *testing.T) {
+ terms := parseTerms(MODE_EXTENDED_EXACT,
+ "aaa 'bbb ^ccc ddd$ !eee !'fff !^ggg !hhh$")
+ if len(terms) != 8 ||
+ terms[0].typ != TERM_EXACT || terms[0].inv || len(terms[0].text) != 3 ||
+ terms[1].typ != TERM_EXACT || terms[1].inv || len(terms[1].text) != 4 ||
+ terms[2].typ != TERM_PREFIX || terms[2].inv || len(terms[2].text) != 3 ||
+ terms[3].typ != TERM_SUFFIX || terms[3].inv || len(terms[3].text) != 3 ||
+ terms[4].typ != TERM_EXACT || !terms[4].inv || len(terms[4].text) != 3 ||
+ terms[5].typ != TERM_EXACT || !terms[5].inv || len(terms[5].text) != 4 ||
+ terms[6].typ != TERM_PREFIX || !terms[6].inv || len(terms[6].text) != 3 ||
+ terms[7].typ != TERM_SUFFIX || !terms[7].inv || len(terms[7].text) != 3 {
+ t.Errorf("%s", terms)
+ }
+}
+
+func TestParseTermsEmpty(t *testing.T) {
+ terms := parseTerms(MODE_EXTENDED, "' $ ^ !' !^ !$")
+ if len(terms) != 0 {
+ t.Errorf("%s", terms)
+ }
+}
+
+func TestExact(t *testing.T) {
+ defer clearPatternCache()
+ clearPatternCache()
+ pattern := BuildPattern(MODE_EXTENDED, CASE_SMART,
+ []Range{}, nil, []rune("'abc"))
+ str := "aabbcc abc"
+ sidx, eidx := ExactMatchNaive(pattern.caseSensitive, &str, pattern.terms[0].text)
+ if sidx != 7 || eidx != 10 {
+ t.Errorf("%s / %d / %d", pattern.terms, sidx, eidx)
+ }
+}
+
+func TestCaseSensitivity(t *testing.T) {
+ defer clearPatternCache()
+ clearPatternCache()
+ pat1 := BuildPattern(MODE_FUZZY, CASE_SMART, []Range{}, nil, []rune("abc"))
+ clearPatternCache()
+ pat2 := BuildPattern(MODE_FUZZY, CASE_SMART, []Range{}, nil, []rune("Abc"))
+ clearPatternCache()
+ pat3 := BuildPattern(MODE_FUZZY, CASE_IGNORE, []Range{}, nil, []rune("abc"))
+ clearPatternCache()
+ pat4 := BuildPattern(MODE_FUZZY, CASE_IGNORE, []Range{}, nil, []rune("Abc"))
+ clearPatternCache()
+ pat5 := BuildPattern(MODE_FUZZY, CASE_RESPECT, []Range{}, nil, []rune("abc"))
+ clearPatternCache()
+ pat6 := BuildPattern(MODE_FUZZY, CASE_RESPECT, []Range{}, nil, []rune("Abc"))
+
+ if string(pat1.text) != "abc" || pat1.caseSensitive != false ||
+ string(pat2.text) != "Abc" || pat2.caseSensitive != true ||
+ string(pat3.text) != "abc" || pat3.caseSensitive != false ||
+ string(pat4.text) != "abc" || pat4.caseSensitive != false ||
+ string(pat5.text) != "abc" || pat5.caseSensitive != true ||
+ string(pat6.text) != "Abc" || pat6.caseSensitive != true {
+ t.Error("Invalid case conversion")
+ }
+}