t / t1502-rev-parse-parseopt.shon commit Sync with v1.8.5.6 (6898b79)
   1#!/bin/sh
   2
   3test_description='test git rev-parse --parseopt'
   4. ./test-lib.sh
   5
   6cat > expect <<\END_EXPECT
   7cat <<\EOF
   8usage: some-command [options] <args>...
   9
  10    some-command does foo and bar!
  11
  12    -h, --help            show the help
  13    --foo                 some nifty option --foo
  14    --bar ...             some cool option --bar with an argument
  15    -b, --baz             a short and long option
  16
  17An option group Header
  18    -C[...]               option C with an optional argument
  19    -d, --data[=...]      short and long option with an optional argument
  20
  21Extras
  22    --extra1              line above used to cause a segfault but no longer does
  23
  24EOF
  25END_EXPECT
  26
  27cat > optionspec << EOF
  28some-command [options] <args>...
  29
  30some-command does foo and bar!
  31--
  32h,help    show the help
  33
  34foo       some nifty option --foo
  35bar=      some cool option --bar with an argument
  36b,baz     a short and long option
  37
  38 An option group Header
  39C?        option C with an optional argument
  40d,data?   short and long option with an optional argument
  41
  42Extras
  43extra1    line above used to cause a segfault but no longer does
  44EOF
  45
  46test_expect_success 'test --parseopt help output' '
  47        test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
  48        test_i18ncmp expect output
  49'
  50
  51cat > expect <<EOF
  52set -- --foo --bar 'ham' -b -- 'arg'
  53EOF
  54
  55test_expect_success 'test --parseopt' '
  56        git rev-parse --parseopt -- --foo --bar=ham --baz arg < optionspec > output &&
  57        test_cmp expect output
  58'
  59
  60test_expect_success 'test --parseopt with mixed options and arguments' '
  61        git rev-parse --parseopt -- --foo arg --bar=ham --baz < optionspec > output &&
  62        test_cmp expect output
  63'
  64
  65cat > expect <<EOF
  66set -- --foo -- 'arg' '--bar=ham'
  67EOF
  68
  69test_expect_success 'test --parseopt with --' '
  70        git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
  71        test_cmp expect output
  72'
  73
  74test_expect_success 'test --parseopt --stop-at-non-option' '
  75        git rev-parse --parseopt --stop-at-non-option -- --foo arg --bar=ham < optionspec > output &&
  76        test_cmp expect output
  77'
  78
  79cat > expect <<EOF
  80set -- --foo -- '--' 'arg' '--bar=ham'
  81EOF
  82
  83test_expect_success 'test --parseopt --keep-dashdash' '
  84        git rev-parse --parseopt --keep-dashdash -- --foo -- arg --bar=ham < optionspec > output &&
  85        test_cmp expect output
  86'
  87
  88cat >expect <<EOF
  89set -- --foo -- '--' 'arg' '--spam=ham'
  90EOF
  91
  92test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' '
  93        git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
  94        test_cmp expect output
  95'
  96
  97cat > expect <<EOF
  98set -- --foo -- 'arg' '--spam=ham'
  99EOF
 100
 101test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' '
 102        git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
 103        test_cmp expect output
 104'
 105
 106cat > expect <<EOF
 107set -- --foo --bar='z' --baz -C'Z' --data='A' -- 'arg'
 108EOF
 109
 110test_expect_success 'test --parseopt --stuck-long' '
 111        git rev-parse --parseopt --stuck-long -- --foo --bar=z -b arg -CZ -dA <optionspec >output &&
 112        test_cmp expect output
 113'
 114
 115cat > expect <<EOF
 116set -- --data='' -C --baz -- 'arg'
 117EOF
 118
 119test_expect_success 'test --parseopt --stuck-long and empty optional argument' '
 120        git rev-parse --parseopt --stuck-long -- --data= arg -C -b <optionspec >output &&
 121        test_cmp expect output
 122'
 123
 124cat > expect <<EOF
 125set -- --data --baz -- 'arg'
 126EOF
 127
 128test_expect_success 'test --parseopt --stuck-long and long option with unset optional argument' '
 129        git rev-parse --parseopt --stuck-long -- --data arg -b <optionspec >output &&
 130        test_cmp expect output
 131'
 132
 133test_expect_success 'test --parseopt --stuck-long and short option with unset optional argument' '
 134        git rev-parse --parseopt --stuck-long -- -d arg -b <optionspec >output &&
 135        test_cmp expect output
 136'
 137
 138test_done