# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2018-2020 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

gdb_start

proc test_good { arg } {
    gdb_test_no_output "set record btrace cpu $arg" "set cpu $arg"
    gdb_test "show record btrace cpu" "btrace cpu is '$arg'\." \
        "show cpu $arg"
}

proc test_bad { arg current } {
    gdb_test "set record btrace cpu $arg" \
        "Bad format\.  See \"help set record btrace cpu\"\." \
        "set cpu $arg"
    gdb_test "show record btrace cpu" "btrace cpu is '$current'\." \
        "show cpu $arg"
}

proc test_junk { arg junk current } {
    gdb_test "set record btrace cpu $arg" \
        "Trailing junk: '$junk'\." \
        "set cpu $arg"
    gdb_test "show record btrace cpu" "btrace cpu is '$current'\." \
        "show cpu $arg"
}

gdb_test "show record btrace cpu" "btrace cpu is 'auto'\." "default cpu"

gdb_test "set record" \
    "\"set record\" must be followed by an appropriate subcommand.*"
gdb_test "set record btrace" \
    "\"set record btrace\" must be followed by an appropriate subcommand.*"
test_bad "" "auto"

test_good "intel: 0/0"
test_good "intel: 0/0/1"

# We omit a zero stepping in the output.
gdb_test_no_output "set record btrace cpu intel: 0/0/0" \
    "set cpu intel: 0/0/0"
gdb_test "show record btrace cpu" "btrace cpu is 'intel: 0/0'\." \
    "show cpu intel: 0/0/0"

test_good "auto"
test_good "none"

test_bad "intel: foo" "none"
test_bad "intel: 0" "none"
test_bad "intel: 0/" "none"
test_bad "intel: 0/foo" "none"
test_bad "intel: foo/bar" "none"
test_bad "intel: foo/0" "none"
test_bad "intel: 0x0/0" "none"

test_junk "intel: 0/0 foo" " foo" "none"
test_junk "intel: 0/0x0" "x0" "none"
test_junk "intel: 0/0/foo" "/foo" "none"
test_junk "intel: 0/0/0 foo" " foo" "none"
test_junk "intel: 0/0/0x0" "x0" "none"
