(tp reflect.Type, rawData string)
| 67 | } |
| 68 | |
| 69 | func parseRawArg(tp reflect.Type, rawData string) (v reflect.Value, err error) { |
| 70 | rawData = strings.TrimSpace(rawData) |
| 71 | invalidErr := fmt.Errorf("invalid test data: %s", rawData) |
| 72 | switch tp.Kind() { |
| 73 | case reflect.String: |
| 74 | if len(rawData) <= 1 || rawData[0] != '"' && rawData[0] != '\'' || rawData[len(rawData)-1] != rawData[0] { |
| 75 | return reflect.Value{}, invalidErr |
| 76 | } |
| 77 | // remove " (or ') at leftmost and rightmost |
| 78 | v = reflect.ValueOf(rawData[1 : len(rawData)-1]) |
| 79 | case reflect.Uint8: // byte |
| 80 | // rawData like "a" or 'a' |
| 81 | if len(rawData) != 3 || rawData[0] != '"' && rawData[0] != '\'' || rawData[2] != rawData[0] { |
| 82 | return reflect.Value{}, invalidErr |
| 83 | } |
| 84 | v = reflect.ValueOf(rawData[1]) |
| 85 | case reflect.Int: |
| 86 | i, er := strconv.Atoi(rawData) |
| 87 | if er != nil { |
| 88 | return reflect.Value{}, invalidErr |
| 89 | } |
| 90 | v = reflect.ValueOf(i) |
| 91 | case reflect.Uint: |
| 92 | i, er := strconv.Atoi(rawData) |
| 93 | if er != nil { |
| 94 | return reflect.Value{}, invalidErr |
| 95 | } |
| 96 | v = reflect.ValueOf(uint(i)) |
| 97 | case reflect.Int64: |
| 98 | i, er := strconv.Atoi(rawData) |
| 99 | if er != nil { |
| 100 | return reflect.Value{}, invalidErr |
| 101 | } |
| 102 | v = reflect.ValueOf(int64(i)) |
| 103 | case reflect.Uint64: |
| 104 | i, er := strconv.Atoi(rawData) |
| 105 | if er != nil { |
| 106 | return reflect.Value{}, invalidErr |
| 107 | } |
| 108 | v = reflect.ValueOf(uint64(i)) |
| 109 | case reflect.Float64: |
| 110 | f, er := strconv.ParseFloat(rawData, 64) |
| 111 | if er != nil { |
| 112 | return reflect.Value{}, invalidErr |
| 113 | } |
| 114 | v = reflect.ValueOf(f) |
| 115 | case reflect.Bool: |
| 116 | b, er := strconv.ParseBool(rawData) |
| 117 | if er != nil { |
| 118 | return reflect.Value{}, invalidErr |
| 119 | } |
| 120 | v = reflect.ValueOf(b) |
| 121 | case reflect.Slice: |
| 122 | splits, er := parseRawArray(rawData) |
| 123 | if er != nil { |
| 124 | return reflect.Value{}, er |
| 125 | } |
| 126 | v = reflect.New(tp).Elem() |
no test coverage detected