package xlsx
import (
"bytes"
"os"
"testing"
"xml"
)
// Test we can correctly open a XSLX file and return a xlsx.File
// struct.
func TestOpenFile(t *testing.T) {
var xlsxFile *File
var error os.Error
xlsxFile, error = OpenFile("testfile.xlsx")
if error != nil {
t.Error(error.String())
return
}
if xlsxFile == nil {
t.Error("OpenFile returned nil FileInterface without generating an os.Error")
return
}
}
// Test that when we open a real XLSX file we create xlsx.Sheet
// objects for the sheets inside the file and that these sheets are
// themselves correct.
func TestCreateSheet(t *testing.T) {
var xlsxFile *File
var error os.Error
var sheet *Sheet
var row *Row
xlsxFile, error = OpenFile("testfile.xlsx")
if error != nil {
t.Error(error.String())
return
}
if xlsxFile == nil {
t.Error("OpenFile returned a nil File pointer but did not generate an error.")
return
}
if len(xlsxFile.Sheets) == 0 {
t.Error("Expected len(xlsxFile.Sheets) > 0")
return
}
sheet = xlsxFile.Sheets[0]
if len(sheet.Rows) != 2 {
t.Error("Expected len(sheet.Rows) == 2")
return
}
row = sheet.Rows[0]
if len(row.Cells) != 2 {
t.Error("Expected len(row.Cells) == 2")
return
}
}
// Test that we can correctly extract a reference table from the
// sharedStrings.xml file embedded in the XLSX file and return a
// reference table of string values from it.
func TestReadSharedStringsFromZipFile(t *testing.T) {
var xlsxFile *File
var error os.Error
xlsxFile, error = OpenFile("testfile.xlsx")
if error != nil {
t.Error(error.String())
return
}
if xlsxFile.referenceTable == nil {
t.Error("expected non nil xlsxFile.referenceTable")
return
}
}
func TestReadRowsFromSheet(t *testing.T) {
var sharedstringsXML = bytes.NewBufferString(`
Foo
Bar
Baz
Quuk
`)
var sheetxml = bytes.NewBufferString(`
0
1
2
3
`)
worksheet := new(XLSXWorksheet)
error := xml.Unmarshal(sheetxml, worksheet)
if error != nil {
t.Error(error.String())
return
}
sst := new(XLSXSST)
error = xml.Unmarshal(sharedstringsXML, sst)
if error != nil {
t.Error(error.String())
return
}
reftable := MakeSharedStringRefTable(sst)
rows := readRowsFromSheet(worksheet, reftable)
if len(rows) != 2 {
t.Error("Expected len(rows) == 2")
}
}