summaryrefslogtreecommitdiff
path: root/chart_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'chart_test.go')
-rw-r--r--chart_test.go113
1 files changed, 113 insertions, 0 deletions
diff --git a/chart_test.go b/chart_test.go
index b35cb98..6ee5f7c 100644
--- a/chart_test.go
+++ b/chart_test.go
@@ -253,3 +253,116 @@ func TestDeleteChart(t *testing.T) {
// Test delete chart on no chart worksheet.
assert.NoError(t, NewFile().DeleteChart("Sheet1", "A1"))
}
+
+func TestChartWithLogarithmicBase(t *testing.T) {
+ // Create test XLSX file with data
+ xlsx := NewFile()
+ sheet1 := xlsx.GetSheetName(0)
+ categories := map[string]float64{
+ "A1": 1,
+ "A2": 2,
+ "A3": 3,
+ "A4": 4,
+ "A5": 5,
+ "A6": 6,
+ "A7": 7,
+ "A8": 8,
+ "A9": 9,
+ "A10": 10,
+ "B1": 0.1,
+ "B2": 1,
+ "B3": 2,
+ "B4": 3,
+ "B5": 20,
+ "B6": 30,
+ "B7": 100,
+ "B8": 500,
+ "B9": 700,
+ "B10": 5000,
+ }
+ for cell, v := range categories {
+ assert.NoError(t, xlsx.SetCellValue(sheet1, cell, v))
+ }
+
+ // Add two chart, one without and one with log scaling
+ assert.NoError(t, xlsx.AddChart(sheet1, "C1",
+ `{"type":"line","dimension":{"width":640, "height":480},`+
+ `"series":[{"name":"value","categories":"Sheet1!$A$1:$A$19","values":"Sheet1!$B$1:$B$10"}],`+
+ `"title":{"name":"Line chart without log scaling"}}`))
+ assert.NoError(t, xlsx.AddChart(sheet1, "M1",
+ `{"type":"line","dimension":{"width":640, "height":480},`+
+ `"series":[{"name":"value","categories":"Sheet1!$A$1:$A$19","values":"Sheet1!$B$1:$B$10"}],`+
+ `"y_axis":{"logbase":10.5},`+
+ `"title":{"name":"Line chart with log 10 scaling"}}`))
+ assert.NoError(t, xlsx.AddChart(sheet1, "A25",
+ `{"type":"line","dimension":{"width":320, "height":240},`+
+ `"series":[{"name":"value","categories":"Sheet1!$A$1:$A$19","values":"Sheet1!$B$1:$B$10"}],`+
+ `"y_axis":{"logbase":1.9},`+
+ `"title":{"name":"Line chart with log 1.9 scaling"}}`))
+ assert.NoError(t, xlsx.AddChart(sheet1, "F25",
+ `{"type":"line","dimension":{"width":320, "height":240},`+
+ `"series":[{"name":"value","categories":"Sheet1!$A$1:$A$19","values":"Sheet1!$B$1:$B$10"}],`+
+ `"y_axis":{"logbase":2},`+
+ `"title":{"name":"Line chart with log 2 scaling"}}`))
+ assert.NoError(t, xlsx.AddChart(sheet1, "K25",
+ `{"type":"line","dimension":{"width":320, "height":240},`+
+ `"series":[{"name":"value","categories":"Sheet1!$A$1:$A$19","values":"Sheet1!$B$1:$B$10"}],`+
+ `"y_axis":{"logbase":1000.1},`+
+ `"title":{"name":"Line chart with log 1000.1 scaling"}}`))
+ assert.NoError(t, xlsx.AddChart(sheet1, "P25",
+ `{"type":"line","dimension":{"width":320, "height":240},`+
+ `"series":[{"name":"value","categories":"Sheet1!$A$1:$A$19","values":"Sheet1!$B$1:$B$10"}],`+
+ `"y_axis":{"logbase":1000},`+
+ `"title":{"name":"Line chart with log 1000 scaling"}}`))
+
+ // Export XLSX file for human confirmation
+ assert.NoError(t, xlsx.SaveAs(filepath.Join("test", "TestChartWithLogarithmicBase10.xlsx")))
+
+ // Write the XLSX file to a buffer
+ var buffer bytes.Buffer
+ assert.NoError(t, xlsx.Write(&buffer))
+
+ // Read back the XLSX file from the buffer
+ newFile, err := OpenReader(&buffer)
+ assert.NoError(t, err)
+
+ // Check the number of charts
+ expectedChartsCount := 6
+ chartsNum := newFile.countCharts()
+ if !assert.Equal(t, expectedChartsCount, chartsNum,
+ "Expected %d charts, actual %d", expectedChartsCount, chartsNum) {
+ t.FailNow()
+ }
+
+ chartSpaces := make([]xlsxChartSpace, expectedChartsCount)
+ type xmlChartContent []byte
+ xmlCharts := make([]xmlChartContent, expectedChartsCount)
+ expectedChartsLogBase := []float64{0, 10.5, 0, 2, 0, 1000}
+ var ok bool
+
+ for i := 0; i < expectedChartsCount; i++ {
+ chartPath := fmt.Sprintf("xl/charts/chart%d.xml", i+1)
+ xmlCharts[i], ok = newFile.XLSX[chartPath]
+ assert.True(t, ok, "Can't open the %s", chartPath)
+
+ err = xml.Unmarshal([]byte(xmlCharts[i]), &chartSpaces[i])
+ if !assert.NoError(t, err) {
+ t.FailNow()
+ }
+
+ chartLogBasePtr := chartSpaces[i].Chart.PlotArea.ValAx[0].Scaling.LogBase
+ if expectedChartsLogBase[i] == 0 {
+ if !assert.Nil(t, chartLogBasePtr, "LogBase is not nil") {
+ t.FailNow()
+ }
+ } else {
+ if !assert.NotNil(t, chartLogBasePtr, "LogBase is nil") {
+ t.FailNow()
+ }
+ if !assert.Equal(t, expectedChartsLogBase[i], *(chartLogBasePtr.Val),
+ "Expected log base to %f, actual %f", expectedChartsLogBase[i], *(chartLogBasePtr.Val)) {
+ t.FailNow()
+ }
+ }
+ }
+}