Files
templates/c/sd-file-browser/Tests/test_sd_file_browser.c

68 lines
2.5 KiB
C

#include "sd_file_browser.h"
#include <stdio.h>
#include <string.h>
static unsigned checks;
static unsigned failures;
static unsigned calls;
#define CHECK(condition) do { ++checks; if (!(condition)) ++failures; } while (0)
/* Mock подтверждает, что core передаёт только проверенный bounded запрос. */
static SdFileBrowserStatus mock_list(
void *context, const char *path, uint16_t offset, uint8_t limit,
SdFileBrowserPage *page)
{
(void)context;
++calls;
CHECK(strcmp(path, "/niceOne") == 0);
CHECK(offset == 3U);
CHECK(limit == 2U);
memcpy(page->items[0].name, "July", sizeof("July"));
page->items[0].is_directory = 1U;
page->count = 1U;
page->next_offset = 4U;
return SD_FILE_BROWSER_OK;
}
int main(void)
{
static const char *const invalid[] = {
"", "niceOne", "/../secret", "/./logs", "/a//b", "/a\\b",
"/a:b", "/trailing/"
};
SdFileBrowser browser = { NULL, mock_list };
SdFileBrowserPage page;
unsigned index;
CHECK(SdFileBrowser_ValidatePath("/") == SD_FILE_BROWSER_OK);
CHECK(SdFileBrowser_ValidateLogFilePath("/TEMPLOG.MD") == SD_FILE_BROWSER_OK);
CHECK(SdFileBrowser_ValidateLogFilePath(
"/niceOne/mounth/2026-07_July/temperature_2026-07-18_10-00-00.md") ==
SD_FILE_BROWSER_OK);
CHECK(SdFileBrowser_ValidateLogFilePath("/niceOne/settings/private.json") ==
SD_FILE_BROWSER_NOT_LOG_FILE);
CHECK(SdFileBrowser_ValidateLogFilePath("/niceOne/mounth/fw.bin") ==
SD_FILE_BROWSER_NOT_LOG_FILE);
CHECK(SdFileBrowser_ValidateLogFilePath("/niceOne/mounth/temperature_bad.md") ==
SD_FILE_BROWSER_NOT_LOG_FILE);
CHECK(SdFileBrowser_ValidatePath("/niceOne/2026-07_July") ==
SD_FILE_BROWSER_OK);
for (index = 0U; index < sizeof(invalid) / sizeof(invalid[0]); ++index) {
CHECK(SdFileBrowser_ValidatePath(invalid[index]) ==
SD_FILE_BROWSER_INVALID_PATH);
}
memset(&page, 0xA5, sizeof(page));
CHECK(SdFileBrowser_ListPage(&browser, "/niceOne", 3U, 2U, &page) ==
SD_FILE_BROWSER_OK);
CHECK(calls == 1U);
CHECK(page.count == 1U);
CHECK(strcmp(page.items[0].name, "July") == 0);
CHECK(SdFileBrowser_ListPage(&browser, "/niceOne", 0U, 4U, &page) ==
SD_FILE_BROWSER_INVALID_CURSOR);
CHECK(calls == 1U);
(void)printf("SD browser core: %u checks, %u failures\n", checks, failures);
return failures == 0U ? 0 : 1;
}