Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyNestedFocusPolicyToTree(tree *TreeNode)
- func GinkgoLogrFunc(writer *Writer) logr.Logger
- func MakeIncrementingIndexCounter() func() (int, error)
- func NewProgressReport(isRunningInParallel bool, report types.SpecReport, currentNode Node, ...) (types.ProgressReport, error)
- func NewSpecContext(suite *Suite) *specContext
- func OrderSpecs(specs Specs, suiteConfig types.SuiteConfig) (GroupedSpecIndices, GroupedSpecIndices)
- func PartitionDecorations(args ...interface{}) ([]interface{}, []interface{})
- func RegisterForProgressSignal(handler func()) context.CancelFunc
- func UniqueNodeID() uint
- type Done
- type Failer
- func (f *Failer) AbortSuite(message string, location types.CodeLocation)
- func (f *Failer) Drain() (types.SpecState, types.Failure)
- func (f *Failer) Fail(message string, location types.CodeLocation)
- func (f *Failer) GetFailure() types.Failure
- func (f *Failer) GetState() types.SpecState
- func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{})
- func (f *Failer) Skip(message string, location types.CodeLocation)
- type FlakeAttempts
- type GracePeriod
- type GroupedSpecIndices
- type Labels
- type MustPassRepeatedly
- type Node
- type NodeTimeout
- type Nodes
- func (n Nodes) BestTextFor(node Node) string
- func (n Nodes) Clone() Nodes
- func (n Nodes) CodeLocations() []types.CodeLocation
- func (n Nodes) ContainsNodeID(id uint) bool
- func (n Nodes) CopyAppend(nodes ...Node) Nodes
- func (n Nodes) Filter(filter func(Node) bool) Nodes
- func (n Nodes) FirstNodeMarkedOrdered() Node
- func (n Nodes) FirstNodeWithType(nodeTypes types.NodeType) Node
- func (n Nodes) FirstSatisfying(filter func(Node) bool) Node
- func (n Nodes) FirstWithNestingLevel(level int) Node
- func (n Nodes) GetMaxFlakeAttempts() int
- func (n Nodes) GetMaxMustPassRepeatedly() int
- func (n Nodes) HasNodeMarkedFocus() bool
- func (n Nodes) HasNodeMarkedPending() bool
- func (n Nodes) HasNodeMarkedSerial() bool
- func (n Nodes) IndexOfFirstNodeMarkedOrdered() int
- func (n Nodes) Labels() [][]string
- func (n Nodes) Reverse() Nodes
- func (n Nodes) SortedByAscendingNestingLevel() Nodes
- func (n Nodes) SortedByDescendingNestingLevel() Nodes
- func (n Nodes) SplitAround(pivot Node) (Nodes, Nodes)
- func (n Nodes) Texts() []string
- func (n Nodes) UnionOfLabels() []string
- func (n Nodes) WithType(nodeTypes types.NodeType) Nodes
- func (n Nodes) WithinNestingLevel(deepestNestingLevel int) Nodes
- func (n Nodes) WithoutNode(nodeToExclude Node) Nodes
- func (n Nodes) WithoutType(nodeTypes types.NodeType) Nodes
- type NoopOutputInterceptor
- func (interceptor NoopOutputInterceptor) PauseIntercepting()
- func (interceptor NoopOutputInterceptor) ResumeIntercepting()
- func (interceptor NoopOutputInterceptor) Shutdown()
- func (interceptor NoopOutputInterceptor) StartInterceptingOutput()
- func (interceptor NoopOutputInterceptor) StartInterceptingOutputAndForwardTo(io.Writer)
- func (interceptor NoopOutputInterceptor) StopInterceptingAndReturnOutput() string
- type Offset
- type OutputInterceptor
- type Phase
- type PollProgressAfter
- type PollProgressInterval
- type ProgressReporterManager
- type ProgressSignalRegistrar
- type ProgressStepCursor
- type ReportEntry
- type SortableSpecs
- type Spec
- type SpecContext
- type SpecIndices
- type SpecTimeout
- type Specs
- type Suite
- func (suite *Suite) AddReportEntry(entry ReportEntry) error
- func (suite *Suite) BuildTree() error
- func (suite *Suite) By(text string, callback ...func()) error
- func (suite *Suite) Clone() (*Suite, error)
- func (suite *Suite) CurrentSpecReport() types.SpecReport
- func (suite *Suite) GetPreviewReport() types.Report
- func (suite *Suite) InRunPhase() bool
- func (suite *Suite) PushNode(node Node) error
- func (suite *Suite) Run(description string, suiteLabels Labels, suitePath string, failer *Failer, ...) (bool, bool)
- type TreeNode
- type TreeNodes
- type Writer
- func (w *Writer) Bytes() []byte
- func (w *Writer) ClearTeeWriters()
- func (w *Writer) Len() int
- func (w *Writer) Print(a ...interface{})
- func (w *Writer) Printf(format string, a ...interface{})
- func (w *Writer) Println(a ...interface{})
- func (w *Writer) SetMode(mode WriterMode)
- func (w *Writer) TeeTo(writer io.Writer)
- func (w *Writer) Truncate()
- func (w *Writer) Write(b []byte) (n int, err error)
- type WriterInterface
- type WriterMode
Constants ¶
const BAILOUT_MESSAGE = `` /* 1486-byte string literal not displayed */
const BAILOUT_TIME = 1 * time.Second
const ContinueOnFailure = continueOnFailureType(true)
const Focus = focusType(true)
const OncePerOrdered = honorsOrderedType(true)
const Ordered = orderedType(true)
const Pending = pendingType(true)
const Serial = serialType(true)
const SuppressProgressReporting = suppressProgressReporting(true)
Variables ¶
var PROGRESS_REPORTER_DEADLING = 5 * time.Second
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 ¶
func NewProgressReport ¶
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 ¶
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 ¶
func RegisterForProgressSignal(handler func()) context.CancelFunc
func UniqueNodeID ¶
func UniqueNodeID() uint
Types ¶
type Failer ¶
type Failer struct {
// contains filtered or unexported fields
}
func (*Failer) AbortSuite ¶
func (f *Failer) AbortSuite(message string, location types.CodeLocation)
func (*Failer) GetFailure ¶
func (*Failer) Panic ¶
func (f *Failer) Panic(location types.CodeLocation, forwardedPanic interface{})
type FlakeAttempts ¶
type FlakeAttempts uint
type GracePeriod ¶
type GroupedSpecIndices ¶
type GroupedSpecIndices []SpecIndices
type MustPassRepeatedly ¶
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)
type NodeTimeout ¶
type Nodes ¶
type Nodes []Node
Nodes
func (Nodes) BestTextFor ¶
func (Nodes) CodeLocations ¶
func (n Nodes) CodeLocations() []types.CodeLocation
func (Nodes) ContainsNodeID ¶
func (Nodes) CopyAppend ¶
func (Nodes) FirstNodeMarkedOrdered ¶
func (Nodes) FirstWithNestingLevel ¶
func (Nodes) GetMaxFlakeAttempts ¶
func (Nodes) GetMaxMustPassRepeatedly ¶
func (Nodes) HasNodeMarkedFocus ¶
func (Nodes) HasNodeMarkedPending ¶
func (Nodes) HasNodeMarkedSerial ¶
func (Nodes) IndexOfFirstNodeMarkedOrdered ¶
func (Nodes) SortedByAscendingNestingLevel ¶
func (Nodes) SortedByDescendingNestingLevel ¶
func (Nodes) UnionOfLabels ¶
func (Nodes) WithinNestingLevel ¶
func (Nodes) WithoutNode ¶
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 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 PollProgressAfter ¶
type PollProgressInterval ¶
type ProgressReporterManager ¶
type ProgressReporterManager struct {
// contains filtered or unexported fields
}
func NewProgressReporterManager ¶
func NewProgressReporterManager() *ProgressReporterManager
func (*ProgressReporterManager) AttachProgressReporter ¶
func (prm *ProgressReporterManager) AttachProgressReporter(reporter func() string) func()
func (*ProgressReporterManager) QueryProgressReporters ¶
func (prm *ProgressReporterManager) QueryProgressReporters(ctx context.Context, failer *Failer) []string
type ProgressSignalRegistrar ¶
type ProgressSignalRegistrar func(func()) context.CancelFunc
type ProgressStepCursor ¶
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 ¶
func NewSortableSpecs ¶
func NewSortableSpecs(specs Specs) *SortableSpecs
func (*SortableSpecs) Len ¶
func (s *SortableSpecs) Len() int
func (*SortableSpecs) Less ¶
func (s *SortableSpecs) Less(i, j int) bool
func (*SortableSpecs) Swap ¶
func (s *SortableSpecs) Swap(i, j int)
type SpecContext ¶
type SpecContext interface { context.Context SpecReport() types.SpecReport AttachProgressReporter(func() string) func() }
type SpecIndices ¶
type SpecIndices []int
type SpecTimeout ¶
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 (Specs) AtIndices ¶
func (s Specs) AtIndices(indices SpecIndices) Specs
func (Specs) CountWithoutSkip ¶
func (Specs) HasAnySpecsMarkedPending ¶
type Suite ¶
type Suite struct { *ProgressReporterManager // contains filtered or unexported fields }
func (*Suite) AddReportEntry ¶
func (suite *Suite) AddReportEntry(entry ReportEntry) error
func (*Suite) CurrentSpecReport ¶
func (suite *Suite) CurrentSpecReport() types.SpecReport
Spec Running methods - used during PhaseRun
func (*Suite) GetPreviewReport ¶
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 ¶
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 Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Writer implements WriterInterface and GinkgoWriterInterface
func (*Writer) ClearTeeWriters ¶
func (w *Writer) ClearTeeWriters()
func (*Writer) SetMode ¶
func (w *Writer) SetMode(mode WriterMode)
type WriterInterface ¶
type WriterMode ¶
type WriterMode uint
const ( WriterModeStreamAndBuffer WriterMode = iota WriterModeBufferOnly )