t / t1308-config-set.shon commit Merge branch 'tb/pretty-format-cd-date-format' (3ef87bd)
   1#!/bin/sh
   2
   3test_description='Test git config-set API in different settings'
   4
   5. ./test-lib.sh
   6
   7# 'check_config get_* section.key value' verifies that the entry for
   8# section.key is 'value'
   9check_config () {
  10        if test "$1" = expect_code
  11        then
  12                expect_code="$2" && shift && shift
  13        else
  14                expect_code=0
  15        fi &&
  16        op=$1 key=$2 && shift && shift &&
  17        if test $# != 0
  18        then
  19                printf "%s\n" "$@"
  20        fi >expect &&
  21        test_expect_code $expect_code test-config "$op" "$key" >actual &&
  22        test_cmp expect actual
  23}
  24
  25test_expect_success 'setup default config' '
  26        cat >.git/config <<\EOF
  27        [case]
  28                penguin = very blue
  29                Movie = BadPhysics
  30                UPPERCASE = true
  31                MixedCase = true
  32                my =
  33                foo
  34                baz = sam
  35        [Cores]
  36                WhatEver = Second
  37                baz = bar
  38        [cores]
  39                baz = bat
  40        [CORES]
  41                baz = ball
  42        [my "Foo bAr"]
  43                hi = mixed-case
  44        [my "FOO BAR"]
  45                hi = upper-case
  46        [my "foo bar"]
  47                hi = lower-case
  48        [case]
  49                baz = bat
  50                baz = hask
  51        [lamb]
  52                chop = 65
  53                head = none
  54        [goat]
  55                legs = 4
  56                head = true
  57                skin = false
  58                nose = 1
  59                horns
  60        EOF
  61'
  62
  63test_expect_success 'get value for a simple key' '
  64        check_config get_value case.penguin "very blue"
  65'
  66
  67test_expect_success 'get value for a key with value as an empty string' '
  68        check_config get_value case.my ""
  69'
  70
  71test_expect_success 'get value for a key with value as NULL' '
  72        check_config get_value case.foo "(NULL)"
  73'
  74
  75test_expect_success 'upper case key' '
  76        check_config get_value case.UPPERCASE "true" &&
  77        check_config get_value case.uppercase "true"
  78'
  79
  80test_expect_success 'mixed case key' '
  81        check_config get_value case.MixedCase "true" &&
  82        check_config get_value case.MIXEDCASE "true" &&
  83        check_config get_value case.mixedcase "true"
  84'
  85
  86test_expect_success 'key and value with mixed case' '
  87        check_config get_value case.Movie "BadPhysics"
  88'
  89
  90test_expect_success 'key with case sensitive subsection' '
  91        check_config get_value "my.Foo bAr.hi" "mixed-case" &&
  92        check_config get_value "my.FOO BAR.hi" "upper-case" &&
  93        check_config get_value "my.foo bar.hi" "lower-case"
  94'
  95
  96test_expect_success 'key with case insensitive section header' '
  97        check_config get_value cores.baz "ball" &&
  98        check_config get_value Cores.baz "ball" &&
  99        check_config get_value CORES.baz "ball" &&
 100        check_config get_value coreS.baz "ball"
 101'
 102
 103test_expect_success 'key with case insensitive section header & variable' '
 104        check_config get_value CORES.BAZ "ball" &&
 105        check_config get_value cores.baz "ball" &&
 106        check_config get_value cores.BaZ "ball" &&
 107        check_config get_value cOreS.bAz "ball"
 108'
 109
 110test_expect_success 'find value with misspelled key' '
 111        check_config expect_code 1 get_value "my.fOo Bar.hi" "Value not found for \"my.fOo Bar.hi\""
 112'
 113
 114test_expect_success 'find value with the highest priority' '
 115        check_config get_value case.baz "hask"
 116'
 117
 118test_expect_success 'find integer value for a key' '
 119        check_config get_int lamb.chop 65
 120'
 121
 122test_expect_success 'find integer if value is non parse-able' '
 123        check_config expect_code 128 get_int lamb.head
 124'
 125
 126test_expect_success 'find bool value for the entered key' '
 127        check_config get_bool goat.head 1 &&
 128        check_config get_bool goat.skin 0 &&
 129        check_config get_bool goat.nose 1 &&
 130        check_config get_bool goat.horns 1 &&
 131        check_config get_bool goat.legs 1
 132'
 133
 134test_expect_success 'find multiple values' '
 135        check_config get_value_multi case.baz sam bat hask
 136'
 137
 138test_expect_success 'find value from a configset' '
 139        cat >config2 <<-\EOF &&
 140        [case]
 141                baz = lama
 142        [my]
 143                new = silk
 144        [case]
 145                baz = ball
 146        EOF
 147        echo silk >expect &&
 148        test-config configset_get_value my.new config2 .git/config >actual &&
 149        test_cmp expect actual
 150'
 151
 152test_expect_success 'find value with highest priority from a configset' '
 153        echo hask >expect &&
 154        test-config configset_get_value case.baz config2 .git/config >actual &&
 155        test_cmp expect actual
 156'
 157
 158test_expect_success 'find value_list for a key from a configset' '
 159        cat >except <<-\EOF &&
 160        sam
 161        bat
 162        hask
 163        lama
 164        ball
 165        EOF
 166        test-config configset_get_value case.baz config2 .git/config >actual &&
 167        test_cmp expect actual
 168'
 169
 170test_expect_success 'proper error on non-existent files' '
 171        echo "Error (-1) reading configuration file non-existent-file." >expect &&
 172        test_expect_code 2 test-config configset_get_value foo.bar non-existent-file 2>actual &&
 173        test_cmp expect actual
 174'
 175
 176test_expect_success POSIXPERM,SANITY 'proper error on non-accessible files' '
 177        chmod -r .git/config &&
 178        test_when_finished "chmod +r .git/config" &&
 179        echo "Error (-1) reading configuration file .git/config." >expect &&
 180        test_expect_code 2 test-config configset_get_value foo.bar .git/config 2>actual &&
 181        test_cmp expect actual
 182'
 183
 184test_expect_success 'proper error on error in default config files' '
 185        cp .git/config .git/config.old &&
 186        test_when_finished "mv .git/config.old .git/config" &&
 187        echo "[" >>.git/config &&
 188        echo "fatal: bad config file line 35 in .git/config" >expect &&
 189        test_expect_code 128 test-config get_value foo.bar 2>actual &&
 190        test_cmp expect actual
 191'
 192
 193test_expect_success 'proper error on error in custom config files' '
 194        echo "[" >>syntax-error &&
 195        echo "fatal: bad config file line 1 in syntax-error" >expect &&
 196        test_expect_code 128 test-config configset_get_value foo.bar syntax-error 2>actual &&
 197        test_cmp expect actual
 198'
 199
 200test_done