Automatic Copyright Year update after running gdb/copyright.py
[deliverable/binutils-gdb.git] / gdb / unittests / lookup_name_info-selftests.c
CommitLineData
c62446b1
PA
1/* Self tests for lookup_name_info for GDB, the GNU debugger.
2
88b9d363 3 Copyright (C) 2017-2022 Free Software Foundation, Inc.
c62446b1
PA
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20#include "defs.h"
268a13a5 21#include "gdbsupport/selftest.h"
c62446b1
PA
22#include "symtab.h"
23
24namespace selftests {
25namespace lookup_name {
26
27/* Check that removing parameter info out of NAME produces EXPECTED.
28 COMPLETION_MODE indicates whether we're testing normal and
29 completion mode. FILE and LINE are used to provide better test
30 location information in case the check fails. */
31
32static void
33check_make_paramless (const char *file, int line,
34 enum language lang,
35 const char *name, const char *expected,
36 bool completion_mode)
37{
38 lookup_name_info lookup_name (name, symbol_name_match_type::FULL,
39 completion_mode, true /* ignore_parameters */);
ecc6c606 40 const char *result = lookup_name.language_lookup_name (lang);
c62446b1 41
ecc6c606 42 if (strcmp (result, expected) != 0)
c62446b1
PA
43 {
44 error (_("%s:%d: make-paramless self-test failed: (completion=%d, lang=%d) "
45 "\"%s\" -> \"%s\", expected \"%s\""),
46 file, line, completion_mode, lang, name,
ecc6c606 47 result, expected);
c62446b1
PA
48 }
49}
50
51static void
52run_tests ()
53{
54 /* Helper for CHECK and CHECK_INCOMPL. */
55#define CHECK_1(INCOMPLETE, LANG, NAME, EXPECTED) \
56 do \
57 { \
58 check_make_paramless (__FILE__, __LINE__, \
59 LANG, NAME, \
60 (INCOMPLETE) ? "" : (EXPECTED), false); \
61 check_make_paramless (__FILE__, __LINE__, \
62 LANG, NAME, EXPECTED, true); \
63 } \
64 while (0)
65
66 /* Check that removing parameter info out of NAME produces EXPECTED.
67 Checks both normal and completion modes. */
68#define CHECK(LANG, NAME, EXPECTED) \
69 CHECK_1(false, LANG, NAME, EXPECTED)
70
71 /* Similar, but used when NAME is incomplete -- i.e., NAME has
72 unbalanced parentheses. In this case, looking for the exact name
73 should fail / return empty. */
74#define CHECK_INCOMPL(LANG, NAME, EXPECTED) \
75 CHECK_1 (true, LANG, NAME, EXPECTED)
76
77 /* None of these languages support function overloading like C++
78 does, so building a nameless lookup name ends up being just the
79 same as any other lookup name. Mainly this serves as smoke test
80 that C++-specific code doesn't mess up with other languages that
81 use some other scoping character ('.' vs '::'). */
82 CHECK (language_ada, "pck.ada_hello", "pck__ada_hello");
83 CHECK (language_go, "pck.go_hello", "pck.go_hello");
84 CHECK (language_fortran, "mod::func", "mod::func");
85
86 /* D does support function overloading similar to C++, but we're
87 missing support for stripping parameters. At least make sure the
88 input name is preserved unmodified. */
89 CHECK (language_d, "pck.d_hello", "pck.d_hello");
90
91 /* Just a few basic tests to make sure
92 lookup_name_info::make_paramless is well integrated with
93 cp_remove_params_if_any. gdb/cp-support.c has comprehensive
94 testing of C++ specifics. */
95 CHECK (language_cplus, "function()", "function");
96 CHECK (language_cplus, "function() const", "function");
97 CHECK (language_cplus, "A::B::C()", "A::B::C");
98 CHECK (language_cplus, "A::B::C", "A::B::C");
99
100#undef CHECK
101#undef CHECK_INCOMPL
102}
103
104}} // namespace selftests::lookup_name
105
6c265988 106void _initialize_lookup_name_info_selftests ();
c62446b1
PA
107void
108_initialize_lookup_name_info_selftests ()
109{
110 selftests::register_test ("lookup_name_info",
111 selftests::lookup_name::run_tests);
112}
This page took 0.505368 seconds and 4 git commands to generate.