From 5ccfbd6334da0a130fcdeaa34b600b866e76f999 Mon Sep 17 00:00:00 2001 From: Richard Russon Date: Fri, 19 Apr 2019 09:31:42 +0100 Subject: [PATCH] test: merge existing path tests --- test/Makefile.autosetup | 1 - test/main.c | 4 - test/path.c | 263 ------------------------------ test/path/mutt_path_getcwd.c | 7 + test/path/mutt_path_tidy.c | 119 ++++++++++++++ test/path/mutt_path_tidy_dotdot.c | 56 +++++++ test/path/mutt_path_tidy_slash.c | 43 +++++ 7 files changed, 225 insertions(+), 268 deletions(-) delete mode 100644 test/path.c diff --git a/test/Makefile.autosetup b/test/Makefile.autosetup index 569970a4c..9e0829524 100644 --- a/test/Makefile.autosetup +++ b/test/Makefile.autosetup @@ -2,7 +2,6 @@ TEST_OBJS = test/main.o \ test/base64.o \ test/buffer.o \ test/md5.o \ - test/path.o \ test/rfc2047.o \ test/address.o \ test/url.o \ diff --git a/test/main.c b/test/main.c index 481901c49..a7292f08a 100644 --- a/test/main.c +++ b/test/main.c @@ -36,12 +36,8 @@ NEOMUTT_TEST_ITEM(test_md5_ctx) \ NEOMUTT_TEST_ITEM(test_md5_ctx_bytes) \ NEOMUTT_TEST_ITEM(test_addr_mbox_to_udomain) \ - NEOMUTT_TEST_ITEM(test_mutt_path_tidy_slash) \ - NEOMUTT_TEST_ITEM(test_mutt_path_tidy_dotdot) \ - NEOMUTT_TEST_ITEM(test_mutt_path_tidy) \ NEOMUTT_TEST_ITEM(test_url) \ NEOMUTT_TEST_ITEM(test_mutt_buffer_concat_path) \ - NEOMUTT_TEST_ITEM(test_mutt_path_getcwd) /****************************************************************************** * You probably don't need to touch what follows. diff --git a/test/path.c b/test/path.c deleted file mode 100644 index 66ceac74b..000000000 --- a/test/path.c +++ /dev/null @@ -1,263 +0,0 @@ -/** - * @file - * Test code for paths - * - * @authors - * Copyright (C) 2018-2019 Richard Russon - * - * @copyright - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 2 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ - -#define TEST_NO_MAIN -#include "acutest.h" -#include "mutt/mutt.h" - -void test_mutt_path_tidy_slash(void) -{ - static const char *tests[][2] = - { - { NULL, NULL, }, - { "/", "/", }, - { "//", "/", }, - { "///", "/", }, - { "/apple/", "/apple", }, - { "/apple//", "/apple", }, - { "/apple///", "/apple", }, - { "/apple/banana", "/apple/banana", }, - { "/apple//banana", "/apple/banana", }, - { "/apple///banana", "/apple/banana", }, - { "/apple/banana/", "/apple/banana", }, - { "/apple/banana//", "/apple/banana", }, - { "/apple/banana///", "/apple/banana", }, - { "//.///././apple/banana", "/apple/banana", }, - { "/apple/.///././banana", "/apple/banana", }, - { "/apple/banana/.///././", "/apple/banana", }, - { "/apple/banana/", "/apple/banana", }, - { "/apple/banana/.", "/apple/banana", }, - { "/apple/banana/./", "/apple/banana", }, - { "/apple/banana//", "/apple/banana", }, - { "/apple/banana//.", "/apple/banana", }, - { "/apple/banana//./", "/apple/banana", }, - { "////apple/banana", "/apple/banana", }, - { "/.//apple/banana", "/apple/banana", }, - }; - - char buf[64]; - for (size_t i = 0; i < mutt_array_size(tests); i++) - { - mutt_str_strfcpy(buf, tests[i][0], sizeof(buf)); - mutt_path_tidy_slash(buf); - if (!TEST_CHECK(mutt_str_strcmp(buf, tests[i][1]) == 0)) - { - TEST_MSG("Input: %s", tests[i][0]); - TEST_MSG("Expected: %s", tests[i][1]); - TEST_MSG("Actual: %s", buf); - } - } -} - -void test_mutt_path_tidy_dotdot(void) -{ - static const char *tests[][2] = - { - { NULL, NULL, }, - { "/", "/", }, - { "/apple", "/apple", }, - { "/apple/banana", "/apple/banana", }, - { "/..", "/", }, - { "/apple/..", "/", }, - { "/apple/banana/..", "/apple", }, - { "/../cherry", "/cherry", }, - { "/apple/../cherry", "/cherry", }, - { "/apple/banana/../cherry", "/apple/cherry", }, - { "/apple/..", "/", }, - { "/apple/../..", "/", }, - { "/apple/../../..", "/", }, - { "/apple/../../../..", "/", }, - { "/apple/banana/..", "/apple", }, - { "/apple/banana/../..", "/", }, - { "/apple/banana/../../..", "/", }, - { "/apple/banana/../../../..", "/", }, - { "/../apple", "/apple", }, - { "/../../apple", "/apple", }, - { "/../../../apple", "/apple", }, - { "/../apple/banana/cherry/damson", "/apple/banana/cherry/damson", }, - { "/apple/../banana/cherry/damson", "/banana/cherry/damson", }, - { "/apple/banana/../cherry/damson", "/apple/cherry/damson", }, - { "/apple/banana/cherry/../damson", "/apple/banana/damson", }, - { "/apple/banana/cherry/damson/..", "/apple/banana/cherry", }, - { "/../../apple/banana/cherry/damson", "/apple/banana/cherry/damson", }, - { "/apple/../../banana/cherry/damson", "/banana/cherry/damson", }, - { "/apple/banana/../../cherry/damson", "/cherry/damson", }, - { "/apple/banana/cherry/../../damson", "/apple/damson", }, - { "/apple/banana/cherry/damson/../..", "/apple/banana", }, - { "/../apple/../banana/cherry/damson", "/banana/cherry/damson", }, - { "/apple/../banana/../cherry/damson", "/cherry/damson", }, - { "/apple/banana/../cherry/../damson", "/apple/damson", }, - { "/apple/banana/cherry/../damson/..", "/apple/banana", }, - { "/apple/..banana/cherry/../damson", "/apple/..banana/damson", }, - { "/..apple/..banana/..cherry/../damson", "/..apple/..banana/damson", }, - }; - - char buf[64]; - for (size_t i = 0; i < mutt_array_size(tests); i++) - { - mutt_str_strfcpy(buf, tests[i][0], sizeof(buf)); - mutt_path_tidy_dotdot(buf); - if (!TEST_CHECK(mutt_str_strcmp(buf, tests[i][1]) == 0)) - { - TEST_MSG("Input: %s", tests[i][0]); - TEST_MSG("Expected: %s", tests[i][1]); - TEST_MSG("Actual: %s", buf); - } - } -} - -void test_mutt_path_tidy(void) -{ - static const char *tests[][2] = - { - { "/..apple/./../////./banana/banana/./banana/..apple/./banana/..apple/banana///banana/..apple/banana/..apple/banana/banana/..apple", "/banana/banana/banana/..apple/banana/..apple/banana/banana/..apple/banana/..apple/banana/banana/..apple", }, - { "/../../banana///..apple///..apple///banana///banana/banana/banana/..apple/banana/banana/banana/./banana/banana/banana/..apple/banana", "/banana/..apple/..apple/banana/banana/banana/banana/..apple/banana/banana/banana/banana/banana/banana/..apple/banana", }, - { "///banana/banana/banana/./..apple/../banana/..apple/../..apple/./banana/./..apple", "/banana/banana/banana/banana/..apple/banana/..apple", }, - { "/./banana/banana/../banana/banana/.///banana/..apple/..apple", "/banana/banana/banana/banana/..apple/..apple", }, - { "/../banana/banana/banana/banana///..apple///..apple/banana/banana/////./..apple/./../.././banana/banana///banana/banana", "/banana/banana/banana/banana/..apple/..apple/banana/banana/banana/banana/banana", }, - { "/banana/banana/./././..apple/banana///./banana/banana/banana/banana/banana/banana/../////banana/banana/banana/./..apple/..apple/..///..apple", "/banana/banana/..apple/banana/banana/banana/banana/banana/banana/banana/banana/banana/..apple/..apple", }, - { "/banana///..apple///../banana/banana/banana///////banana/banana/./..apple/..apple/./..apple/..apple/banana", "/banana/banana/banana/banana/banana/banana/..apple/..apple/..apple/..apple/banana", }, - { "/banana/..apple/..apple/..apple/..apple/banana///../..apple///banana/banana/banana/banana///./../..apple/../banana/..apple/../banana/banana/./..apple", "/banana/..apple/..apple/..apple/..apple/..apple/banana/banana/banana/banana/banana/banana/..apple", }, - { "/banana/banana/..///../banana/../banana/banana/..apple/./../banana/../../banana/.", "/banana/banana", }, - { "/banana/banana/../..apple/banana/././banana///banana/banana", "/banana/..apple/banana/banana/banana/banana", }, - { "/////banana/banana/banana///..apple/./banana/..apple/./banana/banana", "/banana/banana/banana/..apple/banana/..apple/banana/banana", }, - { "/..apple/..apple/banana///banana/././//.///./banana///./banana/..apple/./banana", "/..apple/..apple/banana/banana/banana/banana/..apple/banana", }, - { "///./..apple/banana/./../banana/././..apple///./../../../////banana/banana/../..apple/banana/banana/../banana/banana/../.", "/banana/..apple/banana/banana", }, - { "/banana/./../././../..apple/banana/banana/..///../.", "/..apple", }, - { "/./..apple/banana///./banana/..///../banana//", "/..apple/banana", }, - { "/.///banana///..apple/banana/banana/../.././banana/../..apple///banana/banana/./banana/banana/..//", "/banana/..apple/..apple/banana/banana/banana", }, - { "/..apple/..apple/../banana/banana/..apple/./banana/../banana///banana", "/..apple/banana/banana/..apple/banana/banana", }, - { "/banana/banana/../././banana/banana/banana///./.././//banana/banana/banana/.././banana///..apple/banana//", "/banana/banana/banana/banana/banana/banana/..apple/banana", }, - { "/banana/banana/../banana/./banana/banana/banana/..apple/../banana/.///banana/////../..apple/banana/banana/../..apple/banana/banana/banana///banana", "/banana/banana/banana/banana/banana/banana/..apple/banana/..apple/banana/banana/banana/banana", }, - { "/./..apple/./banana///banana/./banana/..apple/banana///.///././banana", "/..apple/banana/banana/banana/..apple/banana/banana", }, - { "/./banana/..apple/banana/banana/.././.././..apple/banana/banana/..apple/.///..apple/.///banana/banana/..", "/banana/..apple/..apple/banana/banana/..apple/..apple/banana", }, - { "///./../..apple/banana/../banana///banana///..///..apple/../banana/../../banana/..apple/./banana/..apple/banana/..apple/banana//", "/..apple/banana/..apple/banana/..apple/banana/..apple/banana", }, - { "/banana/../..apple/banana///////banana/banana/..apple/../banana/../..", "/..apple/banana/banana", }, - { "/../banana/..apple///banana/banana/..apple/..apple///banana/banana/banana///..apple/banana///../././banana/banana/banana/banana/banana/banana", "/banana/..apple/banana/banana/..apple/..apple/banana/banana/banana/..apple/banana/banana/banana/banana/banana/banana", }, - { "///..apple///.././banana/./..apple///..apple/..", "/banana/..apple", }, - { "///../..apple/./../..apple/banana/banana///..apple/banana///../banana/banana", "/..apple/banana/banana/..apple/banana/banana", }, - { "/../banana/banana/banana/./banana/banana/banana///banana/banana/./banana/.", "/banana/banana/banana/banana/banana/banana/banana/banana/banana", }, - { "/././..apple/./..apple/../banana/./..apple/banana///.././banana/banana/..", "/..apple/banana/..apple/banana", }, - { "/..apple/..apple///banana/banana/..apple/////banana/banana/..apple///./../banana/banana/banana///banana/..apple/banana/..apple////", "/..apple/..apple/banana/banana/..apple/banana/banana/banana/banana/banana/banana/..apple/banana/..apple", }, - { "/..apple/banana/./banana/banana/banana/./banana/banana/../banana/../..///..apple/banana/./.././..///././../..apple/../banana/banana//", "/..apple/banana/banana/banana/banana/banana", }, - { "/banana///../banana/../././..apple/..apple///.///banana/./banana/banana///banana/..apple/.", "/..apple/..apple/banana/banana/banana/banana/..apple", }, - { "/////..apple/banana/banana/..apple/banana///banana//", "/..apple/banana/banana/..apple/banana/banana", }, - { "/..apple///./banana///../../../..apple/..apple/..apple/./banana/banana", "/..apple/..apple/..apple/banana/banana", }, - { "///banana///././..apple/banana/banana/././..apple/..apple/..apple/banana///././banana/././banana/..apple/banana/banana/../banana/./banana", "/banana/..apple/banana/banana/..apple/..apple/..apple/banana/banana/banana/..apple/banana/banana/banana", }, - { "/banana///./banana/banana/..///./banana//", "/banana/banana/banana", }, - { "/banana/////banana/banana/..apple/..apple/////.///..///..apple/banana/banana/..apple/..apple///./banana", "/banana/banana/banana/..apple/..apple/banana/banana/..apple/..apple/banana", }, - { "/..apple/banana///../..apple/////./..apple/./././banana/..apple", "/..apple/..apple/..apple/banana/..apple", }, - { "/banana/banana///banana/../../../..apple/banana///..apple/..apple/../.././banana/..apple/..apple/..///../../..", "/..apple", }, - { "/..apple/./././../banana/..apple/banana/banana/////./..//", "/banana/..apple/banana", }, - { "/../..apple/banana/..apple/banana/.././////banana/../banana/banana/..apple/..apple/banana/banana", "/..apple/banana/..apple/banana/banana/..apple/..apple/banana/banana", }, - { "/..apple/..apple/..apple///banana/banana/../banana/banana/banana/banana/banana/banana/..apple/.///./banana/./..apple/..apple/./..apple/banana/banana/banana/banana/.", "/..apple/..apple/..apple/banana/banana/banana/banana/banana/banana/banana/..apple/banana/..apple/..apple/..apple/banana/banana/banana/banana", }, - { "///..///banana///../..apple/..apple/.///banana/banana/..apple/..apple/banana/././..///banana", "/..apple/..apple/banana/banana/..apple/..apple/banana", }, - { "/banana///banana/..apple/banana/..///.././..apple/banana///banana/banana/..apple///./..apple", "/banana/banana/..apple/banana/banana/banana/..apple/..apple", }, - { "/banana/banana///.././banana/./banana/..apple/.././banana/../banana/////../banana/./banana/../..apple/banana/../banana/./..", "/banana/banana/banana/banana/..apple", }, - { "/banana/..apple/..apple/.././//banana/banana///.////", "/banana/..apple/banana/banana", }, - { "/banana/.././banana/banana/banana/.///../banana/..", "/banana/banana", }, - { "/banana/.///..apple/../banana/banana/banana/../..apple///./banana/banana///./.", "/banana/banana/banana/..apple/banana/banana", }, - { "/..apple/..apple///../..apple/..apple/banana/banana/////../banana/banana/////../banana/./.././banana/..apple", "/..apple/..apple/..apple/banana/banana/banana/..apple", }, - { "/./../banana/banana///banana/////./..apple/./..apple/../././..apple///banana", "/banana/banana/banana/..apple/..apple/banana", }, - { "/..///banana/../banana/./..apple/..apple///././banana", "/banana/..apple/..apple/banana", }, - { "/banana/banana/banana/banana/banana/banana/banana/../banana/banana/banana/banana/banana/banana/..apple/../..apple/..apple", "/banana/banana/banana/banana/banana/banana/banana/banana/banana/banana/banana/banana/..apple/..apple", }, - { "/banana/.././banana/..///banana/..apple/banana/banana/..apple", "/banana/..apple/banana/banana/..apple", }, - { "/../banana/banana/../..///..apple/banana/..apple/../../..apple/banana/..apple/../banana/..apple/banana/..apple///../banana/banana/banana/../banana/..apple/banana/.", "/..apple/..apple/banana/banana/..apple/banana/banana/banana/banana/..apple/banana", }, - { "/banana/banana/..apple/./banana/./././banana/..apple/////..apple/banana/banana/banana////", "/banana/banana/..apple/banana/banana/..apple/..apple/banana/banana/banana", }, - { "/..apple/banana/banana/../banana/banana/../..apple/banana/banana/./..", "/..apple/banana/banana/..apple/banana", }, - { "/.///..apple/banana/banana/banana/../banana/banana///banana/banana///banana/banana/./..apple/..///banana/..apple/banana/banana///../banana/..apple/banana", "/..apple/banana/banana/banana/banana/banana/banana/banana/banana/banana/..apple/banana/banana/..apple/banana", }, - { "/.///./../../banana/../banana///banana/banana///banana///banana///banana", "/banana/banana/banana/banana/banana/banana", }, - { "/banana/banana/./banana/../../../banana/././..apple/.././banana///..apple/../.", "/banana/banana", }, - { "///./../.././../../..apple/banana/..apple/..apple/banana///banana/..apple///../banana/../banana/././..apple/../..apple/./banana/.", "/..apple/banana/..apple/..apple/banana/banana/banana/..apple/banana", }, - { "/./../banana/banana///../banana/..apple/../../banana/banana/banana/banana/banana/../////banana/./banana//", "/banana/banana/banana/banana/banana/banana/banana", }, - { "/banana/./../.././../../banana/../../..apple///.///banana/banana/..apple/./banana/banana/banana/./banana/..apple/banana/..apple", "/..apple/banana/banana/..apple/banana/banana/banana/banana/..apple/banana/..apple", }, - { "/..apple/.././banana/banana/banana/../../././//../../..apple/banana///../..apple/banana/././..apple///././banana", "/..apple/..apple/banana/..apple/banana", }, - { "///../banana/.././banana/../..apple///banana/./../../..apple", "/..apple", }, - { "/banana/banana/banana/////../..apple/banana/////./banana///banana/..apple/banana/..apple/banana/.///banana/../../..", "/banana/banana/..apple/banana/banana/banana/..apple/banana", }, - { "///banana/banana/banana/..apple/banana/./..apple///./..apple/.", "/banana/banana/banana/..apple/banana/..apple/..apple", }, - { "/./././banana/././banana///../////../banana/./../////../banana///..apple///..apple/./.././banana/..apple//", "/banana/..apple/banana/..apple", }, - { "/banana/..apple/./../..apple/..apple/banana///./.././banana/./../..apple/banana/banana", "/banana/..apple/..apple/..apple/banana/banana", }, - { "/..apple/..apple/..apple///////banana/banana/banana/banana/////./banana/banana/./banana///../.", "/..apple/..apple/..apple/banana/banana/banana/banana/banana/banana", }, - { "/..apple/../..apple///////banana/./..apple/./banana/../..apple/../../banana/banana///banana/banana/./..///.././..", "/..apple/banana/banana", }, - { "/./.././////banana/banana/..apple/././banana/banana/banana///./.", "/banana/banana/..apple/banana/banana/banana", }, - { "/banana/./../banana///././..apple/////banana///..///banana/banana///..apple", "/banana/..apple/banana/banana/..apple", }, - { "/banana/../banana/../////..apple/banana///./////banana/./..apple/..apple///banana///banana/../banana///banana/..apple", "/..apple/banana/banana/..apple/..apple/banana/banana/banana/..apple", }, - { "/banana/banana/..apple/banana/./banana/banana/../banana///.", "/banana/banana/..apple/banana/banana/banana", }, - { "/..apple/..apple///./banana/./..apple/../..apple/./../banana/banana/..apple/././banana/..apple/////../../banana", "/..apple/..apple/banana/banana/banana/..apple/banana", }, - { "/..apple/..///banana///..apple/../banana/../..", "/", }, - { "/banana///banana/banana/./banana/../../..apple/./banana/banana/.././//banana/..apple/..apple/banana/banana/.///banana/./banana/..///../..", "/banana/banana/..apple/banana/banana/..apple/..apple/banana", }, - { "/..apple/banana/..apple/.././//./..///banana///banana///../..///banana///..apple///.././../banana/../../.", "/", }, - { "/./banana/..apple/banana/..///./banana/../../.././../../banana/banana/banana/../..apple/banana/banana/..apple/banana/banana/.", "/banana/banana/..apple/banana/banana/..apple/banana/banana", }, - { "/../banana/banana/banana/..apple/..///./banana/..apple///../..apple/././../..apple/banana/./.././..//", "/banana/banana/banana/banana", }, - { "///banana///../../banana///.././//../banana/banana/..apple/banana///banana/banana/banana/..apple/..", "/banana/banana/..apple/banana/banana/banana/banana", }, - { "/banana/../banana/././banana/..apple/./..apple///../..apple/.././////banana/./..apple/./banana", "/banana/banana/..apple/banana/..apple/banana", }, - { "/banana/./..apple/../..apple/./banana/..apple/../banana/banana/banana/banana/banana/banana/banana", "/banana/..apple/banana/banana/banana/banana/banana/banana/banana/banana", }, - { "/.././..apple///banana///..apple///banana/banana/banana/..apple/banana/./banana/.././banana/././/", "/..apple/banana/..apple/banana/banana/banana/..apple/banana/banana", }, - { "///././../banana/./../../..apple/banana/banana/..apple/banana/../..apple/..apple/./banana/./banana/..apple///banana/./..apple/banana///banana", "/..apple/banana/banana/..apple/..apple/..apple/banana/banana/..apple/banana/..apple/banana/banana", }, - { "/..apple/banana/banana/banana///banana/..///./..apple/banana/banana/..apple/banana///.///../banana/..apple", "/..apple/banana/banana/banana/..apple/banana/banana/..apple/banana/..apple", }, - { "/../..apple/banana/../banana/banana/banana/banana///..apple/./..apple/../..apple/..", "/..apple/banana/banana/banana/banana/..apple", }, - { "/../banana/banana/banana/..apple/banana/../banana/banana/../../../..apple///banana/../banana", "/banana/banana/banana/..apple/banana", }, - { "/banana/..apple/..apple/../banana/banana/////../././banana/banana/..apple/..apple/.", "/banana/..apple/banana/banana/banana/..apple/..apple", }, - { "/././//banana/banana/..apple/./banana/./banana///..apple/..", "/banana/banana/..apple/banana/banana", }, - { "/../banana/banana///./..apple/banana/banana///.././banana/banana/.///./banana/banana/banana/banana", "/banana/banana/..apple/banana/banana/banana/banana/banana/banana/banana", }, - { "/banana/banana/banana/..apple/./././../..apple/banana/..apple/..apple/.///.././..", "/banana/banana/banana/..apple/banana", }, - { "///..apple/./..apple/..apple/banana/banana/banana/../////.//", "/..apple/..apple/..apple/banana/banana", }, - { "/../banana/../../..apple/..apple///..apple/././banana/./banana/..apple///./..apple/./banana/banana/banana/./.././banana/../..", "/..apple/..apple/..apple/banana/banana/..apple/..apple/banana", }, - { "/..apple/..apple/banana///..apple///..apple/..apple/banana/.././banana/..apple/././..apple/../..apple///..apple///..apple/banana/../banana/..apple/////banana", "/..apple/..apple/banana/..apple/..apple/..apple/banana/..apple/..apple/..apple/..apple/banana/..apple/banana", }, - { "/../..apple/././banana///../..apple/banana/../.././////banana/banana/../..apple", "/..apple/banana/..apple", }, - { "/banana/..apple/banana/banana///..apple/banana/../banana/.././/", "/banana/..apple/banana/banana/..apple", }, - { "/..apple/banana/banana/banana/./banana/../banana/banana///..apple/banana/..///..///.", "/..apple/banana/banana/banana/banana/banana", }, - { "/..apple/banana/banana/.././banana/..apple/banana/..apple/..apple/../..///..apple///banana/banana/banana///banana/..apple/banana/banana", "/..apple/banana/banana/..apple/banana/..apple/banana/banana/banana/banana/..apple/banana/banana", }, - { "/./banana///../banana/banana/./../..apple/banana/../../banana///banana/..apple/..apple/////..", "/banana/banana/banana/..apple", }, - { "/banana/..apple/banana///banana///./..apple/banana/banana/banana/..apple/banana/banana//", "/banana/..apple/banana/banana/..apple/banana/banana/banana/..apple/banana/banana", }, - }; - - char buf[192]; - for (size_t i = 0; i < mutt_array_size(tests); i++) - { - mutt_str_strfcpy(buf, tests[i][0], sizeof(buf)); - mutt_path_tidy(buf); - if (!TEST_CHECK(mutt_str_strcmp(buf, tests[i][1]) == 0)) - { - TEST_MSG("Input: %s", tests[i][0]); - TEST_MSG("Expected: %s", tests[i][1]); - TEST_MSG("Actual: %s", buf); - } - } -} - -void test_mutt_path_getcwd(void) -{ - // void mutt_path_getcwd(struct Buffer *cwd) - - { - mutt_path_getcwd(NULL); - TEST_CHECK_(1, "mutt_path_getcwd(NULL)"); - } - - { - struct Buffer *buf = mutt_buffer_new(); - mutt_path_getcwd(buf); - TEST_CHECK(buf->data[0] == '/'); - mutt_buffer_free(&buf); - } -} diff --git a/test/path/mutt_path_getcwd.c b/test/path/mutt_path_getcwd.c index 5f3e69af6..dbf35d9f9 100644 --- a/test/path/mutt_path_getcwd.c +++ b/test/path/mutt_path_getcwd.c @@ -33,4 +33,11 @@ void test_mutt_path_getcwd(void) mutt_path_getcwd(NULL); TEST_CHECK_(1, "mutt_path_getcwd(NULL)"); } + + { + struct Buffer *buf = mutt_buffer_new(); + mutt_path_getcwd(buf); + TEST_CHECK(buf->data[0] == '/'); + mutt_buffer_free(&buf); + } } diff --git a/test/path/mutt_path_tidy.c b/test/path/mutt_path_tidy.c index 061b3aadb..276804624 100644 --- a/test/path/mutt_path_tidy.c +++ b/test/path/mutt_path_tidy.c @@ -29,7 +29,126 @@ void test_mutt_path_tidy(void) { // bool mutt_path_tidy(char *buf); + static const char *tests[][2] = + { + { "/..apple/./../////./banana/banana/./banana/..apple/./banana/..apple/banana///banana/..apple/banana/..apple/banana/banana/..apple", "/banana/banana/banana/..apple/banana/..apple/banana/banana/..apple/banana/..apple/banana/banana/..apple", }, + { "/../../banana///..apple///..apple///banana///banana/banana/banana/..apple/banana/banana/banana/./banana/banana/banana/..apple/banana", "/banana/..apple/..apple/banana/banana/banana/banana/..apple/banana/banana/banana/banana/banana/banana/..apple/banana", }, + { "///banana/banana/banana/./..apple/../banana/..apple/../..apple/./banana/./..apple", "/banana/banana/banana/banana/..apple/banana/..apple", }, + { "/./banana/banana/../banana/banana/.///banana/..apple/..apple", "/banana/banana/banana/banana/..apple/..apple", }, + { "/../banana/banana/banana/banana///..apple///..apple/banana/banana/////./..apple/./../.././banana/banana///banana/banana", "/banana/banana/banana/banana/..apple/..apple/banana/banana/banana/banana/banana", }, + { "/banana/banana/./././..apple/banana///./banana/banana/banana/banana/banana/banana/../////banana/banana/banana/./..apple/..apple/..///..apple", "/banana/banana/..apple/banana/banana/banana/banana/banana/banana/banana/banana/banana/..apple/..apple", }, + { "/banana///..apple///../banana/banana/banana///////banana/banana/./..apple/..apple/./..apple/..apple/banana", "/banana/banana/banana/banana/banana/banana/..apple/..apple/..apple/..apple/banana", }, + { "/banana/..apple/..apple/..apple/..apple/banana///../..apple///banana/banana/banana/banana///./../..apple/../banana/..apple/../banana/banana/./..apple", "/banana/..apple/..apple/..apple/..apple/..apple/banana/banana/banana/banana/banana/banana/..apple", }, + { "/banana/banana/..///../banana/../banana/banana/..apple/./../banana/../../banana/.", "/banana/banana", }, + { "/banana/banana/../..apple/banana/././banana///banana/banana", "/banana/..apple/banana/banana/banana/banana", }, + { "/////banana/banana/banana///..apple/./banana/..apple/./banana/banana", "/banana/banana/banana/..apple/banana/..apple/banana/banana", }, + { "/..apple/..apple/banana///banana/././//.///./banana///./banana/..apple/./banana", "/..apple/..apple/banana/banana/banana/banana/..apple/banana", }, + { "///./..apple/banana/./../banana/././..apple///./../../../////banana/banana/../..apple/banana/banana/../banana/banana/../.", "/banana/..apple/banana/banana", }, + { "/banana/./../././../..apple/banana/banana/..///../.", "/..apple", }, + { "/./..apple/banana///./banana/..///../banana//", "/..apple/banana", }, + { "/.///banana///..apple/banana/banana/../.././banana/../..apple///banana/banana/./banana/banana/..//", "/banana/..apple/..apple/banana/banana/banana", }, + { "/..apple/..apple/../banana/banana/..apple/./banana/../banana///banana", "/..apple/banana/banana/..apple/banana/banana", }, + { "/banana/banana/../././banana/banana/banana///./.././//banana/banana/banana/.././banana///..apple/banana//", "/banana/banana/banana/banana/banana/banana/..apple/banana", }, + { "/banana/banana/../banana/./banana/banana/banana/..apple/../banana/.///banana/////../..apple/banana/banana/../..apple/banana/banana/banana///banana", "/banana/banana/banana/banana/banana/banana/..apple/banana/..apple/banana/banana/banana/banana", }, + { "/./..apple/./banana///banana/./banana/..apple/banana///.///././banana", "/..apple/banana/banana/banana/..apple/banana/banana", }, + { "/./banana/..apple/banana/banana/.././.././..apple/banana/banana/..apple/.///..apple/.///banana/banana/..", "/banana/..apple/..apple/banana/banana/..apple/..apple/banana", }, + { "///./../..apple/banana/../banana///banana///..///..apple/../banana/../../banana/..apple/./banana/..apple/banana/..apple/banana//", "/..apple/banana/..apple/banana/..apple/banana/..apple/banana", }, + { "/banana/../..apple/banana///////banana/banana/..apple/../banana/../..", "/..apple/banana/banana", }, + { "/../banana/..apple///banana/banana/..apple/..apple///banana/banana/banana///..apple/banana///../././banana/banana/banana/banana/banana/banana", "/banana/..apple/banana/banana/..apple/..apple/banana/banana/banana/..apple/banana/banana/banana/banana/banana/banana", }, + { "///..apple///.././banana/./..apple///..apple/..", "/banana/..apple", }, + { "///../..apple/./../..apple/banana/banana///..apple/banana///../banana/banana", "/..apple/banana/banana/..apple/banana/banana", }, + { "/../banana/banana/banana/./banana/banana/banana///banana/banana/./banana/.", "/banana/banana/banana/banana/banana/banana/banana/banana/banana", }, + { "/././..apple/./..apple/../banana/./..apple/banana///.././banana/banana/..", "/..apple/banana/..apple/banana", }, + { "/..apple/..apple///banana/banana/..apple/////banana/banana/..apple///./../banana/banana/banana///banana/..apple/banana/..apple////", "/..apple/..apple/banana/banana/..apple/banana/banana/banana/banana/banana/banana/..apple/banana/..apple", }, + { "/..apple/banana/./banana/banana/banana/./banana/banana/../banana/../..///..apple/banana/./.././..///././../..apple/../banana/banana//", "/..apple/banana/banana/banana/banana/banana", }, + { "/banana///../banana/../././..apple/..apple///.///banana/./banana/banana///banana/..apple/.", "/..apple/..apple/banana/banana/banana/banana/..apple", }, + { "/////..apple/banana/banana/..apple/banana///banana//", "/..apple/banana/banana/..apple/banana/banana", }, + { "/..apple///./banana///../../../..apple/..apple/..apple/./banana/banana", "/..apple/..apple/..apple/banana/banana", }, + { "///banana///././..apple/banana/banana/././..apple/..apple/..apple/banana///././banana/././banana/..apple/banana/banana/../banana/./banana", "/banana/..apple/banana/banana/..apple/..apple/..apple/banana/banana/banana/..apple/banana/banana/banana", }, + { "/banana///./banana/banana/..///./banana//", "/banana/banana/banana", }, + { "/banana/////banana/banana/..apple/..apple/////.///..///..apple/banana/banana/..apple/..apple///./banana", "/banana/banana/banana/..apple/..apple/banana/banana/..apple/..apple/banana", }, + { "/..apple/banana///../..apple/////./..apple/./././banana/..apple", "/..apple/..apple/..apple/banana/..apple", }, + { "/banana/banana///banana/../../../..apple/banana///..apple/..apple/../.././banana/..apple/..apple/..///../../..", "/..apple", }, + { "/..apple/./././../banana/..apple/banana/banana/////./..//", "/banana/..apple/banana", }, + { "/../..apple/banana/..apple/banana/.././////banana/../banana/banana/..apple/..apple/banana/banana", "/..apple/banana/..apple/banana/banana/..apple/..apple/banana/banana", }, + { "/..apple/..apple/..apple///banana/banana/../banana/banana/banana/banana/banana/banana/..apple/.///./banana/./..apple/..apple/./..apple/banana/banana/banana/banana/.", "/..apple/..apple/..apple/banana/banana/banana/banana/banana/banana/banana/..apple/banana/..apple/..apple/..apple/banana/banana/banana/banana", }, + { "///..///banana///../..apple/..apple/.///banana/banana/..apple/..apple/banana/././..///banana", "/..apple/..apple/banana/banana/..apple/..apple/banana", }, + { "/banana///banana/..apple/banana/..///.././..apple/banana///banana/banana/..apple///./..apple", "/banana/banana/..apple/banana/banana/banana/..apple/..apple", }, + { "/banana/banana///.././banana/./banana/..apple/.././banana/../banana/////../banana/./banana/../..apple/banana/../banana/./..", "/banana/banana/banana/banana/..apple", }, + { "/banana/..apple/..apple/.././//banana/banana///.////", "/banana/..apple/banana/banana", }, + { "/banana/.././banana/banana/banana/.///../banana/..", "/banana/banana", }, + { "/banana/.///..apple/../banana/banana/banana/../..apple///./banana/banana///./.", "/banana/banana/banana/..apple/banana/banana", }, + { "/..apple/..apple///../..apple/..apple/banana/banana/////../banana/banana/////../banana/./.././banana/..apple", "/..apple/..apple/..apple/banana/banana/banana/..apple", }, + { "/./../banana/banana///banana/////./..apple/./..apple/../././..apple///banana", "/banana/banana/banana/..apple/..apple/banana", }, + { "/..///banana/../banana/./..apple/..apple///././banana", "/banana/..apple/..apple/banana", }, + { "/banana/banana/banana/banana/banana/banana/banana/../banana/banana/banana/banana/banana/banana/..apple/../..apple/..apple", "/banana/banana/banana/banana/banana/banana/banana/banana/banana/banana/banana/banana/..apple/..apple", }, + { "/banana/.././banana/..///banana/..apple/banana/banana/..apple", "/banana/..apple/banana/banana/..apple", }, + { "/../banana/banana/../..///..apple/banana/..apple/../../..apple/banana/..apple/../banana/..apple/banana/..apple///../banana/banana/banana/../banana/..apple/banana/.", "/..apple/..apple/banana/banana/..apple/banana/banana/banana/banana/..apple/banana", }, + { "/banana/banana/..apple/./banana/./././banana/..apple/////..apple/banana/banana/banana////", "/banana/banana/..apple/banana/banana/..apple/..apple/banana/banana/banana", }, + { "/..apple/banana/banana/../banana/banana/../..apple/banana/banana/./..", "/..apple/banana/banana/..apple/banana", }, + { "/.///..apple/banana/banana/banana/../banana/banana///banana/banana///banana/banana/./..apple/..///banana/..apple/banana/banana///../banana/..apple/banana", "/..apple/banana/banana/banana/banana/banana/banana/banana/banana/banana/..apple/banana/banana/..apple/banana", }, + { "/.///./../../banana/../banana///banana/banana///banana///banana///banana", "/banana/banana/banana/banana/banana/banana", }, + { "/banana/banana/./banana/../../../banana/././..apple/.././banana///..apple/../.", "/banana/banana", }, + { "///./../.././../../..apple/banana/..apple/..apple/banana///banana/..apple///../banana/../banana/././..apple/../..apple/./banana/.", "/..apple/banana/..apple/..apple/banana/banana/banana/..apple/banana", }, + { "/./../banana/banana///../banana/..apple/../../banana/banana/banana/banana/banana/../////banana/./banana//", "/banana/banana/banana/banana/banana/banana/banana", }, + { "/banana/./../.././../../banana/../../..apple///.///banana/banana/..apple/./banana/banana/banana/./banana/..apple/banana/..apple", "/..apple/banana/banana/..apple/banana/banana/banana/banana/..apple/banana/..apple", }, + { "/..apple/.././banana/banana/banana/../../././//../../..apple/banana///../..apple/banana/././..apple///././banana", "/..apple/..apple/banana/..apple/banana", }, + { "///../banana/.././banana/../..apple///banana/./../../..apple", "/..apple", }, + { "/banana/banana/banana/////../..apple/banana/////./banana///banana/..apple/banana/..apple/banana/.///banana/../../..", "/banana/banana/..apple/banana/banana/banana/..apple/banana", }, + { "///banana/banana/banana/..apple/banana/./..apple///./..apple/.", "/banana/banana/banana/..apple/banana/..apple/..apple", }, + { "/./././banana/././banana///../////../banana/./../////../banana///..apple///..apple/./.././banana/..apple//", "/banana/..apple/banana/..apple", }, + { "/banana/..apple/./../..apple/..apple/banana///./.././banana/./../..apple/banana/banana", "/banana/..apple/..apple/..apple/banana/banana", }, + { "/..apple/..apple/..apple///////banana/banana/banana/banana/////./banana/banana/./banana///../.", "/..apple/..apple/..apple/banana/banana/banana/banana/banana/banana", }, + { "/..apple/../..apple///////banana/./..apple/./banana/../..apple/../../banana/banana///banana/banana/./..///.././..", "/..apple/banana/banana", }, + { "/./.././////banana/banana/..apple/././banana/banana/banana///./.", "/banana/banana/..apple/banana/banana/banana", }, + { "/banana/./../banana///././..apple/////banana///..///banana/banana///..apple", "/banana/..apple/banana/banana/..apple", }, + { "/banana/../banana/../////..apple/banana///./////banana/./..apple/..apple///banana///banana/../banana///banana/..apple", "/..apple/banana/banana/..apple/..apple/banana/banana/banana/..apple", }, + { "/banana/banana/..apple/banana/./banana/banana/../banana///.", "/banana/banana/..apple/banana/banana/banana", }, + { "/..apple/..apple///./banana/./..apple/../..apple/./../banana/banana/..apple/././banana/..apple/////../../banana", "/..apple/..apple/banana/banana/banana/..apple/banana", }, + { "/..apple/..///banana///..apple/../banana/../..", "/", }, + { "/banana///banana/banana/./banana/../../..apple/./banana/banana/.././//banana/..apple/..apple/banana/banana/.///banana/./banana/..///../..", "/banana/banana/..apple/banana/banana/..apple/..apple/banana", }, + { "/..apple/banana/..apple/.././//./..///banana///banana///../..///banana///..apple///.././../banana/../../.", "/", }, + { "/./banana/..apple/banana/..///./banana/../../.././../../banana/banana/banana/../..apple/banana/banana/..apple/banana/banana/.", "/banana/banana/..apple/banana/banana/..apple/banana/banana", }, + { "/../banana/banana/banana/..apple/..///./banana/..apple///../..apple/././../..apple/banana/./.././..//", "/banana/banana/banana/banana", }, + { "///banana///../../banana///.././//../banana/banana/..apple/banana///banana/banana/banana/..apple/..", "/banana/banana/..apple/banana/banana/banana/banana", }, + { "/banana/../banana/././banana/..apple/./..apple///../..apple/.././////banana/./..apple/./banana", "/banana/banana/..apple/banana/..apple/banana", }, + { "/banana/./..apple/../..apple/./banana/..apple/../banana/banana/banana/banana/banana/banana/banana", "/banana/..apple/banana/banana/banana/banana/banana/banana/banana/banana", }, + { "/.././..apple///banana///..apple///banana/banana/banana/..apple/banana/./banana/.././banana/././/", "/..apple/banana/..apple/banana/banana/banana/..apple/banana/banana", }, + { "///././../banana/./../../..apple/banana/banana/..apple/banana/../..apple/..apple/./banana/./banana/..apple///banana/./..apple/banana///banana", "/..apple/banana/banana/..apple/..apple/..apple/banana/banana/..apple/banana/..apple/banana/banana", }, + { "/..apple/banana/banana/banana///banana/..///./..apple/banana/banana/..apple/banana///.///../banana/..apple", "/..apple/banana/banana/banana/..apple/banana/banana/..apple/banana/..apple", }, + { "/../..apple/banana/../banana/banana/banana/banana///..apple/./..apple/../..apple/..", "/..apple/banana/banana/banana/banana/..apple", }, + { "/../banana/banana/banana/..apple/banana/../banana/banana/../../../..apple///banana/../banana", "/banana/banana/banana/..apple/banana", }, + { "/banana/..apple/..apple/../banana/banana/////../././banana/banana/..apple/..apple/.", "/banana/..apple/banana/banana/banana/..apple/..apple", }, + { "/././//banana/banana/..apple/./banana/./banana///..apple/..", "/banana/banana/..apple/banana/banana", }, + { "/../banana/banana///./..apple/banana/banana///.././banana/banana/.///./banana/banana/banana/banana", "/banana/banana/..apple/banana/banana/banana/banana/banana/banana/banana", }, + { "/banana/banana/banana/..apple/./././../..apple/banana/..apple/..apple/.///.././..", "/banana/banana/banana/..apple/banana", }, + { "///..apple/./..apple/..apple/banana/banana/banana/../////.//", "/..apple/..apple/..apple/banana/banana", }, + { "/../banana/../../..apple/..apple///..apple/././banana/./banana/..apple///./..apple/./banana/banana/banana/./.././banana/../..", "/..apple/..apple/..apple/banana/banana/..apple/..apple/banana", }, + { "/..apple/..apple/banana///..apple///..apple/..apple/banana/.././banana/..apple/././..apple/../..apple///..apple///..apple/banana/../banana/..apple/////banana", "/..apple/..apple/banana/..apple/..apple/..apple/banana/..apple/..apple/..apple/..apple/banana/..apple/banana", }, + { "/../..apple/././banana///../..apple/banana/../.././////banana/banana/../..apple", "/..apple/banana/..apple", }, + { "/banana/..apple/banana/banana///..apple/banana/../banana/.././/", "/banana/..apple/banana/banana/..apple", }, + { "/..apple/banana/banana/banana/./banana/../banana/banana///..apple/banana/..///..///.", "/..apple/banana/banana/banana/banana/banana", }, + { "/..apple/banana/banana/.././banana/..apple/banana/..apple/..apple/../..///..apple///banana/banana/banana///banana/..apple/banana/banana", "/..apple/banana/banana/..apple/banana/..apple/banana/banana/banana/banana/..apple/banana/banana", }, + { "/./banana///../banana/banana/./../..apple/banana/../../banana///banana/..apple/..apple/////..", "/banana/banana/banana/..apple", }, + { "/banana/..apple/banana///banana///./..apple/banana/banana/banana/..apple/banana/banana//", "/banana/..apple/banana/banana/..apple/banana/banana/banana/..apple/banana/banana", }, + }; + { TEST_CHECK(!mutt_path_tidy(NULL)); } + + { + char buf[192]; + for (size_t i = 0; i < mutt_array_size(tests); i++) + { + mutt_str_strfcpy(buf, tests[i][0], sizeof(buf)); + mutt_path_tidy(buf); + if (!TEST_CHECK(mutt_str_strcmp(buf, tests[i][1]) == 0)) + { + TEST_MSG("Input: %s", tests[i][0]); + TEST_MSG("Expected: %s", tests[i][1]); + TEST_MSG("Actual: %s", buf); + } + } + } } diff --git a/test/path/mutt_path_tidy_dotdot.c b/test/path/mutt_path_tidy_dotdot.c index afdbe23c5..d3ef49ddd 100644 --- a/test/path/mutt_path_tidy_dotdot.c +++ b/test/path/mutt_path_tidy_dotdot.c @@ -29,7 +29,63 @@ void test_mutt_path_tidy_dotdot(void) { // bool mutt_path_tidy_dotdot(char *buf); + static const char *tests[][2] = + { + { NULL, NULL, }, + { "/", "/", }, + { "/apple", "/apple", }, + { "/apple/banana", "/apple/banana", }, + { "/..", "/", }, + { "/apple/..", "/", }, + { "/apple/banana/..", "/apple", }, + { "/../cherry", "/cherry", }, + { "/apple/../cherry", "/cherry", }, + { "/apple/banana/../cherry", "/apple/cherry", }, + { "/apple/..", "/", }, + { "/apple/../..", "/", }, + { "/apple/../../..", "/", }, + { "/apple/../../../..", "/", }, + { "/apple/banana/..", "/apple", }, + { "/apple/banana/../..", "/", }, + { "/apple/banana/../../..", "/", }, + { "/apple/banana/../../../..", "/", }, + { "/../apple", "/apple", }, + { "/../../apple", "/apple", }, + { "/../../../apple", "/apple", }, + { "/../apple/banana/cherry/damson", "/apple/banana/cherry/damson", }, + { "/apple/../banana/cherry/damson", "/banana/cherry/damson", }, + { "/apple/banana/../cherry/damson", "/apple/cherry/damson", }, + { "/apple/banana/cherry/../damson", "/apple/banana/damson", }, + { "/apple/banana/cherry/damson/..", "/apple/banana/cherry", }, + { "/../../apple/banana/cherry/damson", "/apple/banana/cherry/damson", }, + { "/apple/../../banana/cherry/damson", "/banana/cherry/damson", }, + { "/apple/banana/../../cherry/damson", "/cherry/damson", }, + { "/apple/banana/cherry/../../damson", "/apple/damson", }, + { "/apple/banana/cherry/damson/../..", "/apple/banana", }, + { "/../apple/../banana/cherry/damson", "/banana/cherry/damson", }, + { "/apple/../banana/../cherry/damson", "/cherry/damson", }, + { "/apple/banana/../cherry/../damson", "/apple/damson", }, + { "/apple/banana/cherry/../damson/..", "/apple/banana", }, + { "/apple/..banana/cherry/../damson", "/apple/..banana/damson", }, + { "/..apple/..banana/..cherry/../damson", "/..apple/..banana/damson", }, + }; + { TEST_CHECK(!mutt_path_tidy_dotdot(NULL)); } + + { + char buf[64]; + for (size_t i = 0; i < mutt_array_size(tests); i++) + { + mutt_str_strfcpy(buf, tests[i][0], sizeof(buf)); + mutt_path_tidy_dotdot(buf); + if (!TEST_CHECK(mutt_str_strcmp(buf, tests[i][1]) == 0)) + { + TEST_MSG("Input: %s", tests[i][0]); + TEST_MSG("Expected: %s", tests[i][1]); + TEST_MSG("Actual: %s", buf); + } + } + } } diff --git a/test/path/mutt_path_tidy_slash.c b/test/path/mutt_path_tidy_slash.c index c02338aef..2bcc5b44a 100644 --- a/test/path/mutt_path_tidy_slash.c +++ b/test/path/mutt_path_tidy_slash.c @@ -29,7 +29,50 @@ void test_mutt_path_tidy_slash(void) { // bool mutt_path_tidy_slash(char *buf); + static const char *tests[][2] = + { + { NULL, NULL, }, + { "/", "/", }, + { "//", "/", }, + { "///", "/", }, + { "/apple/", "/apple", }, + { "/apple//", "/apple", }, + { "/apple///", "/apple", }, + { "/apple/banana", "/apple/banana", }, + { "/apple//banana", "/apple/banana", }, + { "/apple///banana", "/apple/banana", }, + { "/apple/banana/", "/apple/banana", }, + { "/apple/banana//", "/apple/banana", }, + { "/apple/banana///", "/apple/banana", }, + { "//.///././apple/banana", "/apple/banana", }, + { "/apple/.///././banana", "/apple/banana", }, + { "/apple/banana/.///././", "/apple/banana", }, + { "/apple/banana/", "/apple/banana", }, + { "/apple/banana/.", "/apple/banana", }, + { "/apple/banana/./", "/apple/banana", }, + { "/apple/banana//", "/apple/banana", }, + { "/apple/banana//.", "/apple/banana", }, + { "/apple/banana//./", "/apple/banana", }, + { "////apple/banana", "/apple/banana", }, + { "/.//apple/banana", "/apple/banana", }, + }; + { TEST_CHECK(!mutt_path_tidy_slash(NULL)); } + + { + char buf[64]; + for (size_t i = 0; i < mutt_array_size(tests); i++) + { + mutt_str_strfcpy(buf, tests[i][0], sizeof(buf)); + mutt_path_tidy_slash(buf); + if (!TEST_CHECK(mutt_str_strcmp(buf, tests[i][1]) == 0)) + { + TEST_MSG("Input: %s", tests[i][0]); + TEST_MSG("Expected: %s", tests[i][1]); + TEST_MSG("Actual: %s", buf); + } + } + } } -- 2.40.0