@@ -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() {
148179func (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+
177257func (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
0 commit comments