Merge branch 'am/update-pathspec-f-f-tests'

Test updates.

* am/update-pathspec-f-f-tests:
  t: directly test parse_pathspec_file()
  t: fix quotes tests for --pathspec-from-file
This commit is contained in:
Junio C Hamano 2020-01-30 14:17:08 -08:00
commit 6909474491
10 changed files with 189 additions and 11 deletions

View File

@ -721,6 +721,7 @@ TEST_BUILTINS_OBJS += test-mktemp.o
TEST_BUILTINS_OBJS += test-oidmap.o
TEST_BUILTINS_OBJS += test-online-cpus.o
TEST_BUILTINS_OBJS += test-parse-options.o
TEST_BUILTINS_OBJS += test-parse-pathspec-file.o
TEST_BUILTINS_OBJS += test-path-utils.o
TEST_BUILTINS_OBJS += test-pkt-line.o
TEST_BUILTINS_OBJS += test-prio-queue.o

View File

@ -0,0 +1,33 @@
#include "test-tool.h"
#include "parse-options.h"
#include "pathspec.h"
#include "gettext.h"
int cmd__parse_pathspec_file(int argc, const char **argv)
{
struct pathspec pathspec;
const char *pathspec_from_file = 0;
int pathspec_file_nul = 0, i;
static const char *const usage[] = {
"test-tool parse-pathspec-file --pathspec-from-file [--pathspec-file-nul]",
NULL
};
struct option options[] = {
OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
OPT_END()
};
parse_options(argc, argv, 0, options, usage, 0);
parse_pathspec_file(&pathspec, 0, 0, 0, pathspec_from_file,
pathspec_file_nul);
for (i = 0; i < pathspec.nr; i++)
printf("%s\n", pathspec.items[i].original);
clear_pathspec(&pathspec);
return 0;
}

View File

