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  }