feat(cmd/ry): add output package with raw format fix
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
package output
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type testItem struct {
|
||||
ID string `json:"id" table:"ID"`
|
||||
Name string `json:"name" table:"NAME"`
|
||||
Age int `json:"age" table:"AGE"`
|
||||
}
|
||||
|
||||
func TestTableFormat(t *testing.T) {
|
||||
items := []testItem{
|
||||
{ID: "1", Name: "Alice", Age: 30},
|
||||
{ID: "2", Name: "Bob", Age: 25},
|
||||
}
|
||||
var buf bytes.Buffer
|
||||
printer := New("table", &buf)
|
||||
if err := printer.Print(items); err != nil {
|
||||
t.Fatalf("Print table error: %v", err)
|
||||
}
|
||||
out := buf.String()
|
||||
if !strings.Contains(out, "ID") || !strings.Contains(out, "Alice") {
|
||||
t.Errorf("table output missing headers or data:\n%s", out)
|
||||
}
|
||||
}
|
||||
|
||||
func TestJSONFormat(t *testing.T) {
|
||||
items := []testItem{{ID: "1", Name: "Alice", Age: 30}}
|
||||
var buf bytes.Buffer
|
||||
printer := New("json", &buf)
|
||||
if err := printer.Print(items); err != nil {
|
||||
t.Fatalf("Print json error: %v", err)
|
||||
}
|
||||
var parsed []testItem
|
||||
if err := json.Unmarshal(buf.Bytes(), &parsed); err != nil {
|
||||
t.Fatalf("invalid JSON output: %v", err)
|
||||
}
|
||||
if len(parsed) != 1 || parsed[0].ID != "1" {
|
||||
t.Errorf("JSON content mismatch: %+v", parsed)
|
||||
}
|
||||
}
|
||||
|
||||
func TestYAMLFormat(t *testing.T) {
|
||||
items := []testItem{{ID: "1", Name: "Alice", Age: 30}}
|
||||
var buf bytes.Buffer
|
||||
printer := New("yaml", &buf)
|
||||
if err := printer.Print(items); err != nil {
|
||||
t.Fatalf("Print yaml error: %v", err)
|
||||
}
|
||||
out := buf.String()
|
||||
if !strings.Contains(out, "id:") || !strings.Contains(out, "Alice") {
|
||||
t.Errorf("yaml output missing data:\n%s", out)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRawFormat(t *testing.T) {
|
||||
raw := []byte(`{"raw":"data"}`)
|
||||
var buf bytes.Buffer
|
||||
printer := New("raw", &buf)
|
||||
if err := printer.PrintRaw(raw); err != nil {
|
||||
t.Fatalf("PrintRaw error: %v", err)
|
||||
}
|
||||
if buf.String() != `{"raw":"data"}`+"\n" {
|
||||
t.Errorf("raw output = %q", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
// 新增:Print 在 raw 格式下应输出 JSON
|
||||
func TestRawPrintFormat(t *testing.T) {
|
||||
items := []testItem{{ID: "1", Name: "Alice", Age: 30}}
|
||||
var buf bytes.Buffer
|
||||
printer := New("raw", &buf)
|
||||
if err := printer.Print(items); err != nil {
|
||||
t.Fatalf("Print raw error: %v", err)
|
||||
}
|
||||
var parsed []testItem
|
||||
if err := json.Unmarshal(buf.Bytes(), &parsed); err != nil {
|
||||
t.Fatalf("raw Print produced invalid JSON: %v\nbuf=%s", err, buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestSingleItem(t *testing.T) {
|
||||
item := testItem{ID: "1", Name: "Solo", Age: 99}
|
||||
var buf bytes.Buffer
|
||||
printer := New("json", &buf)
|
||||
if err := printer.Print(item); err != nil {
|
||||
t.Fatalf("Print single item error: %v", err)
|
||||
}
|
||||
if !strings.Contains(buf.String(), "Solo") {
|
||||
t.Errorf("single item output missing data:\n%s", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnknownFormat(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
printer := New("unknown", &buf)
|
||||
err := printer.Print([]testItem{})
|
||||
if err == nil {
|
||||
t.Error("expected error for unknown format")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user