# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Flag completion rule for bash.
# To load in your shell, "source path/to/this/file".

# Usage examples
# ==============
#
# Browser command line switches:
# $ out/gn/chrome --site-per-pro<tab>
# $ google-chrome --site-per-pro<tab>
#
# Test switches (i.e. --gtest_* and --test-launcher-* switches):
# $ out/gn/unit_tests --gtest_filt<tab>
# $ out/gn/unit_tests --test-launcher-j<tab>
#
# Web test switches:
# $ third_party/blink/tools/run_web_tests.py --additional-driver-f<tab>
# $ .../run_web_tests.py --additional-driver-flag=--site-per-pro<tab>
#
# Blink blink_tool.py sub-commands:
# $ third_party/blink/tools/blink_tool.py reb<tab>

if [ -n "$BASH_SOURCE" ]; then
    # The $BASH_SOURCE variable returns path of current script in bash.
    chrome_source=$(cd $(dirname $BASH_SOURCE)/.. && pwd)
else
    # This is here for other similar shells, e.g. zsh.
    chrome_source=$(cd $(dirname $0)/.. && pwd)
fi

_chrome_flag() {
    local cur targets
    cur="${COMP_WORDS[COMP_CWORD]}"
    targets=$(cd $chrome_source; \
        git ls-files '*switches*' | \
        xargs sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p')
    COMPREPLY=($(compgen -W "$targets" -- "$cur"))
    return 0
}

_gtest_flag() {
    local cur gtest_flags launcher_flags
    cur="${COMP_WORDS[COMP_CWORD]}"
    gtest_flags=$(sed -ne 's/^.*FromGTestEnv("\([^" /]\+\)".*$/--gtest_\1/p' \
      "$chrome_source/testing/gtest/src/gtest.cc")
    chrome_test_launcher_flags=$(sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p' \
      "$chrome_source/base/test/test_switches.cc")
    COMPREPLY=($(
      compgen -W "$gtest_flags $chrome_test_launcher_flags" -- "$cur"))
    return 0
}

_web_test_flag() {
    local cur targets blinkpy_dir prev_switch
    cur="${COMP_WORDS[COMP_CWORD]}"

    # Complete content_shell switches if appropriate.
    if [ "${COMP_CWORD}" -gt 2 -a "${COMP_WORDS[COMP_CWORD-1]}" = "=" ]
    then
      prev_switch="${COMP_WORDS[COMP_CWORD-2]}"
      if [ "$prev_switch" = "--additional-drt-flag" -o \
           "$prev_switch" = "--additional-driver-flag" ]
      then
        targets=$(cd $chrome_source; \
            git ls-files 'content/*switches*.cc' | \
            xargs sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p')
        COMPREPLY=($(compgen -W "$targets" -- "$cur"))
        return 0
      fi
    fi

    # Complete run_web_tests.py switches.
    blinkpy_dir="$chrome_source/third_party/blink/tools/blinkpy"
    targets=$(sed -ne 's/^[[:space:]]*"\(--[a-z-]\+\)",[[:space:]]*$/\1/p' \
        "$blinkpy_dir/web_tests/run_webkit_tests.py")
    COMPREPLY=($(compgen -W "$targets" -- "$cur"))
    return 0
}

_blink_tool_flag() {
    local cur targets blink_tools_dir
    cur="${COMP_WORDS[COMP_CWORD]}"
    blink_tools_dir=$chrome_source/third_party/blink/tools
    targets=$($blink_tools_dir/blink_tool.py help | grep '^   [a-z]' | \
        awk '{ print $1 }')
    COMPREPLY=($(compgen -W "$targets" -- "$cur"))
    return 0
}

complete -F _chrome_flag google-chrome
complete -F _chrome_flag chrome
if [ $(uname) = "Darwin" ]
then
  complete -F _chrome_flag Chromium
fi

for gtest_test_executable in $(
  cd $chrome_source;
  git ls-files '*/BUILD.gn' | xargs sed -ne 's/^.*test("\([^"]\+\)").*$/\1/p'
); do
  complete -F _gtest_flag $gtest_test_executable
done

complete -F _web_test_flag run_web_tests.py
complete -F _blink_tool_flag blink_tool.py
