package main import ( "os" "path/filepath" "testing" "github.com/xuri/excelize/v2" ) func writeTempCSV(t *testing.T, dir, name, content string) string { t.Helper() path := filepath.Join(dir, name) if err := os.WriteFile(path, []byte(content), 0644); err != nil { t.Fatalf("WriteFile: %v", err) } return path } func TestRun_OutputPath(t *testing.T) { dir := t.TempDir() csv := writeTempCSV(t, dir, "data.csv", "name,age\nAlice,30\nBob,25\n") out := filepath.Join(dir, "result.xlsx") if err := run([]string{csv}, out, "auto", "utf8"); err != nil { t.Fatalf("run() error: %v", err) } if _, err := os.Stat(out); os.IsNotExist(err) { t.Fatalf("output file not created: %s", out) } } func TestRun_SheetContent(t *testing.T) { dir := t.TempDir() csv := writeTempCSV(t, dir, "sheet1.csv", "col1;col2\nfoo;bar\n") out := filepath.Join(dir, "out.xlsx") if err := run([]string{csv}, out, ";", "utf8"); err != nil { t.Fatalf("run() error: %v", err) } f, err := excelize.OpenFile(out) if err != nil { t.Fatalf("OpenFile: %v", err) } val, err := f.GetCellValue("sheet1", "A1") if err != nil { t.Fatalf("GetCellValue: %v", err) } if val != "col1" { t.Errorf("A1 = %q, want %q", val, "col1") } val, err = f.GetCellValue("sheet1", "B2") if err != nil { t.Fatalf("GetCellValue: %v", err) } if val != "bar" { t.Errorf("B2 = %q, want %q", val, "bar") } } func TestRun_MultipleSheets(t *testing.T) { dir := t.TempDir() csv1 := writeTempCSV(t, dir, "alpha.csv", "x\n1\n") csv2 := writeTempCSV(t, dir, "beta.csv", "y\n2\n") out := filepath.Join(dir, "multi.xlsx") if err := run([]string{csv1, csv2}, out, "auto", "utf8"); err != nil { t.Fatalf("run() error: %v", err) } f, err := excelize.OpenFile(out) if err != nil { t.Fatalf("OpenFile: %v", err) } sheets := f.GetSheetList() if len(sheets) != 2 { t.Fatalf("got %d sheets, want 2", len(sheets)) } if sheets[0] != "alpha" || sheets[1] != "beta" { t.Errorf("sheets = %v, want [alpha beta]", sheets) } } func TestRun_CustomOutputFilename(t *testing.T) { dir := t.TempDir() csv := writeTempCSV(t, dir, "input.csv", "a,b\n1,2\n") out := filepath.Join(dir, "custom_name.xlsx") if err := run([]string{csv}, out, ",", "utf8"); err != nil { t.Fatalf("run() error: %v", err) } if _, err := os.Stat(out); os.IsNotExist(err) { t.Fatalf("expected output at %s, not found", out) } // ensure default name was NOT created defaultOut := filepath.Join(dir, "output.xlsx") if _, err := os.Stat(defaultOut); !os.IsNotExist(err) { t.Errorf("unexpected file created at %s", defaultOut) } }