1package main 2 3import ( 4 "strconv" 5 "testing" 6) 7 8// typical czech test sentence ;-) 9const baseTestString = "Příliš žluťoučký kůň příšerně úpěl ďábelské ódy" 10 11func TestRemoveDiacritics(t *testing.T) { 12 testStr := baseTestString 13 expStr := "Prilis zlutoucky kun priserne upel dabelske ody" 14 checkRemoveDiacritics(testStr, expStr, t) 15 16 // other accents (non comlete, but all I founded) 17 testStr = "áéíóúýčďěňřšťžůåøĉĝĥĵŝŭšžõäöüàâçéèêëîïôùûüÿžščćđáéíóúąęėįųūčšžāēīūčšžļķņģáéíóúöüőűäöüëïąćęłńóśźżáàãâçéêíóõôăâîșțáäčďéíĺľňóôŕšťúýžáéíñóúüåäöâçîşûğăâđêôơưáàãảạ" 18 expStr = "aeiouycdenrstzuaocghjsuszoaouaaceeeeiiouuuyzsccdaeiouaeeiuucszaeiucszlkngaeiouououaoueiacelnoszzaaaaceeioooaaistaacdeillnoorstuyzaeinouuaaoacisugaadeoouaaaaa" 19 checkRemoveDiacritics(testStr, expStr, t) 20 21 testStr = "ÁÉÍÓÚÝČĎĚŇŘŠŤŽŮÅØĈĜĤĴŜŬŠŽÕÄÖÜÀÂÇÉÈÊËÎÏÔÙÛÜŸŽŠČĆĐÁÉÍÓÚĄĘĖĮŲŪČŠŽĀĒĪŪČŠŽĻĶŅĢÁÉÍÓÚÖÜŐŰÄÖÜËÏĄĆĘŁŃÓŚŹŻÁÀÃÂÇÉÊÍÓÕÔĂÂÎȘȚÁÄČĎÉÍĹĽŇÓÔŔŠŤÚÝŽÁÉÍÑÓÚÜÅÄÖÂÇÎŞÛĞĂÂĐÊÔƠƯÁÀÃẢẠ" 22 expStr = "AEIOUYCDENRSTZUAOCGHJSUSZOAOUAACEEEEIIOUUUYZSCCDAEIOUAEEIUUCSZAEIUCSZLKNGAEIOUOUOUAOUEIACELNOSZZAAAACEEIOOOAAISTAACDEILLNOORSTUYZAEINOUUAAOACISUGAADEOOUAAAAA" 23 checkRemoveDiacritics(testStr, expStr, t) 24 25 testStr = "áạàảãăắặằẳẵâấậầẩẫéẹèẻẽêếệềểễiíịìỉĩoóọòỏõôốộồổỗơớợờởỡúụùủũưứựừửữyýỵỳỷỹđ" 26 expStr = "aaaaaaaaaaaaaaaaaeeeeeeeeeeeiiiiiioooooooooooooooooouuuuuuuuuuuyyyyyyd" 27 checkRemoveDiacritics(testStr, expStr, t) 28 29 testStr = "ÁẠÀẢÃĂẮẶẰẲẴÂẤẬẦẨẪÉẸÈẺẼÊẾỆỀỂỄÍỊÌỈĨÓỌÒỎÕÔỐỘỒỔỖƠỚỢỜỞỠÚỤÙỦŨƯỨỰỪỬỮÝỴỲỶỸĐ" 30 expStr = "AAAAAAAAAAAAAAAAAEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYYD" 31 checkRemoveDiacritics(testStr, expStr, t) 32} 33 34func checkRemoveDiacritics(testStr string, expStr string, t *testing.T) { 35 resultStr := removeDiacritics(testStr) 36 if resultStr != expStr { 37 t.Errorf("at input '%v' expected '%v' but got '%v'", testStr, expStr, resultStr) 38 } 39} 40 41func TestSearchSettings(t *testing.T) { 42 runSearch(t, true, false, true, true, "Veřejný", "vere", true) 43 44 runSearch(t, true, false, true, false, baseTestString, "Zlutoucky", true) 45 runSearch(t, true, false, true, false, baseTestString, "zlutoucky", true) 46 runSearch(t, true, true, true, false, baseTestString, "Zlutoucky", false) 47 runSearch(t, true, true, true, true, baseTestString, "zlutoucky", true) 48 49 runSearch(t, false, false, true, false, baseTestString, "žlutoucky", true) 50 runSearch(t, false, false, true, false, baseTestString, "Žlutoucky", false) 51 52 runSearch(t, false, false, true, true, baseTestString, "žluťoučký", true) 53 runSearch(t, false, false, true, false, baseTestString, "žluťoučký", true) 54 runSearch(t, false, false, false, false, baseTestString, "žluťoučký", true) 55 runSearch(t, false, false, false, false, baseTestString, "zlutoucky", false) 56 runSearch(t, false, false, true, true, baseTestString, "zlutoucky", true) 57} 58 59func runSearch(t *testing.T, ignorecase, smartcase, ignorediacritics, smartdiacritics bool, base, pattern string, expected bool) { 60 gOpts.ignorecase = ignorecase 61 gOpts.smartcase = smartcase 62 gOpts.ignoredia = ignorediacritics 63 gOpts.smartdia = smartdiacritics 64 matched, _ := searchMatch(base, pattern) 65 if matched != expected { 66 t.Errorf("False search for" + 67 " ignorecase = " + strconv.FormatBool(gOpts.ignorecase) + ", " + 68 " smartcase = " + strconv.FormatBool(gOpts.smartcase) + ", " + 69 " ignoredia = " + strconv.FormatBool(gOpts.ignoredia) + ", " + 70 " smartdia = " + strconv.FormatBool(gOpts.smartdia) + ", ") 71 } 72} 73