protoc-gen-go-value-scan/integration_test.go
2022-12-13 13:12:51 +00:00

64 lines
1.1 KiB
Go

package main_test
import (
"fmt"
"os"
"testing"
"github.com/google/go-cmp/cmp"
)
func TestMain(t *testing.T) {
expected := `// Code generated by protoc-gen-go-value-scan. DO NOT EDIT.
package foov1
import (
"database/sql/driver"
"fmt"
protojson "google.golang.org/protobuf/encoding/protojson"
)
func (x Foo) Value() (driver.Value, error) {
f := &x
opts := protojson.MarshalOptions{}
opts.UseProtoNames = false
opts.EmitUnpopulated = true
return opts.Marshal(f)
}
func (x *Foo) Scan(value interface{}) error {
switch v := value.(type) {
case []byte:
return protojson.Unmarshal(v, x)
case string:
return protojson.Unmarshal([]byte(v), x)
default:
return fmt.Errorf("type assertion failed")
}
}
`
// Read generated file.
f, err := os.ReadFile("go/foo/v1/foo.value_scan.pb.go")
if err != nil {
t.Errorf("could not read generated file: %s", err.Error())
t.FailNow()
}
// Compare.
// require.Equal(expected, string(f))
if diff := cmp.Diff(expected, string(f)); diff != "" {
t.Errorf(
fmt.Sprintf(
"Not equal:\n Delta: %s\n",
diff,
),
)
t.FailNow()
}
}