summaryrefslogtreecommitdiff
path: root/internal/funcs/random_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/funcs/random_test.go')
-rw-r--r--internal/funcs/random_test.go223
1 files changed, 223 insertions, 0 deletions
diff --git a/internal/funcs/random_test.go b/internal/funcs/random_test.go
new file mode 100644
index 00000000..7f166ffc
--- /dev/null
+++ b/internal/funcs/random_test.go
@@ -0,0 +1,223 @@
+package funcs
+
+import (
+ "context"
+ "strconv"
+ "testing"
+ "unicode/utf8"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestCreateRandomFuncs(t *testing.T) {
+ t.Parallel()
+
+ for i := 0; i < 10; i++ {
+ // Run this a bunch to catch race conditions
+ t.Run(strconv.Itoa(i), func(t *testing.T) {
+ t.Parallel()
+
+ ctx := context.Background()
+ fmap := CreateRandomFuncs(ctx)
+ actual := fmap["random"].(func() interface{})
+
+ assert.Equal(t, ctx, actual().(*RandomFuncs).ctx)
+ })
+ }
+}
+
+func TestASCII(t *testing.T) {
+ t.Parallel()
+
+ f := RandomFuncs{}
+ s, err := f.ASCII(0)
+ require.NoError(t, err)
+ assert.Empty(t, s)
+
+ s, err = f.ASCII(100)
+ require.NoError(t, err)
+ assert.Len(t, s, 100)
+ assert.Regexp(t, "^[[:print:]]*$", s)
+}
+
+func TestAlpha(t *testing.T) {
+ t.Parallel()
+
+ if testing.Short() {
+ t.Skip("skipping slow test")
+ }
+
+ f := RandomFuncs{}
+ s, err := f.Alpha(0)
+ require.NoError(t, err)
+ assert.Empty(t, s)
+
+ s, err = f.Alpha(100)
+ require.NoError(t, err)
+ assert.Len(t, s, 100)
+ assert.Regexp(t, "^[[:alpha:]]*$", s)
+}
+
+func TestAlphaNum(t *testing.T) {
+ t.Parallel()
+
+ if testing.Short() {
+ t.Skip("skipping slow test")
+ }
+
+ f := RandomFuncs{}
+ s, err := f.AlphaNum(0)
+ require.NoError(t, err)
+ assert.Empty(t, s)
+
+ s, err = f.AlphaNum(100)
+ require.NoError(t, err)
+ assert.Len(t, s, 100)
+ assert.Regexp(t, "^[[:alnum:]]*$", s)
+}
+
+func TestToCodePoints(t *testing.T) {
+ t.Parallel()
+
+ l, u, err := toCodePoints("a", "b")
+ require.NoError(t, err)
+ assert.Equal(t, 'a', l)
+ assert.Equal(t, 'b', u)
+
+ _, _, err = toCodePoints("foo", "bar")
+ assert.Error(t, err)
+
+ _, _, err = toCodePoints("0755", "bar")
+ assert.Error(t, err)
+
+ l, u, err = toCodePoints("0xD700", "0x0001FFFF")
+ require.NoError(t, err)
+ assert.Equal(t, '\ud700', l)
+ assert.Equal(t, '\U0001ffff', u)
+
+ l, u, err = toCodePoints("0011", "0777")
+ require.NoError(t, err)
+ assert.Equal(t, rune(0o011), l)
+ assert.Equal(t, rune(0o777), u)
+
+ l, u, err = toCodePoints("♬", "♟")
+ require.NoError(t, err)
+ assert.Equal(t, rune(0x266C), l)
+ assert.Equal(t, '♟', u)
+}
+
+func TestString(t *testing.T) {
+ t.Parallel()
+
+ if testing.Short() {
+ t.Skip("skipping slow test")
+ }
+
+ f := RandomFuncs{}
+ out, err := f.String(1)
+ require.NoError(t, err)
+ assert.Len(t, out, 1)
+
+ out, err = f.String(42)
+ require.NoError(t, err)
+ assert.Len(t, out, 42)
+
+ _, err = f.String(0)
+ assert.Error(t, err)
+
+ out, err = f.String(8, "[a-z]")
+ require.NoError(t, err)
+ assert.Regexp(t, "^[a-z]{8}$", out)
+
+ out, err = f.String(10, 0x23, 0x26)
+ require.NoError(t, err)
+ assert.Regexp(t, "^[#$%&]{10}$", out)
+
+ out, err = f.String(8, '\U0001f062', '\U0001f093')
+ require.NoError(t, err)
+ assert.Regexp(t, "^[🁢-🂓]{8}$", out)
+
+ out, err = f.String(8, '\U0001f062', '\U0001f093')
+ require.NoError(t, err)
+ assert.Regexp(t, "^[🁢-🂓]{8}$", out)
+
+ out, err = f.String(8, "♚", "♟")
+ require.NoError(t, err)
+ assert.Regexp(t, "^[♚-♟]{8}$", out)
+
+ out, err = f.String(100, "♠", "♣")
+ require.NoError(t, err)
+ assert.Equal(t, 100, utf8.RuneCountInString(out))
+ assert.Regexp(t, "^[♠-♣]{100}$", out)
+}
+
+func TestItem(t *testing.T) {
+ t.Parallel()
+
+ f := RandomFuncs{}
+ _, err := f.Item(nil)
+ assert.Error(t, err)
+
+ _, err = f.Item("foo")
+ assert.Error(t, err)
+
+ i, err := f.Item([]string{"foo"})
+ require.NoError(t, err)
+ assert.Equal(t, "foo", i)
+
+ in := []string{"foo", "bar"}
+ got := ""
+ for j := 0; j < 10; j++ {
+ i, err = f.Item(in)
+ require.NoError(t, err)
+ got += i.(string)
+ }
+ assert.NotEqual(t, "foofoofoofoofoofoofoofoofoofoo", got)
+ assert.NotEqual(t, "barbarbarbarbarbarbarbarbarbar", got)
+}
+
+func TestNumber(t *testing.T) {
+ t.Parallel()
+
+ f := RandomFuncs{}
+ n, err := f.Number()
+ require.NoError(t, err)
+ assert.True(t, 0 <= n && n <= 100, n)
+
+ _, err = f.Number(-1)
+ assert.Error(t, err)
+
+ n, err = f.Number(0)
+ require.NoError(t, err)
+ assert.Equal(t, int64(0), n)
+
+ n, err = f.Number(9, 9)
+ require.NoError(t, err)
+ assert.Equal(t, int64(9), n)
+
+ n, err = f.Number(-10, -10)
+ require.NoError(t, err)
+ assert.Equal(t, int64(-10), n)
+}
+
+func TestFloat(t *testing.T) {
+ t.Parallel()
+
+ f := RandomFuncs{}
+ n, err := f.Float()
+ require.NoError(t, err)
+ assert.InDelta(t, 0.5, n, 0.5)
+
+ n, err = f.Float(0.5)
+ require.NoError(t, err)
+ assert.InDelta(t, 0.25, n, 0.25)
+
+ n, err = f.Float(490, 500)
+ require.NoError(t, err)
+ assert.InDelta(t, 495, n, 5)
+
+ n, err = f.Float(-500, 500)
+ require.NoError(t, err)
+ assert.InDelta(t, 0, n, 500)
+}