From 99a8f44cec75612bf517c2aa7be37c0d0676384d Mon Sep 17 00:00:00 2001 From: aaron <462826@qq.com> Date: Fri, 21 Aug 2020 14:48:55 +0800 Subject: [PATCH] close tasks#7684 --- demo/advanced.yaml | 8 +++++--- demo/test/misc.yaml | 16 +++++++++++----- demo/test/nested1.yaml | 14 ++++++++++++++ demo/test/nested2.yaml | 11 +++++++++++ src/gen/generator.go | 17 ++++++++++++++++- src/gen/list.go | 14 +++++++++++--- src/model/definition.go | 2 ++ 7 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 demo/test/nested1.yaml create mode 100644 demo/test/nested2.yaml diff --git a/demo/advanced.yaml b/demo/advanced.yaml index 0ae490e2..e6095edb 100644 --- a/demo/advanced.yaml +++ b/demo/advanced.yaml @@ -8,6 +8,8 @@ fields: - field: field_step_negative # 区间可以指定步长。 range: z-a:-2 # 9,7,5,4... + loop: 1-3 + loopfix: "|" prefix: "[" postfix: "]\t" @@ -41,9 +43,9 @@ fields: use: large{3} - field: field_use_yaml - range: test/misc.yaml{2},1-9:R{3} - prefix: "===" - postfix: "====\t" + range: 9-7,test/nested1.yaml{5} + prefix: "***" + postfix: "***\t" - field: field_literal range: "`0000-00`,`AA[2,a-z]`,[1-3]:2{3},`[1-3]:2{3}`" diff --git a/demo/test/misc.yaml b/demo/test/misc.yaml index 3fcdde04..50c5bc78 100644 --- a/demo/test/misc.yaml +++ b/demo/test/misc.yaml @@ -5,25 +5,31 @@ version: 1.0 fields: - field: test0 - range: "''" + range: 1-9 loop: 2-3 loopfix: "|" # width: 10 - field: test1 range: 9-5:R{2} - prefix: "[" - postfix: "]\t" + prefix: "" + postfix: "\t" # width: 5 - field: test2 range: [user-2,user3,user4,user5,user6]:R loop: 2-3 loopfix: "|" - prefix: "[" - postfix: "]\t" + prefix: "" + postfix: "\t" # width: 25 + - field: test3 + range: test/test.yaml{2},a-z:R{3} + prefix: "---" + postfix: "---\t" + # width: 25 + - field: field_with_children fields: - field: child1 diff --git a/demo/test/nested1.yaml b/demo/test/nested1.yaml new file mode 100644 index 00000000..8ff7c866 --- /dev/null +++ b/demo/test/nested1.yaml @@ -0,0 +1,14 @@ +title: 测试文件 +desc: +author: zentao +version: 1.0 + +fields: + - field: test0 + range: 1-9 + postfix: ";\t" + + - field: test1 + range: a-c,nested2.yaml{2} + prefix: "===" + postfix: "===\t" \ No newline at end of file diff --git a/demo/test/nested2.yaml b/demo/test/nested2.yaml new file mode 100644 index 00000000..d369ab91 --- /dev/null +++ b/demo/test/nested2.yaml @@ -0,0 +1,11 @@ +title: 测试文件 +desc: +author: zentao +version: 1.0 + +fields: + - field: test0 + range: 1-9 + loop: 2-3 + loopfix: "|" + postfix: ",\t" \ No newline at end of file diff --git a/src/gen/generator.go b/src/gen/generator.go index b36b98b5..2245794b 100644 --- a/src/gen/generator.go +++ b/src/gen/generator.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/easysoft/zendata/src/model" + commonUtils "github.com/easysoft/zendata/src/utils/common" fileUtils "github.com/easysoft/zendata/src/utils/file" i118Utils "github.com/easysoft/zendata/src/utils/i118" logUtils "github.com/easysoft/zendata/src/utils/log" @@ -40,6 +41,10 @@ func GenerateForDefinition(defaultFile, configFile string, fieldsToExport *[]str field.From = vari.Def.From } values := GenerateForField(&field, true) + if field.Rand { + rows = randomValues(rows) + } + vari.Def.Fields[index].Precision = field.Precision topFieldNameToValuesMap[field.Field] = values @@ -178,7 +183,7 @@ func GenerateFieldValuesForDef(field *model.DefField) []string { values = append(values, val) count++ - isRandomAndLoopEnd := (*field).IsRand && (*field).LoopIndex == (*field).LoopEnd + isRandomAndLoopEnd := !(*field).IsReferYaml && (*field).IsRand && (*field).LoopIndex == (*field).LoopEnd // isNotRandomAndValOver := !(*field).IsRand && indexOfRow >= len(fieldWithValues.Values) if count >= vari.Total || isRandomAndLoopEnd { break @@ -354,6 +359,16 @@ func putChildrenToArr(arrOfArr [][]string) (values [][]string) { return } +func randomValues(values [][]string) (ret [][]string) { + length := len(values) + for i := 0; i < length; i++ { + val := commonUtils.RandNum(length) + ret = append(ret, values[val]) + } + + return +} + func combineChildrenValues(arrOfArr [][]string, total int) (ret []string) { valueArr := putChildrenToArr(arrOfArr) diff --git a/src/gen/list.go b/src/gen/list.go index da1c5523..3feac2d9 100644 --- a/src/gen/list.go +++ b/src/gen/list.go @@ -59,7 +59,8 @@ func CreateFieldValuesFromList(field *model.DefField, fieldValue *model.FieldWit } else if typ == "interval" { items = CreateValuesFromInterval(field, desc, stepStr, repeat) } else if typ == "yaml" { - items = CreateValuesFromYaml(field, desc, repeat) + items = CreateValuesFromYaml(field, desc, stepStr, repeat) + field.IsReferYaml = true } fieldValue.Values = append(fieldValue.Values, items...) @@ -177,7 +178,7 @@ func CreateValuesFromLiteral(field *model.DefField, desc string, stepStr string, return } -func CreateValuesFromInterval(field *model.DefField, desc string, stepStr string, repeat int) (items []interface{}) { +func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repeat int) (items []interface{}) { elemArr := strings.Split(desc, "-") startStr := elemArr[0] endStr := startStr @@ -220,7 +221,7 @@ func CreateValuesFromInterval(field *model.DefField, desc string, stepStr string return } -func CreateValuesFromYaml(field *model.DefField, yamlFile string, repeat int) (items []interface{}) { +func CreateValuesFromYaml(field *model.DefField, yamlFile, stepStr string, repeat int) (items []interface{}) { // keep root def, since vari.Def will be overwrite by refer yaml file rootDef := vari.Def @@ -229,6 +230,13 @@ func CreateValuesFromYaml(field *model.DefField, yamlFile string, repeat int) (i rows, colIsNumArr, _ := GenerateForDefinition("", configFile, &fieldsToExport) items = Print(rows, constant.FormatData, "", colIsNumArr, fieldsToExport) + if repeat > 0 { + if repeat > len(items) - 1 { + repeat = len(items) - 1 + } + items = items[:repeat] + } + // rollback root def when finish to deal with refer yaml file vari.Def = rootDef diff --git a/src/model/definition.go b/src/model/definition.go index fd433385..3438bdf4 100644 --- a/src/model/definition.go +++ b/src/model/definition.go @@ -75,11 +75,13 @@ type FieldSimple struct { Loop string `yaml:"loop"` Loopfix string `yaml:"loopfix"` Format string `yaml:"format"` + Rand bool `yaml:"rand"` LoopStart int `yaml:"-"` LoopEnd int `yaml:"-"` LoopIndex int `yaml:"-"` IsRand bool `yaml:"-"` + IsReferYaml bool `yaml:"-"` } type FieldWithValues struct { -- GitLab