Files
wordZero/test/table_style_test.go

780 lines
16 KiB
Go

package test
import (
"fmt"
"testing"
"github.com/ZeroHawkeye/wordZero/pkg/document"
)
// TestTableBorders 测试表格边框功能
func TestTableBorders(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 3,
Cols: 3,
Width: 5000,
Data: [][]string{
{"姓名", "年龄", "职业"},
{"张三", "25", "工程师"},
{"李四", "30", "设计师"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 测试设置表格边框
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 12,
Color: "FF0000",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "0000FF",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 6,
Color: "00FF00",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleDashed,
Width: 6,
Color: "FF00FF",
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleDotted,
Width: 4,
Color: "808080",
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "808080",
Space: 0,
},
}
err := table.SetTableBorders(borderConfig)
if err != nil {
t.Fatalf("设置表格边框失败: %v", err)
}
t.Log("表格边框设置成功")
}
// TestCellBorders 测试单元格边框功能
func TestCellBorders(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 2,
Cols: 2,
Width: 3000,
Data: [][]string{
{"A1", "B1"},
{"A2", "B2"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 测试设置单元格边框
cellBorderConfig := &document.CellBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 8,
Color: "FF0000",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "0000FF",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 6,
Color: "00FF00",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleDashed,
Width: 4,
Color: "FF00FF",
Space: 0,
},
DiagDown: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 2,
Color: "FFFF00",
Space: 0,
},
}
err := table.SetCellBorders(0, 0, cellBorderConfig)
if err != nil {
t.Fatalf("设置单元格边框失败: %v", err)
}
t.Log("单元格边框设置成功")
}
// TestTableShading 测试表格背景功能
func TestTableShading(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 3,
Cols: 2,
Width: 4000,
Data: [][]string{
{"产品", "价格"},
{"产品A", "100"},
{"产品B", "200"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 测试设置表格背景
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternPct25,
ForegroundColor: "000000",
BackgroundColor: "E0E0E0",
}
err := table.SetTableShading(shadingConfig)
if err != nil {
t.Fatalf("设置表格背景失败: %v", err)
}
t.Log("表格背景设置成功")
}
// TestCellShading 测试单元格背景功能
func TestCellShading(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 3,
Cols: 3,
Width: 4500,
Data: [][]string{
{"A", "B", "C"},
{"1", "2", "3"},
{"X", "Y", "Z"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 测试设置单元格背景
testCases := []struct {
row int
col int
backgroundColor string
pattern document.ShadingPattern
}{
{0, 0, "FF0000", document.ShadingPatternSolid}, // 红色实色
{0, 1, "00FF00", document.ShadingPatternPct50}, // 绿色50%
{0, 2, "0000FF", document.ShadingPatternPct25}, // 蓝色25%
{1, 0, "FFFF00", document.ShadingPatternSolid}, // 黄色实色
{1, 1, "FF00FF", document.ShadingPatternPct75}, // 紫色75%
{1, 2, "00FFFF", document.ShadingPatternPct10}, // 青色10%
}
for _, tc := range testCases {
shadingConfig := &document.ShadingConfig{
Pattern: tc.pattern,
BackgroundColor: tc.backgroundColor,
}
err := table.SetCellShading(tc.row, tc.col, shadingConfig)
if err != nil {
t.Fatalf("设置单元格(%d,%d)背景失败: %v", tc.row, tc.col, err)
}
}
t.Log("单元格背景设置成功")
}
// TestAlternatingRowColors 测试奇偶行颜色交替
func TestAlternatingRowColors(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 5,
Cols: 3,
Width: 4500,
Data: [][]string{
{"序号", "姓名", "分数"},
{"1", "张三", "85"},
{"2", "李四", "92"},
{"3", "王五", "78"},
{"4", "赵六", "95"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 测试设置奇偶行颜色交替
err := table.SetAlternatingRowColors("F0F0F0", "FFFFFF")
if err != nil {
t.Fatalf("设置奇偶行颜色交替失败: %v", err)
}
t.Log("奇偶行颜色交替设置成功")
}
// TestTableStyleTemplates 测试表格样式模板
func TestTableStyleTemplates(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 4,
Cols: 3,
Width: 5000,
Data: [][]string{
{"项目", "预算", "实际"},
{"开发", "10000", "9500"},
{"测试", "5000", "5200"},
{"总计", "15000", "14700"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 测试应用表格样式模板
styleConfig := &document.TableStyleConfig{
Template: document.TableStyleTemplateGrid,
FirstRowHeader: true,
LastRowTotal: true,
BandedRows: true,
BandedColumns: false,
}
err := table.ApplyTableStyle(styleConfig)
if err != nil {
t.Fatalf("应用表格样式模板失败: %v", err)
}
t.Log("表格样式模板应用成功")
}
// TestCustomTableStyle 测试自定义表格样式
func TestCustomTableStyle(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 3,
Cols: 3,
Width: 4500,
Data: [][]string{
{"功能", "状态", "备注"},
{"登录", "完成", "已测试"},
{"注册", "开发中", "50%"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 创建自定义边框配置
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 12,
Color: "2E75B6",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "2E75B6",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleThick,
Width: 12,
Color: "2E75B6",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "2E75B6",
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "D0D0D0",
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "D0D0D0",
Space: 0,
},
}
// 创建自定义背景配置
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternPct10,
BackgroundColor: "E7F3FF",
}
// 测试创建自定义表格样式
err := table.CreateCustomTableStyle("CustomStyle1", "自定义样式1", borderConfig, shadingConfig, true)
if err != nil {
t.Fatalf("创建自定义表格样式失败: %v", err)
}
t.Log("自定义表格样式创建成功")
}
// TestRemoveBorders 测试移除边框功能
func TestRemoveBorders(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 2,
Cols: 2,
Width: 3000,
Data: [][]string{
{"A", "B"},
{"C", "D"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 先设置边框
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
}
err := table.SetTableBorders(borderConfig)
if err != nil {
t.Fatalf("设置表格边框失败: %v", err)
}
// 测试移除表格边框
err = table.RemoveTableBorders()
if err != nil {
t.Fatalf("移除表格边框失败: %v", err)
}
// 测试移除单元格边框
err = table.RemoveCellBorders(0, 0)
if err != nil {
t.Fatalf("移除单元格边框失败: %v", err)
}
t.Log("移除边框功能测试成功")
}
// TestComplexTableStyle 测试复杂表格样式组合
func TestComplexTableStyle(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 5,
Cols: 4,
Width: 6000,
Data: [][]string{
{"部门", "Q1", "Q2", "Q3"},
{"销售部", "120", "135", "150"},
{"技术部", "80", "90", "95"},
{"市场部", "60", "70", "85"},
{"总计", "260", "295", "330"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
// 应用样式模板
styleConfig := &document.TableStyleConfig{
Template: document.TableStyleTemplateColorful1,
FirstRowHeader: true,
LastRowTotal: true,
FirstColumnHeader: true,
BandedRows: true,
}
err := table.ApplyTableStyle(styleConfig)
if err != nil {
t.Fatalf("应用表格样式失败: %v", err)
}
// 设置自定义边框
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 8,
Color: "2E75B6",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleDouble,
Width: 8,
Color: "2E75B6",
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "B0B0B0",
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "B0B0B0",
Space: 0,
},
}
err = table.SetTableBorders(borderConfig)
if err != nil {
t.Fatalf("设置表格边框失败: %v", err)
}
// 为标题行设置特殊背景
for j := 0; j < 4; j++ {
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternSolid,
BackgroundColor: "2E75B6",
ForegroundColor: "FFFFFF",
}
err = table.SetCellShading(0, j, shadingConfig)
if err != nil {
t.Fatalf("设置标题行背景失败: %v", err)
}
}
// 为总计行设置特殊背景
for j := 0; j < 4; j++ {
shadingConfig := &document.ShadingConfig{
Pattern: document.ShadingPatternSolid,
BackgroundColor: "FFFF99",
}
err = table.SetCellShading(4, j, shadingConfig)
if err != nil {
t.Fatalf("设置总计行背景失败: %v", err)
}
}
t.Log("复杂表格样式组合测试成功")
}
// BenchmarkTableStyleOperations 表格样式操作性能测试
func BenchmarkTableStyleOperations(b *testing.B) {
// 创建文档
doc := document.New()
if doc == nil {
b.Fatal("创建文档失败")
}
// 创建表格
config := &document.TableConfig{
Rows: 10,
Cols: 5,
Width: 7500,
}
table := doc.AddTable(config)
if table == nil {
b.Fatal("创建表格失败")
}
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
Left: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
Right: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 6,
Color: "000000",
Space: 0,
},
InsideH: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "C0C0C0",
Space: 0,
},
InsideV: &document.BorderConfig{
Style: document.BorderStyleSingle,
Width: 4,
Color: "C0C0C0",
Space: 0,
},
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
err := table.SetTableBorders(borderConfig)
if err != nil {
b.Fatalf("设置表格边框失败: %v", err)
}
}
}
// TestBorderStyles 测试各种边框样式
func TestBorderStyles(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 测试边框样式
borderStyles := []document.BorderStyle{
document.BorderStyleNone,
document.BorderStyleSingle,
document.BorderStyleThick,
document.BorderStyleDouble,
document.BorderStyleDotted,
document.BorderStyleDashed,
document.BorderStyleDotDash,
document.BorderStyleWave,
}
for i, style := range borderStyles {
// 为每种样式创建一个表格
config := &document.TableConfig{
Rows: 2,
Cols: 2,
Width: 2000,
Data: [][]string{
{fmt.Sprintf("样式%d", i+1), string(style)},
{"测试", "数据"},
},
}
table := doc.AddTable(config)
if table == nil {
t.Fatalf("创建表格%d失败", i+1)
}
borderConfig := &document.TableBorderConfig{
Top: &document.BorderConfig{
Style: style,
Width: 6,
Color: "000000",
Space: 0,
},
Left: &document.BorderConfig{
Style: style,
Width: 6,
Color: "000000",
Space: 0,
},
Bottom: &document.BorderConfig{
Style: style,
Width: 6,
Color: "000000",
Space: 0,
},
Right: &document.BorderConfig{
Style: style,
Width: 6,
Color: "000000",
Space: 0,
},
}
err := table.SetTableBorders(borderConfig)
if err != nil {
t.Fatalf("设置表格%d边框失败: %v", i+1, err)
}
}
t.Log("边框样式测试完成")
}
// TestShadingPatterns 测试各种底纹图案
func TestShadingPatterns(t *testing.T) {
// 创建文档
doc := document.New()
if doc == nil {
t.Fatal("创建文档失败")
}
// 测试底纹图案
patterns := []document.ShadingPattern{
document.ShadingPatternClear,
document.ShadingPatternSolid,
document.ShadingPatternPct25,
document.ShadingPatternPct50,
document.ShadingPatternPct75,
document.ShadingPatternHorzStripe,
document.ShadingPatternVertStripe,
document.ShadingPatternDiagStripe,
}
// 创建表格
config := &document.TableConfig{
Rows: len(patterns),
Cols: 2,
Width: 3000,
}
table := doc.AddTable(config)
if table == nil {
t.Fatal("创建表格失败")
}
for i, pattern := range patterns {
// 设置单元格内容
err := table.SetCellText(i, 0, fmt.Sprintf("图案%d", i+1))
if err != nil {
t.Fatalf("设置单元格文本失败: %v", err)
}
err = table.SetCellText(i, 1, string(pattern))
if err != nil {
t.Fatalf("设置单元格文本失败: %v", err)
}
// 设置单元格背景
shadingConfig := &document.ShadingConfig{
Pattern: pattern,
BackgroundColor: "C0C0C0",
ForegroundColor: "000000",
}
err = table.SetCellShading(i, 1, shadingConfig)
if err != nil {
t.Fatalf("设置单元格背景失败: %v", err)
}
}
t.Log("底纹图案测试完成")
}