1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-08 05:47:07 +09:00
anytype-heart/cmd/testcase/main.go

115 lines
2.4 KiB
Go

package main
import (
"fmt"
"io"
"os"
"path/filepath"
"github.com/gogo/protobuf/jsonpb"
"github.com/gogo/protobuf/proto"
"github.com/anyproto/anytype-heart/pb"
)
func run() error {
if len(os.Args) == 1 {
return fmt.Errorf("select command: generate-json-helpers")
}
if os.Args[1] == "generate-json-helpers" {
return generateJsonHelpers()
}
return nil
}
func generateJsonHelpers() error {
rootPath := "./tests/integration/testdata/import"
entries, err := os.ReadDir(rootPath)
if err != nil {
return fmt.Errorf("read dir: %w", err)
}
for _, entry := range entries {
if entry.IsDir() {
err := generateJsonHelpersForImportCase(filepath.Join(rootPath, entry.Name()))
if err != nil {
return fmt.Errorf("generate json helpers for dir %s: %w", entry.Name(), err)
}
}
}
return nil
}
func generateJsonHelpersForImportCase(dir string) error {
entries, err := os.ReadDir(dir)
if err != nil {
return fmt.Errorf("read dir: %w", err)
}
for _, entry := range entries {
if entry.IsDir() {
continue
}
// Remove old json files
if filepath.Ext(entry.Name()) == ".txt" {
path := filepath.Join(dir, entry.Name())
fmt.Println("delete old json file: ", path)
err := os.Remove(path)
if err != nil {
return fmt.Errorf("remove file: %w", err)
}
}
}
for _, entry := range entries {
if entry.IsDir() {
continue
}
if filepath.Ext(entry.Name()) == ".pb" {
err = generateJsonHelper(dir, entry.Name())
if err != nil {
return fmt.Errorf("generate helper: %w", err)
}
}
}
return nil
}
func generateJsonHelper(dir string, pbFileName string) error {
f, err := os.Open(filepath.Join(dir, pbFileName))
if err != nil {
return fmt.Errorf("open file: %w", err)
}
defer f.Close()
snapshot := &pb.SnapshotWithType{}
data, err := io.ReadAll(f)
if err != nil {
return fmt.Errorf("read pb file: %w", err)
}
err = proto.Unmarshal(data, snapshot)
if err != nil {
return fmt.Errorf("unmarshal pb: %w", err)
}
jsonFilePath := filepath.Join(dir, pbFileName+".txt")
jsonFile, err := os.Create(jsonFilePath)
if err != nil {
return fmt.Errorf("create file: %w", err)
}
defer jsonFile.Close()
marshaler := &jsonpb.Marshaler{Indent: " "}
err = marshaler.Marshal(jsonFile, snapshot)
if err != nil {
return fmt.Errorf("marshal to json: %w", err)
}
fmt.Println("created json file: ", jsonFilePath)
return nil
}
func main() {
err := run()
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}