stream_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package excelize
  2. import (
  3. "math/rand"
  4. "path/filepath"
  5. "strings"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestStreamWriter(t *testing.T) {
  10. file := NewFile()
  11. streamWriter, err := file.NewStreamWriter("Sheet1")
  12. assert.NoError(t, err)
  13. // Test max characters in a cell.
  14. row := make([]interface{}, 1)
  15. row[0] = strings.Repeat("c", 32769)
  16. assert.NoError(t, streamWriter.SetRow("A1", &row))
  17. // Test leading and ending space(s) character characters in a cell.
  18. row = make([]interface{}, 1)
  19. row[0] = " characters"
  20. assert.NoError(t, streamWriter.SetRow("A2", &row))
  21. row = make([]interface{}, 1)
  22. row[0] = []byte("Word")
  23. assert.NoError(t, streamWriter.SetRow("A3", &row))
  24. for rowID := 10; rowID <= 51200; rowID++ {
  25. row := make([]interface{}, 50)
  26. for colID := 0; colID < 50; colID++ {
  27. row[colID] = rand.Intn(640000)
  28. }
  29. cell, _ := CoordinatesToCellName(1, rowID)
  30. assert.NoError(t, streamWriter.SetRow(cell, &row))
  31. }
  32. assert.NoError(t, streamWriter.Flush())
  33. // Save xlsx file by the given path.
  34. assert.NoError(t, file.SaveAs(filepath.Join("test", "TestStreamWriter.xlsx")))
  35. // Test error exceptions
  36. _, err = file.NewStreamWriter("SheetN")
  37. assert.EqualError(t, err, "sheet SheetN is not exist")
  38. }
  39. func TestFlush(t *testing.T) {
  40. // Test error exceptions
  41. file := NewFile()
  42. streamWriter, err := file.NewStreamWriter("Sheet1")
  43. assert.NoError(t, err)
  44. streamWriter.Sheet = "SheetN"
  45. assert.EqualError(t, streamWriter.Flush(), "sheet SheetN is not exist")
  46. // Test close temporary file error
  47. file = NewFile()
  48. streamWriter, err = file.NewStreamWriter("Sheet1")
  49. assert.NoError(t, err)
  50. for rowID := 10; rowID <= 51200; rowID++ {
  51. row := make([]interface{}, 50)
  52. for colID := 0; colID < 50; colID++ {
  53. row[colID] = rand.Intn(640000)
  54. }
  55. cell, _ := CoordinatesToCellName(1, rowID)
  56. assert.NoError(t, streamWriter.SetRow(cell, &row))
  57. }
  58. assert.NoError(t, streamWriter.tmpFile.Close())
  59. assert.Error(t, streamWriter.Flush())
  60. }
  61. func TestSetRow(t *testing.T) {
  62. // Test error exceptions
  63. file := NewFile()
  64. streamWriter, err := file.NewStreamWriter("Sheet1")
  65. assert.NoError(t, err)
  66. assert.EqualError(t, streamWriter.SetRow("A", &[]interface{}{}), `cannot convert cell "A" to coordinates: invalid cell name "A"`)
  67. assert.EqualError(t, streamWriter.SetRow("A1", []interface{}{}), `pointer to slice expected`)
  68. }