# Copyright 2016-2021 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/>.

# The -trace-save command is already tested in other files (e.g.
# mi-trace-frame-collected.exp), so this file currently only tests the error
# cases of -trace-save.

load_lib mi-support.exp

mi_gdb_start

# Test with the wrong number of arguments.

proc test_trace_save_wrong_num_args { } {
    set err_re [string_to_regexp "^error,msg=\"Exactly one argument required (file in which to save trace data)\""]

    mi_gdb_test "-trace-save" "$err_re" "-trace-save with missing argument"
    mi_gdb_test "-trace-save a b" "$err_re" "-trace-save with too many arguments"
}

# Test with an unrecognized option.

proc test_trace_save_wrong_opt { } {
    set err_re [string_to_regexp "^error,msg=\"-trace-save: Unknown option ``hey''\""]

    mi_gdb_test "-trace-save -hey" "$err_re" "-trace-save with wrong option"
}

test_trace_save_wrong_num_args
test_trace_save_wrong_opt
