t / t1502-rev-parse-parseopt.shon commit Merge branch 'jc/merge-reduce-parents-early' (283097e)
   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
  16An option group Header
  17    -C[...]               option C with an optional argument
  18
  19Extras
  20    --extra1              line above used to cause a segfault but no longer does
  21
  22EOF
  23END_EXPECT
  24
  25cat > optionspec << EOF
  26some-command [options] <args>...
  27
  28some-command does foo and bar!
  29--
  30h,help    show the help
  31
  32foo       some nifty option --foo
  33bar=      some cool option --bar with an argument
  34
  35 An option group Header
  36C?        option C with an optional argument
  37
  38Extras
  39extra1    line above used to cause a segfault but no longer does
  40EOF
  41
  42test_expect_success 'test --parseopt help output' '
  43        test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
  44        test_cmp expect output
  45'
  46
  47cat > expect <<EOF
  48set -- --foo --bar 'ham' -- 'arg'
  49EOF
  50
  51test_expect_success 'test --parseopt' '
  52        git rev-parse --parseopt -- --foo --bar=ham arg < optionspec > output &&
  53        test_cmp expect output
  54'
  55
  56test_expect_success 'test --parseopt with mixed options and arguments' '
  57        git rev-parse --parseopt -- --foo arg --bar=ham < optionspec > output &&
  58        test_cmp expect output
  59'
  60
  61cat > expect <<EOF
  62set -- --foo -- 'arg' '--bar=ham'
  63EOF
  64
  65test_expect_success 'test --parseopt with --' '
  66        git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
  67        test_cmp expect output
  68'
  69
  70test_expect_success 'test --parseopt --stop-at-non-option' '
  71        git rev-parse --parseopt --stop-at-non-option -- --foo arg --bar=ham < optionspec > output &&
  72        test_cmp expect output
  73'
  74
  75cat > expect <<EOF
  76set -- --foo -- '--' 'arg' '--bar=ham'
  77EOF
  78
  79test_expect_success 'test --parseopt --keep-dashdash' '
  80        git rev-parse --parseopt --keep-dashdash -- --foo -- arg --bar=ham < optionspec > output &&
  81        test_cmp expect output
  82'
  83
  84cat >expect <<EOF
  85set -- --foo -- '--' 'arg' '--spam=ham'
  86EOF
  87
  88test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' '
  89        git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
  90        test_cmp expect output
  91'
  92
  93cat > expect <<EOF
  94set -- --foo -- 'arg' '--spam=ham'
  95EOF
  96
  97test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' '
  98        git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
  99        test_cmp expect output
 100'
 101
 102test_done