2022-08-09 13:27:12 +02:00
package tests
import (
2022-08-14 12:32:17 +02:00
"fmt"
"os"
"path/filepath"
"strings"
"github.com/jesseduffield/generics/set"
"github.com/jesseduffield/generics/slices"
2022-08-12 01:19:39 +02:00
"github.com/jesseduffield/lazygit/pkg/integration/components"
2022-08-22 11:34:02 +02:00
"github.com/jesseduffield/lazygit/pkg/integration/tests/bisect"
2022-08-09 13:27:12 +02:00
"github.com/jesseduffield/lazygit/pkg/integration/tests/branch"
"github.com/jesseduffield/lazygit/pkg/integration/tests/commit"
2022-08-14 11:15:21 +02:00
"github.com/jesseduffield/lazygit/pkg/integration/tests/custom_commands"
2022-08-09 13:27:12 +02:00
"github.com/jesseduffield/lazygit/pkg/integration/tests/interactive_rebase"
2022-08-14 12:32:17 +02:00
"github.com/jesseduffield/lazygit/pkg/utils"
2022-08-09 13:27:12 +02:00
)
// Here is where we lists the actual tests that will run. When you create a new test,
// be sure to add it to this list.
2022-08-14 12:32:17 +02:00
var tests = [ ] * components . IntegrationTest {
2022-08-09 13:27:12 +02:00
commit . Commit ,
commit . NewBranch ,
branch . Suggestions ,
interactive_rebase . One ,
2022-08-14 11:15:21 +02:00
custom_commands . Basic ,
2022-08-14 12:13:39 +02:00
custom_commands . MultiplePrompts ,
2022-08-14 13:18:12 +02:00
custom_commands . MenuFromCommand ,
2022-08-22 11:34:02 +02:00
bisect . Basic ,
2022-08-09 13:27:12 +02:00
}
2022-08-14 12:32:17 +02:00
func GetTests ( ) [ ] * components . IntegrationTest {
// first we ensure that each test in this directory has actually been added to the above list.
testCount := 0
testNamesSet := set . NewFromSlice ( slices . Map (
tests ,
func ( test * components . IntegrationTest ) string {
return test . Name ( )
} ,
) )
missingTestNames := [ ] string { }
if err := filepath . Walk ( filepath . Join ( utils . GetLazygitRootDirectory ( ) , "pkg/integration/tests" ) , func ( path string , info os . FileInfo , err error ) error {
if ! info . IsDir ( ) && strings . HasSuffix ( path , ".go" ) {
// ignoring this current file
if filepath . Base ( path ) == "tests.go" {
return nil
}
nameFromPath := components . TestNameFromFilePath ( path )
if ! testNamesSet . Includes ( nameFromPath ) {
missingTestNames = append ( missingTestNames , nameFromPath )
}
testCount ++
}
return nil
} ) ; err != nil {
panic ( fmt . Sprintf ( "failed to walk tests: %v" , err ) )
}
if len ( missingTestNames ) > 0 {
panic ( fmt . Sprintf ( "The following tests are missing from the list of tests: %s. You need to add them to `pkg/integration/tests/tests.go`." , strings . Join ( missingTestNames , ", " ) ) )
}
if testCount > len ( tests ) {
panic ( "you have not added all of the tests to the tests list in `pkg/integration/tests/tests.go`" )
} else if testCount < len ( tests ) {
panic ( "There are more tests in `pkg/integration/tests/tests.go` than there are test files in the tests directory. Ensure that you only have one test per file and you haven't included the same test twice in the tests list." )
}
return tests
}