]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t0000-basic.sh
Merge branch 'jk/fast-export-anonym-alt'
[thirdparty/git.git] / t / t0000-basic.sh
index a221f9faf518179fd7f70f7ed1927b0506aee42b..2ff176cd5d954cb1c83f062adbdb28a7e14d2668 100755 (executable)
@@ -20,28 +20,27 @@ modification *should* take notice and update the test vectors here.
 
 . ./test-lib.sh
 
-try_local_x () {
-       local x="local" &&
-       echo "$x"
+try_local_xy () {
+       local x="local" y="alsolocal" &&
+       echo "$x $y"
 }
 
-# This test is an experiment to check whether any Git users are using
-# Shells that don't support the "local" keyword. "local" is not
+# Check whether the shell supports the "local" keyword. "local" is not
 # POSIX-standard, but it is very widely supported by POSIX-compliant
-# shells, and if it doesn't cause problems for people, we would like
-# to be able to use it in Git code.
+# shells, and we rely on it within Git's test framework.
 #
-# For now, this is the only test that requires "local". If your shell
-# fails this test, you can ignore the failure, but please report the
-# problem to the Git mailing list <git@vger.kernel.org>, as it might
-# convince us to continue avoiding the use of "local".
+# If your shell fails this test, the results of other tests may be
+# unreliable. You may wish to report the problem to the Git mailing
+# list <git@vger.kernel.org>, as it could cause us to reconsider
+# relying on "local".
 test_expect_success 'verify that the running shell supports "local"' '
        x="notlocal" &&
-       echo "local" >expected1 &&
-       try_local_x >actual1 &&
+       y="alsonotlocal" &&
+       echo "local alsolocal" >expected1 &&
+       try_local_xy >actual1 &&
        test_cmp expected1 actual1 &&
-       echo "notlocal" >expected2 &&
-       echo "$x" >actual2 &&
+       echo "notlocal alsonotlocal" >expected2 &&
+       echo "$x $y" >actual2 &&
        test_cmp expected2 actual2
 '
 
@@ -96,6 +95,7 @@ _run_sub_test_lib_test_common () {
                export TEST_DIRECTORY &&
                TEST_OUTPUT_DIRECTORY=$(pwd) &&
                export TEST_OUTPUT_DIRECTORY &&
+               sane_unset GIT_TEST_FAIL_PREREQS &&
                if test -z "$neg"
                then
                        ./"$name.sh" "$@" >out 2>err
@@ -125,7 +125,7 @@ check_sub_test_lib_test () {
 
 check_sub_test_lib_test_err () {
        name="$1" # stdin is the expected output from the test
-       # expected error output is in descriptior 3
+       # expected error output is in descriptor 3
        (
                cd "$name" &&
                sed -e 's/^> //' -e 's/Z$//' >expect.out &&
@@ -153,7 +153,7 @@ test_expect_success 'pretend we have a fully passing test suite' "
 "
 
 test_expect_success 'pretend we have a partially passing test suite' "
-       test_must_fail run_sub_test_lib_test \
+       run_sub_test_lib_test_err \
                partial-pass '2/3 tests passing' <<-\\EOF &&
        test_expect_success 'passing test #1' 'true'
        test_expect_success 'failing test #2' 'false'
@@ -217,7 +217,7 @@ test_expect_success 'pretend we have fixed one of two known breakages (run in su
 "
 
 test_expect_success 'pretend we have a pass, fail, and known breakage' "
-       test_must_fail run_sub_test_lib_test \
+       run_sub_test_lib_test_err \
                mixed-results1 'mixed results #1' <<-\\EOF &&
        test_expect_success 'passing test' 'true'
        test_expect_success 'failing test' 'false'
@@ -236,7 +236,7 @@ test_expect_success 'pretend we have a pass, fail, and known breakage' "
 "
 
 test_expect_success 'pretend we have a mix of all possible results' "
-       test_must_fail run_sub_test_lib_test \
+       run_sub_test_lib_test_err \
                mixed-results2 'mixed results #2' <<-\\EOF &&
        test_expect_success 'passing test' 'true'
        test_expect_success 'passing test' 'true'
@@ -272,24 +272,24 @@ test_expect_success 'pretend we have a mix of all possible results' "
 "
 
 test_expect_success C_LOCALE_OUTPUT 'test --verbose' '
-       test_must_fail run_sub_test_lib_test \
-               test-verbose "test verbose" --verbose <<-\EOF &&
+       run_sub_test_lib_test_err \
+               t1234-verbose "test verbose" --verbose <<-\EOF &&
        test_expect_success "passing test" true
        test_expect_success "test with output" "echo foo"
        test_expect_success "failing test" false
        test_done
        EOF
-       mv test-verbose/out test-verbose/out+ &&
-       grep -v "^Initialized empty" test-verbose/out+ >test-verbose/out &&
-       check_sub_test_lib_test test-verbose <<-\EOF
-       > expecting success: true
+       mv t1234-verbose/out t1234-verbose/out+ &&
+       grep -v "^Initialized empty" t1234-verbose/out+ >t1234-verbose/out &&
+       check_sub_test_lib_test t1234-verbose <<-\EOF
+       > expecting success of 1234.1 '\''passing test'\'': true
        > ok 1 - passing test
        > Z
-       > expecting success: echo foo
+       > expecting success of 1234.2 '\''test with output'\'': echo foo
        > foo
        > ok 2 - test with output
        > Z
-       > expecting success: false
+       > expecting success of 1234.3 '\''failing test'\'': false
        > not ok 3 - failing test
        > #     false
        > Z
@@ -299,18 +299,18 @@ test_expect_success C_LOCALE_OUTPUT 'test --verbose' '
 '
 
 test_expect_success 'test --verbose-only' '
-       test_must_fail run_sub_test_lib_test \
-               test-verbose-only-2 "test verbose-only=2" \
+       run_sub_test_lib_test_err \
+               t2345-verbose-only-2 "test verbose-only=2" \
                --verbose-only=2 <<-\EOF &&
        test_expect_success "passing test" true
        test_expect_success "test with output" "echo foo"
        test_expect_success "failing test" false
        test_done
        EOF
-       check_sub_test_lib_test test-verbose-only-2 <<-\EOF
+       check_sub_test_lib_test t2345-verbose-only-2 <<-\EOF
        > ok 1 - passing test
        > Z
-       > expecting success: echo foo
+       > expecting success of 2345.2 '\''test with output'\'': echo foo
        > foo
        > ok 2 - test with output
        > Z
@@ -390,6 +390,44 @@ test_expect_success 'GIT_SKIP_TESTS sh pattern' "
        )
 "
 
+test_expect_success 'GIT_SKIP_TESTS entire suite' "
+       (
+               GIT_SKIP_TESTS='git' && export GIT_SKIP_TESTS &&
+               run_sub_test_lib_test git-skip-tests-entire-suite \
+                       'GIT_SKIP_TESTS entire suite' <<-\\EOF &&
+               for i in 1 2 3
+               do
+                       test_expect_success \"passing test #\$i\" 'true'
+               done
+               test_done
+               EOF
+               check_sub_test_lib_test git-skip-tests-entire-suite <<-\\EOF
+               > 1..0 # SKIP skip all tests in git
+               EOF
+       )
+"
+
+test_expect_success 'GIT_SKIP_TESTS does not skip unmatched suite' "
+       (
+               GIT_SKIP_TESTS='notgit' && export GIT_SKIP_TESTS &&
+               run_sub_test_lib_test git-skip-tests-unmatched-suite \
+                       'GIT_SKIP_TESTS does not skip unmatched suite' <<-\\EOF &&
+               for i in 1 2 3
+               do
+                       test_expect_success \"passing test #\$i\" 'true'
+               done
+               test_done
+               EOF
+               check_sub_test_lib_test git-skip-tests-unmatched-suite <<-\\EOF
+               > ok 1 - passing test #1
+               > ok 2 - passing test #2
+               > ok 3 - passing test #3
+               > # passed all 3 test(s)
+               > 1..3
+               EOF
+       )
+"
+
 test_expect_success '--run basic' "
        run_sub_test_lib_test run-basic \
                '--run basic' --run='1 3 5' <<-\\EOF &&
@@ -723,7 +761,7 @@ donthaveit=yes
 test_expect_success DONTHAVEIT 'unmet prerequisite causes test to be skipped' '
        donthaveit=no
 '
-if test $haveit$donthaveit != yesyes
+if test -z "$GIT_TEST_FAIL_PREREQS_INTERNAL" -a $haveit$donthaveit != yesyes
 then
        say "bug in test framework: prerequisite tags do not work reliably"
        exit 1
@@ -744,7 +782,7 @@ donthaveiteither=yes
 test_expect_success DONTHAVEIT,HAVEIT 'unmet prerequisites causes test to be skipped' '
        donthaveiteither=no
 '
-if test $haveit$donthaveit$donthaveiteither != yesyesyes
+if test -z "$GIT_TEST_FAIL_PREREQS_INTERNAL" -a $haveit$donthaveit$donthaveiteither != yesyesyes
 then
        say "bug in test framework: multiple prerequisite tags do not work reliably"
        exit 1
@@ -760,7 +798,7 @@ test_expect_success !LAZY_TRUE 'missing lazy prereqs skip tests' '
        donthavetrue=no
 '
 
-if test "$havetrue$donthavetrue" != yesyes
+if test -z "$GIT_TEST_FAIL_PREREQS_INTERNAL" -a "$havetrue$donthavetrue" != yesyes
 then
        say 'bug in test framework: lazy prerequisites do not work'
        exit 1
@@ -776,7 +814,7 @@ test_expect_success LAZY_FALSE 'missing negative lazy prereqs will skip' '
        havefalse=no
 '
 
-if test "$nothavefalse$havefalse" != yesyes
+if test -z "$GIT_TEST_FAIL_PREREQS_INTERNAL" -a "$nothavefalse$havefalse" != yesyes
 then
        say 'bug in test framework: negative lazy prerequisites do not work'
        exit 1
@@ -787,14 +825,27 @@ test_expect_success 'tests clean up after themselves' '
        test_when_finished clean=yes
 '
 
-if test $clean != yes
+if test -z "$GIT_TEST_FAIL_PREREQS_INTERNAL" -a $clean != yes
 then
        say "bug in test framework: basic cleanup command does not work reliably"
        exit 1
 fi
 
+test_expect_success 'lazy prereqs do not turn off tracing' "
+       run_sub_test_lib_test lazy-prereq-and-tracing \
+               'lazy prereqs and -x' -v -x <<-\\EOF &&
+       test_lazy_prereq LAZY true
+
+       test_expect_success lazy 'test_have_prereq LAZY && echo trace'
+
+       test_done
+       EOF
+
+       grep 'echo trace' lazy-prereq-and-tracing/err
+"
+
 test_expect_success 'tests clean up even on failures' "
-       test_must_fail run_sub_test_lib_test \
+       run_sub_test_lib_test_err \
                failing-cleanup 'Failing tests with cleanup commands' <<-\\EOF &&
        test_expect_success 'tests clean up even after a failure' '
                touch clean-after-failure &&
@@ -822,6 +873,24 @@ test_expect_success 'tests clean up even on failures' "
        EOF
 "
 
+test_expect_success 'test_atexit is run' "
+       run_sub_test_lib_test_err \
+               atexit-cleanup 'Run atexit commands' -i <<-\\EOF &&
+       test_expect_success 'tests clean up even after a failure' '
+               > ../../clean-atexit &&
+               test_atexit rm ../../clean-atexit &&
+               > ../../also-clean-atexit &&
+               test_atexit rm ../../also-clean-atexit &&
+               > ../../dont-clean-atexit &&
+               (exit 1)
+       '
+       test_done
+       EOF
+       test_path_is_file dont-clean-atexit &&
+       test_path_is_missing clean-atexit &&
+       test_path_is_missing also-clean-atexit
+"
+
 test_expect_success 'test_oid setup' '
        test_oid_init
 '
@@ -859,6 +928,40 @@ test_expect_success 'test_oid can look up data for SHA-256' '
        test "$hexsz" -eq 64
 '
 
+test_expect_success 'test_bool_env' '
+       (
+               sane_unset envvar &&
+
+               test_bool_env envvar true &&
+               ! test_bool_env envvar false &&
+
+               envvar= &&
+               export envvar &&
+               ! test_bool_env envvar true &&
+               ! test_bool_env envvar false &&
+
+               envvar=true &&
+               test_bool_env envvar true &&
+               test_bool_env envvar false &&
+
+               envvar=false &&
+               ! test_bool_env envvar true &&
+               ! test_bool_env envvar false &&
+
+               envvar=invalid &&
+               # When encountering an invalid bool value, test_bool_env
+               # prints its error message to the original stderr of the
+               # test script, hence the redirection of fd 7, and aborts
+               # with "exit 1", hence the subshell.
+               ! ( test_bool_env envvar true ) 7>err &&
+               grep "error: test_bool_env requires bool values" err &&
+
+               envvar=true &&
+               ! ( test_bool_env envvar invalid ) 7>err &&
+               grep "error: test_bool_env requires bool values" err
+       )
+'
+
 ################################################################
 # Basics of the basics