1package watch 2 3import ( 4 "fmt" 5 "math" 6 "time" 7 8 "github.com/onsi/ginkgo/ginkgo/testsuite" 9) 10 11type Suite struct { 12 Suite testsuite.TestSuite 13 RunTime time.Time 14 Dependencies Dependencies 15 16 sharedPackageHashes *PackageHashes 17} 18 19func NewSuite(suite testsuite.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 38func (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 46func (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 64func (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 73func (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 77func (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} 88