internal

package
v2.22.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 21, 2024 License: MIT Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const BAILOUT_MESSAGE = `` /* 1486-byte string literal not displayed */
View Source
const BAILOUT_TIME = 1 * time.Second
View Source
const ContinueOnFailure = continueOnFailureType(true)
View Source
const Focus = focusType(true)
View Source
const OncePerOrdered = honorsOrderedType(true)
View Source
const Ordered = orderedType(true)
View Source
const Pending = pendingType(true)
View Source
const Serial = serialType(true)
View Source
const SuppressProgressReporting = suppressProgressReporting(true)

Variables

View Source
var PROGRESS_REPORTER_DEADLING = 5 * time.Second
View Source
var PROGRESS_SIGNALS = []os.Signal{syscall.SIGUSR1}

Functions

func ApplyNestedFocusPolicyToTree

func ApplyNestedFocusPolicyToTree(tree *TreeNode)

If a container marked as focus has a descendant that is also marked as focus, Ginkgo's policy is to unmark the container's focus. This gives developers a more intuitive experience when debugging specs. It is common to focus a container to just run a subset of specs, then identify the specific specs within the container to focus - this policy allows the developer to simply focus those specific specs and not need to go back and turn the focus off of the container:

As a common example, consider:

FDescribe("something to debug", function() {
	It("works", function() {...})
	It("works", function() {...})
	FIt("doesn't work", function() {...})
	It("works", function() {...})
})

here the developer's intent is to focus in on the `"doesn't work"` spec and not to run the adjacent specs in the focused `"something to debug"` container. The nested policy applied by this function enables this behavior.

func GinkgoLogrFunc added in v2.4.0

func GinkgoLogrFunc(writer *Writer) logr.Logger

func MakeIncrementingIndexCounter

func MakeIncrementingIndexCounter() func() (int, error)

func NewProgressReport added in v2.2.0

func NewProgressReport(isRunningInParallel bool, report types.SpecReport, currentNode Node, currentNodeStartTime time.Time, currentStep types.SpecEvent, gwOutput string, timelineLocation types.TimelineLocation, additionalReports []string, sourceRoots []string, includeAll bool) (types.ProgressReport, error)

func NewSpecContext added in v2.3.0

func NewSpecContext(suite *Suite) *specContext

SpecContext includes a reference to `suite` and embeds itself in itself as a "GINKGO_SPEC_CONTEXT" value. This allows users to create child Contexts without having down-stream consumers (e.g. Gomega) lose access to the SpecContext and its methods. This allows us to build extensions on top of Ginkgo that simply take an all-encompassing context.

Note that while SpecContext is used to enforce deadlines by Ginkgo it is not configured as a context.WithDeadline. Instead, Ginkgo owns responsibility for cancelling the context when the deadline elapses.

This is because Ginkgo needs finer control over when the context is canceled. Specifically, Ginkgo needs to generate a ProgressReport before it cancels the context to ensure progress is captured where the spec is currently running. The only way to avoid a race here is to manually control the cancellation.

func OrderSpecs

func OrderSpecs(specs Specs, suiteConfig types.SuiteConfig) (GroupedSpecIndices, GroupedSpecIndices)

func PartitionDecorations

func PartitionDecorations(args ...interface{}) ([]interface{}, []interface{})

func RegisterForProgressSignal added in v2.2.0

func RegisterForProgressSignal(handler func()) context.CancelFunc

func UniqueNodeID

func UniqueNodeID() uint

Types

type Done

type Done chan<- interface{} // Deprecated Done Channel for asynchronous testing

type Failer

type Failer struct {
	// contains filtered or unexported fields
}

func NewFailer

func NewFailer() *Failer

func (*Failer) AbortSuite

func (f *Failer) AbortSuite(message string, location types.CodeLocation)

func (*Failer) Drain

func (f *Failer) Drain() (types.SpecState, types.Failure)

func (*Failer) Fail

func (f *Failer) Fail(message string, location types.CodeLocation)

func (*Failer) GetFailure

func (f *Failer) GetFailure() types.Failure

func (*Failer) GetState

func (f *Failer) GetState() types.SpecState

func (*Failer) Panic

func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{})

func (*Failer) Skip

func (f *Failer) Skip(message string, location types.CodeLocation)

type FlakeAttempts

type FlakeAttempts uint

type GracePeriod added in v2.3.0

type GracePeriod time.Duration

type GroupedSpecIndices

type GroupedSpecIndices []SpecIndices

type Labels

type Labels []string

func UnionOfLabels

func UnionOfLabels(labels ...Labels) Labels

func (Labels) MatchesLabelFilter added in v2.8.0

func (l Labels) MatchesLabelFilter(query string) bool

type MustPassRepeatedly added in v2.4.0

type MustPassRepeatedly uint

