2
2
3
3
//go:build mage
4
4
5
- // Build steps for the expect API:
5
+ // Build steps for the date API:
6
6
package main
7
7
8
8
import (
9
9
"github.com/magefile/mage/sh"
10
+ "io/fs"
10
11
"log"
11
12
"os"
13
+ "path/filepath"
14
+ "sort"
15
+ "strings"
12
16
)
13
17
14
- var Default = Build
18
+ var Default = Coverage
15
19
16
20
func Build () error {
17
- if err := Tidy (); err != nil {
18
- return err
19
- }
20
- if err := Test (); err != nil {
21
+ if err := sh .RunV ("go" , "test" , "./..." ); err != nil {
21
22
return err
22
23
}
23
24
if err := sh .RunV ("gofmt" , "-l" , "-w" , "-s" , "." ); err != nil {
24
25
return err
25
26
}
26
- if err := Install (); err != nil {
27
- return err
28
- }
29
- return nil
30
- }
31
-
32
- // runs go mod download & tidy
33
- func Tidy () error {
34
- if err := sh .RunV ("go" , "mod" , "download" ); err != nil {
27
+ if err := sh .RunV ("go" , "vet" , "./..." ); err != nil {
35
28
return err
36
29
}
37
- if err := sh . RunV ( "go" , "mod" , "tidy" ); err != nil {
30
+ if err := Install ( ); err != nil {
38
31
return err
39
32
}
40
33
return nil
@@ -49,24 +42,18 @@ func Install() error {
49
42
}
50
43
51
44
// tests all the code and prints coverage information
52
- func Test () error {
53
- dirs := []string {"." , "./clock" , "./gregorian" , "./timespan" , "./view" }
54
- for _ , pkg := range dirs {
55
- if err := sh .RunV ("go" , "test" , "-v" , "-covermode=count" , "-coverprofile=" + nameOf (pkg ), pkg ); err != nil {
56
- return err
57
- }
45
+ func Coverage () error {
46
+ if err := Build (); err != nil {
47
+ return err
58
48
}
59
- for _ , pkg := range dirs {
60
- if err := sh .RunV ("go" , "tool " , "cover " , "-func =" + nameOf ( pkg )); err != nil {
49
+ for _ , dir := range listOfFoldersContainingTests () {
50
+ if err := sh .RunV ("go" , "test " , "-covermode=count " , "-coverprofile =" + dir + "test.out" , packageName ( dir )); err != nil {
61
51
return err
62
52
}
63
- if err := sh .Run ( "rm " , nameOf ( pkg ) ); err != nil {
53
+ if err := sh .RunV ( "go " , "tool" , "cover" , "-func=" + dir + "test.out" ); err != nil {
64
54
return err
65
55
}
66
56
}
67
- if err := sh .RunV ("go" , "vet" , "./..." ); err != nil {
68
- return err
69
- }
70
57
return nil
71
58
}
72
59
@@ -83,9 +70,34 @@ func CrossCompile() error {
83
70
return nil
84
71
}
85
72
86
- func nameOf (pkg string ) string {
87
- if pkg == "." {
88
- return "date.out"
73
+ func listOfFoldersContainingTests () []string {
74
+ root , _ := os .Getwd ()
75
+ fileSystem := os .DirFS (root )
76
+ set := map [string ]struct {}{}
77
+
78
+ fs .WalkDir (fileSystem , "." , func (path string , d fs.DirEntry , err error ) error {
79
+ if err != nil {
80
+ log .Fatal (err )
81
+ }
82
+ if strings .HasSuffix (path , "_test.go" ) {
83
+ dir , _ := filepath .Split (path )
84
+ set [dir ] = struct {}{}
85
+ }
86
+ return nil
87
+ })
88
+
89
+ list := make ([]string , 0 , len (set ))
90
+ for dir := range set {
91
+ list = append (list , dir )
92
+ }
93
+ sort .Strings (list )
94
+ return list
95
+ }
96
+
97
+ func packageName (dir string ) string {
98
+ dir , _ = strings .CutSuffix (dir , "/" )
99
+ if dir == "" {
100
+ return dir
89
101
}
90
- return pkg + ".out"
102
+ return "./" + dir
91
103
}
0 commit comments