From 53a495563a2b9acf09ae45eae05d5f33aa242a87 Mon Sep 17 00:00:00 2001 From: xuri Date: Thu, 29 Sep 2022 22:00:21 +0800 Subject: 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 --- sheetview_test.go | 242 +++++++++--------------------------------------------- 1 file changed, 37 insertions(+), 205 deletions(-) (limited to 'sheetview_test.go') diff --git a/sheetview_test.go b/sheetview_test.go index 65c4f51..8d022a2 100644 --- a/sheetview_test.go +++ b/sheetview_test.go @@ -1,218 +1,50 @@ package excelize import ( - "fmt" "testing" "github.com/stretchr/testify/assert" ) -var _ = []SheetViewOption{ - DefaultGridColor(true), - ShowFormulas(false), - ShowGridLines(true), - ShowRowColHeaders(true), - ShowZeros(true), - RightToLeft(false), - ShowRuler(false), - View("pageLayout"), - TopLeftCell("B2"), - ZoomScale(100), - // SheetViewOptionPtr are also SheetViewOption - new(DefaultGridColor), - new(ShowFormulas), - new(ShowGridLines), - new(ShowRowColHeaders), - new(ShowZeros), - new(RightToLeft), - new(ShowRuler), - new(View), - new(TopLeftCell), - new(ZoomScale), -} - -var _ = []SheetViewOptionPtr{ - (*DefaultGridColor)(nil), - (*ShowFormulas)(nil), - (*ShowGridLines)(nil), - (*ShowRowColHeaders)(nil), - (*ShowZeros)(nil), - (*RightToLeft)(nil), - (*ShowRuler)(nil), - (*View)(nil), - (*TopLeftCell)(nil), - (*ZoomScale)(nil), -} - -func ExampleFile_SetSheetViewOptions() { - f := NewFile() - const sheet = "Sheet1" - - if err := f.SetSheetViewOptions(sheet, 0, - DefaultGridColor(false), - ShowFormulas(true), - ShowGridLines(true), - ShowRowColHeaders(true), - RightToLeft(false), - ShowRuler(false), - View("pageLayout"), - TopLeftCell("C3"), - ZoomScale(80), - ); err != nil { - fmt.Println(err) - } - - var zoomScale ZoomScale - fmt.Println("Default:") - fmt.Println("- zoomScale: 80") - - if err := f.SetSheetViewOptions(sheet, 0, ZoomScale(500)); err != nil { - fmt.Println(err) - } - - if err := f.GetSheetViewOptions(sheet, 0, &zoomScale); err != nil { - fmt.Println(err) - } - - fmt.Println("Used out of range value:") - fmt.Println("- zoomScale:", zoomScale) - - if err := f.SetSheetViewOptions(sheet, 0, ZoomScale(123)); err != nil { - fmt.Println(err) - } - - if err := f.GetSheetViewOptions(sheet, 0, &zoomScale); err != nil { - fmt.Println(err) - } - - fmt.Println("Used correct value:") - fmt.Println("- zoomScale:", zoomScale) - - // Output: - // Default: - // - zoomScale: 80 - // Used out of range value: - // - zoomScale: 80 - // Used correct value: - // - zoomScale: 123 -} - -func ExampleFile_GetSheetViewOptions() { +func TestSetView(t *testing.T) { f := NewFile() - const sheet = "Sheet1" - - var ( - defaultGridColor DefaultGridColor - showFormulas ShowFormulas - showGridLines ShowGridLines - showRowColHeaders ShowRowColHeaders - showZeros ShowZeros - rightToLeft RightToLeft - showRuler ShowRuler - view View - topLeftCell TopLeftCell - zoomScale ZoomScale - ) - - if err := f.GetSheetViewOptions(sheet, 0, - &defaultGridColor, - &showFormulas, - &showGridLines, - &showRowColHeaders, - &showZeros, - &rightToLeft, - &showRuler, - &view, - &topLeftCell, - &zoomScale, - ); err != nil { - fmt.Println(err) - } - - fmt.Println("Default:") - fmt.Println("- defaultGridColor:", defaultGridColor) - fmt.Println("- showFormulas:", showFormulas) - fmt.Println("- showGridLines:", showGridLines) - fmt.Println("- showRowColHeaders:", showRowColHeaders) - fmt.Println("- showZeros:", showZeros) - fmt.Println("- rightToLeft:", rightToLeft) - fmt.Println("- showRuler:", showRuler) - fmt.Println("- view:", view) - fmt.Println("- topLeftCell:", `"`+topLeftCell+`"`) - fmt.Println("- zoomScale:", zoomScale) - - if err := f.SetSheetViewOptions(sheet, 0, ShowGridLines(false)); err != nil { - fmt.Println(err) - } - - if err := f.GetSheetViewOptions(sheet, 0, &showGridLines); err != nil { - fmt.Println(err) - } - - if err := f.SetSheetViewOptions(sheet, 0, ShowZeros(false)); err != nil { - fmt.Println(err) - } - - if err := f.GetSheetViewOptions(sheet, 0, &showZeros); err != nil { - fmt.Println(err) - } - - if err := f.SetSheetViewOptions(sheet, 0, View("pageLayout")); err != nil { - fmt.Println(err) - } - - if err := f.GetSheetViewOptions(sheet, 0, &view); err != nil { - fmt.Println(err) - } - - if err := f.SetSheetViewOptions(sheet, 0, TopLeftCell("B2")); err != nil { - fmt.Println(err) - } - - if err := f.GetSheetViewOptions(sheet, 0, &topLeftCell); err != nil { - fmt.Println(err) - } - - fmt.Println("After change:") - fmt.Println("- showGridLines:", showGridLines) - fmt.Println("- showZeros:", showZeros) - fmt.Println("- view:", view) - fmt.Println("- topLeftCell:", topLeftCell) - - // Output: - // Default: - // - defaultGridColor: true - // - showFormulas: false - // - showGridLines: true - // - showRowColHeaders: true - // - showZeros: true - // - rightToLeft: false - // - showRuler: true - // - view: normal - // - topLeftCell: "" - // - zoomScale: 0 - // After change: - // - showGridLines: false - // - showZeros: false - // - view: pageLayout - // - topLeftCell: B2 -} - -func TestSheetViewOptionsErrors(t *testing.T) { - f := NewFile() - const sheet = "Sheet1" - - assert.NoError(t, f.GetSheetViewOptions(sheet, 0)) - assert.NoError(t, f.GetSheetViewOptions(sheet, -1)) - assert.Error(t, f.GetSheetViewOptions(sheet, 1)) - assert.Error(t, f.GetSheetViewOptions(sheet, -2)) - assert.NoError(t, f.SetSheetViewOptions(sheet, 0)) - assert.NoError(t, f.SetSheetViewOptions(sheet, -1)) - assert.Error(t, f.SetSheetViewOptions(sheet, 1)) - assert.Error(t, f.SetSheetViewOptions(sheet, -2)) - + assert.NoError(t, f.SetSheetView("Sheet1", -1, nil)) ws, ok := f.Sheet.Load("xl/worksheets/sheet1.xml") assert.True(t, ok) ws.(*xlsxWorksheet).SheetViews = nil - assert.NoError(t, f.GetSheetViewOptions(sheet, 0)) + expected := ViewOptions{ + DefaultGridColor: boolPtr(false), + RightToLeft: boolPtr(false), + ShowFormulas: boolPtr(false), + ShowGridLines: boolPtr(false), + ShowRowColHeaders: boolPtr(false), + ShowRuler: boolPtr(false), + ShowZeros: boolPtr(false), + TopLeftCell: stringPtr("A1"), + View: stringPtr("normal"), + ZoomScale: float64Ptr(120), + } + assert.NoError(t, f.SetSheetView("Sheet1", 0, &expected)) + opts, err := f.GetSheetView("Sheet1", 0) + assert.NoError(t, err) + assert.Equal(t, expected, opts) + // Test set sheet view options with invalid view index. + assert.EqualError(t, f.SetSheetView("Sheet1", 1, nil), "view index 1 out of range") + assert.EqualError(t, f.SetSheetView("Sheet1", -2, nil), "view index -2 out of range") + // Test set sheet view options on not exists worksheet. + assert.EqualError(t, f.SetSheetView("SheetN", 0, nil), "sheet SheetN does not exist") +} + +func TestGetView(t *testing.T) { + f := NewFile() + _, err := f.getSheetView("SheetN", 0) + assert.EqualError(t, err, "sheet SheetN does not exist") + // Test get sheet view options with invalid view index. + _, err = f.GetSheetView("Sheet1", 1) + assert.EqualError(t, err, "view index 1 out of range") + _, err = f.GetSheetView("Sheet1", -2) + assert.EqualError(t, err, "view index -2 out of range") + // Test get sheet view options on not exists worksheet. + _, err = f.GetSheetView("SheetN", 0) + assert.EqualError(t, err, "sheet SheetN does not exist") } -- cgit v1.2.1