@ -39,6 +39,7 @@ static struct test_cmd cmds[] = {
{ "oidmap", cmd__oidmap },
{ "online-cpus", cmd__online_cpus },
{ "parse-options", cmd__parse_options },
{ "parse-pathspec-file", cmd__parse_pathspec_file },
{ "path-utils", cmd__path_utils },
{ "pkt-line", cmd__pkt_line },
{ "prio-queue", cmd__prio_queue },

View File

@ -29,6 +29,7 @@ int cmd__mktemp(int argc, const char **argv);
int cmd__oidmap(int argc, const char **argv);
int cmd__online_cpus(int argc, const char **argv);
int cmd__parse_options(int argc, const char **argv);
int cmd__parse_pathspec_file(int argc, const char** argv);
int cmd__path_utils(int argc, const char **argv);
int cmd__pkt_line(int argc, const char **argv);
int cmd__prio_queue(int argc, const char **argv);

108
t/t0067-parse_pathspec_file.sh Executable file
View File

@ -0,0 +1,108 @@
#!/bin/sh
test_description='Test parse_pathspec_file()'
. ./test-lib.sh
test_expect_success 'one item from stdin' '
cat >expect <<-\EOF &&
fileA.t
EOF
echo fileA.t |
test-tool parse-pathspec-file --pathspec-from-file=- >actual &&
test_cmp expect actual
'
test_expect_success 'one item from file' '
cat >expect <<-\EOF &&
fileA.t
EOF
echo fileA.t >list &&
test-tool parse-pathspec-file --pathspec-from-file=list >actual &&
test_cmp expect actual
'
test_expect_success 'NUL delimiters' '
cat >expect <<-\EOF &&
fileA.t
fileB.t
EOF
printf "fileA.t\0fileB.t\0" |
test-tool parse-pathspec-file --pathspec-from-file=- --pathspec-file-nul >actual &&
test_cmp expect actual
'
test_expect_success 'LF delimiters' '
cat >expect <<-\EOF &&
fileA.t
fileB.t
EOF
printf "fileA.t\nfileB.t\n" |
test-tool parse-pathspec-file --pathspec-from-file=- >actual &&
test_cmp expect actual
'
test_expect_success 'no trailing delimiter' '
cat >expect <<-\EOF &&
fileA.t
fileB.t
EOF
printf "fileA.t\nfileB.t" |
test-tool parse-pathspec-file --pathspec-from-file=- >actual &&
test_cmp expect actual
'
test_expect_success 'CRLF delimiters' '
cat >expect <<-\EOF &&
fileA.t
fileB.t
EOF
printf "fileA.t\r\nfileB.t\r\n" |
test-tool parse-pathspec-file --pathspec-from-file=- >actual &&
test_cmp expect actual
'
test_expect_success 'quotes' '
cat >expect <<-\EOF &&
fileA.t
EOF
cat >list <<-\EOF &&
"file\101.t"
EOF
test-tool parse-pathspec-file --pathspec-from-file=list >actual &&
test_cmp expect actual
'
test_expect_success '--pathspec-file-nul takes quotes literally' '
# Note: there is an extra newline because --pathspec-file-nul takes
# input \n literally, too
cat >expect <<-\EOF &&
"file\101.t"
EOF
cat >list <<-\EOF &&
"file\101.t"
EOF
test-tool parse-pathspec-file --pathspec-from-file=list --pathspec-file-nul >actual &&
test_cmp expect actual
'
test_done

View File

@ -109,7 +109,11 @@ test_expect_success 'CRLF delimiters' '
test_expect_success 'quotes' '
restore_checkpoint &&
printf "\"file\\101.t\"" | git checkout --pathspec-from-file=- HEAD^1 &&
cat >list <<-\EOF &&
"file\101.t"
EOF
git checkout --pathspec-from-file=list HEAD^1 &&
cat >expect <<-\EOF &&
M fileA.t
@ -120,7 +124,10 @@ test_expect_success 'quotes' '
test_expect_success 'quotes not compatible with --pathspec-file-nul' '
restore_checkpoint &&
printf "\"file\\101.t\"" >list &&
cat >list <<-\EOF &&
"file\101.t"
EOF
test_must_fail git checkout --pathspec-from-file=list --pathspec-file-nul HEAD^1
'

View File

@ -109,7 +109,11 @@ test_expect_success 'CRLF delimiters' '
test_expect_success 'quotes' '
restore_checkpoint &&
printf "\"file\\101.t\"" | git restore --pathspec-from-file=- --source=HEAD^1 &&
cat >list <<-\EOF &&
"file\101.t"
EOF
git restore --pathspec-from-file=list --source=HEAD^1 &&
cat >expect <<-\EOF &&
M fileA.t
@ -120,7 +124,10 @@ test_expect_success 'quotes' '
test_expect_success 'quotes not compatible with --pathspec-file-nul' '
restore_checkpoint &&
printf "\"file\\101.t\"" >list &&
cat >list <<-\EOF &&
"file\101.t"
EOF
test_must_fail git restore --pathspec-from-file=list --pathspec-file-nul --source=HEAD^1
'

View File

@ -97,7 +97,11 @@ test_expect_success 'CRLF delimiters' '
test_expect_success 'quotes' '
restore_checkpoint &&
printf "\"file\\101.t\"" | git add --pathspec-from-file=- &&
cat >list <<-\EOF &&
"file\101.t"
EOF
git add --pathspec-from-file=list &&
cat >expect <<-\EOF &&
A fileA.t
@ -108,7 +112,10 @@ test_expect_success 'quotes' '
test_expect_success 'quotes not compatible with --pathspec-file-nul' '
restore_checkpoint &&
printf "\"file\\101.t\"" >list &&
cat >list <<-\EOF &&
"file\101.t"
EOF
test_must_fail git add --pathspec-from-file=list --pathspec-file-nul
'

View File

@ -105,8 +105,12 @@ test_expect_success 'CRLF delimiters' '
test_expect_success 'quotes' '
restore_checkpoint &&
cat >list <<-\EOF &&
"file\101.t"
EOF
git rm fileA.t &&
printf "\"file\\101.t\"" | git reset --pathspec-from-file=- &&
git reset --pathspec-from-file=list &&
cat >expect <<-\EOF &&
D fileA.t
@ -117,8 +121,10 @@ test_expect_success 'quotes' '
test_expect_success 'quotes not compatible with --pathspec-file-nul' '
restore_checkpoint &&
git rm fileA.t &&
printf "\"file\\101.t\"" >list &&
cat >list <<-\EOF &&
"file\101.t"
EOF
# Note: "git reset" has not yet learned to fail on wrong pathspecs
git reset --pathspec-from-file=list --pathspec-file-nul &&

View File

@ -100,7 +100,11 @@ test_expect_success 'CRLF delimiters' '
test_expect_success 'quotes' '
restore_checkpoint &&
printf "\"file\\101.t\"" | git commit --pathspec-from-file=- -m "Commit" &&
cat >list <<-\EOF &&
"file\101.t"
EOF
git commit --pathspec-from-file=list -m "Commit" &&
cat >expect <<-\EOF &&
A fileA.t
@ -111,7 +115,10 @@ test_expect_success 'quotes' '
test_expect_success 'quotes not compatible with --pathspec-file-nul' '
restore_checkpoint &&
printf "\"file\\101.t\"" >list &&
cat >list <<-\EOF &&
"file\101.t"
EOF
test_must_fail git commit --pathspec-from-file=list --pathspec-file-nul -m "Commit"
'