2019ea789107dc166c24648ff53a4e954aece386
   1#!/bin/sh
   2
   3test_description=git-hash-object
   4
   5. ./test-lib.sh
   6
   7echo_without_newline() {
   8        printf '%s' "$*"
   9}
  10
  11test_blob_does_not_exist() {
  12        test_expect_success 'blob does not exist in database' "
  13                test_must_fail git cat-file blob $1
  14        "
  15}
  16
  17test_blob_exists() {
  18        test_expect_success 'blob exists in database' "
  19                git cat-file blob $1
  20        "
  21}
  22
  23hello_content="Hello World"
  24hello_sha1=5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
  25
  26example_content="This is an example"
  27example_sha1=ddd3f836d3e3fbb7ae289aa9ae83536f76956399
  28
  29setup_repo() {
  30        echo_without_newline "$hello_content" > hello
  31        echo_without_newline "$example_content" > example
  32}
  33
  34test_repo=test
  35push_repo() {
  36        test_create_repo $test_repo
  37        cd $test_repo
  38
  39        setup_repo
  40}
  41
  42pop_repo() {
  43        cd ..
  44        rm -rf $test_repo
  45}
  46
  47setup_repo
  48
  49# Argument checking
  50
  51test_expect_success "multiple '--stdin's are rejected" '
  52        test_must_fail git hash-object --stdin --stdin < example
  53'
  54
  55# Behavior
  56
  57push_repo
  58
  59test_expect_success 'hash a file' '
  60        test $hello_sha1 = $(git hash-object hello)
  61'
  62
  63test_blob_does_not_exist $hello_sha1
  64
  65test_expect_success 'hash from stdin' '
  66        test $example_sha1 = $(git hash-object --stdin < example)
  67'
  68
  69test_blob_does_not_exist $example_sha1
  70
  71test_expect_success 'hash a file and write to database' '
  72        test $hello_sha1 = $(git hash-object -w hello)
  73'
  74
  75test_blob_exists $hello_sha1
  76
  77test_expect_success 'git hash-object --stdin file1 <file0 first operates on file0, then file1' '
  78        echo foo > file1 &&
  79        obname0=$(echo bar | git hash-object --stdin) &&
  80        obname1=$(git hash-object file1) &&
  81        obname0new=$(echo bar | git hash-object --stdin file1 | sed -n -e 1p) &&
  82        obname1new=$(echo bar | git hash-object --stdin file1 | sed -n -e 2p) &&
  83        test "$obname0" = "$obname0new" &&
  84        test "$obname1" = "$obname1new"
  85'
  86
  87pop_repo
  88
  89for args in "-w --stdin" "--stdin -w"; do
  90        push_repo
  91
  92        test_expect_success "hash from stdin and write to database ($args)" '
  93                test $example_sha1 = $(git hash-object $args < example)
  94        '
  95
  96        test_blob_exists $example_sha1
  97
  98        pop_repo
  99done
 100
 101test_done