github.com/xrash/gopher-lua@v0.0.0-20160304065408-e5faab4db06a/auxlib_test.go (about)

     1  package lua
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestCheckInt(t *testing.T) {
     8  	L := NewState()
     9  	defer L.Close()
    10  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    11  		L.Push(LNumber(10))
    12  		errorIfNotEqual(t, 10, L.CheckInt(2))
    13  		L.Push(LString("aaa"))
    14  		L.CheckInt(3)
    15  		return 0
    16  	}, "number expected, got string")
    17  }
    18  
    19  func TestCheckInt64(t *testing.T) {
    20  	L := NewState()
    21  	defer L.Close()
    22  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    23  		L.Push(LNumber(10))
    24  		errorIfNotEqual(t, int64(10), L.CheckInt64(2))
    25  		L.Push(LString("aaa"))
    26  		L.CheckInt64(3)
    27  		return 0
    28  	}, "number expected, got string")
    29  }
    30  
    31  func TestCheckNumber(t *testing.T) {
    32  	L := NewState()
    33  	defer L.Close()
    34  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    35  		L.Push(LNumber(10))
    36  		errorIfNotEqual(t, LNumber(10), L.CheckNumber(2))
    37  		L.Push(LString("aaa"))
    38  		L.CheckNumber(3)
    39  		return 0
    40  	}, "number expected, got string")
    41  }
    42  
    43  func TestCheckString(t *testing.T) {
    44  	L := NewState()
    45  	defer L.Close()
    46  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    47  		L.Push(LString("aaa"))
    48  		errorIfNotEqual(t, "aaa", L.CheckString(2))
    49  		L.Push(LNumber(10))
    50  		L.CheckString(3)
    51  		return 0
    52  	}, "string expected, got number")
    53  }
    54  
    55  func TestCheckBool(t *testing.T) {
    56  	L := NewState()
    57  	defer L.Close()
    58  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    59  		L.Push(LTrue)
    60  		errorIfNotEqual(t, true, L.CheckBool(2))
    61  		L.Push(LNumber(10))
    62  		L.CheckBool(3)
    63  		return 0
    64  	}, "boolean expected, got number")
    65  }
    66  
    67  func TestCheckTable(t *testing.T) {
    68  	L := NewState()
    69  	defer L.Close()
    70  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    71  		tbl := L.NewTable()
    72  		L.Push(tbl)
    73  		errorIfNotEqual(t, tbl, L.CheckTable(2))
    74  		L.Push(LNumber(10))
    75  		L.CheckTable(3)
    76  		return 0
    77  	}, "table expected, got number")
    78  }
    79  
    80  func TestCheckFunction(t *testing.T) {
    81  	L := NewState()
    82  	defer L.Close()
    83  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    84  		fn := L.NewFunction(func(l *LState) int { return 0 })
    85  		L.Push(fn)
    86  		errorIfNotEqual(t, fn, L.CheckFunction(2))
    87  		L.Push(LNumber(10))
    88  		L.CheckFunction(3)
    89  		return 0
    90  	}, "function expected, got number")
    91  }
    92  
    93  func TestCheckUserData(t *testing.T) {
    94  	L := NewState()
    95  	defer L.Close()
    96  	errorIfGFuncNotFail(t, L, func(L *LState) int {
    97  		ud := L.NewUserData()
    98  		L.Push(ud)
    99  		errorIfNotEqual(t, ud, L.CheckUserData(2))
   100  		L.Push(LNumber(10))
   101  		L.CheckUserData(3)
   102  		return 0
   103  	}, "userdata expected, got number")
   104  }
   105  
   106  func TestCheckThread(t *testing.T) {
   107  	L := NewState()
   108  	defer L.Close()
   109  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   110  		th := L.NewThread()
   111  		L.Push(th)
   112  		errorIfNotEqual(t, th, L.CheckThread(2))
   113  		L.Push(LNumber(10))
   114  		L.CheckThread(3)
   115  		return 0
   116  	}, "thread expected, got number")
   117  }
   118  
   119  func TestCheckChannel(t *testing.T) {
   120  	L := NewState()
   121  	defer L.Close()
   122  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   123  		ch := make(chan LValue)
   124  		L.Push(LChannel(ch))
   125  		errorIfNotEqual(t, ch, L.CheckChannel(2))
   126  		L.Push(LString("aaa"))
   127  		L.CheckChannel(3)
   128  		return 0
   129  	}, "channel expected, got string")
   130  }
   131  
   132  func TestCheckType(t *testing.T) {
   133  	L := NewState()
   134  	defer L.Close()
   135  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   136  		L.Push(LNumber(10))
   137  		L.CheckType(2, LTNumber)
   138  		L.CheckType(2, LTString)
   139  		return 0
   140  	}, "string expected, got number")
   141  }
   142  
   143  func TestCheckTypes(t *testing.T) {
   144  	L := NewState()
   145  	defer L.Close()
   146  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   147  		L.Push(LNumber(10))
   148  		L.CheckTypes(2, LTString, LTBool, LTNumber)
   149  		L.CheckTypes(2, LTString, LTBool)
   150  		return 0
   151  	}, "string or boolean expected, got number")
   152  }
   153  
   154  func TestCheckOption(t *testing.T) {
   155  	opts := []string{
   156  		"opt1",
   157  		"opt2",
   158  		"opt3",
   159  	}
   160  	L := NewState()
   161  	defer L.Close()
   162  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   163  		L.Push(LString("opt1"))
   164  		errorIfNotEqual(t, 0, L.CheckOption(2, opts))
   165  		L.Push(LString("opt5"))
   166  		L.CheckOption(3, opts)
   167  		return 0
   168  	}, "invalid option: opt5 \\(must be one of opt1,opt2,opt3\\)")
   169  }
   170  
   171  func TestOptInt(t *testing.T) {
   172  	L := NewState()
   173  	defer L.Close()
   174  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   175  		errorIfNotEqual(t, 99, L.OptInt(1, 99))
   176  		L.Push(LNumber(10))
   177  		errorIfNotEqual(t, 10, L.OptInt(2, 99))
   178  		L.Push(LString("aaa"))
   179  		L.OptInt(3, 99)
   180  		return 0
   181  	}, "number expected, got string")
   182  }
   183  
   184  func TestOptInt64(t *testing.T) {
   185  	L := NewState()
   186  	defer L.Close()
   187  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   188  		errorIfNotEqual(t, int64(99), L.OptInt64(1, int64(99)))
   189  		L.Push(LNumber(10))
   190  		errorIfNotEqual(t, int64(10), L.OptInt64(2, int64(99)))
   191  		L.Push(LString("aaa"))
   192  		L.OptInt64(3, int64(99))
   193  		return 0
   194  	}, "number expected, got string")
   195  }
   196  
   197  func TestOptNumber(t *testing.T) {
   198  	L := NewState()
   199  	defer L.Close()
   200  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   201  		errorIfNotEqual(t, LNumber(99), L.OptNumber(1, LNumber(99)))
   202  		L.Push(LNumber(10))
   203  		errorIfNotEqual(t, LNumber(10), L.OptNumber(2, LNumber(99)))
   204  		L.Push(LString("aaa"))
   205  		L.OptNumber(3, LNumber(99))
   206  		return 0
   207  	}, "number expected, got string")
   208  }
   209  
   210  func TestOptString(t *testing.T) {
   211  	L := NewState()
   212  	defer L.Close()
   213  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   214  		errorIfNotEqual(t, "bbb", L.OptString(1, "bbb"))
   215  		L.Push(LString("aaa"))
   216  		errorIfNotEqual(t, "aaa", L.OptString(2, "bbb"))
   217  		L.Push(LNumber(10))
   218  		L.OptString(3, "bbb")
   219  		return 0
   220  	}, "string expected, got number")
   221  }
   222  
   223  func TestOptBool(t *testing.T) {
   224  	L := NewState()
   225  	defer L.Close()
   226  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   227  		errorIfNotEqual(t, true, L.OptBool(1, true))
   228  		L.Push(LTrue)
   229  		errorIfNotEqual(t, true, L.OptBool(2, false))
   230  		L.Push(LNumber(10))
   231  		L.OptBool(3, false)
   232  		return 0
   233  	}, "boolean expected, got number")
   234  }
   235  
   236  func TestOptTable(t *testing.T) {
   237  	L := NewState()
   238  	defer L.Close()
   239  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   240  		deftbl := L.NewTable()
   241  		errorIfNotEqual(t, deftbl, L.OptTable(1, deftbl))
   242  		tbl := L.NewTable()
   243  		L.Push(tbl)
   244  		errorIfNotEqual(t, tbl, L.OptTable(2, deftbl))
   245  		L.Push(LNumber(10))
   246  		L.OptTable(3, deftbl)
   247  		return 0
   248  	}, "table expected, got number")
   249  }
   250  
   251  func TestOptFunction(t *testing.T) {
   252  	L := NewState()
   253  	defer L.Close()
   254  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   255  		deffn := L.NewFunction(func(l *LState) int { return 0 })
   256  		errorIfNotEqual(t, deffn, L.OptFunction(1, deffn))
   257  		fn := L.NewFunction(func(l *LState) int { return 0 })
   258  		L.Push(fn)
   259  		errorIfNotEqual(t, fn, L.OptFunction(2, deffn))
   260  		L.Push(LNumber(10))
   261  		L.OptFunction(3, deffn)
   262  		return 0
   263  	}, "function expected, got number")
   264  }
   265  
   266  func TestOptUserData(t *testing.T) {
   267  	L := NewState()
   268  	defer L.Close()
   269  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   270  		defud := L.NewUserData()
   271  		errorIfNotEqual(t, defud, L.OptUserData(1, defud))
   272  		ud := L.NewUserData()
   273  		L.Push(ud)
   274  		errorIfNotEqual(t, ud, L.OptUserData(2, defud))
   275  		L.Push(LNumber(10))
   276  		L.OptUserData(3, defud)
   277  		return 0
   278  	}, "userdata expected, got number")
   279  }
   280  
   281  func TestOptChannel(t *testing.T) {
   282  	L := NewState()
   283  	defer L.Close()
   284  	errorIfGFuncNotFail(t, L, func(L *LState) int {
   285  		defch := make(chan LValue)
   286  		errorIfNotEqual(t, defch, L.OptChannel(1, defch))
   287  		ch := make(chan LValue)
   288  		L.Push(LChannel(ch))
   289  		errorIfNotEqual(t, ch, L.OptChannel(2, defch))
   290  		L.Push(LString("aaa"))
   291  		L.OptChannel(3, defch)
   292  		return 0
   293  	}, "channel expected, got string")
   294  }