test_filesystem.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "crucible/core.hpp" #include "crucible/test.hpp" namespace test_filesystem { constexpr crucible::string_view PARENT_DIRECTORY { "test_filesystem_scratch_directory" }; constexpr crucible::string_view NONEXISTENT_DIRECTORY { "this/directory/definitely/does/not/exist" }; constexpr crucible::string_view NONEXISTENT_FILE { "this/file/definitely/does/not/exist.txt" }; constexpr crucible::string_view TEST_DIRECTORY { "test_directory" }; constexpr crucible::string_view TEST_FILE { "test_file.txt" }; constexpr crucible::string_view TEST_FILE_TEXT { "foo\nbar\nbaz\n" }; CRUCIBLE_TEST_BEFORE_EACH(create_file_structure) { crucible::try_delete_directory_recursive(PARENT_DIRECTORY) .discard(); { auto const result { crucible::try_create_directory(PARENT_DIRECTORY) }; CRUCIBLE_ASSERT_SUCCESS(result); } { auto const result { crucible::try_create_text_file(PARENT_DIRECTORY + "/" + TEST_FILE, TEST_FILE_TEXT) }; CRUCIBLE_ASSERT_SUCCESS(result); } { auto const result { crucible::try_create_directory(PARENT_DIRECTORY + "/" + TEST_DIRECTORY) }; CRUCIBLE_ASSERT_SUCCESS(result); } { auto const result { crucible::try_create_text_file(PARENT_DIRECTORY + "/" + TEST_DIRECTORY + "/" + TEST_FILE, TEST_FILE_TEXT) }; CRUCIBLE_ASSERT_SUCCESS(result); } } CRUCIBLE_TEST_AFTER_EACH(delete_file_structure) { crucible::try_delete_directory_recursive(PARENT_DIRECTORY) .discard(); } CRUCIBLE_TEST_SCENARIO(create_directory_in_nonexistent_directory_fails) { auto const result { crucible::try_create_directory(PARENT_DIRECTORY + "/" + NONEXISTENT_DIRECTORY) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(create_directory_fails_if_exists) { auto const result { crucible::try_create_directory(PARENT_DIRECTORY + "/" + TEST_DIRECTORY) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(create_file_in_nonexistent_directory_fails) { auto const result { crucible::try_create_text_file(PARENT_DIRECTORY + "/" + NONEXISTENT_FILE, TEST_FILE_TEXT) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(create_file_fails_if_exists) { auto const result { crucible::try_create_text_file(PARENT_DIRECTORY + "/" + TEST_FILE, TEST_FILE_TEXT) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(delete_nonexistent_directory_fails) { auto const result { crucible::try_delete_directory(PARENT_DIRECTORY + "/" + NONEXISTENT_DIRECTORY) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(delete_nonexistent_file_fails) { auto const result { crucible::try_delete_file(PARENT_DIRECTORY + "/" + NONEXISTENT_FILE) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(read_nonexistent_directory_fails) { auto const result { crucible::try_read_directory_list(PARENT_DIRECTORY + "/" + NONEXISTENT_DIRECTORY) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(read_nonexistent_file_fails) { auto const result { crucible::try_read_text_file(PARENT_DIRECTORY + "/" + NONEXISTENT_FILE) }; CRUCIBLE_ASSERT_FAILURE(result); } CRUCIBLE_TEST_SCENARIO(read_directory_list) { auto const result { crucible::try_read_directory_list(PARENT_DIRECTORY + "/" + TEST_DIRECTORY) }; CRUCIBLE_ASSERT_SUCCESS(result); auto const &directory_listing { result.success() }; CRUCIBLE_ASSERT_EQ(directory_listing.size(), 1); CRUCIBLE_ASSERT_EQ(directory_listing[0].name, TEST_FILE); } CRUCIBLE_TEST_SCENARIO(read_file_text) { auto const result { crucible::try_read_text_file(PARENT_DIRECTORY + "/" + TEST_FILE) }; CRUCIBLE_ASSERT_SUCCESS(result); auto const &data_from_disk { result.success() }; CRUCIBLE_ASSERT_EQ(TEST_FILE_TEXT, data_from_disk); } CRUCIBLE_TEST_SCENARIO(read_file_size) { auto const result { crucible::try_read_file_size(PARENT_DIRECTORY + "/" + TEST_FILE) }; CRUCIBLE_ASSERT_SUCCESS(result); auto const size_from_disk { result.success() }; CRUCIBLE_ASSERT_EQ(size_from_disk, TEST_FILE_TEXT.size()); } } CRUCIBLE_TEST_MAIN