Fix bug where -o flag value was read as pointer instead of string value, causing memory addresses to be printed and output path to resolve to ".xlsx".
106 lines
2.5 KiB
Go
106 lines
2.5 KiB
Go
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)
|
|
}
|
|
}
|