github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/samples/go/nomdex/nomdex_test.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 package main 6 7 import ( 8 "regexp" 9 "testing" 10 11 "github.com/attic-labs/noms/go/datas" 12 "github.com/attic-labs/noms/go/marshal" 13 "github.com/attic-labs/noms/go/nbs" 14 "github.com/attic-labs/noms/go/spec" 15 "github.com/attic-labs/noms/go/util/clienttest" 16 "github.com/stretchr/testify/assert" 17 "github.com/stretchr/testify/suite" 18 ) 19 20 type TestObj struct { 21 Key int 22 Fname string 23 Lname string 24 Gender string 25 Age int 26 } 27 28 type testSuite struct { 29 clienttest.ClientTestSuite 30 } 31 32 func TestNomdex(t *testing.T) { 33 suite.Run(t, &testSuite{}) 34 } 35 36 func makeTestDb(s *testSuite, dsId string) datas.Database { 37 db := datas.NewDatabase(nbs.NewLocalStore(s.DBDir, clienttest.DefaultMemTableSize)) 38 l1 := []TestObj{ 39 {1, "will", "smith", "m", 40}, 40 {2, "lana", "turner", "f", 91}, 41 {3, "john", "wayne", "m", 86}, 42 {4, "johnny", "depp", "m", 50}, 43 {5, "merrill", "streep", "f", 60}, 44 {6, "rob", "courdry", "m", 45}, 45 {7, "bruce", "lee", "m", 72}, 46 {8, "bruce", "willis", "m", 36}, 47 {9, "luis", "bunuel", "m", 100}, 48 {10, "andy", "sandberg", "m", 32}, 49 {11, "walter", "coggins", "m", 28}, 50 {12, "seth", "rogan", "m", 29}, 51 } 52 53 m1 := map[string]TestObj{ 54 "lg": {13, "lady", "gaga", "f", 39}, 55 "ss": {14, "sam", "smith", "m", 28}, 56 "rp": {15, "robert", "plant", "m", 69}, 57 "ml": {16, "meat", "loaf", "m", 65}, 58 "gf": {17, "glenn", "frey", "m", 60}, 59 "jr": {18, "joey", "ramone", "m", 55}, 60 "rc": {19, "ray", "charles", "m", 72}, 61 "bk": {20, "bb", "king", "m", 77}, 62 "b": {21, "beck", "", "m", 38}, 63 "md": {22, "miles", "davis", "m", 82}, 64 "rd": {23, "roger", "daltry", "m", 62}, 65 "jf": {24, "john", "fogerty", "m", 60}, 66 } 67 68 m := map[string]interface{}{"actors": l1, "musicians": m1} 69 v, err := marshal.Marshal(db, m) 70 s.NoError(err) 71 _, err = db.CommitValue(db.GetDataset(dsId), v) 72 s.NoError(err) 73 return db 74 } 75 76 func (s *testSuite) TestNomdex() { 77 dsId := "data" 78 db := makeTestDb(s, dsId) 79 s.NotNil(db) 80 db.Close() 81 82 fnameIdx := "fname-idx" 83 dataSpec := spec.CreateValueSpecString("nbs", s.DBDir, dsId) 84 dbSpec := spec.CreateDatabaseSpecString("nbs", s.DBDir) 85 stdout, stderr := s.MustRun(main, []string{"up", "--out-ds", fnameIdx, "--in-path", dataSpec, "--by", ".fname"}) 86 s.Contains(stdout, "Indexed 24 objects") 87 s.Equal("", stderr) 88 89 genderIdx := "gender-idx" 90 stdout, stderr = s.MustRun(main, []string{"up", "--out-ds", genderIdx, "--in-path", dataSpec, "--by", ".gender"}) 91 s.Contains(stdout, "Indexed 24 objects") 92 s.Equal("", stderr) 93 94 stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx = "lady"`}) 95 s.Contains(stdout, "Found 1 objects") 96 s.Equal("", stderr) 97 98 stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx = "lady" and gender-idx = "f"`}) 99 s.Contains(stdout, "Found 1 objects") 100 s.Equal("", stderr) 101 102 stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" and gender-idx != "m"`}) 103 s.Contains(stdout, "Found 2 objects") 104 s.Equal("", stderr) 105 106 stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" and fname-idx != "john"`}) 107 s.Contains(stdout, "Found 21 objects") 108 s.Equal("", stderr) 109 110 stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" or gender-idx != "f"`}) 111 s.Contains(stdout, "Found 23 objects") 112 s.Equal("", stderr) 113 } 114 115 func TestTransform(t *testing.T) { 116 assert := assert.New(t) 117 118 tcs := [][]string{ 119 []string{`"01/02/2003"`, "\"(\\d{2})/(\\d{2})/(\\d{4})\"", "$3/$2/$1", "2003/02/01"}, 120 } 121 122 for _, tc := range tcs { 123 base, regex, replace, expected := tc[0], tc[1], tc[2], tc[3] 124 125 testRe := regexp.MustCompile(regex) 126 result := testRe.ReplaceAllString(base, replace) 127 assert.Equal(expected, result) 128 } 129 130 tcs = [][]string{ 131 []string{"343 STATE ST\nROCHESTER, NY 14650\n(43.161276, -77.619386)", "43.161276", "-77.619386"}, 132 []string{"TWO EMBARCADERO CENTER\nPROMENADE LEVEL SAN FRANCISCO, CA 94111\n", "", ""}, 133 } 134 135 findLatRe := regexp.MustCompile("(?s)\\(([\\d.]+)") 136 findLngRe := regexp.MustCompile("(?s)(-?[\\d.]+)\\)") 137 for _, tc := range tcs { 138 base, expectedLat, expectedLng := tc[0], tc[1], tc[2] 139 140 lat := findLatRe.FindStringSubmatch(base) 141 assert.True(len(lat) == 0 && expectedLat == "" || (len(lat) == 2 && expectedLat == lat[1])) 142 143 lng := findLngRe.FindStringSubmatch(base) 144 assert.True(len(lng) == 0 && expectedLng == "" || (len(lng) == 2 && expectedLng == lng[1])) 145 } 146 }