github.com/mithrandie/csvq@v1.18.1/lib/query/alias_test.go (about) 1 package query 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/mithrandie/csvq/lib/parser" 8 ) 9 10 var aliasMapAddTests = []struct { 11 Name string 12 Alias parser.Identifier 13 Path string 14 Result AliasMap 15 Error string 16 }{ 17 { 18 Name: "AliasMap Add", 19 Alias: parser.Identifier{Literal: "tbl"}, 20 Path: "/path/to/tbl1.csv", 21 Result: AliasMap{ 22 "TBL": "/PATH/TO/TBL1.CSV", 23 }, 24 }, 25 { 26 Name: "AliasMap Add Table Name Duplicate Error", 27 Alias: parser.Identifier{Literal: "tbl"}, 28 Path: "/path/to/tbl2.csv", 29 Error: "table name tbl is a duplicate", 30 }, 31 } 32 33 func TestAliasMap_Add(t *testing.T) { 34 aliases := AliasMap{} 35 36 for _, v := range aliasMapAddTests { 37 err := aliases.Add(v.Alias, v.Path) 38 if err != nil { 39 if len(v.Error) < 1 { 40 t.Errorf("%s: unexpected error %q", v.Name, err) 41 } else if err.Error() != v.Error { 42 t.Errorf("%s: error %q, want error %q", v.Name, err.Error(), v.Error) 43 } 44 continue 45 } 46 if 0 < len(v.Error) { 47 t.Errorf("%s: no error, want error %q", v.Name, v.Error) 48 continue 49 } 50 if !reflect.DeepEqual(aliases, v.Result) { 51 t.Errorf("%s: result = %s, want %s", v.Name, aliases, v.Result) 52 } 53 } 54 } 55 56 var aliasMapGetTests = []struct { 57 Name string 58 Alias parser.Identifier 59 Result string 60 Error string 61 }{ 62 { 63 Name: "AliasMap Get", 64 Alias: parser.Identifier{Literal: "tbl"}, 65 Result: "/PATH/TO/TBL1.CSV", 66 }, 67 { 68 Name: "AliasMap Get Empty Path", 69 Alias: parser.Identifier{Literal: "tbl2"}, 70 Result: "", 71 }, 72 { 73 Name: "AliasMap Get Not Loaded Error", 74 Alias: parser.Identifier{Literal: "notloaded"}, 75 Error: "table notloaded is not loaded", 76 }, 77 } 78 79 func TestAliasMap_Get(t *testing.T) { 80 aliases := AliasMap{ 81 "TBL": "/PATH/TO/TBL1.CSV", 82 "TBL2": "", 83 } 84 85 for _, v := range aliasMapGetTests { 86 result, err := aliases.Get(v.Alias) 87 if err != nil { 88 if len(v.Error) < 1 { 89 t.Errorf("%s: unexpected error %q", v.Name, err) 90 } else if err.Error() != v.Error { 91 t.Errorf("%s: error %q, want error %q", v.Name, err.Error(), v.Error) 92 } 93 continue 94 } 95 if 0 < len(v.Error) { 96 t.Errorf("%s: no error, want error %q", v.Name, v.Error) 97 continue 98 } 99 if result != v.Result { 100 t.Errorf("%s: result = %s, want %s", v.Name, result, v.Result) 101 } 102 } 103 }