github.com/lingyao2333/mo-zero@v1.4.1/core/stringx/replacer_test.go (about) 1 package stringx 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestReplacer_Replace(t *testing.T) { 10 mapping := map[string]string{ 11 "一二三四": "1234", 12 "二三": "23", 13 "二": "2", 14 } 15 assert.Equal(t, "零1234五", NewReplacer(mapping).Replace("零一二三四五")) 16 } 17 18 func TestReplacer_ReplaceOverlap(t *testing.T) { 19 mapping := map[string]string{ 20 "3d": "34", 21 "bc": "23", 22 } 23 assert.Equal(t, "a234e", NewReplacer(mapping).Replace("abcde")) 24 } 25 26 func TestReplacer_ReplaceSingleChar(t *testing.T) { 27 mapping := map[string]string{ 28 "二": "2", 29 } 30 assert.Equal(t, "零一2三四五", NewReplacer(mapping).Replace("零一二三四五")) 31 } 32 33 func TestReplacer_ReplaceExceedRange(t *testing.T) { 34 mapping := map[string]string{ 35 "二三四五六": "23456", 36 } 37 assert.Equal(t, "零一二三四五", NewReplacer(mapping).Replace("零一二三四五")) 38 } 39 40 func TestReplacer_ReplacePartialMatch(t *testing.T) { 41 mapping := map[string]string{ 42 "二三四七": "2347", 43 } 44 assert.Equal(t, "零一二三四五", NewReplacer(mapping).Replace("零一二三四五")) 45 } 46 47 func TestReplacer_ReplaceMultiMatches(t *testing.T) { 48 mapping := map[string]string{ 49 "二三": "23", 50 } 51 assert.Equal(t, "零一23四五一23四五", NewReplacer(mapping).Replace("零一二三四五一二三四五")) 52 } 53 54 func TestReplacer_ReplaceJumpToFail(t *testing.T) { 55 mapping := map[string]string{ 56 "bcdf": "1235", 57 "cde": "234", 58 } 59 assert.Equal(t, "ab234fg", NewReplacer(mapping).Replace("abcdefg")) 60 } 61 62 func TestReplacer_ReplaceJumpToFailDup(t *testing.T) { 63 mapping := map[string]string{ 64 "bcdf": "1235", 65 "ccde": "2234", 66 } 67 assert.Equal(t, "ab2234fg", NewReplacer(mapping).Replace("abccdefg")) 68 } 69 70 func TestReplacer_ReplaceJumpToFailEnding(t *testing.T) { 71 mapping := map[string]string{ 72 "bcdf": "1235", 73 "cdef": "2345", 74 } 75 assert.Equal(t, "ab2345", NewReplacer(mapping).Replace("abcdef")) 76 } 77 78 func TestReplacer_ReplaceEmpty(t *testing.T) { 79 mapping := map[string]string{ 80 "bcdf": "1235", 81 "cdef": "2345", 82 } 83 assert.Equal(t, "", NewReplacer(mapping).Replace("")) 84 } 85 86 func TestFuzzReplacerCase1(t *testing.T) { 87 keywords := map[string]string{ 88 "yQyJykiqoh": "xw", 89 "tgN70z": "Q2P", 90 "tXKhEn": "w1G8", 91 "5nfOW1XZO": "GN", 92 "f4Ov9i9nHD": "cT", 93 "1ov9Q": "Y", 94 "7IrC9n": "400i", 95 "JQLxonpHkOjv": "XI", 96 "DyHQ3c7": "Ygxux", 97 "ffyqJi": "u", 98 "UHuvXrbD8pni": "dN", 99 "LIDzNbUlTX": "g", 100 "yN9WZh2rkc8Q": "3U", 101 "Vhk11rz8CObceC": "jf", 102 "R0Rt4H2qChUQf": "7U5M", 103 "MGQzzPCVKjV9": "yYz", 104 "B5jUUl0u1XOY": "l4PZ", 105 "pdvp2qfLgG8X": "BM562", 106 "ZKl9qdApXJ2": "T", 107 "37jnugkSevU66": "aOHFX", 108 } 109 rep := NewReplacer(keywords) 110 text := "yjF8fyqJiiqrczOCVyoYbLvrMpnkj" 111 val := rep.Replace(text) 112 keys := rep.(*replacer).node.find([]rune(val)) 113 if len(keys) > 0 { 114 t.Errorf("result: %s, match: %v", val, keys) 115 } 116 } 117 118 func TestFuzzReplacerCase2(t *testing.T) { 119 keywords := map[string]string{ 120 "dmv2SGZvq9Yz": "TE", 121 "rCL5DRI9uFP8": "hvsc8", 122 "7pSA2jaomgg": "v", 123 "kWSQvjVOIAxR": "Oje", 124 "hgU5bYYkD3r6": "qCXu", 125 "0eh6uI": "MMlt", 126 "3USZSl85EKeMzw": "Pc", 127 "JONmQSuXa": "dX", 128 "EO1WIF": "G", 129 "uUmFJGVmacjF": "1N", 130 "DHpw7": "M", 131 "NYB2bm": "CPya", 132 "9FiNvBAHHNku5": "7FlDE", 133 "tJi3I4WxcY": "q5", 134 "sNJ8Z1ToBV0O": "tl", 135 "0iOg72QcPo": "RP", 136 "pSEqeL": "5KZ", 137 "GOyYqTgmvQ": "9", 138 "Qv4qCsj": "nl52E", 139 "wNQ5tOutYu5s8": "6iGa", 140 } 141 rep := NewReplacer(keywords) 142 text := "AoRxrdKWsGhFpXwVqMLWRL74OukwjBuBh0g7pSrk" 143 val := rep.Replace(text) 144 keys := rep.(*replacer).node.find([]rune(val)) 145 if len(keys) > 0 { 146 t.Errorf("result: %s, match: %v", val, keys) 147 } 148 }