GenerateTests generates and writes a test file for the given function.
(parentFolder utils.RootFolderLocation, functionName string, assertions []Assertion)
| 58 | |
| 59 | // GenerateTests generates and writes a test file for the given function. |
| 60 | func GenerateTests(parentFolder utils.RootFolderLocation, functionName string, assertions []Assertion) error { |
| 61 | // We want to skip some functions since we know they'll always return a different result |
| 62 | switch functionName { |
| 63 | case "random": |
| 64 | return nil |
| 65 | } |
| 66 | // For now we'll skip some functions that will take a long time to calculate |
| 67 | switch functionName { |
| 68 | case "exp", "factorial", "lpad", "power", "rpad", "repeat", "round": |
| 69 | return nil |
| 70 | } |
| 71 | |
| 72 | sb := strings.Builder{} |
| 73 | sb.WriteString(fmt.Sprintf(TestHeader, time.Now().Year(), |
| 74 | strings.ReplaceAll(cases.Title(language.English).String(strings.ReplaceAll(functionName, "_", " ")), " ", ""))) |
| 75 | sb.WriteString("\t\t{\n") |
| 76 | sb.WriteString(fmt.Sprintf("\t\t\tName: \"%s\",\n", functionName)) |
| 77 | sb.WriteString("\t\t\tAssertions: []ScriptTestAssertion{\n") |
| 78 | for _, assertion := range assertions { |
| 79 | sb.WriteString("\t\t\t\t{\n") |
| 80 | if !assertion.Error { |
| 81 | sb.WriteString(fmt.Sprintf("\t\t\t\t\tQuery: \"%s\",\n", assertion.Stmt)) |
| 82 | sb.WriteString("\t\t\t\t\tExpected: []sql.Row{") |
| 83 | for i, results := range assertion.Rows { |
| 84 | if i > 0 { |
| 85 | sb.WriteRune(',') |
| 86 | } |
| 87 | sb.WriteRune('{') |
| 88 | for j, result := range results { |
| 89 | if j > 0 { |
| 90 | sb.WriteRune(',') |
| 91 | } |
| 92 | switch result := result.(type) { |
| 93 | case int: |
| 94 | sb.WriteString(fmt.Sprintf("int64(%d)", result)) |
| 95 | case int8: |
| 96 | sb.WriteString(fmt.Sprintf("int8(%d)", result)) |
| 97 | case int16: |
| 98 | sb.WriteString(fmt.Sprintf("int16(%d)", result)) |
| 99 | case int32: |
| 100 | sb.WriteString(fmt.Sprintf("int32(%d)", result)) |
| 101 | case int64: |
| 102 | sb.WriteString(fmt.Sprintf("int64(%d)", result)) |
| 103 | case uint: |
| 104 | sb.WriteString(fmt.Sprintf("uint64(%d)", result)) |
| 105 | case uint8: |
| 106 | sb.WriteString(fmt.Sprintf("uint8(%d)", result)) |
| 107 | case uint16: |
| 108 | sb.WriteString(fmt.Sprintf("uint16(%d)", result)) |
| 109 | case uint32: |
| 110 | sb.WriteString(fmt.Sprintf("uint32(%d)", result)) |
| 111 | case uint64: |
| 112 | sb.WriteString(fmt.Sprintf("uint64(%d)", result)) |
| 113 | case float32: |
| 114 | sb.WriteString(fmt.Sprintf("float32(%f)", result)) |
| 115 | case float64: |
| 116 | sb.WriteString(fmt.Sprintf("float64(%f)", result)) |
| 117 | case string: |
no test coverage detected