/****************************************************************************** * MiniFFS : Mini Flat File System * This file is part of the test suite of MiniFFS * * Copyright (c) 2008-2022 986-Studio. All rights reserved. * ******************************************************************************/ #include #include #include "get_fs.h" TEST(FileOperations, OpeningAFile) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); ASSERT_NE(fp, nullptr); } TEST(FileOperations, OpeningANonExistingFile) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "FOO.BAR"); ASSERT_EQ(fp, nullptr); ASSERT_EQ(miniffs_geterror(), MINIFFS_FILE_NOT_FOUND); } TEST(FileOperations, UsingTheWrongNameCases) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "hello.txt"); ASSERT_EQ(fp, nullptr); ASSERT_EQ(miniffs_geterror(), MINIFFS_FILE_NOT_FOUND); } TEST(FileOperations, TooLongFilename) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "THISisNOTaVALIDname.txt"); ASSERT_EQ(fp, nullptr); ASSERT_EQ(miniffs_geterror(), MINIFFS_INVALID_NAME); } TEST(FileOperations, TooLongExtension) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.thisIsNotValid"); ASSERT_EQ(fp, nullptr); ASSERT_EQ(miniffs_geterror(), MINIFFS_INVALID_NAME); } TEST(FileOperations, ReadABytes) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); ASSERT_EQ(miniffs_read(fp), 'H'); ASSERT_EQ(miniffs_read(fp), 'e'); } TEST(FileOperations, TestingSeek) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); ASSERT_EQ(miniffs_read(fp), 'H'); ASSERT_EQ(miniffs_read(fp), 'e'); miniffs_seek(fp, 0, MFFS_SEEK_SET); ASSERT_EQ(miniffs_read(fp), 'H'); ASSERT_EQ(miniffs_read(fp), 'e'); miniffs_seek(fp, 5, MFFS_SEEK_SET); ASSERT_EQ(miniffs_read(fp), ' '); ASSERT_EQ(miniffs_read(fp), 'W'); miniffs_seek(fp, 1, MFFS_SEEK_CUR); ASSERT_EQ(miniffs_read(fp), 'r'); miniffs_seek(fp, 0, MFFS_SEEK_END); ASSERT_EQ(miniffs_read(fp), '!'); miniffs_seek(fp, 1, MFFS_SEEK_END); ASSERT_EQ(miniffs_read(fp), 'd'); ASSERT_EQ(miniffs_read(fp), '!'); } TEST(FileOperations, TestingEndOfFileBoundary) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); miniffs_seek(fp, 1, MFFS_SEEK_END); ASSERT_EQ(miniffs_read(fp), 'd'); ASSERT_EQ(miniffs_read(fp), '!'); ASSERT_EQ(miniffs_geterror(), MINIFFS_END_OF_FILE); ASSERT_EQ(miniffs_read(fp), '!'); ASSERT_EQ(miniffs_geterror(), MINIFFS_END_OF_FILE); ASSERT_EQ(miniffs_read(fp), '!'); ASSERT_EQ(miniffs_geterror(), MINIFFS_END_OF_FILE); } TEST(FileOperations, ReadBlocks) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); char buffer[13]; int ret; memset(buffer, 0, 13); ret = miniffs_read_blocks(buffer, 4, 1, fp); ASSERT_EQ(ret, 1); ASSERT_EQ(buffer[0], 'H'); ASSERT_EQ(buffer[1], 'e'); ASSERT_EQ(buffer[2], 'l'); ASSERT_EQ(buffer[3], 'l'); memset(buffer, 0, 13); ret = miniffs_read_blocks(buffer, 4, 1, fp); ASSERT_EQ(ret, 1); ASSERT_EQ(buffer[0], 'o'); ASSERT_EQ(buffer[1], ' '); ASSERT_EQ(buffer[2], 'W'); ASSERT_EQ(buffer[3], 'o'); } TEST(FileOperations, ReadMultiplesBlocks) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); char buffer[13]; int ret; memset(buffer, 0, 13); ret = miniffs_read_blocks(buffer, 4, 2, fp); ASSERT_EQ(ret, 2); ASSERT_EQ(buffer[0], 'H'); ASSERT_EQ(buffer[1], 'e'); ASSERT_EQ(buffer[2], 'l'); ASSERT_EQ(buffer[3], 'l'); ASSERT_EQ(buffer[4], 'o'); ASSERT_EQ(buffer[5], ' '); ASSERT_EQ(buffer[6], 'W'); ASSERT_EQ(buffer[7], 'o'); memset(buffer, 0, 13); miniffs_seek(fp, 0, MFFS_SEEK_SET); ret = miniffs_read_blocks(buffer, 4, 3, fp); ASSERT_EQ(ret, 3); ASSERT_EQ(buffer[0], 'H'); ASSERT_EQ(buffer[1], 'e'); ASSERT_EQ(buffer[2], 'l'); ASSERT_EQ(buffer[3], 'l'); ASSERT_EQ(buffer[4], 'o'); ASSERT_EQ(buffer[5], ' '); ASSERT_EQ(buffer[6], 'W'); ASSERT_EQ(buffer[7], 'o'); ASSERT_EQ(buffer[8], 'r'); ASSERT_EQ(buffer[9], 'l'); ASSERT_EQ(buffer[10], 'd'); ASSERT_EQ(buffer[11], '!'); } TEST(FileOperations, ReadTooManyBlocks) { miniffs_t *fs = get_fs("simple_test.mffs"); file_t *fp = miniffs_open(fs, "HELLO.TXT"); char buffer[13]; int ret; memset(buffer, 0, 13); ret = miniffs_read_blocks(buffer, 4, 4, fp); ASSERT_EQ(ret, 3); ASSERT_EQ(buffer[0], 'H'); ASSERT_EQ(buffer[1], 'e'); ASSERT_EQ(buffer[2], 'l'); ASSERT_EQ(buffer[3], 'l'); ASSERT_EQ(buffer[4], 'o'); ASSERT_EQ(buffer[5], ' '); ASSERT_EQ(buffer[6], 'W'); ASSERT_EQ(buffer[7], 'o'); ASSERT_EQ(buffer[8], 'r'); ASSERT_EQ(buffer[9], 'l'); ASSERT_EQ(buffer[10], 'd'); ASSERT_EQ(buffer[11], '!'); }