summaryrefslogtreecommitdiff
path: root/sheet_test.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2022-09-29 22:00:21 +0800
committerxuri <xuri.me@gmail.com>2022-09-29 22:04:50 +0800
commit53a495563a2b9acf09ae45eae05d5f33aa242a87 (patch)
tree36ae707b1e38e755063aec7c13e878126a128c84 /sheet_test.go
parentefcf599dfe2ec25f10c4d55513a5648addfe989b (diff)
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes: Motivation and Context When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was: - There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure. - Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories - Nested properties cannot proceed modify easily Introduce 5 new export data types: `HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions` Rename 4 exported data types: - Rename `PivotTableOption` to `PivotTableOptions` - Rename `FormatHeaderFooter` to `HeaderFooterOptions` - Rename `FormatSheetProtection` to `SheetProtectionOptions` - Rename `SparklineOption` to `SparklineOptions` Remove 54 exported types: `AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale` Remove 2 exported constants: `OrientationPortrait` and `OrientationLandscape` Change 8 functions: - Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error` - Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)` - Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error` - Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)` - Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error` - Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)` - Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error` - Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)` Introduce new function to instead of existing functions: - New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
Diffstat (limited to 'sheet_test.go')
-rw-r--r--sheet_test.go159
1 files changed, 23 insertions, 136 deletions
diff --git a/sheet_test.go b/sheet_test.go
index 87c36d4..74ca02c 100644
--- a/sheet_test.go
+++ b/sheet_test.go
@@ -8,78 +8,9 @@ import (
"strings"
"testing"
- "github.com/mohae/deepcopy"
"github.com/stretchr/testify/assert"
)
-func ExampleFile_SetPageLayout() {
- f := NewFile()
- if err := f.SetPageLayout(
- "Sheet1",
- BlackAndWhite(true),
- FirstPageNumber(2),
- PageLayoutOrientation(OrientationLandscape),
- PageLayoutPaperSize(10),
- FitToHeight(2),
- FitToWidth(2),
- PageLayoutScale(50),
- ); err != nil {
- fmt.Println(err)
- }
- // Output:
-}
-
-func ExampleFile_GetPageLayout() {
- f := NewFile()
- var (
- blackAndWhite BlackAndWhite
- firstPageNumber FirstPageNumber
- orientation PageLayoutOrientation
- paperSize PageLayoutPaperSize
- fitToHeight FitToHeight
- fitToWidth FitToWidth
- scale PageLayoutScale
- )
- if err := f.GetPageLayout("Sheet1", &blackAndWhite); err != nil {
- fmt.Println(err)
- }
- if err := f.GetPageLayout("Sheet1", &firstPageNumber); err != nil {
- fmt.Println(err)
- }
- if err := f.GetPageLayout("Sheet1", &orientation); err != nil {
- fmt.Println(err)
- }
- if err := f.GetPageLayout("Sheet1", &paperSize); err != nil {
- fmt.Println(err)
- }
- if err := f.GetPageLayout("Sheet1", &fitToHeight); err != nil {
- fmt.Println(err)
- }
- if err := f.GetPageLayout("Sheet1", &fitToWidth); err != nil {
- fmt.Println(err)
- }
- if err := f.GetPageLayout("Sheet1", &scale); err != nil {
- fmt.Println(err)
- }
- fmt.Println("Defaults:")
- fmt.Printf("- print black and white: %t\n", blackAndWhite)
- fmt.Printf("- page number for first printed page: %d\n", firstPageNumber)
- fmt.Printf("- orientation: %q\n", orientation)
- fmt.Printf("- paper size: %d\n", paperSize)
- fmt.Printf("- fit to height: %d\n", fitToHeight)
- fmt.Printf("- fit to width: %d\n", fitToWidth)
- fmt.Printf("- scale: %d\n", scale)
- // Output:
- // Defaults:
- // - print black and white: false
- // - page number for first printed page: 1
- // - orientation: "portrait"
- // - paper size: 1
- // - fit to height: 1
- // - fit to width: 1
- // - scale: 100
-}
-
func TestNewSheet(t *testing.T) {
f := NewFile()
f.NewSheet("Sheet2")
@@ -114,68 +45,6 @@ func TestSetPane(t *testing.T) {
assert.NoError(t, f.SetPanes("Sheet1", `{"freeze":true,"split":false,"x_split":1,"y_split":0,"top_left_cell":"B1","active_pane":"topRight","panes":[{"sqref":"K16","active_cell":"K16","pane":"topRight"}]}`))
}
-func TestPageLayoutOption(t *testing.T) {
- const sheet = "Sheet1"
-
- testData := []struct {
- container PageLayoutOptionPtr
- nonDefault PageLayoutOption
- }{
- {new(BlackAndWhite), BlackAndWhite(true)},
- {new(FirstPageNumber), FirstPageNumber(2)},
- {new(PageLayoutOrientation), PageLayoutOrientation(OrientationLandscape)},
- {new(PageLayoutPaperSize), PageLayoutPaperSize(10)},
- {new(FitToHeight), FitToHeight(2)},
- {new(FitToWidth), FitToWidth(2)},
- {new(PageLayoutScale), PageLayoutScale(50)},
- }
-
- for i, test := range testData {
- t.Run(fmt.Sprintf("TestData%d", i), func(t *testing.T) {
- opts := test.nonDefault
- t.Logf("option %T", opts)
-
- def := deepcopy.Copy(test.container).(PageLayoutOptionPtr)
- val1 := deepcopy.Copy(def).(PageLayoutOptionPtr)
- val2 := deepcopy.Copy(def).(PageLayoutOptionPtr)
-
- f := NewFile()
- // Get the default value
- assert.NoError(t, f.GetPageLayout(sheet, def), opts)
- // Get again and check
- assert.NoError(t, f.GetPageLayout(sheet, val1), opts)
- if !assert.Equal(t, val1, def, opts) {
- t.FailNow()
- }
- // Set the same value
- assert.NoError(t, f.SetPageLayout(sheet, val1), opts)
- // Get again and check
- assert.NoError(t, f.GetPageLayout(sheet, val1), opts)
- if !assert.Equal(t, val1, def, "%T: value should not have changed", opts) {
- t.FailNow()
- }
- // Set a different value
- assert.NoError(t, f.SetPageLayout(sheet, test.nonDefault), opts)
- assert.NoError(t, f.GetPageLayout(sheet, val1), opts)
- // Get again and compare
- assert.NoError(t, f.GetPageLayout(sheet, val2), opts)
- if !assert.Equal(t, val1, val2, "%T: value should not have changed", opts) {
- t.FailNow()
- }
- // Value should not be the same as the default
- if !assert.NotEqual(t, def, val1, "%T: value should have changed from default", opts) {
- t.FailNow()
- }
- // Restore the default value
- assert.NoError(t, f.SetPageLayout(sheet, def), opts)
- assert.NoError(t, f.GetPageLayout(sheet, val1), opts)
- if !assert.Equal(t, def, val1) {
- t.FailNow()
- }
- })
- }
-}
-
func TestSearchSheet(t *testing.T) {
f, err := OpenFile(filepath.Join("test", "SharedStrings.xlsx"))
if !assert.NoError(t, err) {
@@ -226,14 +95,32 @@ func TestSearchSheet(t *testing.T) {
func TestSetPageLayout(t *testing.T) {
f := NewFile()
+ assert.NoError(t, f.SetPageLayout("Sheet1", nil))
+ ws, ok := f.Sheet.Load("xl/worksheets/sheet1.xml")
+ assert.True(t, ok)
+ ws.(*xlsxWorksheet).PageSetUp = nil
+ expected := PageLayoutOptions{
+ Size: intPtr(1),
+ Orientation: stringPtr("landscape"),
+ FirstPageNumber: uintPtr(1),
+ AdjustTo: uintPtr(120),
+ FitToHeight: intPtr(2),
+ FitToWidth: intPtr(2),
+ BlackAndWhite: boolPtr(true),
+ }
+ assert.NoError(t, f.SetPageLayout("Sheet1", &expected))
+ opts, err := f.GetPageLayout("Sheet1")
+ assert.NoError(t, err)
+ assert.Equal(t, expected, opts)
// Test set page layout on not exists worksheet.
- assert.EqualError(t, f.SetPageLayout("SheetN"), "sheet SheetN does not exist")
+ assert.EqualError(t, f.SetPageLayout("SheetN", nil), "sheet SheetN does not exist")
}
func TestGetPageLayout(t *testing.T) {
f := NewFile()
// Test get page layout on not exists worksheet.
- assert.EqualError(t, f.GetPageLayout("SheetN"), "sheet SheetN does not exist")
+ _, err := f.GetPageLayout("SheetN")
+ assert.EqualError(t, err, "sheet SheetN does not exist")
}
func TestSetHeaderFooter(t *testing.T) {
@@ -242,20 +129,20 @@ func TestSetHeaderFooter(t *testing.T) {
// Test set header and footer on not exists worksheet.
assert.EqualError(t, f.SetHeaderFooter("SheetN", nil), "sheet SheetN does not exist")
// Test set header and footer with illegal setting.
- assert.EqualError(t, f.SetHeaderFooter("Sheet1", &FormatHeaderFooter{
+ assert.EqualError(t, f.SetHeaderFooter("Sheet1", &HeaderFooterOptions{
OddHeader: strings.Repeat("c", MaxFieldLength+1),
}), newFieldLengthError("OddHeader").Error())
assert.NoError(t, f.SetHeaderFooter("Sheet1", nil))
text := strings.Repeat("δΈ€", MaxFieldLength)
- assert.NoError(t, f.SetHeaderFooter("Sheet1", &FormatHeaderFooter{
+ assert.NoError(t, f.SetHeaderFooter("Sheet1", &HeaderFooterOptions{
OddHeader: text,
OddFooter: text,
EvenHeader: text,
EvenFooter: text,
FirstHeader: text,
}))
- assert.NoError(t, f.SetHeaderFooter("Sheet1", &FormatHeaderFooter{
+ assert.NoError(t, f.SetHeaderFooter("Sheet1", &HeaderFooterOptions{
DifferentFirst: true,
DifferentOddEven: true,
OddHeader: "&R&P",