type Node

type Node struct {
	ID       uint
	NodeType types.NodeType

	Text         string
	Body         func(SpecContext)
	CodeLocation types.CodeLocation
	NestingLevel int
	HasContext   bool

	SynchronizedBeforeSuiteProc1Body              func(SpecContext) []byte
	SynchronizedBeforeSuiteProc1BodyHasContext    bool
	SynchronizedBeforeSuiteAllProcsBody           func(SpecContext, []byte)
	SynchronizedBeforeSuiteAllProcsBodyHasContext bool

	SynchronizedAfterSuiteAllProcsBody           func(SpecContext)
	SynchronizedAfterSuiteAllProcsBodyHasContext bool
	SynchronizedAfterSuiteProc1Body              func(SpecContext)
	SynchronizedAfterSuiteProc1BodyHasContext    bool

	ReportEachBody  func(SpecContext, types.SpecReport)
	ReportSuiteBody func(SpecContext, types.Report)

	MarkedFocus             bool
	MarkedPending           bool
	MarkedSerial            bool
	MarkedOrdered           bool
	MarkedContinueOnFailure bool
	MarkedOncePerOrdered    bool
	FlakeAttempts           int
	MustPassRepeatedly      int
	Labels                  Labels
	PollProgressAfter       time.Duration
	PollProgressInterval    time.Duration
	NodeTimeout             time.Duration
	SpecTimeout             time.Duration
	GracePeriod             time.Duration

	NodeIDWhereCleanupWasGenerated uint
}

func NewCleanupNode

func NewCleanupNode(deprecationTracker *types.DeprecationTracker, fail func(string, types.CodeLocation), args ...interface{}) (Node, []error)

func NewNode

func NewNode(deprecationTracker *types.DeprecationTracker, nodeType types.NodeType, text string, args ...interface{}) (Node, []error)

func (Node) IsZero

func (n Node) IsZero() bool

type NodeTimeout added in v2.3.0

type NodeTimeout time.Duration

type Nodes

type Nodes []Node

Nodes

func (Nodes) BestTextFor

func (n Nodes) BestTextFor(node Node) string

func (Nodes) Clone added in v2.13.0

func (n Nodes) Clone() Nodes

func (Nodes) CodeLocations

func (n Nodes) CodeLocations() []types.CodeLocation

func (Nodes) ContainsNodeID

func (n Nodes) ContainsNodeID(id uint) bool

func (Nodes) CopyAppend

func (n Nodes) CopyAppend(nodes ...Node) Nodes

func (Nodes) Filter

func (n Nodes) Filter(filter func(Node) bool) Nodes

func (Nodes) FirstNodeMarkedOrdered

func (n Nodes) FirstNodeMarkedOrdered() Node

func (Nodes) FirstNodeWithType

func (n Nodes) FirstNodeWithType(nodeTypes types.NodeType) Node

func (Nodes) FirstSatisfying

func (n Nodes) FirstSatisfying(filter func(Node) bool) Node

func (Nodes) FirstWithNestingLevel

func (n Nodes) FirstWithNestingLevel(level int) Node

func (Nodes) GetMaxFlakeAttempts added in v2.4.0

func (n Nodes) GetMaxFlakeAttempts() int

func (Nodes) GetMaxMustPassRepeatedly added in v2.4.0

func (n Nodes) GetMaxMustPassRepeatedly() int

func (Nodes) HasNodeMarkedFocus

func (n Nodes) HasNodeMarkedFocus() bool

func (Nodes) HasNodeMarkedPending

func (n Nodes) HasNodeMarkedPending() bool

func (Nodes) HasNodeMarkedSerial

func (n Nodes) HasNodeMarkedSerial() bool

func (Nodes) IndexOfFirstNodeMarkedOrdered added in v2.9.5

func (n Nodes) IndexOfFirstNodeMarkedOrdered() int

func (Nodes) Labels

func (n Nodes) Labels() [][]string

func (Nodes) Reverse

func (n Nodes) Reverse() Nodes

func (Nodes) SortedByAscendingNestingLevel

func (n Nodes) SortedByAscendingNestingLevel() Nodes

func (Nodes) SortedByDescendingNestingLevel

func (n Nodes) SortedByDescendingNestingLevel() Nodes

func (Nodes) SplitAround

func (n Nodes) SplitAround(pivot Node) (Nodes, Nodes)

func (Nodes) Texts

func (n Nodes) Texts() []string

func (Nodes) UnionOfLabels

func (n Nodes) UnionOfLabels() []string

func (Nodes) WithType

func (n Nodes) WithType(nodeTypes types.NodeType) Nodes

func (Nodes) WithinNestingLevel

func (n Nodes) WithinNestingLevel(deepestNestingLevel int) Nodes

func (Nodes) WithoutNode

