github.com/kolbycrouch/elvish@v0.14.1-0.20210614162631-215b9ac1c423/pkg/eval/mods/str/str_test.go (about) 1 package str 2 3 import ( 4 "fmt" 5 "strconv" 6 "testing" 7 "unicode" 8 9 "src.elv.sh/pkg/eval" 10 "src.elv.sh/pkg/eval/errs" 11 . "src.elv.sh/pkg/eval/evaltest" 12 ) 13 14 func TestStr(t *testing.T) { 15 setup := func(ev *eval.Evaler) { 16 ev.AddGlobal(eval.NsBuilder{}.AddNs("str", Ns).Ns()) 17 } 18 TestWithSetup(t, setup, 19 That(`str:compare abc`).Throws(AnyError), 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(AnyError), 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(AnyError), 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(AnyError), 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(AnyError), 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(AnyError), 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(AnyError), 79 That(`str:index abcd cd`).Puts(2), 80 That(`str:index abcd de`).Puts(-1), 81 82 That(`str:index-any abc`).Throws(AnyError), 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(AnyError), 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 101 That(`str:to-codepoints a`).Puts("0x61"), 102 That(`str:to-codepoints 你好`).Puts("0x4f60", "0x597d"), 103 That(`str:to-codepoints 你好 | str:from-codepoints (all)`).Puts("你好"), 104 105 That(`str:to-utf8-bytes a`).Puts("0x61"), 106 That(`str:to-utf8-bytes 你好`).Puts("0xe4", "0xbd", "0xa0", "0xe5", "0xa5", "0xbd"), 107 That(`str:to-utf8-bytes 你好 | str:from-utf8-bytes (all)`).Puts("你好"), 108 109 That(`str:title abc`).Puts("Abc"), 110 That(`str:title "abc def"`).Puts("Abc Def"), 111 That(`str:to-lower abc def`).Throws(AnyError), 112 113 That(`str:to-lower abc`).Puts("abc"), 114 That(`str:to-lower ABC`).Puts("abc"), 115 That(`str:to-lower ABC def`).Throws(AnyError), 116 117 That(`str:to-title "her royal highness"`).Puts("HER ROYAL HIGHNESS"), 118 That(`str:to-title "хлеб"`).Puts("ХЛЕБ"), 119 120 That(`str:to-upper abc`).Puts("ABC"), 121 That(`str:to-upper ABC`).Puts("ABC"), 122 That(`str:to-upper ABC def`).Throws(AnyError), 123 124 That(`str:trim "¡¡¡Hello, Elven!!!" "!¡"`).Puts("Hello, Elven"), 125 That(`str:trim def`).Throws(AnyError), 126 127 That(`str:trim-left "¡¡¡Hello, Elven!!!" "!¡"`).Puts("Hello, Elven!!!"), 128 That(`str:trim-left def`).Throws(AnyError), 129 130 That(`str:trim-prefix "¡¡¡Hello, Elven!!!" "¡¡¡Hello, "`).Puts("Elven!!!"), 131 That(`str:trim-prefix "¡¡¡Hello, Elven!!!" "¡¡¡Hola, "`).Puts("¡¡¡Hello, Elven!!!"), 132 That(`str:trim-prefix def`).Throws(AnyError), 133 134 That(`str:trim-right "¡¡¡Hello, Elven!!!" "!¡"`).Puts("¡¡¡Hello, Elven"), 135 That(`str:trim-right def`).Throws(AnyError), 136 137 That(`str:trim-space " \t\n Hello, Elven \n\t\r\n"`).Puts("Hello, Elven"), 138 That(`str:trim-space " \t\n Hello Elven \n\t\r\n"`).Puts("Hello Elven"), 139 That(`str:trim-space " \t\n Hello Elven \n\t\r\n" argle`).Throws(AnyError), 140 141 That(`str:trim-suffix "¡¡¡Hello, Elven!!!" ", Elven!!!"`).Puts("¡¡¡Hello"), 142 That(`str:trim-suffix "¡¡¡Hello, Elven!!!" ", Klingons!!!"`).Puts("¡¡¡Hello, Elven!!!"), 143 That(`str:trim-suffix "¡¡¡Hello, Elven!!!"`).Throws(AnyError), 144 ) 145 }