@@ -3,17 +3,36 @@ package rust
3
3
import (
4
4
"github.com/coderbyte-org/cb-code-runner/cmd"
5
5
"path/filepath"
6
+ "strings"
6
7
)
7
8
9
+ func contains (s []string , e string ) bool {
10
+ for _ , a := range s {
11
+ if strings .Contains (a , e ) {
12
+ return true
13
+ }
14
+ }
15
+ return false
16
+ }
17
+
8
18
func Run (files []string , stdin string ) (string , string , error , string ) {
9
19
workDir := filepath .Dir (files [0 ])
10
20
binName := "a.out"
21
+ containsToml := contains (files , "Cargo.toml" )
11
22
12
- stdout , stderr , err , duration := cmd .Run (workDir , "rustc" , "-o" , binName , files [0 ])
13
- if err != nil {
14
- return stdout , stderr , err , duration
23
+ // if contains toml, we run unit tests
24
+ if (containsToml ) {
25
+ stdout , stderr , err , duration := cmd .Run (workDir , "cargo" , "build" )
26
+ if err != nil {
27
+ return stdout , stderr , err , duration
28
+ }
29
+ return cmd .RunStdin (workDir , stdin , "cargo" , "test" )
30
+ } else {
31
+ stdout , stderr , err , duration := cmd .Run (workDir , "rustc" , "-o" , binName , files [0 ])
32
+ if err != nil {
33
+ return stdout , stderr , err , duration
34
+ }
35
+ binPath := filepath .Join (workDir , binName )
36
+ return cmd .RunStdin (workDir , stdin , binPath )
15
37
}
16
-
17
- binPath := filepath .Join (workDir , binName )
18
- return cmd .RunStdin (workDir , stdin , binPath )
19
38
}
0 commit comments