GDB (xrefs)
lookup_name_info-selftests.c
Go to the documentation of this file.
1 /* Self tests for lookup_name_info for GDB, the GNU debugger.
2 
3  Copyright (C) 2017-2018 Free Software Foundation, Inc.
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"
21 #include "selftest.h"
22 #include "symtab.h"
23 
24 namespace selftests {
25 namespace 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 
32 static void
33 check_make_paramless (const char *file, int line,
34  enum language lang,
35  const char *name, const char *expected,
36  bool completion_mode)
37 {
39  completion_mode, true /* ignore_parameters */);
40  const std::string &result = lookup_name.language_lookup_name (lang);
41 
42  if (result != expected)
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,
47  result.c_str (), expected);
48  }
49 }
50 
51 static void
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 
106 void
108 {
109  selftests::register_test ("lookup_name_info",
111 }
const char * string
Definition: signals.c:50
#define CHECK(LANG, NAME, EXPECTED)
static void check_make_paramless(const char *file, int line, enum language lang, const char *name, const char *expected, bool completion_mode)
#define _(String)
Definition: gdb_locale.h:35
const char *const name
Definition: aarch64-tdep.c:76
const std::string & language_lookup_name(language lang) const
Definition: symtab.h:222
language
Definition: defs.h:203
void register_test(const std::string &name, selftest *test)
Definition: selftest.c:52
void error(const char *fmt,...)
Definition: errors.c:38
void _initialize_lookup_name_info_selftests()