github.com/machinefi/w3bstream@v1.6.5-rc9.0.20240426031326-b8c7c4876e72/pkg/depends/kit/enumgen/enum_test.go (about) 1 package enumgen_test 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "testing" 8 9 . "github.com/onsi/gomega" 10 11 "github.com/machinefi/w3bstream/pkg/depends/gen/codegen" 12 "github.com/machinefi/w3bstream/pkg/depends/kit/enumgen" 13 "github.com/machinefi/w3bstream/pkg/depends/x/pkgx" 14 ) 15 16 var ( 17 g *enumgen.Generator 18 sample *enumgen.Enum 19 scheme *enumgen.Enum 20 policy *enumgen.Enum 21 f *codegen.File 22 PkgID string 23 ) 24 25 func init() { 26 cwd, _ := os.Getwd() 27 pkg, err := pkgx.LoadFrom(filepath.Join(cwd, "./__examples__")) 28 if err != nil { 29 panic(err) 30 } 31 PkgID = pkg.ID 32 g = enumgen.New(pkg) 33 g.Scan("Sample", "Scheme", "PullPolicy") 34 35 if sample = enumgen.GetEnumByName(g, "Sample"); sample == nil { 36 panic(nil) 37 } 38 if scheme = enumgen.GetEnumByName(g, "Scheme"); scheme == nil { 39 panic(nil) 40 } 41 // should be nil, just generate IntStringerEnum 42 if policy = enumgen.GetEnumByName(g, "PullPolicy"); policy != nil { 43 panic(nil) 44 } 45 g.Output(cwd) 46 // fake f for testing enum member functions 47 f = codegen.NewFile(pkg.Name, "mock.go") 48 } 49 50 func ExampleEnum_ConstName() { 51 fmt.Println(string(sample.ConstName("XXX").Bytes())) 52 fmt.Println(string(sample.ConstName("ABC").Bytes())) 53 fmt.Println(string(scheme.ConstName("HTTP").Bytes())) 54 fmt.Println(string(scheme.ConstName("HTTPS").Bytes())) 55 // Output: 56 // SAMPLE__XXX 57 // SAMPLE__ABC 58 // SCHEME__HTTP 59 // SCHEME__HTTPS 60 } 61 62 func ExampleEnum_Errors() { 63 fmt.Println(string(sample.Errors(f).Bytes())) 64 fmt.Println(string(scheme.Errors(f).Bytes())) 65 // Output: 66 // var InvalidSample = errors.New("invalid Sample type") 67 // var InvalidScheme = errors.New("invalid Scheme type") 68 } 69 70 func ExampleEnum_StringParser() { 71 fmt.Println(string(sample.StringParser(f).Bytes())) 72 // Output: 73 // func ParseSampleFromString(s string) (Sample, error) { 74 // switch s { 75 // default: 76 // return SAMPLE_UNKNOWN, InvalidSample 77 // case "": 78 // return SAMPLE_UNKNOWN, nil 79 // case "XXX": 80 // return SAMPLE__XXX, nil 81 // case "YYY": 82 // return SAMPLE__YYY, nil 83 // case "ZZZ": 84 // return SAMPLE__ZZZ, nil 85 // } 86 // } 87 } 88 89 func ExampleEnum_LabelParser() { 90 fmt.Println(string(sample.LabelParser(f).Bytes())) 91 // Output: 92 // func ParseSampleFromLabel(s string) (Sample, error) { 93 // switch s { 94 // default: 95 // return SAMPLE_UNKNOWN, InvalidSample 96 // case "": 97 // return SAMPLE_UNKNOWN, nil 98 // case "样例XXX": 99 // return SAMPLE__XXX, nil 100 // case "样例YYY": 101 // return SAMPLE__YYY, nil 102 // case "样例ZZZ": 103 // return SAMPLE__ZZZ, nil 104 // } 105 // } 106 } 107 108 func ExampleEnum_Stringer() { 109 fmt.Println(string(sample.Stringer(f).Bytes())) 110 // Output: 111 // func (v Sample) String() string { 112 // switch v { 113 // default: 114 // return "UNKNOWN" 115 // case SAMPLE_UNKNOWN: 116 // return "" 117 // case SAMPLE__XXX: 118 // return "XXX" 119 // case SAMPLE__YYY: 120 // return "YYY" 121 // case SAMPLE__ZZZ: 122 // return "ZZZ" 123 // } 124 // } 125 } 126 127 func ExampleEnum_Integer() { 128 fmt.Println(string(sample.Integer(f).Bytes())) 129 // Output: 130 // func (v Sample) Int() int { 131 // return int(v) 132 // } 133 } 134 135 func ExampleEnum_Labeler() { 136 fmt.Println(string(sample.Labeler(f).Bytes())) 137 // Output: 138 // func (v Sample) Label() string { 139 // switch v { 140 // default: 141 // return "UNKNOWN" 142 // case SAMPLE_UNKNOWN: 143 // return "" 144 // case SAMPLE__XXX: 145 // return "样例XXX" 146 // case SAMPLE__YYY: 147 // return "样例YYY" 148 // case SAMPLE__ZZZ: 149 // return "样例ZZZ" 150 // } 151 // } 152 } 153 154 func TestEnum_TypeName(t *testing.T) { 155 NewWithT(t).Expect(sample.TypeName(f).Bytes()).To(Equal([]byte( 156 `func (v Sample) TypeName() string { 157 return "` + PkgID + `.Sample" 158 }`))) 159 } 160 161 func ExampleEnum_ConstValues() { 162 fmt.Println(string(sample.ConstValues(f).Bytes())) 163 // Output: 164 // func (v Sample) ConstValues() []enum.IntStringerEnum { 165 // return []enum.IntStringerEnum{SAMPLE__XXX, SAMPLE__YYY, SAMPLE__ZZZ} 166 // } 167 } 168 169 func ExampleEnum_TextMarshaler() { 170 fmt.Println(string(sample.TextMarshaler(f).Bytes())) 171 // Output: 172 // func (v Sample) MarshalText() ([]byte, error) { 173 // s := v.String() 174 // if s == "UNKNOWN" { 175 // return nil, InvalidSample 176 // } 177 // return []byte(s), nil 178 // } 179 } 180 181 func ExampleEnum_TextUnmarshaler() { 182 fmt.Println(string(sample.TextUnmarshaler(f).Bytes())) 183 // Output: 184 // func (v *Sample) UnmarshalText(data []byte) error { 185 // s := string(bytes.ToUpper(data)) 186 // val, err := ParseSampleFromString(s) 187 // if err != nil { 188 // return err 189 // } 190 // *(v) = val 191 // return nil 192 // } 193 } 194 195 func ExampleEnum_Scanner() { 196 fmt.Println(string(sample.Scanner(f).Bytes())) 197 // Output: 198 // func (v *Sample) Scan(src interface{}) error { 199 // offset := 0 200 // o, ok := interface{}(v).(enum.ValueOffset) 201 // if ok { 202 // offset = o.Offset() 203 // } 204 // i, err := enum.ScanIntEnumStringer(src, offset) 205 // if err != nil { 206 // return err 207 // } 208 // *(v) = Sample(i) 209 // return nil 210 // } 211 } 212 213 func ExampleEnum_Valuer() { 214 fmt.Println(string(sample.Valuer(f).Bytes())) 215 // Output: 216 // func (v Sample) Value() (driver.Value, error) { 217 // offset := 0 218 // o, ok := interface{}(v).(enum.ValueOffset) 219 // if ok { 220 // offset = o.Offset() 221 // } 222 // return int64(v) + int64(offset), nil 223 // } 224 }