]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/unittests/gdb_tilde_expand-selftests.c
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / unittests / gdb_tilde_expand-selftests.c
CommitLineData
d3ee35db
LS
1/* Self tests for gdb_tilde_expand
2
213516ef 3 Copyright (C) 2021-2023 Free Software Foundation, Inc.
d3ee35db
LS
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 "gdbsupport/common-defs.h"
21#include "gdbsupport/selftest.h"
22#include <cstdlib>
23
24#include "gdbsupport/gdb_tilde_expand.h"
25
26namespace selftests {
27namespace gdb_tilde_expand_tests {
28
29static void
30do_test ()
31{
32 /* Home directory of the user running the test. */
33 const char *c_home = std::getenv ("HOME");
34
35 /* Skip the test if $HOME is not available in the environment. */
36 if (c_home == nullptr)
37 return;
38
39 const std::string home (c_home);
40
41 /* Basic situation. */
42 SELF_CHECK (home == gdb_tilde_expand ("~"));
43
44 /* When given a path that begins by a tilde and refers to a file that
45 does not exist, gdb_tilde expand must still be able to do the tilde
46 expansion. */
47 SELF_CHECK (gdb_tilde_expand ("~/non/existent/directory")
48 == home + "/non/existent/directory");
49
50 /* gdb_tilde_expand only expands tilde and does not try to do any other
51 substitution. */
52 SELF_CHECK (gdb_tilde_expand ("~/*/a.out") == home + "/*/a.out");
53
54 /* gdb_tilde_expand does no modification to a non tilde leading path. */
55 SELF_CHECK (gdb_tilde_expand ("/some/abs/path") == "/some/abs/path");
56 SELF_CHECK (gdb_tilde_expand ("relative/path") == "relative/path");
57
58 /* If $USER is available in the env variables, check the '~user'
59 expansion. */
60 const char *c_user = std::getenv ("USER");
61 if (c_user != nullptr)
62 {
63 const std::string user (c_user);
64 SELF_CHECK (gdb_tilde_expand (("~" + user).c_str ()) == home);
65 SELF_CHECK (gdb_tilde_expand (("~" + user + "/a/b").c_str ())
66 == home + "/a/b");
67 }
68
69 /* Check that an error is thrown when trying to expand home of a unknown
70 user. */
71 try
72 {
73 gdb_tilde_expand ("~no_one_should_have_that_login/a");
74 SELF_CHECK (false);
75 }
76 catch (const gdb_exception_error &e)
77 {
78 SELF_CHECK (e.error == GENERIC_ERROR);
79 SELF_CHECK
80 (*e.message
81 == "Could not find a match for '~no_one_should_have_that_login'.");
82 }
83}
84
85} /* namespace gdb_tilde_expand_tests */
86} /* namespace selftests */
87
88void _initialize_gdb_tilde_expand_selftests ();
89void
90_initialize_gdb_tilde_expand_selftests ()
91{
92 selftests::register_test
93 ("gdb_tilde_expand", selftests::gdb_tilde_expand_tests::do_test);
94}