# This testcase is part of GDB, the GNU debugger.

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


# This test verifies the TYPEREGEXP and NAMEREGEXP matching logic
# in the commands
#   info [args|functions|locals|variables] [-q] [-t TYPEREGEXP] [NAMEREGEXP].


standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile}] } {
    return -1
}

if ![runto setup_done] then {
    return 0
}

set any "\[^\r\n\]*"
set ws "\[ \t\]\+"
set number "\[0-9]\+"


############# Test 'info functions'.

with_test_prefix "info functions nameregexp" {
    foreach cmd {
	"info functions info_fun"
	"info functions -- info_fun"
	"info functions ^info_fun" } {
	    gdb_test $cmd \
		[multi_line \
		     "All functions matching regular expression \".*info_fun.*\":" \
		     "" \
		     "File .*info_qt.c:" \
		     "${number}:	void info_fun1\\\(void\\\);" \
		     "${number}:	int info_fun2\\\(char\\\);" \
		     "${number}:	int info_fun2bis\\\(char\\\);" \
		     "${number}:	entier info_fun2xxx\\\(char, int, int\\\);" \
		     "${number}:	entier info_fun2yyy\\\(char, int, int\\\);" \
		    ]
    }
}

with_test_prefix "info functions nameregexp quiet" {
    foreach cmd {
	"info functions -q info_fun"
	"info functions -q -- info_fun" } {
	    gdb_test $cmd \
		[multi_line \
		     "" \
		     "File .*info_qt.c:" \
		     "${number}:	void info_fun1\\\(void\\\);" \
		     "${number}:	int info_fun2\\\(char\\\);" \
		     "${number}:	int info_fun2bis\\\(char\\\);" \
		     "${number}:	entier info_fun2xxx\\\(char, int, int\\\);" \
		     "${number}:	entier info_fun2yyy\\\(char, int, int\\\);" \
		    ]
	}
}

with_test_prefix "info functions nameregexp quiet no match" {
    foreach cmd {
	"info functions -q nowaythiscanmatch"
	"info functions -q -- -q" } {
	    gdb_test_no_output $cmd
	}
}

with_test_prefix "info functions typeregexp nameregexp" {
    foreach cmd {
	"info functions -t entier -q info_fun"
	"info functions -q -t 'entier (' -- info_fun"
	"info functions -q -t '(char, int, int)' -- info_fun"
	"info functions -q -t 'entier (char, int, int)' -- info_fun" } {
	    gdb_test $cmd \
		[multi_line \
		     "" \
		     "File .*info_qt.c:" \
		     "${number}:	entier info_fun2xxx\\\(char, int, int\\\);" \
		     "${number}:	entier info_fun2yyy\\\(char, int, int\\\);" \
		    ]
	}
}

with_test_prefix "info functions typeregexp nameregexp no match" {
    gdb_test_no_output "info functions -t ganze_Zahl -q info_fun" \
	"quiet output info functions no matching type"
}

############# Test 'info variables'.

with_test_prefix "info variables nameregexp" {
    foreach cmd {
	"info variables info_qt"
	"info variables -- info_qt"
	"info variables ^info_qt" } {
	    gdb_test $cmd \
		[multi_line \
		     "All variables matching regular expression \".*info_qt.*\":" \
		     "" \
		     "File .*info_qt.c:" \
		     "${number}:	entier info_qt_ent;" \
		     "${number}:	int info_qt_inc;" \
		    ]
	}
}

with_test_prefix "info variables nameregexp quiet no match" {
    foreach cmd {
	"info variables -q nowaythiscanmatch"
	"info variables -q -- -q" } {
	    gdb_test_no_output $cmd
	}
}

with_test_prefix "info variables typeregexp nameregexp quiet" {
    foreach cmd {
	"info variables -t entier -q info_qt"
	"info variables -q -t entier -- info_qt" } {
	    gdb_test $cmd \
		[multi_line \
		     "" \
		     "File .*info_qt.c:" \
		     "${number}:	entier info_qt_ent;" \
		    ]
	}
}

with_test_prefix "info variables typeregexp nameregexp quiet no match" {
    gdb_test_no_output "info variables -t ganze_Zahl -q info_at" \
	"quiet output info variables no matching type"
}



############# Test 'info args' in function setup.

gdb_test "frame 1" ".* in setup .*" "set frame 1 for info args"

with_test_prefix "info args matching all args" {
    foreach cmd {
	"info args"
	"info args arg_"
	"info args g"
	"info args -- .*" } {
	    gdb_test $cmd \
		[multi_line \
		     "arg_c = 100 'd'" \
		     "arg_i = 3" \
		     "arg_j = 4" \
		    ]
	}
}

with_test_prefix "info args matching some args" {
    foreach cmd {
	"info args -t int"
	"info args arg_[ij]"} {
	    gdb_test $cmd \
		[multi_line \
		     "arg_i = 3" \
		     "arg_j = 4" \
		    ]
	}
}

with_test_prefix "info args no match" {
    gdb_test "info args nowaythiscanmatch" "No matching arguments." "no matching args"
    gdb_test_no_output "info args -q nowaythiscanmatch" "quiet no matching args"
    gdb_test_no_output "info args -q -t entier" "quiet no matching args with type"
}

############# Test 'info locals' in function setup.

gdb_test "frame 1" ".* in setup .*" "set frame 1 for info locals"

with_test_prefix "info locals matching all locals" {
    foreach cmd {
	"info locals"
	"info locals loc_arg_"
	"info locals g"
	"info locals -- .*" } {
	    gdb_test $cmd \
		[multi_line \
		     "loc_arg_c = 100 'd'" \
		     "loc_arg_i = 3" \
		     "loc_arg_j = 4" \
		    ]
	}
}

with_test_prefix "info locals matching some locals" {
    foreach cmd {
	"info locals -t int"
	"info locals arg_[ij]"
	"info locals loc_arg_[ij]"} {
	    gdb_test $cmd \
		[multi_line \
		     "loc_arg_i = 3" \
		     "loc_arg_j = 4" \
		    ]
	}
}

with_test_prefix "info locals no match" {
    gdb_test "info locals nowaythiscanmatch" "No matching locals." "no matching locals"
    gdb_test_no_output "info locals -q nowaythiscanmatch" "quiet no matching locals"
    gdb_test_no_output "info locals -q -t ganze_Zahl loc" "quiet no matching locals with type"
}

# Verify that the rest of the args is taken as a single regexp.
with_test_prefix "rest of args as single regexp" {
    gdb_test "info functions abc def" \
	"All functions matching regular expression \\\"abc def\\\":" \
	"single regexp"

    gdb_test "info functions -t uvw abc def" \
	"All functions matching regular expression \\\"abc def\\\" with type matching regular expression \\\"uvw\\\":" \
	"-t noquote single regexp"

    gdb_test "info functions -t 'uvw xyz' abc def" \
	"All functions matching regular expression \\\"abc def\\\" with type matching regular expression \\\"uvw xyz\\\":" \
	"-t quote single regexp"
}
