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  }