68 lines
2.5 KiB
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;
|
|
}
|