Skip to content

Commit 44e5f97

Browse files
Added task for unit test generation
1 parent 8fcdc57 commit 44e5f97

File tree

4 files changed

+99
-9
lines changed

4 files changed

+99
-9
lines changed

cli/cli.go

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"go.uber.org/zap/zapcore"
1212
"os"
1313
"path/filepath"
14+
"strings"
1415
"time"
1516
)
1617

@@ -97,6 +98,36 @@ func (c *Cli) parseGenerateArgs() {
9798
c.logger.Errorf("Could not generate the documentation %v", err)
9899
}
99100
break
101+
case "unit-tests":
102+
generateTestsCmd := flag.NewFlagSet("generateUnitTests", flag.ExitOnError)
103+
lang := generateTestsCmd.String("language", "", "Programming language: Java")
104+
outputDir := generateTestsCmd.String("output-dir", "", "The output directory")
105+
106+
err := generateTestsCmd.Parse(os.Args[3:])
107+
if err != nil {
108+
c.logger.Error("Could not parse args %v", err)
109+
os.Exit(1)
110+
}
111+
112+
if len(generateTestsCmd.Args()) == 0 {
113+
c.logger.Errorf("Expected file input")
114+
fmt.Printf("Usage: codemaker generate tests <file>")
115+
os.Exit(1)
116+
}
117+
118+
config, err := createConfig()
119+
if err != nil {
120+
c.logger.Error("No valid api key found %v", err)
121+
os.Exit(1)
122+
}
123+
124+
cl := c.createClient(*config)
125+
input := generateTestsCmd.Args()[0:]
126+
127+
if err := c.generateTests(cl, lang, input, outputDir); err != nil {
128+
c.logger.Errorf("Could not generate the test %v", err)
129+
}
130+
break
100131
default:
101132
fmt.Printf("Unknown command %s\n", os.Args[2])
102133
c.printGenerateHelp()
@@ -122,7 +153,7 @@ func (c *Cli) parseMigrateArgs() {
122153

123154
if len(migrateSyntaxCmd.Args()) == 0 {
124155
c.logger.Errorf("Expected file input")
125-
fmt.Printf("Usage: codemaker migrate syntax <file>\n")
156+
fmt.Printf("Usage: codemaker migrate syntax <file>")
126157
os.Exit(1)
127158
}
128159

@@ -148,7 +179,7 @@ func (c *Cli) parseMigrateArgs() {
148179
func (c *Cli) generateDocumentation(cl client.Client, lang *string, files []string) error {
149180
return c.walkPath(files, func(file string) error {
150181
if lang == nil || len(*lang) == 0 {
151-
actLang, err := LanguageFromExtension(filepath.Ext(file))
182+
actLang, err := languageFromExtension(filepath.Ext(file))
152183
if err != nil {
153184
return err
154185
}
@@ -174,10 +205,59 @@ func (c *Cli) generateDocumentation(cl client.Client, lang *string, files []stri
174205
})
175206
}
176207

208+
func (c *Cli) generateTests(cl client.Client, lang *string, files []string, outputDir *string) error {
209+
return c.walkPath(files, func(file string) error {
210+
if lang == nil || len(*lang) == 0 {
211+
actLang, err := languageFromExtension(filepath.Ext(file))
212+
if err != nil {
213+
c.logger.Errorf("skipping unsupported file %s", file)
214+
return err
215+
}
216+
lang = &actLang
217+
}
218+
219+
c.logger.Infof("Generating tests for file %s", file)
220+
source, err := c.readFile(file)
221+
if err != nil {
222+
c.logger.Errorf("failed to read file %s %v", file, err)
223+
return err
224+
}
225+
226+
output, err := c.process(cl, client.ModeUnitTest, *lang, "", source)
227+
if err != nil {
228+
c.logger.Errorf("failed to generate documentation for file %s %v", file, err)
229+
return err
230+
}
231+
232+
suffix, err := testFileSuffix(*lang)
233+
if err != nil {
234+
c.logger.Errorf("could not get suffix for file %s %v", file, err)
235+
return err
236+
}
237+
238+
var outputFile string
239+
if outputDir != nil && len(*outputDir) > 0 {
240+
err := os.MkdirAll(*outputDir, 0755)
241+
if err != nil {
242+
c.logger.Errorf("could not create directory %s", *outputDir)
243+
return err
244+
}
245+
outputFile = filepath.Join(*outputDir, strings.TrimSuffix(filepath.Base(file), filepath.Ext(file))+suffix)
246+
} else {
247+
outputFile = strings.TrimSuffix(file, filepath.Ext(file)) + suffix
248+
}
249+
if err := c.writeFile(outputFile, *output); err != nil {
250+
c.logger.Errorf("failed to write file %s %v", file, err)
251+
return err
252+
}
253+
return nil
254+
})
255+
}
256+
177257
func (c *Cli) migrateSyntax(cl client.Client, lang *string, langVer *string, files []string) error {
178258
return c.walkPath(files, func(file string) error {
179259
if lang == nil || len(*lang) == 0 {
180-
actLang, err := LanguageFromExtension(filepath.Ext(file))
260+
actLang, err := languageFromExtension(filepath.Ext(file))
181261
if err != nil {
182262
c.logger.Errorf("skipping unsupported file %s", file)
183263
return nil
@@ -330,6 +410,7 @@ func (c *Cli) printGenerateHelp() {
330410
fmt.Printf("\n")
331411
fmt.Printf("Commands:\n")
332412
fmt.Printf(" * docs\n")
413+
fmt.Printf(" * unit-tests\n")
333414
os.Exit(1)
334415
}
335416

cli/language.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,20 @@ var fileExtensions = map[string]string{
88
".java": "JAVA",
99
}
1010

11-
func LanguageFromExtension(extension string) (string, error) {
11+
var testFileSuffixes = map[string]string{
12+
"JAVA": "Test.java",
13+
}
14+
15+
func languageFromExtension(extension string) (string, error) {
1216
if lang, ok := fileExtensions[extension]; ok {
1317
return lang, nil
1418
}
1519
return "", fmt.Errorf("the file extension %s is not supported", extension)
1620
}
21+
22+
func testFileSuffix(language string) (string, error) {
23+
if lang, ok := testFileSuffixes[language]; ok {
24+
return lang, nil
25+
}
26+
return "", fmt.Errorf("the language %s is not supported", language)
27+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/codemakerai/codemaker-cli
33
go 1.20
44

55
require (
6-
github.com/codemakerai/codemaker-sdk-go v0.0.3-0.20230322062931-ad3bd008ba77
6+
github.com/codemakerai/codemaker-sdk-go v0.0.3
77
github.com/joho/godotenv v1.5.1
88
go.uber.org/zap v1.24.0
99
)

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
2-
github.com/codemakerai/codemaker-sdk-go v0.0.3-0.20230322062523-70a6d43cfaf9 h1:lZDG+1c1tIEUCcoHODEBmGdAGCMDIXFPmHImuuZGDs8=
3-
github.com/codemakerai/codemaker-sdk-go v0.0.3-0.20230322062523-70a6d43cfaf9/go.mod h1:drvi/xHywQnOgWWGw3dOWZ4CV0NesAdNNuAtsVdZW2E=
4-
github.com/codemakerai/codemaker-sdk-go v0.0.3-0.20230322062931-ad3bd008ba77 h1:TBLLWF9zZhmmnHJFz6Io8FtBUcOI4i/YXDGjw7oXYrc=
5-
github.com/codemakerai/codemaker-sdk-go v0.0.3-0.20230322062931-ad3bd008ba77/go.mod h1:drvi/xHywQnOgWWGw3dOWZ4CV0NesAdNNuAtsVdZW2E=
2+
github.com/codemakerai/codemaker-sdk-go v0.0.3 h1:+nh2/UUiYuvmDA2hmt+wTp6nN/VS/ykemkYZ+ip9KGc=
3+
github.com/codemakerai/codemaker-sdk-go v0.0.3/go.mod h1:drvi/xHywQnOgWWGw3dOWZ4CV0NesAdNNuAtsVdZW2E=
64
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
75
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
86
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=

0 commit comments

Comments
 (0)