github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/mods/str/str_test.go (about) 1 package str 2 3 import ( 4 "fmt" 5 "strconv" 6 "testing" 7 "unicode" 8 9 "github.com/markusbkk/elvish/pkg/eval" 10 "github.com/markusbkk/elvish/pkg/eval/errs" 11 . "github.com/markusbkk/elvish/pkg/eval/evaltest" 12 ) 13 14 func TestStr(t *testing.T) { 15 setup := func(ev *eval.Evaler) { 16 ev.ExtendGlobal(eval.BuildNs().AddNs("str", Ns)) 17 } 18 TestWithSetup(t, setup, 19 That(`str:compare abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 20 That(`str:compare abc abc`).Puts(0), 21 That(`str:compare abc def`).Puts(-1), 22 That(`str:compare def abc`).Puts(1), 23 24 That(`str:contains abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 25 That(`str:contains abcd x`).Puts(false), 26 That(`str:contains abcd bc`).Puts(true), 27 That(`str:contains abcd cde`).Puts(false), 28 29 That(`str:contains-any abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 30 That(`str:contains-any abcd x`).Puts(false), 31 That(`str:contains-any abcd xcy`).Puts(true), 32 33 That(`str:equal-fold abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 34 That(`str:equal-fold ABC abc`).Puts(true), 35 That(`str:equal-fold abc ABC`).Puts(true), 36 That(`str:equal-fold abc A`).Puts(false), 37 38 That(`str:from-codepoints 0x61`).Puts("a"), 39 That(`str:from-codepoints 0x4f60 0x597d`).Puts("你好"), 40 That(`str:from-codepoints -0x1`).Throws(errs.OutOfRange{ 41 What: "codepoint", 42 ValidLow: "0", ValidHigh: strconv.Itoa(unicode.MaxRune), 43 Actual: "-0x1"}), 44 45 That(fmt.Sprintf(`str:from-codepoints 0x%x`, unicode.MaxRune+1)).Throws(errs.OutOfRange{ 46 What: "codepoint", 47 ValidLow: "0", ValidHigh: strconv.Itoa(unicode.MaxRune), 48 Actual: hex(unicode.MaxRune + 1)}), 49 50 That(`str:from-codepoints 0xd800`).Throws(errs.BadValue{ 51 What: "argument to str:from-codepoints", 52 Valid: "valid Unicode codepoint", 53 Actual: "0xd800"}), 54 55 That(`str:from-utf8-bytes 0x61`).Puts("a"), 56 That(`str:from-utf8-bytes 0xe4 0xbd 0xa0 0xe5 0xa5 0xbd`).Puts("你好"), 57 That(`str:from-utf8-bytes -1`).Throws(errs.OutOfRange{ 58 What: "byte", 59 ValidLow: "0", ValidHigh: "255", Actual: strconv.Itoa(-1)}), 60 61 That(`str:from-utf8-bytes 256`).Throws(errs.OutOfRange{ 62 What: "byte", 63 ValidLow: "0", ValidHigh: "255", Actual: strconv.Itoa(256)}), 64 65 That(`str:from-utf8-bytes 0xff 0x3 0xaa`).Throws(errs.BadValue{ 66 What: "arguments to str:from-utf8-bytes", 67 Valid: "valid UTF-8 sequence", 68 Actual: "[255 3 170]"}), 69 70 That(`str:has-prefix abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 71 That(`str:has-prefix abcd ab`).Puts(true), 72 That(`str:has-prefix abcd cd`).Puts(false), 73 74 That(`str:has-suffix abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 75 That(`str:has-suffix abcd ab`).Puts(false), 76 That(`str:has-suffix abcd cd`).Puts(true), 77 78 That(`str:index abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 79 That(`str:index abcd cd`).Puts(2), 80 That(`str:index abcd de`).Puts(-1), 81 82 That(`str:index-any abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 83 That(`str:index-any "chicken" "aeiouy"`).Puts(2), 84 That(`str:index-any l33t aeiouy`).Puts(-1), 85 86 That(`str:join : [/usr /bin /tmp]`).Puts("/usr:/bin:/tmp"), 87 That(`str:join : ['' a '']`).Puts(":a:"), 88 That(`str:join : [(float64 1) 2]`).Throws( 89 errs.BadValue{What: "input to str:join", Valid: "string", Actual: "number"}), 90 91 That(`str:last-index abc`).Throws(ErrorWithType(errs.ArityMismatch{})), 92 That(`str:last-index "elven speak elvish" "elv"`).Puts(12), 93 That(`str:last-index "elven speak elvish" "romulan"`).Puts(-1), 94 95 That(`str:replace : / ":usr:bin:tmp"`).Puts("/usr/bin/tmp"), 96 That(`str:replace &max=2 : / :usr:bin:tmp`).Puts("/usr/bin:tmp"), 97 98 That(`str:split : /usr:/bin:/tmp`).Puts("/usr", "/bin", "/tmp"), 99 That(`str:split : /usr:/bin:/tmp &max=2`).Puts("/usr", "/bin:/tmp"), 100 That(`str:split : a:b >&-`).Throws(eval.ErrNoValueOutput), 101 102 That(`str:to-codepoints a`).Puts("0x61"), 103 That(`str:to-codepoints 你好`).Puts("0x4f60", "0x597d"), 104 That(`str:to-codepoints 你好 | str:from-codepoints (all)`).Puts("你好"), 105 That(`str:to-codepoints a >&-`).Throws(eval.ErrNoValueOutput), 106 107 That(`str:to-utf8-bytes a`).Puts("0x61"), 108 That(`str:to-utf8-bytes 你好`).Puts("0xe4", "0xbd", "0xa0", "0xe5", "0xa5", "0xbd"), 109 That(`str:to-utf8-bytes 你好 | str:from-utf8-bytes (all)`).Puts("你好"), 110 That(`str:to-utf8-bytes a >&-`).Throws(eval.ErrNoValueOutput), 111 112 That(`str:title abc`).Puts("Abc"), 113 That(`str:title "abc def"`).Puts("Abc Def"), 114 That(`str:to-lower abc def`).Throws(ErrorWithType(errs.ArityMismatch{})), 115 116 That(`str:to-lower abc`).Puts("abc"), 117 That(`str:to-lower ABC`).Puts("abc"), 118 That(`str:to-lower ABC def`).Throws(ErrorWithType(errs.ArityMismatch{})), 119 120 That(`str:to-title "her royal highness"`).Puts("HER ROYAL HIGHNESS"), 121 That(`str:to-title "хлеб"`).Puts("ХЛЕБ"), 122 123 That(`str:to-upper abc`).Puts("ABC"), 124 That(`str:to-upper ABC`).Puts("ABC"), 125 That(`str:to-upper ABC def`).Throws(ErrorWithType(errs.ArityMismatch{})), 126 127 That(`str:trim "¡¡¡Hello, Elven!!!" "!¡"`).Puts("Hello, Elven"), 128 That(`str:trim def`).Throws(ErrorWithType(errs.ArityMismatch{})), 129 130 That(`str:trim-left "¡¡¡Hello, Elven!!!" "!¡"`).Puts("Hello, Elven!!!"), 131 That(`str:trim-left def`).Throws(ErrorWithType(errs.ArityMismatch{})), 132 133 That(`str:trim-prefix "¡¡¡Hello, Elven!!!" "¡¡¡Hello, "`).Puts("Elven!!!"), 134 That(`str:trim-prefix "¡¡¡Hello, Elven!!!" "¡¡¡Hola, "`).Puts("¡¡¡Hello, Elven!!!"), 135 That(`str:trim-prefix def`).Throws(ErrorWithType(errs.ArityMismatch{})), 136 137 That(`str:trim-right "¡¡¡Hello, Elven!!!" "!¡"`).Puts("¡¡¡Hello, Elven"), 138 That(`str:trim-right def`).Throws(ErrorWithType(errs.ArityMismatch{})), 139 140 That(`str:trim-space " \t\n Hello, Elven \n\t\r\n"`).Puts("Hello, Elven"), 141 That(`str:trim-space " \t\n Hello Elven \n\t\r\n"`).Puts("Hello Elven"), 142 That(`str:trim-space " \t\n Hello Elven \n\t\r\n" argle`). 143 Throws(ErrorWithType(errs.ArityMismatch{})), 144 145 That(`str:trim-suffix "¡¡¡Hello, Elven!!!" ", Elven!!!"`).Puts("¡¡¡Hello"), 146 That(`str:trim-suffix "¡¡¡Hello, Elven!!!" ", Klingons!!!"`).Puts("¡¡¡Hello, Elven!!!"), 147 That(`str:trim-suffix "¡¡¡Hello, Elven!!!"`).Throws(ErrorWithType(errs.ArityMismatch{})), 148 ) 149 }