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  }