1#!/bin/sh
   2test_description='test git rev-parse --parseopt'
   4. ./test-lib.sh
   5cat > expect <<\END_EXPECT
   7cat <<\EOF
   8usage: some-command [options] <args>...
   9    some-command does foo and bar!
  11    -h, --help            show the help
  13    --foo                 some nifty option --foo
  14    --bar ...             some cool option --bar with an argument
  15An option group Header
  17    -C[...]               option C with an optional argument
  18Extras
  20    --extra1              line above used to cause a segfault but no longer does
  21EOF
  23END_EXPECT
  24cat > optionspec << EOF
  26some-command [options] <args>...
  27some-command does foo and bar!
  29--
  30h,help    show the help
  31foo       some nifty option --foo
  33bar=      some cool option --bar with an argument
  34 An option group Header
  36C?        option C with an optional argument
  37Extras
  39extra1    line above used to cause a segfault but no longer does
  40EOF
  41test_expect_success 'test --parseopt help output' '
  43        git rev-parse --parseopt -- -h > output < optionspec
  44        test_cmp expect output
  45'
  46cat > expect <<EOF
  48set -- --foo --bar 'ham' -- 'arg'
  49EOF
  50test_expect_success 'test --parseopt' '
  52        git rev-parse --parseopt -- --foo --bar=ham arg < optionspec > output &&
  53        test_cmp expect output
  54'
  55test_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'
  60cat > expect <<EOF
  62set -- --foo -- 'arg' '--bar=ham'
  63EOF
  64test_expect_success 'test --parseopt with --' '
  66        git rev-parse --parseopt -- --foo -- arg --bar=ham < optionspec > output &&
  67        test_cmp expect output
  68'
  69test_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'
  74cat > expect <<EOF
  76set -- --foo -- '--' 'arg' '--bar=ham'
  77EOF
  78test_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'
  83cat >expect <<EOF
  85set -- --foo -- '--' 'arg' '--spam=ham'
  86EOF
  87test_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'
  92cat > expect <<EOF
  94set -- --foo -- 'arg' '--spam=ham'
  95EOF
  96test_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'
 101test_done