46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package cover
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"path"
|
|
|
|
"github.com/qiniu/goc/v2/pkg/config"
|
|
)
|
|
|
|
// declareCoverVars attaches the required cover variables names
|
|
// to the files, to be used when annotating the files.
|
|
func declareCoverVars(p *config.Package) map[string]*config.FileVar {
|
|
coverVars := make(map[string]*config.FileVar)
|
|
coverIndex := 0
|
|
// We create the cover counters as new top-level variables in the package.
|
|
// We need to avoid collisions with user variables (GoCover_0 is unlikely but still)
|
|
// and more importantly with dot imports of other covered packages,
|
|
// so we append 12 hex digits from the SHA-256 of the import path.
|
|
// The point is only to avoid accidents, not to defeat users determined to
|
|
// break things.
|
|
sum := sha256.Sum256([]byte(p.ImportPath))
|
|
h := fmt.Sprintf("%x", sum[:6])
|
|
for _, file := range p.GoFiles {
|
|
// These names appear in the cmd/cover HTML interface.
|
|
var longFile = path.Join(p.ImportPath, file)
|
|
coverVars[file] = &config.FileVar{
|
|
File: longFile,
|
|
Var: fmt.Sprintf("GoCover_%d_%x", coverIndex, h),
|
|
}
|
|
coverIndex++
|
|
}
|
|
|
|
for _, file := range p.CgoFiles {
|
|
// These names appear in the cmd/cover HTML interface.
|
|
var longFile = path.Join(p.ImportPath, file)
|
|
coverVars[file] = &config.FileVar{
|
|
File: longFile,
|
|
Var: fmt.Sprintf("GoCover_%d_%x", coverIndex, h),
|
|
}
|
|
coverIndex++
|
|
}
|
|
|
|
return coverVars
|
|
}
|