-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelpers_test.go
More file actions
87 lines (76 loc) · 2.03 KB
/
Copy pathhelpers_test.go
File metadata and controls
87 lines (76 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
import (
"io"
"log/slog"
"path/filepath"
"testing"
"github.com/xuri/excelize/v2"
)
// discardLogger returns a logger that swallows all output.
func discardLogger() *slog.Logger {
return slog.New(slog.NewJSONHandler(io.Discard, nil))
}
// openTestDB opens a fresh SQLite database under t.TempDir() and closes it
// on cleanup.
func openTestDB(t *testing.T) *DB {
t.Helper()
db, err := OpenDB(filepath.Join(t.TempDir(), "test.db"))
if err != nil {
t.Fatalf("OpenDB: %v", err)
}
t.Cleanup(func() { _ = db.Close() })
return db
}
// xlsxSheet describes one sheet of an in-memory test workbook.
type xlsxSheet struct {
name string
rows [][]any
}
// buildXLSX builds an in-memory workbook. The first sheet replaces the
// default "Sheet1"; subsequent sheets are appended.
func buildXLSX(t *testing.T, sheets []xlsxSheet) []byte {
t.Helper()
f := excelize.NewFile()
defer func() { _ = f.Close() }()
for i, sheet := range sheets {
if i == 0 {
if sheet.name != "Sheet1" {
if err := f.SetSheetName("Sheet1", sheet.name); err != nil {
t.Fatalf("SetSheetName: %v", err)
}
}
} else {
if _, err := f.NewSheet(sheet.name); err != nil {
t.Fatalf("NewSheet: %v", err)
}
}
for rowIndex, row := range sheet.rows {
cell, err := excelize.CoordinatesToCellName(1, rowIndex+1)
if err != nil {
t.Fatalf("CoordinatesToCellName: %v", err)
}
if err := f.SetSheetRow(sheet.name, cell, &row); err != nil {
t.Fatalf("SetSheetRow: %v", err)
}
}
}
buf, err := f.WriteToBuffer()
if err != nil {
t.Fatalf("WriteToBuffer: %v", err)
}
return buf.Bytes()
}
// translationsXLSX builds a workbook with a single "Translations" sheet;
// rows[0] is the header.
func translationsXLSX(t *testing.T, rows [][]string) []byte {
t.Helper()
anyRows := make([][]any, 0, len(rows))
for _, row := range rows {
anyRow := make([]any, len(row))
for i, cell := range row {
anyRow[i] = cell
}
anyRows = append(anyRows, anyRow)
}
return buildXLSX(t, []xlsxSheet{{name: "Translations", rows: anyRows}})
}