sheetpr_test.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. package excelize
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/mohae/deepcopy"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. var _ = []SheetPrOption{
  9. CodeName("hello"),
  10. EnableFormatConditionsCalculation(false),
  11. Published(false),
  12. FitToPage(true),
  13. AutoPageBreaks(true),
  14. OutlineSummaryBelow(true),
  15. }
  16. var _ = []SheetPrOptionPtr{
  17. (*CodeName)(nil),
  18. (*EnableFormatConditionsCalculation)(nil),
  19. (*Published)(nil),
  20. (*FitToPage)(nil),
  21. (*AutoPageBreaks)(nil),
  22. (*OutlineSummaryBelow)(nil),
  23. }
  24. func ExampleFile_SetSheetPrOptions() {
  25. f := NewFile()
  26. const sheet = "Sheet1"
  27. if err := f.SetSheetPrOptions(sheet,
  28. CodeName("code"),
  29. EnableFormatConditionsCalculation(false),
  30. Published(false),
  31. FitToPage(true),
  32. AutoPageBreaks(true),
  33. OutlineSummaryBelow(false),
  34. ); err != nil {
  35. fmt.Println(err)
  36. }
  37. // Output:
  38. }
  39. func ExampleFile_GetSheetPrOptions() {
  40. f := NewFile()
  41. const sheet = "Sheet1"
  42. var (
  43. codeName CodeName
  44. enableFormatConditionsCalculation EnableFormatConditionsCalculation
  45. published Published
  46. fitToPage FitToPage
  47. autoPageBreaks AutoPageBreaks
  48. outlineSummaryBelow OutlineSummaryBelow
  49. )
  50. if err := f.GetSheetPrOptions(sheet,
  51. &codeName,
  52. &enableFormatConditionsCalculation,
  53. &published,
  54. &fitToPage,
  55. &autoPageBreaks,
  56. &outlineSummaryBelow,
  57. ); err != nil {
  58. fmt.Println(err)
  59. }
  60. fmt.Println("Defaults:")
  61. fmt.Printf("- codeName: %q\n", codeName)
  62. fmt.Println("- enableFormatConditionsCalculation:", enableFormatConditionsCalculation)
  63. fmt.Println("- published:", published)
  64. fmt.Println("- fitToPage:", fitToPage)
  65. fmt.Println("- autoPageBreaks:", autoPageBreaks)
  66. fmt.Println("- outlineSummaryBelow:", outlineSummaryBelow)
  67. // Output:
  68. // Defaults:
  69. // - codeName: ""
  70. // - enableFormatConditionsCalculation: true
  71. // - published: true
  72. // - fitToPage: false
  73. // - autoPageBreaks: false
  74. // - outlineSummaryBelow: true
  75. }
  76. func TestSheetPrOptions(t *testing.T) {
  77. const sheet = "Sheet1"
  78. testData := []struct {
  79. container SheetPrOptionPtr
  80. nonDefault SheetPrOption
  81. }{
  82. {new(CodeName), CodeName("xx")},
  83. {new(EnableFormatConditionsCalculation), EnableFormatConditionsCalculation(false)},
  84. {new(Published), Published(false)},
  85. {new(FitToPage), FitToPage(true)},
  86. {new(AutoPageBreaks), AutoPageBreaks(true)},
  87. {new(OutlineSummaryBelow), OutlineSummaryBelow(false)},
  88. }
  89. for i, test := range testData {
  90. t.Run(fmt.Sprintf("TestData%d", i), func(t *testing.T) {
  91. opt := test.nonDefault
  92. t.Logf("option %T", opt)
  93. def := deepcopy.Copy(test.container).(SheetPrOptionPtr)
  94. val1 := deepcopy.Copy(def).(SheetPrOptionPtr)
  95. val2 := deepcopy.Copy(def).(SheetPrOptionPtr)
  96. f := NewFile()
  97. // Get the default value
  98. assert.NoError(t, f.GetSheetPrOptions(sheet, def), opt)
  99. // Get again and check
  100. assert.NoError(t, f.GetSheetPrOptions(sheet, val1), opt)
  101. if !assert.Equal(t, val1, def, opt) {
  102. t.FailNow()
  103. }
  104. // Set the same value
  105. assert.NoError(t, f.SetSheetPrOptions(sheet, val1), opt)
  106. // Get again and check
  107. assert.NoError(t, f.GetSheetPrOptions(sheet, val1), opt)
  108. if !assert.Equal(t, val1, def, "%T: value should not have changed", opt) {
  109. t.FailNow()
  110. }
  111. // Set a different value
  112. assert.NoError(t, f.SetSheetPrOptions(sheet, test.nonDefault), opt)
  113. assert.NoError(t, f.GetSheetPrOptions(sheet, val1), opt)
  114. // Get again and compare
  115. assert.NoError(t, f.GetSheetPrOptions(sheet, val2), opt)
  116. if !assert.Equal(t, val1, val2, "%T: value should not have changed", opt) {
  117. t.FailNow()
  118. }
  119. // Value should not be the same as the default
  120. if !assert.NotEqual(t, def, val1, "%T: value should have changed from default", opt) {
  121. t.FailNow()
  122. }
  123. // Restore the default value
  124. assert.NoError(t, f.SetSheetPrOptions(sheet, def), opt)
  125. assert.NoError(t, f.GetSheetPrOptions(sheet, val1), opt)
  126. if !assert.Equal(t, def, val1) {
  127. t.FailNow()
  128. }
  129. })
  130. }
  131. }
  132. func TestSetSheetrOptions(t *testing.T) {
  133. f := NewFile()
  134. // Test SetSheetrOptions on not exists worksheet.
  135. assert.EqualError(t, f.SetSheetPrOptions("SheetN"), "sheet SheetN is not exist")
  136. }
  137. func TestGetSheetPrOptions(t *testing.T) {
  138. f := NewFile()
  139. // Test GetSheetPrOptions on not exists worksheet.
  140. assert.EqualError(t, f.GetSheetPrOptions("SheetN"), "sheet SheetN is not exist")
  141. }
  142. var _ = []PageMarginsOptions{
  143. PageMarginBottom(1.0),
  144. PageMarginFooter(1.0),
  145. PageMarginHeader(1.0),
  146. PageMarginLeft(1.0),
  147. PageMarginRight(1.0),
  148. PageMarginTop(1.0),
  149. }
  150. var _ = []PageMarginsOptionsPtr{
  151. (*PageMarginBottom)(nil),
  152. (*PageMarginFooter)(nil),
  153. (*PageMarginHeader)(nil),
  154. (*PageMarginLeft)(nil),
  155. (*PageMarginRight)(nil),
  156. (*PageMarginTop)(nil),
  157. }
  158. func ExampleFile_SetPageMargins() {
  159. f := NewFile()
  160. const sheet = "Sheet1"
  161. if err := f.SetPageMargins(sheet,
  162. PageMarginBottom(1.0),
  163. PageMarginFooter(1.0),
  164. PageMarginHeader(1.0),
  165. PageMarginLeft(1.0),
  166. PageMarginRight(1.0),
  167. PageMarginTop(1.0),
  168. ); err != nil {
  169. fmt.Println(err)
  170. }
  171. // Output:
  172. }
  173. func ExampleFile_GetPageMargins() {
  174. f := NewFile()
  175. const sheet = "Sheet1"
  176. var (
  177. marginBottom PageMarginBottom
  178. marginFooter PageMarginFooter
  179. marginHeader PageMarginHeader
  180. marginLeft PageMarginLeft
  181. marginRight PageMarginRight
  182. marginTop PageMarginTop
  183. )
  184. if err := f.GetPageMargins(sheet,
  185. &marginBottom,
  186. &marginFooter,
  187. &marginHeader,
  188. &marginLeft,
  189. &marginRight,
  190. &marginTop,
  191. ); err != nil {
  192. fmt.Println(err)
  193. }
  194. fmt.Println("Defaults:")
  195. fmt.Println("- marginBottom:", marginBottom)
  196. fmt.Println("- marginFooter:", marginFooter)
  197. fmt.Println("- marginHeader:", marginHeader)
  198. fmt.Println("- marginLeft:", marginLeft)
  199. fmt.Println("- marginRight:", marginRight)
  200. fmt.Println("- marginTop:", marginTop)
  201. // Output:
  202. // Defaults:
  203. // - marginBottom: 0.75
  204. // - marginFooter: 0.3
  205. // - marginHeader: 0.3
  206. // - marginLeft: 0.7
  207. // - marginRight: 0.7
  208. // - marginTop: 0.75
  209. }
  210. func TestPageMarginsOption(t *testing.T) {
  211. const sheet = "Sheet1"
  212. testData := []struct {
  213. container PageMarginsOptionsPtr
  214. nonDefault PageMarginsOptions
  215. }{
  216. {new(PageMarginTop), PageMarginTop(1.0)},
  217. {new(PageMarginBottom), PageMarginBottom(1.0)},
  218. {new(PageMarginLeft), PageMarginLeft(1.0)},
  219. {new(PageMarginRight), PageMarginRight(1.0)},
  220. {new(PageMarginHeader), PageMarginHeader(1.0)},
  221. {new(PageMarginFooter), PageMarginFooter(1.0)},
  222. }
  223. for i, test := range testData {
  224. t.Run(fmt.Sprintf("TestData%d", i), func(t *testing.T) {
  225. opt := test.nonDefault
  226. t.Logf("option %T", opt)
  227. def := deepcopy.Copy(test.container).(PageMarginsOptionsPtr)
  228. val1 := deepcopy.Copy(def).(PageMarginsOptionsPtr)
  229. val2 := deepcopy.Copy(def).(PageMarginsOptionsPtr)
  230. f := NewFile()
  231. // Get the default value
  232. assert.NoError(t, f.GetPageMargins(sheet, def), opt)
  233. // Get again and check
  234. assert.NoError(t, f.GetPageMargins(sheet, val1), opt)
  235. if !assert.Equal(t, val1, def, opt) {
  236. t.FailNow()
  237. }
  238. // Set the same value
  239. assert.NoError(t, f.SetPageMargins(sheet, val1), opt)
  240. // Get again and check
  241. assert.NoError(t, f.GetPageMargins(sheet, val1), opt)
  242. if !assert.Equal(t, val1, def, "%T: value should not have changed", opt) {
  243. t.FailNow()
  244. }
  245. // Set a different value
  246. assert.NoError(t, f.SetPageMargins(sheet, test.nonDefault), opt)
  247. assert.NoError(t, f.GetPageMargins(sheet, val1), opt)
  248. // Get again and compare
  249. assert.NoError(t, f.GetPageMargins(sheet, val2), opt)
  250. if !assert.Equal(t, val1, val2, "%T: value should not have changed", opt) {
  251. t.FailNow()
  252. }
  253. // Value should not be the same as the default
  254. if !assert.NotEqual(t, def, val1, "%T: value should have changed from default", opt) {
  255. t.FailNow()
  256. }
  257. // Restore the default value
  258. assert.NoError(t, f.SetPageMargins(sheet, def), opt)
  259. assert.NoError(t, f.GetPageMargins(sheet, val1), opt)
  260. if !assert.Equal(t, def, val1) {
  261. t.FailNow()
  262. }
  263. })
  264. }
  265. }
  266. func TestSetPageMargins(t *testing.T) {
  267. f := NewFile()
  268. // Test set page margins on not exists worksheet.
  269. assert.EqualError(t, f.SetPageMargins("SheetN"), "sheet SheetN is not exist")
  270. }
  271. func TestGetPageMargins(t *testing.T) {
  272. f := NewFile()
  273. // Test get page margins on not exists worksheet.
  274. assert.EqualError(t, f.GetPageMargins("SheetN"), "sheet SheetN is not exist")
  275. }
  276. func ExampleFile_SetSheetFormatPr() {
  277. f := NewFile()
  278. const sheet = "Sheet1"
  279. if err := f.SetSheetFormatPr(sheet,
  280. BaseColWidth(1.0),
  281. DefaultColWidth(1.0),
  282. DefaultRowHeight(1.0),
  283. CustomHeight(true),
  284. ZeroHeight(true),
  285. ThickTop(true),
  286. ThickBottom(true),
  287. ); err != nil {
  288. fmt.Println(err)
  289. }
  290. // Output:
  291. }
  292. func ExampleFile_GetSheetFormatPr() {
  293. f := NewFile()
  294. const sheet = "Sheet1"
  295. var (
  296. baseColWidth BaseColWidth
  297. defaultColWidth DefaultColWidth
  298. defaultRowHeight DefaultRowHeight
  299. customHeight CustomHeight
  300. zeroHeight ZeroHeight
  301. thickTop ThickTop
  302. thickBottom ThickBottom
  303. )
  304. if err := f.GetSheetFormatPr(sheet,
  305. &baseColWidth,
  306. &defaultColWidth,
  307. &defaultRowHeight,
  308. &customHeight,
  309. &zeroHeight,
  310. &thickTop,
  311. &thickBottom,
  312. ); err != nil {
  313. fmt.Println(err)
  314. }
  315. fmt.Println("Defaults:")
  316. fmt.Println("- baseColWidth:", baseColWidth)
  317. fmt.Println("- defaultColWidth:", defaultColWidth)
  318. fmt.Println("- defaultRowHeight:", defaultRowHeight)
  319. fmt.Println("- customHeight:", customHeight)
  320. fmt.Println("- zeroHeight:", zeroHeight)
  321. fmt.Println("- thickTop:", thickTop)
  322. fmt.Println("- thickBottom:", thickBottom)
  323. // Output:
  324. // Defaults:
  325. // - baseColWidth: 0
  326. // - defaultColWidth: 0
  327. // - defaultRowHeight: 15
  328. // - customHeight: false
  329. // - zeroHeight: false
  330. // - thickTop: false
  331. // - thickBottom: false
  332. }
  333. func TestSheetFormatPrOptions(t *testing.T) {
  334. const sheet = "Sheet1"
  335. testData := []struct {
  336. container SheetFormatPrOptionsPtr
  337. nonDefault SheetFormatPrOptions
  338. }{
  339. {new(BaseColWidth), BaseColWidth(1.0)},
  340. {new(DefaultColWidth), DefaultColWidth(1.0)},
  341. {new(DefaultRowHeight), DefaultRowHeight(1.0)},
  342. {new(CustomHeight), CustomHeight(true)},
  343. {new(ZeroHeight), ZeroHeight(true)},
  344. {new(ThickTop), ThickTop(true)},
  345. {new(ThickBottom), ThickBottom(true)},
  346. }
  347. for i, test := range testData {
  348. t.Run(fmt.Sprintf("TestData%d", i), func(t *testing.T) {
  349. opt := test.nonDefault
  350. t.Logf("option %T", opt)
  351. def := deepcopy.Copy(test.container).(SheetFormatPrOptionsPtr)
  352. val1 := deepcopy.Copy(def).(SheetFormatPrOptionsPtr)
  353. val2 := deepcopy.Copy(def).(SheetFormatPrOptionsPtr)
  354. f := NewFile()
  355. // Get the default value
  356. assert.NoError(t, f.GetSheetFormatPr(sheet, def), opt)
  357. // Get again and check
  358. assert.NoError(t, f.GetSheetFormatPr(sheet, val1), opt)
  359. if !assert.Equal(t, val1, def, opt) {
  360. t.FailNow()
  361. }
  362. // Set the same value
  363. assert.NoError(t, f.SetSheetFormatPr(sheet, val1), opt)
  364. // Get again and check
  365. assert.NoError(t, f.GetSheetFormatPr(sheet, val1), opt)
  366. if !assert.Equal(t, val1, def, "%T: value should not have changed", opt) {
  367. t.FailNow()
  368. }
  369. // Set a different value
  370. assert.NoError(t, f.SetSheetFormatPr(sheet, test.nonDefault), opt)
  371. assert.NoError(t, f.GetSheetFormatPr(sheet, val1), opt)
  372. // Get again and compare
  373. assert.NoError(t, f.GetSheetFormatPr(sheet, val2), opt)
  374. if !assert.Equal(t, val1, val2, "%T: value should not have changed", opt) {
  375. t.FailNow()
  376. }
  377. // Value should not be the same as the default
  378. if !assert.NotEqual(t, def, val1, "%T: value should have changed from default", opt) {
  379. t.FailNow()
  380. }
  381. // Restore the default value
  382. assert.NoError(t, f.SetSheetFormatPr(sheet, def), opt)
  383. assert.NoError(t, f.GetSheetFormatPr(sheet, val1), opt)
  384. if !assert.Equal(t, def, val1) {
  385. t.FailNow()
  386. }
  387. })
  388. }
  389. }
  390. func TestSetSheetFormatPr(t *testing.T) {
  391. f := NewFile()
  392. assert.NoError(t, f.GetSheetFormatPr("Sheet1"))
  393. f.Sheet["xl/worksheets/sheet1.xml"].SheetFormatPr = nil
  394. assert.NoError(t, f.SetSheetFormatPr("Sheet1", BaseColWidth(1.0)))
  395. // Test set formatting properties on not exists worksheet.
  396. assert.EqualError(t, f.SetSheetFormatPr("SheetN"), "sheet SheetN is not exist")
  397. }
  398. func TestGetSheetFormatPr(t *testing.T) {
  399. f := NewFile()
  400. assert.NoError(t, f.GetSheetFormatPr("Sheet1"))
  401. f.Sheet["xl/worksheets/sheet1.xml"].SheetFormatPr = nil
  402. var (
  403. baseColWidth BaseColWidth
  404. defaultColWidth DefaultColWidth
  405. defaultRowHeight DefaultRowHeight
  406. customHeight CustomHeight
  407. zeroHeight ZeroHeight
  408. thickTop ThickTop
  409. thickBottom ThickBottom
  410. )
  411. assert.NoError(t, f.GetSheetFormatPr("Sheet1",
  412. &baseColWidth,
  413. &defaultColWidth,
  414. &defaultRowHeight,
  415. &customHeight,
  416. &zeroHeight,
  417. &thickTop,
  418. &thickBottom,
  419. ))
  420. // Test get formatting properties on not exists worksheet.
  421. assert.EqualError(t, f.GetSheetFormatPr("SheetN"), "sheet SheetN is not exist")
  422. }