github.com/qiniu/x@v1.11.9/ctype/ctype_test.go (about)

     1  package ctype
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  type testCase struct {
     8  	c    rune
     9  	mask uint32
    10  	is   bool
    11  }
    12  
    13  type stringTestCase struct {
    14  	str       string
    15  	maskFirst uint32
    16  	maskNext  uint32
    17  	is        bool
    18  }
    19  
    20  var isCases = []testCase{
    21  	{'-', DOMAIN_CHAR, true},
    22  	{'.', DOMAIN_CHAR, true},
    23  	{'_', DOMAIN_CHAR, false},
    24  	{'+', DOMAIN_CHAR, true},
    25  	{'a', DOMAIN_CHAR, true},
    26  	{'A', DOMAIN_CHAR, true},
    27  	{'0', DOMAIN_CHAR, true},
    28  	{':', DOMAIN_CHAR, false},
    29  	{'1', ALPHA, false},
    30  	{'a', ALPHA, true},
    31  	{'A', ALPHA, true},
    32  }
    33  
    34  var strCases = []stringTestCase{
    35  	{"", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, false},
    36  	{"123", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, false},
    37  	{"_", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, true},
    38  	{"_123", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, true},
    39  	{"x_123", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, true},
    40  	{"x_", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, true},
    41  	{"_x", CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, true},
    42  
    43  	{"", CSYMBOL_FIRST_CHAR, CSYMBOL_FIRST_CHAR, false},
    44  	{"x_123", CSYMBOL_FIRST_CHAR, CSYMBOL_FIRST_CHAR, false},
    45  	{"x_", CSYMBOL_FIRST_CHAR, CSYMBOL_FIRST_CHAR, true},
    46  	{"_x", CSYMBOL_FIRST_CHAR, CSYMBOL_FIRST_CHAR, true},
    47  	{"_", CSYMBOL_FIRST_CHAR, CSYMBOL_FIRST_CHAR, true},
    48  }
    49  
    50  func TestIs(t *testing.T) {
    51  	for _, a := range isCases {
    52  		f := Is(a.mask, a.c)
    53  		if f != a.is {
    54  			t.Fatal("case:", a, "result:", f)
    55  		}
    56  	}
    57  }
    58  
    59  func TestIsTypeEx(t *testing.T) {
    60  	for _, a := range strCases {
    61  		f := IsTypeEx(a.maskFirst, a.maskNext, a.str)
    62  		if f != a.is {
    63  			t.Fatal("case:", a, "result:", f)
    64  		}
    65  		if a.maskFirst == a.maskNext {
    66  			f = IsType(a.maskFirst, a.str)
    67  			if f != a.is {
    68  				t.Fatal("case:", a, "result:", f)
    69  			}
    70  		}
    71  	}
    72  }