github.com/onsi/ginkgo@v1.16.6-0.20211118180735-4e1925ba4c95/ginkgo/watch/suite.go (about) 1 package watch 2 3 import ( 4 "fmt" 5 "math" 6 "time" 7 8 "github.com/onsi/ginkgo/ginkgo/internal" 9 ) 10 11 type Suite struct { 12 Suite internal.TestSuite 13 RunTime time.Time 14 Dependencies Dependencies 15 16 sharedPackageHashes *PackageHashes 17 } 18 19 func NewSuite(suite internal.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) { 20 deps, err := NewDependencies(suite.Path, maxDepth) 21 if err != nil { 22 return nil, err 23 } 24 25 sharedPackageHashes.Add(suite.Path) 26 for dep := range deps.Dependencies() { 27 sharedPackageHashes.Add(dep) 28 } 29 30 return &Suite{ 31 Suite: suite, 32 Dependencies: deps, 33 34 sharedPackageHashes: sharedPackageHashes, 35 }, nil 36 } 37 38 func (s *Suite) Delta() float64 { 39 delta := s.delta(s.Suite.Path, true, 0) * 1000 40 for dep, depth := range s.Dependencies.Dependencies() { 41 delta += s.delta(dep, false, depth) 42 } 43 return delta 44 } 45 46 func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error { 47 s.RunTime = time.Now() 48 49 deps, err := NewDependencies(s.Suite.Path, maxDepth) 50 if err != nil { 51 return err 52 } 53 54 s.sharedPackageHashes.Add(s.Suite.Path) 55 for dep := range deps.Dependencies() { 56 s.sharedPackageHashes.Add(dep) 57 } 58 59 s.Dependencies = deps 60 61 return nil 62 } 63 64 func (s *Suite) Description() string { 65 numDeps := len(s.Dependencies.Dependencies()) 66 pluralizer := "ies" 67 if numDeps == 1 { 68 pluralizer = "y" 69 } 70 return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer) 71 } 72 73 func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 { 74 return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1) 75 } 76 77 func (s *Suite) dt(packagePath string, includeTests bool) time.Duration { 78 packageHash := s.sharedPackageHashes.Get(packagePath) 79 var modifiedTime time.Time 80 if includeTests { 81 modifiedTime = packageHash.TestModifiedTime 82 } else { 83 modifiedTime = packageHash.CodeModifiedTime 84 } 85 86 return modifiedTime.Sub(s.RunTime) 87 }