Add tests for filename_language
The next patch touches the filename_language area, but I noticed there is no test exercising that. This patch adds some selftests for add_filename_language, deduce_language_from_filename and set_ext_lang_command. Because these tests add entries to the global filename_language_table vector, it is not possible to run them successfully multiple times in a same GDB instance. They can potentially interfere with each other for the same reason. I therefore added the scoped_restore_filename_language_table class that is used to make sure tests leave that global vector in the same state they found it (it is replaced in the following patch by a simple scoped_restore). gdb/ChangeLog: * symfile.c: Include selftest.h. (class scoped_restore_filename_language_table): New. (test_filename_language): New test. (test_set_ext_lang_command): New test. (_initialize_symfile): Register tests.
This commit is contained in:
parent
af5f32f82b
commit
32fa66eb88
|
@ -1,3 +1,11 @@
|
||||||
|
2017-10-27 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
|
* symfile.c: Include selftest.h.
|
||||||
|
(class scoped_restore_filename_language_table): New.
|
||||||
|
(test_filename_language): New test.
|
||||||
|
(test_set_ext_lang_command): New test.
|
||||||
|
(_initialize_symfile): Register tests.
|
||||||
|
|
||||||
2017-10-27 Keith Seitz <keiths@redhat.com>
|
2017-10-27 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
* breakpoint.c (print_breakpoint_location): Use the symbol saved
|
* breakpoint.c (print_breakpoint_location): Use the symbol saved
|
||||||
|
|
|
@ -57,6 +57,7 @@
|
||||||
#include "gdb_bfd.h"
|
#include "gdb_bfd.h"
|
||||||
#include "cli/cli-utils.h"
|
#include "cli/cli-utils.h"
|
||||||
#include "common/byte-vector.h"
|
#include "common/byte-vector.h"
|
||||||
|
#include "selftest.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -3829,6 +3830,86 @@ map_symbol_filenames (symbol_filename_ftype *fun, void *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if GDB_SELF_TEST
|
||||||
|
|
||||||
|
namespace selftests {
|
||||||
|
namespace filename_language {
|
||||||
|
|
||||||
|
/* Save the content of the filename_language_table global and restore it when
|
||||||
|
going out of scope. */
|
||||||
|
|
||||||
|
class scoped_restore_filename_language_table
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
scoped_restore_filename_language_table ()
|
||||||
|
{
|
||||||
|
m_saved_table = VEC_copy (filename_language, filename_language_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
~scoped_restore_filename_language_table ()
|
||||||
|
{
|
||||||
|
VEC_free (filename_language, filename_language_table);
|
||||||
|
filename_language_table = VEC_copy (filename_language, m_saved_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
VEC(filename_language) *m_saved_table;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void test_filename_language ()
|
||||||
|
{
|
||||||
|
/* This test messes up the filename_language_table global. */
|
||||||
|
scoped_restore_filename_language_table restore_flt;
|
||||||
|
|
||||||
|
/* Test deducing an unknown extension. */
|
||||||
|
language lang = deduce_language_from_filename ("myfile.blah");
|
||||||
|
SELF_CHECK (lang == language_unknown);
|
||||||
|
|
||||||
|
/* Test deducing a known extension. */
|
||||||
|
lang = deduce_language_from_filename ("myfile.c");
|
||||||
|
SELF_CHECK (lang == language_c);
|
||||||
|
|
||||||
|
/* Test adding a new extension using the internal API. */
|
||||||
|
add_filename_language (".blah", language_pascal);
|
||||||
|
lang = deduce_language_from_filename ("myfile.blah");
|
||||||
|
SELF_CHECK (lang == language_pascal);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_set_ext_lang_command ()
|
||||||
|
{
|
||||||
|
/* This test messes up the filename_language_table global. */
|
||||||
|
scoped_restore_filename_language_table restore_flt;
|
||||||
|
|
||||||
|
/* Confirm that the .hello extension is not known. */
|
||||||
|
language lang = deduce_language_from_filename ("cake.hello");
|
||||||
|
SELF_CHECK (lang == language_unknown);
|
||||||
|
|
||||||
|
/* Test adding a new extension using the CLI command. */
|
||||||
|
gdb::unique_xmalloc_ptr<char> args_holder (xstrdup (".hello rust"));
|
||||||
|
ext_args = args_holder.get ();
|
||||||
|
set_ext_lang_command (NULL, 1, NULL);
|
||||||
|
|
||||||
|
lang = deduce_language_from_filename ("cake.hello");
|
||||||
|
SELF_CHECK (lang == language_rust);
|
||||||
|
|
||||||
|
/* Test overriding an existing extension using the CLI command. */
|
||||||
|
int size_before = VEC_length (filename_language, filename_language_table);
|
||||||
|
args_holder.reset (xstrdup (".hello pascal"));
|
||||||
|
ext_args = args_holder.get ();
|
||||||
|
set_ext_lang_command (NULL, 1, NULL);
|
||||||
|
int size_after = VEC_length (filename_language, filename_language_table);
|
||||||
|
|
||||||
|
lang = deduce_language_from_filename ("cake.hello");
|
||||||
|
SELF_CHECK (lang == language_pascal);
|
||||||
|
SELF_CHECK (size_before == size_after);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace filename_language */
|
||||||
|
} /* namespace selftests */
|
||||||
|
|
||||||
|
#endif /* GDB_SELF_TEST */
|
||||||
|
|
||||||
void
|
void
|
||||||
_initialize_symfile (void)
|
_initialize_symfile (void)
|
||||||
{
|
{
|
||||||
|
@ -3940,4 +4021,12 @@ Set printing of separate debug info file search debug."), _("\
|
||||||
Show printing of separate debug info file search debug."), _("\
|
Show printing of separate debug info file search debug."), _("\
|
||||||
When on, GDB prints the searched locations while looking for separate debug \
|
When on, GDB prints the searched locations while looking for separate debug \
|
||||||
info files."), NULL, NULL, &setdebuglist, &showdebuglist);
|
info files."), NULL, NULL, &setdebuglist, &showdebuglist);
|
||||||
|
|
||||||
|
#if GDB_SELF_TEST
|
||||||
|
selftests::register_test
|
||||||
|
("filename_language", selftests::filename_language::test_filename_language);
|
||||||
|
selftests::register_test
|
||||||
|
("set_ext_lang_command",
|
||||||
|
selftests::filename_language::test_set_ext_lang_command);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue