From e1d780910569abd7019b7aa40d94fbfe6a42d398 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 25 Dec 2016 16:19:12 +0100 Subject: extfs: Add exisiting image construction tests --- test/fs/extfs_test.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 4 deletions(-) (limited to 'test/fs/extfs_test.cpp') diff --git a/test/fs/extfs_test.cpp b/test/fs/extfs_test.cpp index 46149e9..4533e60 100644 --- a/test/fs/extfs_test.cpp +++ b/test/fs/extfs_test.cpp @@ -5,21 +5,105 @@ #include #include +#if __has_include() +#include +namespace stdfs = std::experimental::filesystem; +#elif __has_include() +#include +namespace stdfs = std::filesystem; +#else +#error The standard library has no support for the Filesystem TS +#endif + +#include +#include +#include + +auto constexpr kNonExistantImage = "THIS_DISK_DOES_NOT_EXIST"; +auto constexpr kLabeledDiskImage = "../test/extfs_data/labeled.img"; +auto constexpr kUnlabeledDiskImage = "../test/extfs_data/unlabeled.img"; + +bool disk_exists(stdfs::path const & imagePath) + { + return stdfs::exists(imagePath) && stdfs::is_regular_file(imagePath); + } + +auto guard_disk_image_any(std::initializer_list imageList, + fs::extfs::mode const mode = fs::extfs::mode::read_only) + { + ASSERT_GREATER_EQUALM("imageList must not be emtpy!", imageList.size(), 0); + + for(auto && path : imageList) + { + if(disk_exists(path)) + { + return fs::extfs(path, mode); + } + } + + throw std::runtime_error{"None of the expected disk images could be found!"}; + } + +auto guard_disk_image_none(std::initializer_list imageList) + { + ASSERT_GREATER_EQUALM("imageList must not be emtpy!", imageList.size(), 0); + + for(auto && path : imageList) + { + if(disk_exists(path)) + { + throw std::runtime_error{"Found unexpected disk image!"}; + } + } + + return fs::extfs{*imageList.begin()}; + } + void construction_with_inexistent_file_creates_extfs_that_is_not_open() { - auto && disk = fs::extfs{"./THIS_DISK_DOES_NOT_EXIST"}; + auto && disk = guard_disk_image_none({kNonExistantImage}); ASSERT(!disk.open()); } void non_open_file_system_has_no_label() { - auto && disk = fs::extfs{"./THIS_DISK_DOES_NOT_EXIST"}; + auto && disk = guard_disk_image_none({kNonExistantImage}); ASSERT(!disk.has_label()); } void non_open_file_system_has_empty_label() { - auto && disk = fs::extfs{"./THIS_DISK_DOES_NOT_EXIST"}; + auto && disk = guard_disk_image_none({kNonExistantImage}); + ASSERT_EQUAL("", disk.label()); + } + +void construction_with_existing_file_creates_extfs_that_is_open() + { + auto && disk = guard_disk_image_any({kLabeledDiskImage, kUnlabeledDiskImage}); + ASSERT(disk.open()); + } + +void construction_with_labeled_image_creates_extfs_that_has_label() + { + auto && disk = guard_disk_image_any({kLabeledDiskImage}); + ASSERT(disk.has_label()); + } + +void construction_with_unlabeled_image_creates_extfs_that_has_no_label() + { + auto && disk = guard_disk_image_any({kUnlabeledDiskImage}); + ASSERT(!disk.has_label()); + } + +void construction_with_labeled_image_creates_extfs_that_has_label_labeleddisk() + { + auto && disk = guard_disk_image_any({kLabeledDiskImage}); + ASSERT_EQUAL("labeleddisk", disk.label()); + } + +void construction_with_unlabeled_image_creates_extfs_that_has_empty_string_for_label() + { + auto && disk = guard_disk_image_any({kUnlabeledDiskImage}); ASSERT_EQUAL("", disk.label()); } @@ -28,7 +112,12 @@ int main(int argc, char * argv[]) auto tests = cute::suite{ CUTE(construction_with_inexistent_file_creates_extfs_that_is_not_open), CUTE(non_open_file_system_has_no_label), - CUTE(non_open_file_system_has_empty_label) + CUTE(non_open_file_system_has_empty_label), + CUTE(construction_with_existing_file_creates_extfs_that_is_open), + CUTE(construction_with_labeled_image_creates_extfs_that_has_label), + CUTE(construction_with_unlabeled_image_creates_extfs_that_has_no_label), + CUTE(construction_with_labeled_image_creates_extfs_that_has_label_labeleddisk), + CUTE(construction_with_unlabeled_image_creates_extfs_that_has_empty_string_for_label), }; cute::xml_file_opener resultFile{argc, argv}; -- cgit v1.2.3