package watch import ( "fmt" "math" "time" "github.com/onsi/ginkgo/ginkgo/testsuite" ) type Suite struct { Suite testsuite.TestSuite RunTime time.Time Dependencies Dependencies sharedPackageHashes *PackageHashes } func NewSuite(suite testsuite.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) { deps, err := NewDependencies(suite.Path, maxDepth) if err != nil { return nil, err } sharedPackageHashes.Add(suite.Path) for dep := range deps.Dependencies() { sharedPackageHashes.Add(dep) } return &Suite{ Suite: suite, Dependencies: deps, sharedPackageHashes: sharedPackageHashes, }, nil } func (s *Suite) Delta() float64 { delta := s.delta(s.Suite.Path, true, 0) * 1000 for dep, depth := range s.Dependencies.Dependencies() { delta += s.delta(dep, false, depth) } return delta } func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error { s.RunTime = time.Now() deps, err := NewDependencies(s.Suite.Path, maxDepth) if err != nil { return err } s.sharedPackageHashes.Add(s.Suite.Path) for dep := range deps.Dependencies() { s.sharedPackageHashes.Add(dep) } s.Dependencies = deps return nil } func (s *Suite) Description() string { numDeps := len(s.Dependencies.Dependencies()) pluralizer := "ies" if numDeps == 1 { pluralizer = "y" } return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer) } func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 { return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1) } func (s *Suite) dt(packagePath string, includeTests bool) time.Duration { packageHash := s.sharedPackageHashes.Get(packagePath) var modifiedTime time.Time if includeTests { modifiedTime = packageHash.TestModifiedTime } else { modifiedTime = packageHash.CodeModifiedTime } return modifiedTime.Sub(s.RunTime) }