Signed-off-by: Adam Roben <aroben@xxxxxxxxx> --- t/t1006-cat-file.sh | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 101 insertions(+), 0 deletions(-) create mode 100755 t/t1006-cat-file.sh diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh new file mode 100755 index 0000000..15741d9 --- /dev/null +++ b/t/t1006-cat-file.sh @@ -0,0 +1,101 @@ +#!/bin/sh + +test_description='git cat-file' + +. ./test-lib.sh + +function echo_without_newline() +{ + echo "$@\c" +} + +function strlen() +{ + echo_without_newline "$1" | wc -c | sed -e 's/^ *//' +} + +function maybe_remove_timestamp() +{ + if test -z "$2"; then + echo_without_newline "$1" + else + echo_without_newline "$1" | sed -e 's/ [0-9]\{10\} [+-][0-9]\{4\}$//' + fi +} + +function run_tests() +{ + type=$1 + sha1=$2 + size=$3 + content=$4 + pretty_content=$5 + no_timestamp=$6 + + test_expect_success \ + "$type exists" \ + "git cat-file -e $sha1" + test_expect_success \ + "Type of $type is correct" \ + "test $type = \"\$(git cat-file -t $sha1)\"" + test_expect_success \ + "Size of $type is correct" \ + "test $size = \"\$(git cat-file -s $sha1)\"" + test -z "$content" || test_expect_success \ + "Content of $type is correct" \ + "test \"\$(maybe_remove_timestamp '$content' $no_timestamp)\" = \"\$(maybe_remove_timestamp \"\$(git cat-file $type $sha1)\" $no_timestamp)\"" + test_expect_success \ + "Pretty content of $type is correct" \ + "test \"\$(maybe_remove_timestamp '$pretty_content' $no_timestamp)\" = \"\$(maybe_remove_timestamp \"\$(git cat-file -p $sha1)\" $no_timestamp)\"" +} + +hello_content="Hello World" +hello_size=$(strlen "$hello_content") +hello_sha1=$(echo_without_newline "$hello_content" | git hash-object --stdin) + +test_expect_success \ + "setup" \ + "echo_without_newline \"$hello_content\" > hello && + git update-index --add hello" + +run_tests 'blob' $hello_sha1 $hello_size "$hello_content" "$hello_content" + +tree_sha1=$(git write-tree) +tree_size=33 +tree_pretty_content="100644 blob $hello_sha1 hello" + +run_tests 'tree' $tree_sha1 $tree_size "" "$tree_pretty_content" + +commit_message="Intial commit" +commit_sha1=$(echo_without_newline "$commit_message" | git commit-tree $tree_sha1) +commit_size=176 +commit_content="tree $tree_sha1 +author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> 0000000000 +0000 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 0000000000 +0000 + +$commit_message" + +run_tests 'commit' $commit_sha1 $commit_size "$commit_content" "$commit_content" 1 + +tag_header_without_timestamp="object $hello_sha1 +type blob +tag hellotag +tagger $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" +tag_description="This is a tag" +tag_content="$tag_header_without_timestamp 0000000000 +0000 + +$tag_description" +tag_pretty_content="$tag_header_without_timestamp Thu Jan 1 00:00:00 1970 +0000 + +$tag_description" + +tag_sha1=$(echo_without_newline "$tag_content" | git mktag) +tag_size=$(strlen "$tag_content") + +run_tests 'tag' $tag_sha1 $tag_size "$tag_content" "$tag_pretty_content" 1 + +test_expect_success \ + "Reach a blob from a tag pointing to it" \ + "test '$hello_content' = \"\$(git cat-file blob $tag_sha1)\"" + +test_done -- 1.5.5.1.152.g9aeb7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html