mirror of
https://github.com/ZeroHawkeye/wordZero.git
synced 2025-10-05 07:47:00 +08:00
289 lines
7.8 KiB
Go
289 lines
7.8 KiB
Go
// Package test 页面设置功能集成测试
|
||
package test
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
"testing"
|
||
|
||
"github.com/ZeroHawkeye/wordZero/pkg/document"
|
||
)
|
||
|
||
// TestPageSettingsIntegration 页面设置功能集成测试
|
||
func TestPageSettingsIntegration(t *testing.T) {
|
||
// 创建测试文档
|
||
doc := document.New()
|
||
|
||
// 测试基本页面设置
|
||
t.Run("基本页面设置", func(t *testing.T) {
|
||
testBasicPageSettings(t, doc)
|
||
})
|
||
|
||
// 测试页面尺寸设置
|
||
t.Run("页面尺寸设置", func(t *testing.T) {
|
||
testPageSizes(t, doc)
|
||
})
|
||
|
||
// 测试页面方向设置
|
||
t.Run("页面方向设置", func(t *testing.T) {
|
||
testPageOrientation(t, doc)
|
||
})
|
||
|
||
// 测试页面边距设置
|
||
t.Run("页面边距设置", func(t *testing.T) {
|
||
testPageMargins(t, doc)
|
||
})
|
||
|
||
// 测试自定义页面尺寸
|
||
t.Run("自定义页面尺寸", func(t *testing.T) {
|
||
testCustomPageSize(t, doc)
|
||
})
|
||
|
||
// 测试完整文档保存和加载
|
||
t.Run("文档保存和加载", func(t *testing.T) {
|
||
testDocumentSaveLoad(t, doc)
|
||
})
|
||
}
|
||
|
||
// testBasicPageSettings 测试基本页面设置
|
||
func testBasicPageSettings(t *testing.T, doc *document.Document) {
|
||
// 获取默认设置
|
||
settings := doc.GetPageSettings()
|
||
|
||
if settings.Size != document.PageSizeA4 {
|
||
t.Errorf("默认页面尺寸应为A4,实际为: %s", settings.Size)
|
||
}
|
||
|
||
if settings.Orientation != document.OrientationPortrait {
|
||
t.Errorf("默认页面方向应为纵向,实际为: %s", settings.Orientation)
|
||
}
|
||
|
||
// 添加测试内容
|
||
doc.AddParagraph("页面设置集成测试 - 基本设置")
|
||
}
|
||
|
||
// testPageSizes 测试页面尺寸设置
|
||
func testPageSizes(t *testing.T, doc *document.Document) {
|
||
// 测试各种预定义尺寸
|
||
sizes := []document.PageSize{
|
||
document.PageSizeLetter,
|
||
document.PageSizeLegal,
|
||
document.PageSizeA3,
|
||
document.PageSizeA5,
|
||
document.PageSizeA4, // 恢复到A4
|
||
}
|
||
|
||
for _, size := range sizes {
|
||
err := doc.SetPageSize(size)
|
||
if err != nil {
|
||
t.Errorf("设置页面尺寸 %s 失败: %v", size, err)
|
||
continue
|
||
}
|
||
|
||
settings := doc.GetPageSettings()
|
||
if settings.Size != size {
|
||
t.Errorf("页面尺寸设置不正确,期望: %s, 实际: %s", size, settings.Size)
|
||
}
|
||
|
||
// 添加测试内容
|
||
doc.AddParagraph(fmt.Sprintf("页面尺寸已设置为: %s", size))
|
||
}
|
||
}
|
||
|
||
// testPageOrientation 测试页面方向设置
|
||
func testPageOrientation(t *testing.T, doc *document.Document) {
|
||
// 测试横向
|
||
err := doc.SetPageOrientation(document.OrientationLandscape)
|
||
if err != nil {
|
||
t.Errorf("设置横向页面失败: %v", err)
|
||
return
|
||
}
|
||
|
||
settings := doc.GetPageSettings()
|
||
if settings.Orientation != document.OrientationLandscape {
|
||
t.Errorf("页面方向应为横向,实际为: %s", settings.Orientation)
|
||
}
|
||
|
||
doc.AddParagraph("页面方向已设置为横向")
|
||
|
||
// 恢复纵向
|
||
err = doc.SetPageOrientation(document.OrientationPortrait)
|
||
if err != nil {
|
||
t.Errorf("设置纵向页面失败: %v", err)
|
||
return
|
||
}
|
||
|
||
settings = doc.GetPageSettings()
|
||
if settings.Orientation != document.OrientationPortrait {
|
||
t.Errorf("页面方向应为纵向,实际为: %s", settings.Orientation)
|
||
}
|
||
|
||
doc.AddParagraph("页面方向已恢复为纵向")
|
||
}
|
||
|
||
// testPageMargins 测试页面边距设置
|
||
func testPageMargins(t *testing.T, doc *document.Document) {
|
||
// 测试自定义边距
|
||
top, right, bottom, left := 30.0, 20.0, 25.0, 35.0
|
||
err := doc.SetPageMargins(top, right, bottom, left)
|
||
if err != nil {
|
||
t.Errorf("设置页面边距失败: %v", err)
|
||
return
|
||
}
|
||
|
||
settings := doc.GetPageSettings()
|
||
if abs(settings.MarginTop-top) > 0.1 {
|
||
t.Errorf("上边距不匹配,期望: %.1fmm, 实际: %.1fmm", top, settings.MarginTop)
|
||
}
|
||
if abs(settings.MarginRight-right) > 0.1 {
|
||
t.Errorf("右边距不匹配,期望: %.1fmm, 实际: %.1fmm", right, settings.MarginRight)
|
||
}
|
||
if abs(settings.MarginBottom-bottom) > 0.1 {
|
||
t.Errorf("下边距不匹配,期望: %.1fmm, 实际: %.1fmm", bottom, settings.MarginBottom)
|
||
}
|
||
if abs(settings.MarginLeft-left) > 0.1 {
|
||
t.Errorf("左边距不匹配,期望: %.1fmm, 实际: %.1fmm", left, settings.MarginLeft)
|
||
}
|
||
|
||
doc.AddParagraph("页面边距已设置为自定义值")
|
||
|
||
// 测试页眉页脚距离
|
||
header, footer := 15.0, 20.0
|
||
err = doc.SetHeaderFooterDistance(header, footer)
|
||
if err != nil {
|
||
t.Errorf("设置页眉页脚距离失败: %v", err)
|
||
return
|
||
}
|
||
|
||
settings = doc.GetPageSettings()
|
||
if abs(settings.HeaderDistance-header) > 0.1 {
|
||
t.Errorf("页眉距离不匹配,期望: %.1fmm, 实际: %.1fmm", header, settings.HeaderDistance)
|
||
}
|
||
if abs(settings.FooterDistance-footer) > 0.1 {
|
||
t.Errorf("页脚距离不匹配,期望: %.1fmm, 实际: %.1fmm", footer, settings.FooterDistance)
|
||
}
|
||
|
||
// 测试装订线
|
||
gutter := 8.0
|
||
err = doc.SetGutterWidth(gutter)
|
||
if err != nil {
|
||
t.Errorf("设置装订线宽度失败: %v", err)
|
||
return
|
||
}
|
||
|
||
settings = doc.GetPageSettings()
|
||
if abs(settings.GutterWidth-gutter) > 0.1 {
|
||
t.Errorf("装订线宽度不匹配,期望: %.1fmm, 实际: %.1fmm", gutter, settings.GutterWidth)
|
||
}
|
||
|
||
doc.AddParagraph("页眉页脚距离和装订线已设置")
|
||
}
|
||
|
||
// testCustomPageSize 测试自定义页面尺寸
|
||
func testCustomPageSize(t *testing.T, doc *document.Document) {
|
||
// 测试自定义尺寸
|
||
width, height := 200.0, 250.0
|
||
err := doc.SetCustomPageSize(width, height)
|
||
if err != nil {
|
||
t.Errorf("设置自定义页面尺寸失败: %v", err)
|
||
return
|
||
}
|
||
|
||
settings := doc.GetPageSettings()
|
||
if settings.Size != document.PageSizeCustom {
|
||
t.Errorf("页面尺寸应为Custom,实际为: %s", settings.Size)
|
||
}
|
||
if abs(settings.CustomWidth-width) > 0.1 {
|
||
t.Errorf("自定义宽度不匹配,期望: %.1fmm, 实际: %.1fmm", width, settings.CustomWidth)
|
||
}
|
||
if abs(settings.CustomHeight-height) > 0.1 {
|
||
t.Errorf("自定义高度不匹配,期望: %.1fmm, 实际: %.1fmm", height, settings.CustomHeight)
|
||
}
|
||
|
||
doc.AddParagraph("页面已设置为自定义尺寸")
|
||
|
||
// 恢复到A4
|
||
err = doc.SetPageSize(document.PageSizeA4)
|
||
if err != nil {
|
||
t.Errorf("恢复A4页面尺寸失败: %v", err)
|
||
}
|
||
}
|
||
|
||
// testDocumentSaveLoad 测试文档保存和加载
|
||
func testDocumentSaveLoad(t *testing.T, doc *document.Document) {
|
||
// 设置一个完整的页面配置
|
||
settings := &document.PageSettings{
|
||
Size: document.PageSizeLetter,
|
||
Orientation: document.OrientationLandscape,
|
||
MarginTop: 25,
|
||
MarginRight: 20,
|
||
MarginBottom: 30,
|
||
MarginLeft: 25,
|
||
HeaderDistance: 12,
|
||
FooterDistance: 15,
|
||
GutterWidth: 5,
|
||
}
|
||
|
||
err := doc.SetPageSettings(settings)
|
||
if err != nil {
|
||
t.Errorf("设置完整页面配置失败: %v", err)
|
||
return
|
||
}
|
||
|
||
// 添加最终测试内容
|
||
doc.AddParagraph("页面设置集成测试完成 - 最终配置")
|
||
doc.AddParagraph("文档将以Letter横向格式保存")
|
||
|
||
// 保存文档
|
||
testFile := filepath.Join("testdata", "page_settings_integration_test.docx")
|
||
|
||
// 确保测试目录存在
|
||
err = os.MkdirAll(filepath.Dir(testFile), 0755)
|
||
if err != nil {
|
||
t.Errorf("创建测试目录失败: %v", err)
|
||
return
|
||
}
|
||
|
||
err = doc.Save(testFile)
|
||
if err != nil {
|
||
t.Errorf("保存测试文档失败: %v", err)
|
||
return
|
||
}
|
||
|
||
// 验证文件存在
|
||
if _, err := os.Stat(testFile); os.IsNotExist(err) {
|
||
t.Errorf("保存的文档文件不存在: %s", testFile)
|
||
return
|
||
}
|
||
|
||
// 重新打开文档验证页面设置
|
||
loadedDoc, err := document.Open(testFile)
|
||
if err != nil {
|
||
t.Errorf("重新打开文档失败: %v", err)
|
||
return
|
||
}
|
||
|
||
loadedSettings := loadedDoc.GetPageSettings()
|
||
|
||
// 验证关键设置是否保持
|
||
if loadedSettings.Size != settings.Size {
|
||
t.Errorf("加载后页面尺寸不匹配,期望: %s, 实际: %s", settings.Size, loadedSettings.Size)
|
||
}
|
||
|
||
if loadedSettings.Orientation != settings.Orientation {
|
||
t.Errorf("加载后页面方向不匹配,期望: %s, 实际: %s", settings.Orientation, loadedSettings.Orientation)
|
||
}
|
||
|
||
// 清理测试文件
|
||
os.Remove(testFile)
|
||
}
|
||
|
||
// abs 返回浮点数的绝对值
|
||
func abs(x float64) float64 {
|
||
if x < 0 {
|
||
return -x
|
||
}
|
||
return x
|
||
}
|