package main import ( "bytes" "os" "path/filepath" "strings" "testing" ) func TestFmtStdin(t *testing.T) { in := strings.NewReader("create function f() returns int language sql as $$ select 1 $$;\n") var out, errb bytes.Buffer rc := run([]string{"fmt"}, in, &out, &errb) if rc != 0 { t.Fatalf("rc=%d stderr=%s", rc, errb.String()) } if !strings.HasPrefix(out.String(), "CREATE FUNCTION f(") { t.Errorf("unexpected output:\n%s", out.String()) } } func TestFmtCheckStdin(t *testing.T) { unformatted := "create function f() returns int language sql as $$ select 1 $$;" // Unformatted input → rc 1. var out, errb bytes.Buffer if rc := run([]string{"fmt", "--check"}, strings.NewReader(unformatted), &out, &errb); rc != 1 { t.Errorf("unformatted input: rc=%d, want 1", rc) } // Its own formatted output → rc 0 (idempotent + check agree). out.Reset() errb.Reset() run([]string{"fmt"}, strings.NewReader(unformatted), &out, &errb) formatted := out.String() var out2, errb2 bytes.Buffer if rc := run([]string{"fmt", "--check"}, strings.NewReader(formatted), &out2, &errb2); rc != 0 { t.Errorf("formatted input: rc=%d, want 0\noutput was:\n%s", rc, formatted) } } func TestFmtWriteInPlace(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "f.pgsql") orig := "create function f() returns int language sql as $$ select 1 $$;\n" if err := os.WriteFile(path, []byte(orig), 0o644); err != nil { t.Fatal(err) } var out, errb bytes.Buffer if rc := run([]string{"fmt", "-w", path}, nil, &out, &errb); rc != 0 { t.Fatalf("rc=%d stderr=%s", rc, errb.String()) } got, _ := os.ReadFile(path) if string(got) == orig { t.Error("file was not rewritten") } // Second write is a no-op (idempotent). if rc := run([]string{"fmt", "--check", path}, nil, &out, &errb); rc != 0 { t.Errorf("after -w, --check rc=%d, want 0", rc) } } func TestUnknownCommand(t *testing.T) { var out, errb bytes.Buffer if rc := run([]string{"frobnicate"}, nil, &out, &errb); rc != 2 { t.Errorf("rc=%d, want 2", rc) } }