mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-10 06:54:19 +00:00
fix: make dialog_file_browser_set_basic_options
initialize all fields (#2756)
* fix: make `dialog_file_browser_set_basic_options` initialize all fields * fix(GH-2756): use alternative test for `test_dialog_file_browser_set_basic_options_should_init_all_fields` Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
parent
168fa72d53
commit
75354ec5ba
5 changed files with 44 additions and 5 deletions
|
@ -48,7 +48,7 @@ Almost everything in flipper firmware is built around this concept.
|
||||||
# C coding style
|
# C coding style
|
||||||
|
|
||||||
- Tab is 4 spaces
|
- Tab is 4 spaces
|
||||||
- Use `fbt format` to reformat source code and check style guide before commit
|
- Use `./fbt format` to reformat source code and check style guide before commit
|
||||||
|
|
||||||
## Naming
|
## Naming
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#include <dialogs/dialogs.h>
|
||||||
|
|
||||||
|
#include "../minunit.h"
|
||||||
|
|
||||||
|
MU_TEST(test_dialog_file_browser_set_basic_options_should_init_all_fields) {
|
||||||
|
mu_assert(
|
||||||
|
sizeof(DialogsFileBrowserOptions) == 28,
|
||||||
|
"Changes to `DialogsFileBrowserOptions` should also be reflected in `dialog_file_browser_set_basic_options`");
|
||||||
|
|
||||||
|
DialogsFileBrowserOptions options;
|
||||||
|
dialog_file_browser_set_basic_options(&options, ".fap", NULL);
|
||||||
|
// note: this assertions can safely be changed, their primary purpose is to remind the maintainer
|
||||||
|
// to update `dialog_file_browser_set_basic_options` by including all structure fields in it
|
||||||
|
mu_assert_string_eq(".fap", options.extension);
|
||||||
|
mu_assert_null(options.base_path);
|
||||||
|
mu_assert(options.skip_assets, "`skip_assets` should default to `true");
|
||||||
|
mu_assert(options.hide_dot_files, "`hide_dot_files` should default to `true");
|
||||||
|
mu_assert_null(options.icon);
|
||||||
|
mu_assert(options.hide_ext, "`hide_ext` should default to `true");
|
||||||
|
mu_assert_null(options.item_loader_callback);
|
||||||
|
mu_assert_null(options.item_loader_context);
|
||||||
|
}
|
||||||
|
|
||||||
|
MU_TEST_SUITE(dialogs_file_browser_options) {
|
||||||
|
MU_RUN_TEST(test_dialog_file_browser_set_basic_options_should_init_all_fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
int run_minunit_test_dialogs_file_browser_options() {
|
||||||
|
MU_RUN_SUITE(dialogs_file_browser_options);
|
||||||
|
|
||||||
|
return MU_EXIT_CODE;
|
||||||
|
}
|
|
@ -27,6 +27,7 @@ int run_minunit_test_nfc();
|
||||||
int run_minunit_test_bit_lib();
|
int run_minunit_test_bit_lib();
|
||||||
int run_minunit_test_float_tools();
|
int run_minunit_test_float_tools();
|
||||||
int run_minunit_test_bt();
|
int run_minunit_test_bt();
|
||||||
|
int run_minunit_test_dialogs_file_browser_options();
|
||||||
|
|
||||||
typedef int (*UnitTestEntry)();
|
typedef int (*UnitTestEntry)();
|
||||||
|
|
||||||
|
@ -55,6 +56,8 @@ const UnitTest unit_tests[] = {
|
||||||
{.name = "bit_lib", .entry = run_minunit_test_bit_lib},
|
{.name = "bit_lib", .entry = run_minunit_test_bit_lib},
|
||||||
{.name = "float_tools", .entry = run_minunit_test_float_tools},
|
{.name = "float_tools", .entry = run_minunit_test_float_tools},
|
||||||
{.name = "bt", .entry = run_minunit_test_bt},
|
{.name = "bt", .entry = run_minunit_test_bt},
|
||||||
|
{.name = "dialogs_file_browser_options",
|
||||||
|
.entry = run_minunit_test_dialogs_file_browser_options},
|
||||||
};
|
};
|
||||||
|
|
||||||
void minunit_print_progress() {
|
void minunit_print_progress() {
|
||||||
|
|
|
@ -9,12 +9,13 @@ void dialog_file_browser_set_basic_options(
|
||||||
const char* extension,
|
const char* extension,
|
||||||
const Icon* icon) {
|
const Icon* icon) {
|
||||||
options->extension = extension;
|
options->extension = extension;
|
||||||
|
options->base_path = NULL;
|
||||||
options->skip_assets = true;
|
options->skip_assets = true;
|
||||||
|
options->hide_dot_files = true;
|
||||||
options->icon = icon;
|
options->icon = icon;
|
||||||
options->hide_ext = true;
|
options->hide_ext = true;
|
||||||
options->item_loader_callback = NULL;
|
options->item_loader_callback = NULL;
|
||||||
options->item_loader_context = NULL;
|
options->item_loader_context = NULL;
|
||||||
options->base_path = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static DialogsApp* dialogs_app_alloc() {
|
static DialogsApp* dialogs_app_alloc() {
|
||||||
|
|
|
@ -16,7 +16,8 @@ typedef struct DialogsApp DialogsApp;
|
||||||
/****************** FILE BROWSER ******************/
|
/****************** FILE BROWSER ******************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File browser dialog extra options
|
* File browser dialog extra options.
|
||||||
|
* This can be default-initialized using {@link dialog_file_browser_set_basic_options}.
|
||||||
* @param extension file extension to be offered for selection
|
* @param extension file extension to be offered for selection
|
||||||
* @param base_path root folder path for navigation with back key
|
* @param base_path root folder path for navigation with back key
|
||||||
* @param skip_assets true - do not show assets folders
|
* @param skip_assets true - do not show assets folders
|
||||||
|
@ -38,8 +39,10 @@ typedef struct {
|
||||||
} DialogsFileBrowserOptions;
|
} DialogsFileBrowserOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize file browser dialog options
|
* Initialize file browser dialog options and set default values.
|
||||||
* and set default values
|
* This is guaranteed to initialize all fields
|
||||||
|
* so it is safe to pass pointer to uninitialized {@code options}
|
||||||
|
* and assume that the data behind it becomes fully initialized after the call.
|
||||||
* @param options pointer to options structure
|
* @param options pointer to options structure
|
||||||
* @param extension file extension to filter
|
* @param extension file extension to filter
|
||||||
* @param icon file icon pointer, NULL for default icon
|
* @param icon file icon pointer, NULL for default icon
|
||||||
|
|
Loading…
Reference in a new issue