sharedstrings_test.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package xlsx
  2. import (
  3. "bytes"
  4. "encoding/xml"
  5. . "gopkg.in/check.v1"
  6. )
  7. type SharedStringsSuite struct {
  8. SharedStringsXML *bytes.Buffer
  9. }
  10. var _ = Suite(&SharedStringsSuite{})
  11. func (s *SharedStringsSuite) SetUpTest(c *C) {
  12. s.SharedStringsXML = bytes.NewBufferString(
  13. `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  14. <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
  15. count="4"
  16. uniqueCount="4">
  17. <si>
  18. <t>Foo</t>
  19. </si>
  20. <si>
  21. <t>Bar</t>
  22. </si>
  23. <si>
  24. <t xml:space="preserve">Baz </t>
  25. </si>
  26. <si>
  27. <t>Quuk</t>
  28. </si>
  29. </sst>`)
  30. }
  31. func (s *SharedStringsSuite) TestCreateNewSharedStringRefTable(c *C) {
  32. refTable := NewSharedStringRefTable()
  33. refTable = append(refTable, "Foo")
  34. refTable = append(refTable, "Bar")
  35. c.Assert(refTable.ResolveSharedString(0), Equals, "Foo")
  36. c.Assert(refTable.ResolveSharedString(1), Equals, "Bar")
  37. }
  38. // Test we can correctly convert a xlsxSST into a reference table
  39. // using xlsx.MakeSharedStringRefTable().
  40. func (s *SharedStringsSuite) TestMakeSharedStringRefTable(c *C) {
  41. sst := new(xlsxSST)
  42. err := xml.NewDecoder(s.SharedStringsXML).Decode(sst)
  43. c.Assert(err, IsNil)
  44. reftable := MakeSharedStringRefTable(sst)
  45. c.Assert(len(reftable), Equals, 4)
  46. c.Assert(reftable[0], Equals, "Foo")
  47. c.Assert(reftable[1], Equals, "Bar")
  48. }
  49. // Test we can correctly resolve a numeric reference in the reference
  50. // table to a string value using RefTable.ResolveSharedString().
  51. func (s *SharedStringsSuite) TestResolveSharedString(c *C) {
  52. sst := new(xlsxSST)
  53. err := xml.NewDecoder(s.SharedStringsXML).Decode(sst)
  54. c.Assert(err, IsNil)
  55. reftable := MakeSharedStringRefTable(sst)
  56. c.Assert(reftable.ResolveSharedString(0), Equals, "Foo")
  57. }
  58. // Test we can correctly unmarshal an the sharedstrings.xml file into
  59. // an xlsx.xlsxSST struct and it's associated children.
  60. func (s *SharedStringsSuite) TestUnmarshallSharedStrings(c *C) {
  61. sst := new(xlsxSST)
  62. err := xml.NewDecoder(s.SharedStringsXML).Decode(sst)
  63. c.Assert(err, IsNil)
  64. c.Assert(sst.Count, Equals, 4)
  65. c.Assert(sst.UniqueCount, Equals, 4)
  66. c.Assert(sst.SI, HasLen, 4)
  67. si := sst.SI[0]
  68. c.Assert(si.T, Equals, "Foo")
  69. }
  70. // Test we can correctly create the xlsx.xlsxSST struct from a RefTable
  71. func (s *SharedStringsSuite) TestMakeXlsxSST(c *C) {
  72. refTable := NewSharedStringRefTable()
  73. refTable = append(refTable, "Foo")
  74. refTable = append(refTable, "Bar")
  75. sst := refTable.makeXlsxSST()
  76. c.Assert(sst, NotNil)
  77. c.Assert(sst.Count, Equals, 2)
  78. c.Assert(sst.UniqueCount, Equals, 2)
  79. c.Assert(sst.SI, HasLen, 2)
  80. si := sst.SI[0]
  81. c.Assert(si.T, Equals, "Foo")
  82. }