/*
 * Copyright (c) 2018 Codecoup
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "test_fat.h"
#include "test_nffs.h"

static struct nffs_area_desc nffs_selftest_area_descs[] = {
	{ 0x00000000, 16 * 1024 },
	{ 0x00004000, 16 * 1024 },
	{ 0x00008000, 16 * 1024 },
	{ 0x0000c000, 16 * 1024 },
	{ 0x00010000, 64 * 1024 },
	{ 0x00020000, 128 * 1024 },
	{ 0x00040000, 128 * 1024 },
	{ 0x00060000, 128 * 1024 },
	{ 0x00080000, 128 * 1024 },
	{ 0x000a0000, 128 * 1024 },
	{ 0x000c0000, 128 * 1024 },
	{ 0x000e0000, 128 * 1024 },
	{ 0, 0 },
};

static struct nffs_area_desc *save_area_descs;

static void test_setup(void)
{
	save_area_descs = nffs_current_area_descs;
	nffs_current_area_descs = nffs_selftest_area_descs;
}

static void test_teardown(void)
{
	nffs_current_area_descs = save_area_descs;
}

void test_main(void)
{
	ztest_test_suite(multifs_fs_test,
		ztest_unit_test(test_fat_mount),
		ztest_unit_test_setup_teardown(test_nffs_mount,
					       test_setup, test_teardown),
		ztest_unit_test(test_fat_mkdir),
		ztest_unit_test_setup_teardown(test_nffs_mkdir,
					       test_setup, test_teardown),
		ztest_unit_test(test_fat_readdir),
		ztest_unit_test(test_fat_rmdir),
		ztest_unit_test_setup_teardown(test_nffs_readdir,
					       test_setup, test_teardown),
		ztest_unit_test(test_fat_open),
		ztest_unit_test_setup_teardown(test_nffs_open,
					       test_setup, test_teardown),
		ztest_unit_test(test_fat_write),
		ztest_unit_test_setup_teardown(test_nffs_write,
					       test_setup, test_teardown),
		ztest_unit_test(test_fat_read),
		ztest_unit_test(test_fat_close),
		ztest_unit_test_setup_teardown(test_nffs_read,
					       test_setup, test_teardown),
		ztest_unit_test(test_fat_unlink),
		ztest_unit_test_setup_teardown(test_nffs_unlink,
					       test_setup, test_teardown));
	ztest_run_test_suite(multifs_fs_test);
}
