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  }