lib_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package xlsx
  2. import (
  3. "bytes"
  4. "os"
  5. "testing"
  6. "xml"
  7. )
  8. // Test we can correctly open a XSLX file and return a xlsx.File
  9. // struct.
  10. func TestOpenFile(t *testing.T) {
  11. var xlsxFile *File
  12. var error os.Error
  13. xlsxFile, error = OpenFile("testfile.xlsx")
  14. if error != nil {
  15. t.Error(error.String())
  16. return
  17. }
  18. if xlsxFile == nil {
  19. t.Error("OpenFile returned nil FileInterface without generating an os.Error")
  20. return
  21. }
  22. }
  23. // Test that when we open a real XLSX file we create xlsx.Sheet
  24. // objects for the sheets inside the file and that these sheets are
  25. // themselves correct.
  26. func TestCreateSheet(t *testing.T) {
  27. var xlsxFile *File
  28. var error os.Error
  29. var sheet *Sheet
  30. var row *Row
  31. xlsxFile, error = OpenFile("testfile.xlsx")
  32. if error != nil {
  33. t.Error(error.String())
  34. return
  35. }
  36. if xlsxFile == nil {
  37. t.Error("OpenFile returned a nil File pointer but did not generate an error.")
  38. return
  39. }
  40. if len(xlsxFile.Sheets) == 0 {
  41. t.Error("Expected len(xlsxFile.Sheets) > 0")
  42. return
  43. }
  44. sheet = xlsxFile.Sheets[0]
  45. if len(sheet.Rows) != 2 {
  46. t.Error("Expected len(sheet.Rows) == 2")
  47. return
  48. }
  49. row = sheet.Rows[0]
  50. if len(row.Cells) != 2 {
  51. t.Error("Expected len(row.Cells) == 2")
  52. return
  53. }
  54. }
  55. // Test that we can correctly extract a reference table from the
  56. // sharedStrings.xml file embedded in the XLSX file and return a
  57. // reference table of string values from it.
  58. func TestReadSharedStringsFromZipFile(t *testing.T) {
  59. var xlsxFile *File
  60. var error os.Error
  61. xlsxFile, error = OpenFile("testfile.xlsx")
  62. if error != nil {
  63. t.Error(error.String())
  64. return
  65. }
  66. if xlsxFile.referenceTable == nil {
  67. t.Error("expected non nil xlsxFile.referenceTable")
  68. return
  69. }
  70. }
  71. func TestReadRowsFromSheet(t *testing.T) {
  72. var sharedstringsXML = bytes.NewBufferString(`
  73. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  74. <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="4" uniqueCount="4">
  75. <si>
  76. <t>Foo</t>
  77. </si>
  78. <si>
  79. <t>Bar</t>
  80. </si>
  81. <si>
  82. <t xml:space="preserve">Baz </t>
  83. </si>
  84. <si>
  85. <t>Quuk</t>
  86. </si>
  87. </sst>`)
  88. var sheetxml = bytes.NewBufferString(`
  89. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  90. <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
  91. xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  92. <dimension ref="A1:B2"/>
  93. <sheetViews>
  94. <sheetView tabSelected="1" workbookViewId="0">
  95. <selection activeCell="C2" sqref="C2"/>
  96. </sheetView>
  97. </sheetViews>
  98. <sheetFormatPr baseColWidth="10" defaultRowHeight="15"/>
  99. <sheetData>
  100. <row r="1" spans="1:2">
  101. <c r="A1" t="s">
  102. <v>0</v>
  103. </c>
  104. <c r="B1" t="s">
  105. <v>1</v>
  106. </c>
  107. </row>
  108. <row r="2" spans="1:2">
  109. <c r="A2" t="s">
  110. <v>2</v>
  111. </c>
  112. <c r="B2" t="s">
  113. <v>3</v>
  114. </c>
  115. </row>
  116. </sheetData>
  117. <pageMargins left="0.7" right="0.7"
  118. top="0.78740157499999996"
  119. bottom="0.78740157499999996"
  120. header="0.3"
  121. footer="0.3"/>
  122. </worksheet>`)
  123. worksheet := new(XLSXWorksheet)
  124. error := xml.Unmarshal(sheetxml, worksheet)
  125. if error != nil {
  126. t.Error(error.String())
  127. return
  128. }
  129. sst := new(XLSXSST)
  130. error = xml.Unmarshal(sharedstringsXML, sst)
  131. if error != nil {
  132. t.Error(error.String())
  133. return
  134. }
  135. reftable := MakeSharedStringRefTable(sst)
  136. rows := readRowsFromSheet(worksheet, reftable)
  137. if len(rows) != 2 {
  138. t.Error("Expected len(rows) == 2")
  139. }
  140. }