# Copyright (C) 2015-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 file is part of the GDB testsuite.  It tests the mechanism
# of exposing types to Python.

load_lib gdb-python.exp

# Note that the purpose of this testcase is to test the behavior
# of gdb.lookup_type searching for the primitive types internally
# created by each language since GDB.  So, we must start GDB without
# loading any symbol in.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

proc test_lookup_type { lang type_name } {
    gdb_test_no_output "set language ${lang}"
    gdb_test "python print(gdb.lookup_type('${type_name}').name)" \
        "${type_name}" \
        "lookup type ${type_name} using language ${lang}"
}

test_lookup_type "ada" "character"

test_lookup_type "c" "char"

test_lookup_type "d" "ucent"

test_lookup_type "fortran" "character"

test_lookup_type "go" "int32"

test_lookup_type "modula-2" "CARDINAL"

test_lookup_type "opencl" "ushort"

test_lookup_type "objective-c" "char"

test_lookup_type "pascal" "char"
