// Package suite contains logic for creating testing suite structs
// and running the methods on those structs as tests.  The most useful
// piece of this package is that you can create setup/teardown methods
// on your testing suites, which will run before/after the whole suite
// or individual tests (depending on which interface(s) you
// implement).
//
// The suite package does not support parallel tests. See [issue 934].
//
// A testing suite is usually built by first extending the built-in
// suite functionality from suite.Suite in testify.  Alternatively,
// you could reproduce that logic on your own if you wanted (you
// just need to implement the TestingSuite interface from
// suite/interfaces.go).
//
// After that, you can implement any of the interfaces in
// suite/interfaces.go to add setup/teardown functionality to your
// suite, and add any methods that start with "Test" to add tests.
// Methods that do not match any suite interfaces and do not begin
// with "Test" will not be run by testify, and can safely be used as
// helper methods.
//
// Once you've built your testing suite, you need to run the suite
// (using suite.Run from testify) inside any function that matches the
// identity that "go test" is already looking for (i.e.
// func(*testing.T)).
//
// Regular expression to select test suites specified command-line
// argument "-run". Regular expression to select the methods
// of test suites specified command-line argument "-m".
// Suite object has assertion methods.
//
// A crude example:
//
//	// Basic imports
//	import (
//	    "testing"
//	    "github.com/stretchr/testify/assert"
//	    "github.com/stretchr/testify/suite"
//	)
//
//	// Define the suite, and absorb the built-in basic suite
//	// functionality from testify - including a T() method which
//	// returns the current testing context
//	type ExampleTestSuite struct {
//	    suite.Suite
//	    VariableThatShouldStartAtFive int
//	}
//
//	// Make sure that VariableThatShouldStartAtFive is set to five
//	// before each test
//	func (suite *ExampleTestSuite) SetupTest() {
//	    suite.VariableThatShouldStartAtFive = 5
//	}
//
//	// All methods that begin with "Test" are run as tests within a
//	// suite.
//	func (suite *ExampleTestSuite) TestExample() {
//	    assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive)
//	    suite.Equal(5, suite.VariableThatShouldStartAtFive)
//	}
//
//	// In order for 'go test' to run this suite, we need to create
//	// a normal test function and pass our suite to suite.Run
//	func TestExampleTestSuite(t *testing.T) {
//	    suite.Run(t, new(ExampleTestSuite))
//	}
//
// [issue 934]: https://github.com/stretchr/testify/issues/934
package suite
