| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- package gocql
- import (
- "reflect"
- "testing"
- )
- func TestGetCassandraType_Set(t *testing.T) {
- typ := getCassandraType("set<text>")
- set, ok := typ.(CollectionType)
- if !ok {
- t.Fatalf("expected CollectionType got %T", typ)
- } else if set.typ != TypeSet {
- t.Fatalf("expected type %v got %v", TypeSet, set.typ)
- }
- inner, ok := set.Elem.(NativeType)
- if !ok {
- t.Fatalf("expected to get NativeType got %T", set.Elem)
- } else if inner.typ != TypeText {
- t.Fatalf("expected to get %v got %v for set value", TypeText, set.typ)
- }
- }
- func TestGetCassandraType(t *testing.T) {
- tests := []struct {
- input string
- exp TypeInfo
- }{
- {
- "set<text>", CollectionType{
- NativeType: NativeType{typ: TypeSet},
- Elem: NativeType{typ: TypeText},
- },
- },
- {
- "map<text, varchar>", CollectionType{
- NativeType: NativeType{typ: TypeMap},
- Key: NativeType{typ: TypeText},
- Elem: NativeType{typ: TypeVarchar},
- },
- },
- {
- "list<int>", CollectionType{
- NativeType: NativeType{typ: TypeList},
- Elem: NativeType{typ: TypeInt},
- },
- },
- {
- "tuple<int, int, text>", TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- NativeType{typ: TypeText},
- },
- },
- },
- {
- "frozen<map<text, frozen<list<frozen<tuple<int, int>>>>>>", CollectionType{
- NativeType: NativeType{typ: TypeMap},
- Key: NativeType{typ: TypeText},
- Elem: CollectionType{
- NativeType: NativeType{typ: TypeList},
- Elem: TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- },
- },
- },
- {
- "frozen<tuple<frozen<tuple<text, frozen<list<frozen<tuple<int, int>>>>>>, frozen<tuple<text, frozen<list<frozen<tuple<int, int>>>>>>, frozen<map<text, frozen<list<frozen<tuple<int, int>>>>>>>>",
- TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeText},
- CollectionType{
- NativeType: NativeType{typ: TypeList},
- Elem: TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- },
- },
- },
- TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeText},
- CollectionType{
- NativeType: NativeType{typ: TypeList},
- Elem: TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- },
- },
- },
- CollectionType{
- NativeType: NativeType{typ: TypeMap},
- Key: NativeType{typ: TypeText},
- Elem: CollectionType{
- NativeType: NativeType{typ: TypeList},
- Elem: TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- },
- },
- },
- },
- },
- {
- "frozen<tuple<frozen<tuple<int, int>>, int, frozen<tuple<int, int>>>>", TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- NativeType{typ: TypeInt},
- TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- },
- },
- },
- {
- "frozen<map<frozen<tuple<int, int>>, int>>", CollectionType{
- NativeType: NativeType{typ: TypeMap},
- Key: TupleTypeInfo{
- NativeType: NativeType{typ: TypeTuple},
- Elems: []TypeInfo{
- NativeType{typ: TypeInt},
- NativeType{typ: TypeInt},
- },
- },
- Elem: NativeType{typ: TypeInt},
- },
- },
- }
- for _, test := range tests {
- t.Run(test.input, func(t *testing.T) {
- got := getCassandraType(test.input)
- // TODO(zariel): define an equal method on the types?
- if !reflect.DeepEqual(got, test.exp) {
- t.Fatalf("expected %v got %v", test.exp, got)
- }
- })
- }
- }
|