func (n Nodes) WithoutNode(nodeToExclude Node) Nodes

func (Nodes) WithoutType

func (n Nodes) WithoutType(nodeTypes types.NodeType) Nodes

type NoopOutputInterceptor

type NoopOutputInterceptor struct{}

func (NoopOutputInterceptor) PauseIntercepting

func (interceptor NoopOutputInterceptor) PauseIntercepting()

func (NoopOutputInterceptor) ResumeIntercepting

func (interceptor NoopOutputInterceptor) ResumeIntercepting()

func (NoopOutputInterceptor) Shutdown

func (interceptor NoopOutputInterceptor) Shutdown()

func (NoopOutputInterceptor) StartInterceptingOutput

func (interceptor NoopOutputInterceptor) StartInterceptingOutput()

func (NoopOutputInterceptor) StartInterceptingOutputAndForwardTo

func (interceptor NoopOutputInterceptor) StartInterceptingOutputAndForwardTo(io.Writer)

func (NoopOutputInterceptor) StopInterceptingAndReturnOutput

func (interceptor NoopOutputInterceptor) StopInterceptingAndReturnOutput() string

type Offset

type Offset uint

type OutputInterceptor

type OutputInterceptor interface {
	StartInterceptingOutput()
	StartInterceptingOutputAndForwardTo(io.Writer)
	StopInterceptingAndReturnOutput() string

	PauseIntercepting()
	ResumeIntercepting()

	Shutdown()
}

The OutputInterceptor is used by to intercept and capture all stdin and stderr output during a test run.

func NewOSGlobalReassigningOutputInterceptor

func NewOSGlobalReassigningOutputInterceptor() OutputInterceptor

This is used on windows builds but included here so it can be explicitly tested on unix systems too

func NewOutputInterceptor

func NewOutputInterceptor() OutputInterceptor

type Phase

type Phase uint
const (
	PhaseBuildTopLevel Phase = iota
	PhaseBuildTree
	PhaseRun
)

type PollProgressAfter added in v2.2.0

type PollProgressAfter time.Duration

type PollProgressInterval added in v2.2.0

type PollProgressInterval time.Duration

type ProgressReporterManager added in v2.9.0

type ProgressReporterManager struct {
	// contains filtered or unexported fields
}

func NewProgressReporterManager added in v2.9.0

func NewProgressReporterManager() *ProgressReporterManager

func (*ProgressReporterManager) AttachProgressReporter added in v2.9.0

func (prm *ProgressReporterManager) AttachProgressReporter(reporter func() string) func()

func (*ProgressReporterManager) QueryProgressReporters added in v2.9.0

func (prm *ProgressReporterManager) QueryProgressReporters(ctx context.Context, failer *Failer) []string

type ProgressSignalRegistrar added in v2.2.0

type ProgressSignalRegistrar func(func()) context.CancelFunc

type ProgressStepCursor added in v2.2.0

type ProgressStepCursor struct {
	Text         string
	CodeLocation types.CodeLocation
	StartTime    time.Time
}

type ReportEntry

type ReportEntry = types.ReportEntry

func NewReportEntry

func NewReportEntry(name string, cl types.CodeLocation, args ...interface{}) (ReportEntry, error)

type SortableSpecs added in v2.7.0

type SortableSpecs struct {
	Specs   Specs
	Indexes []int
}

func NewSortableSpecs added in v2.7.0

func NewSortableSpecs(specs Specs) *SortableSpecs

func (*SortableSpecs) Len added in v2.7.0

func (s *SortableSpecs) Len() int

func (*SortableSpecs) Less added in v2.7.0

func (s *SortableSpecs) Less(i, j int) bool

func (*SortableSpecs) Swap added in v2.7.0

func (s *SortableSpecs) Swap(i, j int)

type Spec

type Spec struct {
	Nodes Nodes
	Skip  bool
}

func (Spec) FirstNodeWithType

func (s Spec) FirstNodeWithType(nodeTypes types.NodeType) Node

func (Spec) FlakeAttempts

func (s Spec) FlakeAttempts() int

func (Spec) MustPassRepeatedly added in v2.4.0

func (s Spec) MustPassRepeatedly() int

func (Spec) SpecTimeout added in v2.3.0

func (s Spec) SpecTimeout() time.Duration

func (Spec) SubjectID

func (s Spec) SubjectID() uint

func (Spec) Text

func (s Spec) Text() string

type SpecContext added in v2.3.0

type SpecContext interface {
	context.Context

	SpecReport() types.SpecReport
	AttachProgressReporter(func() string) func()
}

type SpecIndices

type SpecIndices []int

type SpecTimeout added in v2.3.0

type SpecTimeout time.Duration

type Specs

type Specs []Spec

func ApplyFocusToSpecs

