提交 11a96df7 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

close task#8565

上级 a6f1db43
...@@ -24,4 +24,9 @@ fields: ...@@ -24,4 +24,9 @@ fields:
- field: field_with_children - field: field_with_children
prefix: "{" prefix: "{"
postfix: "}\t" postfix: "}\t"
\ No newline at end of file
- field: chinese
range: [`测试`,实测]
prefix: "{"
postfix: "}\t"
...@@ -39,19 +39,23 @@ func CreateFieldValuesFromList(field *model.DefField, fieldValue *model.FieldWit ...@@ -39,19 +39,23 @@ func CreateFieldValuesFromList(field *model.DefField, fieldValue *model.FieldWit
return return
} }
rangeSections := ParseRangeProperty(rang) // 1 rangeSections := ParseRangeProperty(rang) // parse 1
index := 0 index := 0
for _, rangeSection := range rangeSections { for _, rangeSection := range rangeSections {
if index >= constant.MaxNumb { break } if index >= constant.MaxNumb {
if rangeSection == "" { continue } break
}
if rangeSection == "" {
continue
}
descStr, stepStr, repeat := ParseRangeSection(rangeSection) // 2 descStr, stepStr, repeat := ParseRangeSection(rangeSection) // parse 2
if strings.ToLower(stepStr) == "r" { if strings.ToLower(stepStr) == "r" {
(*field).IsRand = true (*field).IsRand = true
} }
typ, desc := ParseRangeSectionDesc(descStr) // 3 typ, desc := ParseRangeSectionDesc(descStr) // parse 3
items := make([]interface{}, 0) items := make([]interface{}, 0)
if typ == "literal" { if typ == "literal" {
...@@ -145,8 +149,8 @@ func CheckRangeType(startStr string, endStr string, stepStr string) (string, int ...@@ -145,8 +149,8 @@ func CheckRangeType(startStr string, endStr string, stepStr string) (string, int
rand = true rand = true
} }
if (strings.Compare(startStr,endStr) > 0 && step.(int) > 0) || if (strings.Compare(startStr, endStr) > 0 && step.(int) > 0) ||
(strings.Compare(startStr,endStr) < 0 && step.(int) < 0) { (strings.Compare(startStr, endStr) < 0 && step.(int) < 0) {
step = -1 * step.(int) step = -1 * step.(int)
} }
return "char", step, 0, rand return "char", step, 0, rand
...@@ -206,7 +210,9 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea ...@@ -206,7 +210,9 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea
elemArr := strings.Split(desc, "-") elemArr := strings.Split(desc, "-")
startStr := elemArr[0] startStr := elemArr[0]
endStr := startStr endStr := startStr
if len(elemArr) > 1 { endStr = elemArr[1] } if len(elemArr) > 1 {
endStr = elemArr[1]
}
dataType, step, precision, rand := CheckRangeType(startStr, endStr, stepStr) dataType, step, precision, rand := CheckRangeType(startStr, endStr, stepStr)
...@@ -236,7 +242,9 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea ...@@ -236,7 +242,9 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea
items = GenerateByteItems(startStr[0], endStr[0], step.(int), rand, repeat) items = GenerateByteItems(startStr[0], endStr[0], step.(int), rand, repeat)
} else if dataType == "string" { } else if dataType == "string" {
if repeat == 0 { repeat = 1 } if repeat == 0 {
repeat = 1
}
for i := 0; i < repeat; i++ { for i := 0; i < repeat; i++ {
items = append(items, desc) items = append(items, desc)
} }
......
...@@ -34,7 +34,7 @@ func ParseRangeProperty(rang string) []string { ...@@ -34,7 +34,7 @@ func ParseRangeProperty(rang string) []string {
backtickOpen = false backtickOpen = false
} }
if i == len(runeArr) - 1 { if i == len(runeArr)-1 {
temp += fmt.Sprintf("%c", c) temp += fmt.Sprintf("%c", c)
items = append(items, temp) items = append(items, temp)
} else if !bracketsOpen && !backtickOpen && c == ',' { } else if !bracketsOpen && !backtickOpen && c == ',' {
...@@ -62,12 +62,12 @@ func ParseDesc(desc string) (items []string) { ...@@ -62,12 +62,12 @@ func ParseDesc(desc string) (items []string) {
runeArr := []rune(desc) runeArr := []rune(desc)
if runeArr[0] == constant.Backtick && runeArr[len(runeArr) - 1] == constant.Backtick { // `xxx` if runeArr[0] == constant.Backtick && runeArr[len(runeArr)-1] == constant.Backtick { // `xxx`
desc = string(runeArr[1 : len(desc) - 1]) desc = string(runeArr[1 : len(runeArr)-1])
items = append(items, desc) items = append(items, desc)
} else if runeArr[0] == constant.LeftBrackets && runeArr[len(runeArr) - 1] == constant.RightBrackets { // [abc,123] } else if runeArr[0] == constant.LeftBrackets && runeArr[len(runeArr)-1] == constant.RightBrackets { // [abc,123]
desc = string(runeArr[1 : len(desc) - 1]) desc = string(runeArr[1 : len(runeArr)-1])
items = strings.Split(desc, ",") items = strings.Split(desc, ",")
} else { } else {
...@@ -92,12 +92,14 @@ func ParseRangeSection(item string) (entry string, step string, repeat int) { ...@@ -92,12 +92,14 @@ func ParseRangeSection(item string) (entry string, step string, repeat int) {
} }
runeArr := []rune(item) runeArr := []rune(item)
if (runeArr[0] == constant.Backtick && runeArr[len(runeArr) - 1] == constant.Backtick) || // `xxx` if (runeArr[0] == constant.Backtick && runeArr[len(runeArr)-1] == constant.Backtick) || // `xxx`
(string(item[0]) == string(constant.LeftBrackets) && // (xxx) (string(runeArr[0]) == string(constant.LeftBrackets) && // (xxx)
string(item[len(item) - 1]) == string(constant.RightBrackets)) { string(runeArr[len(runeArr)-1]) == string(constant.RightBrackets)) {
entry = item entry = item
if repeat == 0 { repeat = 1 } if repeat == 0 {
repeat = 1
}
return return
} }
...@@ -114,7 +116,9 @@ func ParseRangeSection(item string) (entry string, step string, repeat int) { ...@@ -114,7 +116,9 @@ func ParseRangeSection(item string) (entry string, step string, repeat int) {
step = strings.ToLower(sectionArr[1]) step = strings.ToLower(sectionArr[1])
} }
if repeat == 0 { repeat = 1 } if repeat == 0 {
repeat = 1
}
return entry, step, repeat return entry, step, repeat
} }
...@@ -127,6 +131,7 @@ func ParseRangeSection(item string) (entry string, step string, repeat int) { ...@@ -127,6 +131,7 @@ func ParseRangeSection(item string) (entry string, step string, repeat int) {
*/ */
func ParseRangeSectionDesc(str string) (typ string, desc string) { func ParseRangeSectionDesc(str string) (typ string, desc string) {
desc = strings.TrimSpace(str) desc = strings.TrimSpace(str)
runeArr := []rune(desc)
if desc == "" { if desc == "" {
typ = "literal" typ = "literal"
...@@ -138,8 +143,8 @@ func ParseRangeSectionDesc(str string) (typ string, desc string) { ...@@ -138,8 +143,8 @@ func ParseRangeSectionDesc(str string) (typ string, desc string) {
return return
} }
if string(desc[0]) == string(constant.LeftBrackets) && // [a-z,1-9,userA,UserB] if string(runeArr[0]) == string(constant.LeftBrackets) && // [a-z,1-9,userA,UserB]
string(desc[len(desc)-1]) == string(constant.RightBrackets) { string(runeArr[len(runeArr)-1]) == string(constant.RightBrackets) {
desc = removeBoundary(desc) desc = removeBoundary(desc)
arr := strings.Split(desc, ",") arr := strings.Split(desc, ",")
...@@ -167,7 +172,7 @@ func ParseRangeSectionDesc(str string) (typ string, desc string) { ...@@ -167,7 +172,7 @@ func ParseRangeSectionDesc(str string) (typ string, desc string) {
if strings.Contains(desc, ",") || strings.Contains(desc, "`") || !strings.Contains(desc, "-") { if strings.Contains(desc, ",") || strings.Contains(desc, "`") || !strings.Contains(desc, "-") {
typ = "literal" typ = "literal"
} else { } else {
temp := removeBoundary(desc) temp := removeBoundary(desc)
if isScopeStr(temp) { if isScopeStr(temp) {
...@@ -197,7 +202,7 @@ func isScopeStr(str string) bool { ...@@ -197,7 +202,7 @@ func isScopeStr(str string) bool {
left := strings.TrimSpace(arr[0]) left := strings.TrimSpace(arr[0])
right := strings.TrimSpace(arr[1]) right := strings.TrimSpace(arr[1])
if len(left) != 1 || len(right) != 1 { if len(left) != 1 || len(right) != 1 { // more than on char, must be number
leftRune := []rune(string(left[0]))[0] leftRune := []rune(string(left[0]))[0]
rightRune := []rune(string(right[0]))[0] rightRune := []rune(string(right[0]))[0]
...@@ -234,4 +239,3 @@ func isCharOrNumberScope(str string) bool { ...@@ -234,4 +239,3 @@ func isCharOrNumberScope(str string) bool {
return false return false
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册