67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package file
|
||
|
||
import (
|
||
"os"
|
||
"path/filepath"
|
||
"testing"
|
||
)
|
||
|
||
type TestStruct struct {
|
||
Name string `json:"name" yaml:"name"`
|
||
Age int `json:"age" yaml:"age"`
|
||
}
|
||
|
||
type SnakeStruct struct {
|
||
UserName string `json:"user_name" yaml:"user_name"`
|
||
}
|
||
|
||
func TestUnmarshalFile(t *testing.T) {
|
||
tmpDir, _ := os.MkdirTemp("", "test_object")
|
||
defer os.RemoveAll(tmpDir)
|
||
|
||
jsonFile := filepath.Join(tmpDir, "test.json")
|
||
// 测试智能映射:输入 user_name,目标 UserName
|
||
jsonData := `{"user_name": "Alice"}`
|
||
os.WriteFile(jsonFile, []byte(jsonData), 0644)
|
||
|
||
t.Run("SmartMapping", func(t *testing.T) {
|
||
var ts SnakeStruct
|
||
err := UnmarshalFile(jsonFile, &ts)
|
||
if err != nil {
|
||
t.Errorf("UnmarshalFile failed: %v", err)
|
||
}
|
||
if ts.UserName != "Alice" {
|
||
t.Errorf("Expected Alice, got %s", ts.UserName)
|
||
}
|
||
})
|
||
}
|
||
|
||
func TestMarshalFile(t *testing.T) {
|
||
tmpDir, _ := os.MkdirTemp("", "test_marshal")
|
||
defer os.RemoveAll(tmpDir)
|
||
|
||
data := TestStruct{Name: "Bob", Age: 25}
|
||
|
||
t.Run("Pretty", func(t *testing.T) {
|
||
filename := filepath.Join(tmpDir, "pretty.json")
|
||
err := MarshalFilePretty(filename, data)
|
||
if err != nil {
|
||
t.Fatalf("MarshalFilePretty failed: %v", err)
|
||
}
|
||
})
|
||
}
|
||
|
||
func TestPatchFile(t *testing.T) {
|
||
tmpDir, _ := os.MkdirTemp("", "test_patch")
|
||
defer os.RemoveAll(tmpDir)
|
||
filename := filepath.Join(tmpDir, "config.json")
|
||
|
||
t.Run("Update", func(t *testing.T) {
|
||
patch := map[string]any{"name": "Initial"}
|
||
err := PatchFile(filename, patch)
|
||
if err != nil {
|
||
t.Fatalf("PatchFile failed: %v", err)
|
||
}
|
||
})
|
||
}
|