root/tests/lib/mc_realpath.c

/* [previous][next][first][last][top][bottom][index][help]  */

DEFINITIONS

This source file includes following definitions.
  1. setup
  2. teardown
  3. START_PARAMETRIZED_TEST
  4. main

   1 /*
   2    lib - realpath
   3 
   4    Copyright (C) 2017-2018
   5    Free Software Foundation, Inc.
   6 
   7    Written by:
   8    Andrew Borodin <aborodin@vmail.ru>, 2017
   9 
  10    This file is part of the Midnight Commander.
  11 
  12    The Midnight Commander is free software: you can redistribute it
  13    and/or modify it under the terms of the GNU General Public License as
  14    published by the Free Software Foundation, either version 3 of the License,
  15    or (at your option) any later version.
  16 
  17    The Midnight Commander is distributed in the hope that it will be useful,
  18    but WITHOUT ANY WARRANTY; without even the implied warranty of
  19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20    GNU General Public License for more details.
  21 
  22    You should have received a copy of the GNU General Public License
  23    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  24  */
  25 
  26 #define TEST_SUITE_NAME "/lib/util"
  27 
  28 #include "tests/mctest.h"
  29 
  30 #include "lib/strutil.h"
  31 #include "lib/vfs/vfs.h"        /* VFS_ENCODING_PREFIX, vfs_init(), vfs_shut() */
  32 #include "src/vfs/local/local.c"
  33 
  34 #include "lib/util.h"           /* mc_realpath() */
  35 
  36 /* --------------------------------------------------------------------------------------------- */
  37 
  38 static char resolved_path[PATH_MAX];
  39 
  40 /* --------------------------------------------------------------------------------------------- */
  41 
  42 /* @Before */
  43 static void
  44 setup (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
  45 {
  46     str_init_strings (NULL);
  47     vfs_init ();
  48     init_localfs ();
  49     vfs_setup_work_dir ();
  50 }
  51 
  52 /* @After */
  53 static void
  54 teardown (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
  55 {
  56     vfs_shut ();
  57     str_uninit_strings ();
  58 }
  59 
  60 /* --------------------------------------------------------------------------------------------- */
  61 
  62 /* @DataSource("data_source") */
  63 /* *INDENT-OFF* */
  64 static const struct data_source
  65 {
  66     const char *input_string;
  67     const char *expected_string;
  68 } data_source[] =
  69 {
  70     /* absolute paths */
  71     { "/", "/"},
  72     { "/" VFS_ENCODING_PREFIX "UTF-8/", "/" },
  73     { "/usr/bin", "/usr/bin" },
  74     { "/" VFS_ENCODING_PREFIX "UTF-8/usr/bin", "/usr/bin" },
  75 
  76     /* relative paths are relative to / */
  77     { VFS_ENCODING_PREFIX "UTF-8/", "/" },
  78     { "usr/bin", "/usr/bin" },
  79     { VFS_ENCODING_PREFIX "UTF-8/usr/bin", "/usr/bin" }
  80 };
  81 /* *INDENT-ON* */
  82 
  83 /* @Test(dataSource = "data_source") */
  84 /* *INDENT-OFF* */
  85 START_PARAMETRIZED_TEST (realpath_test, data_source)
     /* [previous][next][first][last][top][bottom][index][help]  */
  86 /* *INDENT-ON* */
  87 {
  88     int ret;
  89 
  90     /* realpath(3) produces a canonicalized absolute pathname using curent directory.
  91      * Change the current directory to produce correct pathname. */
  92     ret = chdir ("/");
  93 
  94     /* when */
  95     if (mc_realpath (data->input_string, resolved_path) == NULL)
  96         resolved_path[0] = '\0';
  97 
  98     /* then */
  99     mctest_assert_str_eq (resolved_path, data->expected_string);
 100 
 101     (void) ret;
 102 }
 103 /* *INDENT-OFF* */
 104 END_PARAMETRIZED_TEST
 105 /* *INDENT-ON* */
 106 
 107 /* --------------------------------------------------------------------------------------------- */
 108 
 109 int
 110 main (void)
     /* [previous][next][first][last][top][bottom][index][help]  */
 111 {
 112     int number_failed;
 113     char *cwd, *logname;
 114 
 115     Suite *s = suite_create (TEST_SUITE_NAME);
 116     TCase *tc_core = tcase_create ("Core");
 117     SRunner *sr;
 118 
 119     cwd = g_get_current_dir ();
 120     logname = g_strconcat (cwd, "realpath.log", (char *) NULL);
 121     g_free (cwd);
 122 
 123     tcase_add_checked_fixture (tc_core, setup, teardown);
 124 
 125     /* Add new tests here: *************** */
 126     mctest_add_parameterized_test (tc_core, realpath_test, data_source);
 127     /* *********************************** */
 128 
 129     suite_add_tcase (s, tc_core);
 130     sr = srunner_create (s);
 131     srunner_set_log (sr, logname);
 132     srunner_run_all (sr, CK_ENV);
 133     number_failed = srunner_ntests_failed (sr);
 134     srunner_free (sr);
 135     g_free (logname);
 136     return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 137 }
 138 
 139 /* --------------------------------------------------------------------------------------------- */

/* [previous][next][first][last][top][bottom][index][help]  */