github.com/hairyhenderson/templater@v3.5.0+incompatible/funcs/random_test.go (about) 1 package funcs 2 3 import ( 4 "testing" 5 "unicode/utf8" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestASCII(t *testing.T) { 11 f := &RandomFuncs{} 12 s, err := f.ASCII(0) 13 assert.NoError(t, err) 14 assert.Empty(t, s) 15 16 s, err = f.ASCII(100) 17 assert.NoError(t, err) 18 assert.Len(t, s, 100) 19 assert.Regexp(t, "^[[:print:]]*$", s) 20 } 21 22 func TestAlpha(t *testing.T) { 23 f := &RandomFuncs{} 24 s, err := f.Alpha(0) 25 assert.NoError(t, err) 26 assert.Empty(t, s) 27 28 s, err = f.Alpha(100) 29 assert.NoError(t, err) 30 assert.Len(t, s, 100) 31 assert.Regexp(t, "^[[:alpha:]]*$", s) 32 } 33 34 func TestAlphaNum(t *testing.T) { 35 f := &RandomFuncs{} 36 s, err := f.AlphaNum(0) 37 assert.NoError(t, err) 38 assert.Empty(t, s) 39 40 s, err = f.AlphaNum(100) 41 assert.NoError(t, err) 42 assert.Len(t, s, 100) 43 assert.Regexp(t, "^[[:alnum:]]*$", s) 44 } 45 46 func TestToCodePoints(t *testing.T) { 47 l, u, err := toCodePoints("a", "b") 48 assert.NoError(t, err) 49 assert.Equal(t, 'a', l) 50 assert.Equal(t, 'b', u) 51 52 _, _, err = toCodePoints("foo", "bar") 53 assert.Error(t, err) 54 55 _, _, err = toCodePoints("0755", "bar") 56 assert.Error(t, err) 57 58 l, u, err = toCodePoints("0xD700", "0x0001FFFF") 59 assert.NoError(t, err) 60 assert.Equal(t, '\ud700', l) 61 assert.Equal(t, '\U0001ffff', u) 62 63 l, u, err = toCodePoints("0011", "0777") 64 assert.NoError(t, err) 65 assert.Equal(t, rune(0011), l) 66 assert.Equal(t, rune(0777), u) 67 68 l, u, err = toCodePoints("♬", "♟") 69 assert.NoError(t, err) 70 assert.Equal(t, rune(0x266C), l) 71 assert.Equal(t, '♟', u) 72 } 73 74 func TestString(t *testing.T) { 75 f := &RandomFuncs{} 76 out, err := f.String(1) 77 assert.NoError(t, err) 78 assert.Len(t, out, 1) 79 80 out, err = f.String(42) 81 assert.NoError(t, err) 82 assert.Len(t, out, 42) 83 84 _, err = f.String(0) 85 assert.Error(t, err) 86 87 out, err = f.String(8, "[a-z]") 88 assert.NoError(t, err) 89 assert.Regexp(t, "^[a-z]{8}$", out) 90 91 out, err = f.String(10, 0x23, 0x26) 92 assert.NoError(t, err) 93 assert.Regexp(t, "^[#$%&]{10}$", out) 94 95 out, err = f.String(8, '\U0001f062', '\U0001f093') 96 assert.NoError(t, err) 97 assert.Regexp(t, "^[🁢-🂓]{8}$", out) 98 99 out, err = f.String(8, '\U0001f062', '\U0001f093') 100 assert.NoError(t, err) 101 assert.Regexp(t, "^[🁢-🂓]{8}$", out) 102 103 out, err = f.String(8, "♚", "♟") 104 assert.NoError(t, err) 105 assert.Regexp(t, "^[♚-♟]{8}$", out) 106 107 out, err = f.String(100, "♠", "♣") 108 assert.NoError(t, err) 109 assert.Equal(t, 100, utf8.RuneCountInString(out)) 110 assert.Regexp(t, "^[♠-♣]{100}$", out) 111 } 112 113 func TestItem(t *testing.T) { 114 f := &RandomFuncs{} 115 _, err := f.Item(nil) 116 assert.Error(t, err) 117 118 _, err = f.Item("foo") 119 assert.Error(t, err) 120 121 i, err := f.Item([]string{"foo"}) 122 assert.NoError(t, err) 123 assert.Equal(t, "foo", i) 124 125 in := []string{"foo", "bar"} 126 got := "" 127 for j := 0; j < 10; j++ { 128 i, err = f.Item(in) 129 assert.NoError(t, err) 130 got += i.(string) 131 } 132 assert.NotEqual(t, "foofoofoofoofoofoofoofoofoofoo", got) 133 assert.NotEqual(t, "barbarbarbarbarbarbarbarbarbar", got) 134 } 135 136 func TestNumber(t *testing.T) { 137 f := &RandomFuncs{} 138 n, err := f.Number() 139 assert.NoError(t, err) 140 assert.True(t, 0 <= n && n <= 100, n) 141 142 _, err = f.Number(-1) 143 assert.Error(t, err) 144 145 n, err = f.Number(0) 146 assert.NoError(t, err) 147 assert.Equal(t, int64(0), n) 148 149 n, err = f.Number(9, 9) 150 assert.NoError(t, err) 151 assert.Equal(t, int64(9), n) 152 153 n, err = f.Number(-10, -10) 154 assert.NoError(t, err) 155 assert.Equal(t, int64(-10), n) 156 } 157 158 func TestFloat(t *testing.T) { 159 f := &RandomFuncs{} 160 n, err := f.Float() 161 assert.NoError(t, err) 162 assert.InDelta(t, 0.5, n, 0.5) 163 164 n, err = f.Float(0.5) 165 assert.NoError(t, err) 166 assert.InDelta(t, 0.25, n, 0.25) 167 168 n, err = f.Float(490, 500) 169 assert.NoError(t, err) 170 assert.InDelta(t, 495, n, 5) 171 172 n, err = f.Float(-500, 500) 173 assert.NoError(t, err) 174 assert.InDelta(t, 0, n, 500) 175 }