func ApplyFocusToSpecs(specs Specs, description string, suiteLabels Labels, suiteConfig types.SuiteConfig) (Specs, bool)

Ginkgo supports focussing specs using `FIt`, `FDescribe`, etc. - this is called "programmatic focus" It also supports focussing specs using regular expressions on the command line (`-focus=`, `-skip=`) that match against spec text and file filters (`-focus-files=`, `-skip-files=`) that match against code locations for nodes in specs.

When both programmatic and file filters are provided their results are ANDed together. If multiple kinds of filters are provided, the file filters run first followed by the regex filters.

This function sets the `Skip` property on specs by applying Ginkgo's focus policy: - If there are no CLI arguments and no programmatic focus, do nothing. - If a spec somewhere has programmatic focus skip any specs that have no programmatic focus. - If there are CLI arguments parse them and skip any specs that either don't match the focus filters or do match the skip filters.

*Note:* specs with pending nodes are Skipped when created by NewSpec.

func GenerateSpecsFromTreeRoot

func GenerateSpecsFromTreeRoot(tree *TreeNode) Specs

func (Specs) AtIndices

func (s Specs) AtIndices(indices SpecIndices) Specs

func (Specs) CountWithoutSkip

func (s Specs) CountWithoutSkip() int

func (Specs) HasAnySpecsMarkedPending

func (s Specs) HasAnySpecsMarkedPending() bool

type Suite

type Suite struct {
	*ProgressReporterManager
	// contains filtered or unexported fields
}

func NewSuite

func NewSuite() *Suite

func (*Suite) AddReportEntry

func (suite *Suite) AddReportEntry(entry ReportEntry) error

func (*Suite) BuildTree

func (suite *Suite) BuildTree() error

func (*Suite) By added in v2.5.0

func (suite *Suite) By(text string, callback ...func()) error

func (*Suite) Clone added in v2.13.0

func (suite *Suite) Clone() (*Suite, error)

func (*Suite) CurrentSpecReport

func (suite *Suite) CurrentSpecReport() types.SpecReport

Spec Running methods - used during PhaseRun

func (*Suite) GetPreviewReport added in v2.13.0

func (suite *Suite) GetPreviewReport() types.Report

Only valid in the preview context. In general suite.report only includes the specs run by _this_ node - it is only at the end of the suite that the parallel reports are aggregated. However in the preview context we run in series and

func (*Suite) InRunPhase added in v2.1.3

func (suite *Suite) InRunPhase() bool

func (*Suite) PushNode

func (suite *Suite) PushNode(node Node) error

func (*Suite) Run

func (suite *Suite) Run(description string, suiteLabels Labels, suitePath string, failer *Failer, reporter reporters.Reporter, writer WriterInterface, outputInterceptor OutputInterceptor, interruptHandler interrupt_handler.InterruptHandlerInterface, client parallel_support.Client, progressSignalRegistrar ProgressSignalRegistrar, suiteConfig types.SuiteConfig) (bool, bool)

type TreeNode

type TreeNode struct {
	Node     Node
	Parent   *TreeNode
	Children TreeNodes
}

func (*TreeNode) AncestorNodeChain

func (tn *TreeNode) AncestorNodeChain() Nodes

func (*TreeNode) AppendChild

func (tn *TreeNode) AppendChild(child *TreeNode)

type TreeNodes

type TreeNodes []*TreeNode

func (TreeNodes) Nodes

func (tn TreeNodes) Nodes() Nodes

func (TreeNodes) WithID

func (tn TreeNodes) WithID(id uint) *TreeNode

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

Writer implements WriterInterface and GinkgoWriterInterface

func NewWriter

func NewWriter(outWriter io.Writer) *Writer

func (*Writer) Bytes

func (w *Writer) Bytes() []byte

func (*Writer) ClearTeeWriters

func (w *Writer) ClearTeeWriters()

func (*Writer) Len added in v2.5.0

func (w *Writer) Len() int

func (*Writer) Print

func (w *Writer) Print(a ...interface{})

func (*Writer) Printf

func (w *Writer) Printf(format string, a ...interface{})

func (*Writer) Println

func (w *Writer) Println(a ...interface{})

func (*Writer) SetMode

func (w *Writer) SetMode(mode WriterMode)

func (*Writer) TeeTo

func (w *Writer) TeeTo(writer io.Writer)

GinkgoWriterInterface

func (*Writer) Truncate

func (w *Writer) Truncate()

func (*Writer) Write

func (w *Writer) Write(b []byte) (n int, err error)

type WriterInterface

type WriterInterface interface {
	io.Writer

	Truncate()
	Bytes() []byte
	Len() int
}

type WriterMode

type WriterMode uint
const (
	WriterModeStreamAndBuffer WriterMode = iota
	WriterModeBufferOnly
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL