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)
|
||
|
|
}
|
||
|
|
}
|