Files
streamsql/utils/table/table_test.go
T
2025-08-07 19:23:48 +08:00

131 lines
3.8 KiB
Go

/*
* Copyright 2025 The RuleGo Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package table
import (
"testing"
"github.com/stretchr/testify/assert"
)
// TestPrintTableFromSlice 测试表格打印功能
func TestPrintTableFromSlice(t *testing.T) {
// 测试空数据
assert.NotPanics(t, func() {
PrintTableFromSlice([]map[string]interface{}{}, nil)
}, "空数据不应该panic")
// 测试正常数据
data := []map[string]interface{}{
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 25, "city": "Los Angeles"},
}
assert.NotPanics(t, func() {
PrintTableFromSlice(data, nil)
}, "正常数据不应该panic")
// 测试带字段顺序的数据
fieldOrder := []string{"name", "city", "age"}
assert.NotPanics(t, func() {
PrintTableFromSlice(data, fieldOrder)
}, "带字段顺序的数据不应该panic")
}
// TestPrintTableBorder 测试边框打印功能
func TestPrintTableBorder(t *testing.T) {
// 测试正常宽度
assert.NotPanics(t, func() {
colWidths := []int{5, 8, 6}
PrintTableBorder(colWidths)
}, "PrintTableBorder不应该panic")
// 测试空宽度
assert.NotPanics(t, func() {
PrintTableBorder([]int{})
}, "空宽度数组不应该panic")
}
// TestFormatTableData 测试数据格式化功能
func TestFormatTableData(t *testing.T) {
// 测试切片数据
sliceData := []map[string]interface{}{
{"device": "sensor1", "temp": 25.5},
}
assert.NotPanics(t, func() {
FormatTableData(sliceData, nil)
}, "切片数据不应该panic")
// 测试单个map数据
mapData := map[string]interface{}{"device": "sensor1", "temp": 25.5}
assert.NotPanics(t, func() {
FormatTableData(mapData, nil)
}, "map数据不应该panic")
// 测试其他类型数据
assert.NotPanics(t, func() {
FormatTableData("string data", nil)
}, "字符串数据不应该panic")
// 测试空数据
assert.NotPanics(t, func() {
FormatTableData([]map[string]interface{}{}, nil)
}, "空切片数据不应该panic")
assert.NotPanics(t, func() {
FormatTableData(map[string]interface{}{}, nil)
}, "空map数据不应该panic")
}
// TestPrintTableFromSliceEdgeCases 测试边缘情况
func TestPrintTableFromSliceEdgeCases(t *testing.T) {
// 测试字段顺序包含不存在的字段
data := []map[string]interface{}{
{"a": "1", "b": "2"},
}
fieldOrder := []string{"nonexistent", "a", "b", "another_nonexistent"}
assert.NotPanics(t, func() {
PrintTableFromSlice(data, fieldOrder)
}, "字段顺序包含不存在字段不应该panic")
// 测试数据行中某些字段缺失
dataWithMissingFields := []map[string]interface{}{
{"name": "Alice", "age": 30},
{"name": "Bob", "city": "NYC"}, // 缺少age字段
{"age": 25, "city": "LA"}, // 缺少name字段
}
assert.NotPanics(t, func() {
PrintTableFromSlice(dataWithMissingFields, nil)
}, "数据行字段缺失不应该panic")
// 测试短字段名(测试最小宽度4的逻辑)
shortFieldData := []map[string]interface{}{
{"a": "1", "bb": "22", "ccc": "333"},
}
assert.NotPanics(t, func() {
PrintTableFromSlice(shortFieldData, nil)
}, "短字段名不应该panic")
// 测试空值和nil值
nilValueData := []map[string]interface{}{
{"name": "Alice", "value": nil},
{"name": "Bob", "value": ""},
}
assert.NotPanics(t, func() {
PrintTableFromSlice(nilValueData, nil)
}, "nil值不应该panic")
}