2018-07-25 22:40:08 +08:00
|
|
|
package excelize
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
2019-01-09 23:12:53 +08:00
|
|
|
func TestStyleFill(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
|
|
label string
|
|
|
|
format string
|
|
|
|
expectFill bool
|
|
|
|
}{{
|
|
|
|
label: "no_fill",
|
|
|
|
format: `{"alignment":{"wrap_text":true}}`,
|
|
|
|
expectFill: false,
|
|
|
|
}, {
|
|
|
|
label: "fill",
|
|
|
|
format: `{"fill":{"type":"pattern","pattern":1,"color":["#000000"]}}`,
|
|
|
|
expectFill: true,
|
|
|
|
}}
|
|
|
|
|
|
|
|
for _, testCase := range cases {
|
|
|
|
xl := NewFile()
|
|
|
|
const sheet = "Sheet1"
|
|
|
|
|
|
|
|
styleID, err := xl.NewStyle(testCase.format)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("%v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
styles := xl.stylesReader()
|
|
|
|
style := styles.CellXfs.Xf[styleID]
|
|
|
|
if testCase.expectFill {
|
|
|
|
assert.NotEqual(t, style.FillID, 0, testCase.label)
|
|
|
|
} else {
|
|
|
|
assert.Equal(t, style.FillID, 0, testCase.label)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-25 22:40:08 +08:00
|
|
|
func TestSetConditionalFormat(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
|
|
label string
|
|
|
|
format string
|
|
|
|
rules []*xlsxCfRule
|
|
|
|
}{{
|
|
|
|
label: "3_color_scale",
|
|
|
|
format: `[{
|
|
|
|
"type":"3_color_scale",
|
|
|
|
"criteria":"=",
|
|
|
|
"min_type":"num",
|
|
|
|
"mid_type":"num",
|
|
|
|
"max_type":"num",
|
|
|
|
"min_value": "-10",
|
|
|
|
"mid_value": "0",
|
|
|
|
"max_value": "10",
|
|
|
|
"min_color":"ff0000",
|
|
|
|
"mid_color":"00ff00",
|
|
|
|
"max_color":"0000ff"
|
|
|
|
}]`,
|
|
|
|
rules: []*xlsxCfRule{{
|
|
|
|
Priority: 1,
|
|
|
|
Type: "colorScale",
|
|
|
|
ColorScale: &xlsxColorScale{
|
|
|
|
Cfvo: []*xlsxCfvo{{
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "-10",
|
2018-07-25 22:40:08 +08:00
|
|
|
}, {
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "0",
|
2018-07-25 22:40:08 +08:00
|
|
|
}, {
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "10",
|
2018-07-25 22:40:08 +08:00
|
|
|
}},
|
|
|
|
Color: []*xlsxColor{{
|
|
|
|
RGB: "FFFF0000",
|
|
|
|
}, {
|
|
|
|
RGB: "FF00FF00",
|
|
|
|
}, {
|
|
|
|
RGB: "FF0000FF",
|
|
|
|
}},
|
|
|
|
},
|
|
|
|
}},
|
|
|
|
}, {
|
|
|
|
label: "3_color_scale default min/mid/max",
|
|
|
|
format: `[{
|
|
|
|
"type":"3_color_scale",
|
|
|
|
"criteria":"=",
|
|
|
|
"min_type":"num",
|
|
|
|
"mid_type":"num",
|
|
|
|
"max_type":"num",
|
|
|
|
"min_color":"ff0000",
|
|
|
|
"mid_color":"00ff00",
|
|
|
|
"max_color":"0000ff"
|
|
|
|
}]`,
|
|
|
|
rules: []*xlsxCfRule{{
|
|
|
|
Priority: 1,
|
|
|
|
Type: "colorScale",
|
|
|
|
ColorScale: &xlsxColorScale{
|
|
|
|
Cfvo: []*xlsxCfvo{{
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "0",
|
2018-07-25 22:40:08 +08:00
|
|
|
}, {
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "50",
|
2018-07-25 22:40:08 +08:00
|
|
|
}, {
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "0",
|
2018-07-25 22:40:08 +08:00
|
|
|
}},
|
|
|
|
Color: []*xlsxColor{{
|
|
|
|
RGB: "FFFF0000",
|
|
|
|
}, {
|
|
|
|
RGB: "FF00FF00",
|
|
|
|
}, {
|
|
|
|
RGB: "FF0000FF",
|
|
|
|
}},
|
|
|
|
},
|
|
|
|
}},
|
|
|
|
}, {
|
|
|
|
label: "2_color_scale default min/max",
|
|
|
|
format: `[{
|
|
|
|
"type":"2_color_scale",
|
|
|
|
"criteria":"=",
|
|
|
|
"min_type":"num",
|
|
|
|
"max_type":"num",
|
|
|
|
"min_color":"ff0000",
|
|
|
|
"max_color":"0000ff"
|
|
|
|
}]`,
|
|
|
|
rules: []*xlsxCfRule{{
|
|
|
|
Priority: 1,
|
|
|
|
Type: "colorScale",
|
|
|
|
ColorScale: &xlsxColorScale{
|
|
|
|
Cfvo: []*xlsxCfvo{{
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "0",
|
2018-07-25 22:40:08 +08:00
|
|
|
}, {
|
|
|
|
Type: "num",
|
2018-07-25 04:12:26 +08:00
|
|
|
Val: "0",
|
2018-07-25 22:40:08 +08:00
|
|
|
}},
|
|
|
|
Color: []*xlsxColor{{
|
|
|
|
RGB: "FFFF0000",
|
|
|
|
}, {
|
|
|
|
RGB: "FF0000FF",
|
|
|
|
}},
|
|
|
|
},
|
|
|
|
}},
|
|
|
|
}}
|
|
|
|
|
|
|
|
for _, testCase := range cases {
|
|
|
|
xl := NewFile()
|
|
|
|
const sheet = "Sheet1"
|
|
|
|
const cellRange = "A1:A1"
|
|
|
|
|
|
|
|
err := xl.SetConditionalFormat(sheet, cellRange, testCase.format)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("%s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
xlsx := xl.workSheetReader(sheet)
|
|
|
|
cf := xlsx.ConditionalFormatting
|
|
|
|
assert.Len(t, cf, 1, testCase.label)
|
|
|
|
assert.Len(t, cf[0].CfRule, 1, testCase.label)
|
|
|
|
assert.Equal(t, cellRange, cf[0].SQRef, testCase.label)
|
|
|
|
assert.EqualValues(t, testCase.rules, cf[0].CfRule, testCase.label)
|
|
|
|
}
|
|
|
|
}
|