Files
wasm-go/xlsx_reader_test.go
lychang 5e3dac3020 init
2026-05-19 19:42:55 +08:00

252 lines
5.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"fmt"
"os"
"testing"
)
func TestNewXLSXReader(t *testing.T) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
t.Skip("测试文件不存在,跳过测试")
}
reader, err := NewXLSXReader(testFile)
if err != nil {
t.Fatalf("创建XLSX读取器失败: %v", err)
}
if reader.files == nil {
t.Error("文件映射为空")
}
t.Logf("成功读取 %d 个文件", len(reader.files))
}
func TestGetSheetNames(t *testing.T) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
t.Skip("测试文件不存在,跳过测试")
}
reader, err := NewXLSXReader(testFile)
if err != nil {
t.Fatalf("创建XLSX读取器失败: %v", err)
}
sheets, err := reader.GetSheetNames()
if err != nil {
t.Fatalf("获取工作表名称失败: %v", err)
}
t.Logf("工作表列表: %v", sheets)
if len(sheets) == 0 {
t.Error("未找到任何工作表")
}
}
func TestGetSheetData(t *testing.T) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
t.Skip("测试文件不存在,跳过测试")
}
reader, err := NewXLSXReader(testFile)
if err != nil {
t.Fatalf("创建XLSX读取器失败: %v", err)
}
sheets, err := reader.GetSheetNames()
if err != nil || len(sheets) == 0 {
t.Skip("未找到工作表,跳过测试")
}
targetSheet := ""
for _, sheet := range sheets {
if sheet == "资产负债表" || sheet == "利润表" || sheet == "现金流量表" {
targetSheet = sheet
break
}
}
if targetSheet == "" {
targetSheet = sheets[0]
}
data, err := reader.GetSheetData(targetSheet)
if err != nil {
t.Fatalf("获取工作表数据失败: %v", err)
}
t.Logf("工作表 %s 有 %d 行数据", targetSheet, len(data))
if len(data) == 0 {
t.Error("工作表数据为空")
} else {
t.Logf("第一行数据: %v", data[0])
}
}
func TestGetCellValue(t *testing.T) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
t.Skip("测试文件不存在,跳过测试")
}
reader, err := NewXLSXReader(testFile)
if err != nil {
t.Fatalf("创建XLSX读取器失败: %v", err)
}
sheets, err := reader.GetSheetNames()
if err != nil || len(sheets) == 0 {
t.Skip("未找到工作表,跳过测试")
}
value, err := reader.GetCellValue(sheets[0], "A1")
if err != nil {
t.Fatalf("获取单元格值失败: %v", err)
}
t.Logf("单元格 A1 的值: %s", value)
}
func TestParseCellRef(t *testing.T) {
tests := []struct {
input string
wantRow int
wantCol int
}{
{"A1", 0, 0},
{"B2", 1, 1},
{"Z10", 9, 25},
{"AA1", 0, 26},
{"AB100", 99, 27},
}
for _, tt := range tests {
t.Run(tt.input, func(t *testing.T) {
row, col := parseCellRef(tt.input)
if row != tt.wantRow {
t.Errorf("parseCellRef(%q) row = %d, want %d", tt.input, row, tt.wantRow)
}
if col != tt.wantCol {
t.Errorf("parseCellRef(%q) col = %d, want %d", tt.input, col, tt.wantCol)
}
})
}
}
func TestParseFinancialValue(t *testing.T) {
tests := []struct {
input string
want float64
wantErr bool
}{
{"100", 100, false},
{"100.5", 100.5, false},
{"100万", 1000000, false},
{"100.5万", 1005000, false},
{"1,234.56万", 12345600, false},
{"-", 0, false},
{"", 0, false},
{"无", 0, false},
{"100元", 100, false},
{"100万元", 1000000, false},
}
for _, tt := range tests {
t.Run(fmt.Sprintf("%q", tt.input), func(t *testing.T) {
got, err := parseFinancialValue(tt.input)
if (err != nil) != tt.wantErr {
t.Errorf("parseFinancialValue(%q) error = %v, wantErr %v", tt.input, err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("parseFinancialValue(%q) = %v, want %v", tt.input, got, tt.want)
}
})
}
}
func TestExtractFinancialDataPureGo(t *testing.T) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
t.Skip("测试文件不存在,跳过测试")
}
reader, err := NewXLSXReader(testFile)
if err != nil {
t.Fatalf("创建XLSX读取器失败: %v", err)
}
sheets, err := reader.GetSheetNames()
if err != nil || len(sheets) == 0 {
t.Skip("未找到工作表,跳过测试")
}
var targetSheet string
for _, sheet := range sheets {
if sheet == "资产负债表" {
targetSheet = sheet
break
}
}
if targetSheet == "" {
t.Skip("未找到资产负债表,跳过测试")
}
data, err := reader.GetSheetData(targetSheet)
if err != nil {
t.Fatalf("获取工作表数据失败: %v", err)
}
if len(data) > 0 && len(data[0]) > 0 {
t.Logf("成功读取工作表 %s,共 %d 行", targetSheet, len(data))
t.Logf("表头: %v", data[0])
}
}
func BenchmarkXLSXReader(b *testing.B) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
b.Skip("测试文件不存在")
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
reader, _ := NewXLSXReader(testFile)
if reader != nil {
reader.GetSheetNames()
}
}
}
func BenchmarkGetSheetData(b *testing.B) {
testFile := "yst郑州惠兴财务报表2021(3).xlsx"
if _, err := os.Stat(testFile); os.IsNotExist(err) {
b.Skip("测试文件不存在")
}
reader, _ := NewXLSXReader(testFile)
sheets, _ := reader.GetSheetNames()
if len(sheets) == 0 {
b.Skip("未找到工作表")
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
reader.GetSheetData(sheets[0])
}
}