33 const int COMMAND_INDEX = 0;
34 const int FLAG_INDEX = 1;
35 const int CONTENT_INDEX = 2;
36 const int CLASS_INDEX = 3;
39 const char* command_string =
"./prlx";
40 const char* create_flag =
"-c";
41 const char* modify_flag =
"-m";
42 const char* remove_flag =
"-r";
43 const char* list_flag =
"-l";
44 const char* invalid_flag =
"-k";
45 const char* content_string =
"this is a test";
46 const char* class_string =
"class";
48 printf(
"---- Flag Tests ----\n");
55 argv[COMMAND_INDEX] = command_string;
56 argv[FLAG_INDEX] = create_flag;
57 argv[CONTENT_INDEX] = content_string;
58 argv[CLASS_INDEX] = class_string;
62 printf(
"[FAILED] @ create flag\n");
65 printf(
"[PASSED] @ create flag\n");
73 argv[FLAG_INDEX] = remove_flag;
76 printf(
"[FAILED] @ remove flag\n");
79 printf(
"[PASSED] @ remove flag\n");
87 argv[FLAG_INDEX] = list_flag;
88 if ( get_flag(argv[FLAG_INDEX]) !=
FLAG_LIST )
90 printf(
"[FAILED] @ list flag\n");
93 printf(
"[PASSED] @ list flag\n");
100 argv[FLAG_INDEX] = modify_flag;
103 printf(
"[FAILED] @ modify flag\n");
106 printf(
"[PASSED] @ modify flag\n");
114 argv[FLAG_INDEX] = invalid_flag;
117 printf(
"[FAILED] @ invalid flag\n");
120 printf(
"[PASSED] @ invalid flag\n");
123 printf(
"---- Content Extraction Tests ----\n");
129 char* test_content = get_content_arg(argv[CONTENT_INDEX]);
130 if ( strcmp(test_content, content_string) != 0 )
132 printf(
"[FAILED] @ content string extraction\n");
135 printf(
"[PASSED] @ content string extraction\n");
143 char* test_class = get_content_arg(argv[CLASS_INDEX]);
144 if ( strcmp(test_class, class_string) != 0 )
146 printf(
"[FAILED] @ class string extraction\n");
149 printf(
"[PASSED] @ class string extraction\n");
157 Task* test_task = NULL;
160 const char* CLASS =
"class";
161 const char* CONTENT =
"test content";
162 const size_t TABLE_SIZE = 100;
164 printf(
"---- Task Structures Test ----\n");
167 if (test_task == NULL)
169 printf(
"[FAILED] @ task creation\n");
173 printf(
"[FAILED] @ task class initialization\n");
177 printf(
"[FAILED] @ task content initialization\n");
180 printf(
"[PASSED] @ task initialization\n");
184 if (test_task_class == NULL)
186 printf(
"[FAILED] @ task class creation\n");
190 printf(
"[FAILED] @ task class name initialization\n");
192 }
else if (test_task_class->
table_size != TABLE_SIZE)
194 printf(
"[FAILED] @ task class table size initialization\n");
198 printf(
"[FAILED] @ task class table initialization\n");
201 printf(
"[PASSED] @ task class initialization\n");
205 if (test_task_collection == NULL)
207 printf(
"[FAILED] @ task collection creation\n");
211 printf(
"[FAILED] @ task collection table size initialization\n");
215 printf(
"[FAILED] @ task collection table initialization\n");
218 printf(
"[PASSED] @ task collection initialization\n");
223 add_task(test_task_class, test_task);
227 if (find_task == NULL)
229 printf(
"[FAILED] @ task lookup\n");
232 printf(
"[PASSED] @ task lookup\n");
236 if (find_task_class == NULL)
238 printf(
"[FAILED] @ task class lookup\n");
241 printf(
"[PASSED] @ task class lookup\n");
245 find_task =
get_task(test_task_class, CONTENT);
246 if (find_task != NULL)
248 printf(
"[FAILED] @ task deletion\n");
251 printf(
"[PASSED] @ task deletion\n");
256 if (find_task_class != NULL)
258 printf(
"[FAILED] @ task class deletion\n");
261 printf(
"[PASSED] @ task class deletion\n");
269 const size_t RUNTIME_COLLECTION_SIZE = 50;
272 Task* runtime_task = NULL;
274 system(
"cat ./misc/logo.txt");
276 if (runtime_task_collection == NULL)
278 printf(
"Runtime test error: failed to create task collection\n");
283 char class_name[1024];
284 char task_content[1024];
287 printf(
"Enter todo class/category: ");
288 fgets(class_name,
sizeof(class_name), stdin);
289 if ( strlen(class_name) > 0 && (class_name[ strlen(class_name) - 1] ==
'\n') )
291 class_name[ strlen(class_name) - 1 ] =
'\0';
294 if ( strcmp(class_name,
"quit") == 0 ) {
298 printf(
"Enter description: ");
299 fgets(task_content,
sizeof(task_content), stdin);
300 if ( strlen(task_content) > 0 && (task_content[ strlen(task_content) - 1] ==
'\n') )
302 task_content[ strlen(task_content) - 1 ] =
'\0';
305 printf(
"---- Summary ----\nclass: '%s'\ncontent:'%s'\n---------------\nContinue? (y/n) ", class_name, task_content);
306 fgets(yn,
sizeof(yn), stdin);
307 if ( strlen(yn) > 0 && (yn[ strlen(yn) - 1] ==
'\n') )
309 yn[ strlen(yn) - 1 ] =
'\0';
311 if ( strcmp(&yn[0],
"y") != 0 )
318 runtime_task =
create_task(class_name, task_content);
319 if (runtime_task == NULL)
321 printf(
"Runtime test error: failed to create task\n");
325 runtime_task_class =
get_task_class(runtime_task_collection, class_name);
326 if (runtime_task_class == NULL)
328 printf(
"Class '%s' does not exist. Creating...\n", class_name);
330 runtime_task_class =
get_task_class(runtime_task_collection, class_name);
331 add_task(runtime_task_class, runtime_task);
332 printf(
"Appended task to '%s'\n\n", class_name);
334 if (
get_task(runtime_task_class, task_content) != NULL )
336 printf(
"Runtime error: task already exists in '%s'\n", class_name);
339 printf(
"Appending task to '%s'...\n", class_name);
340 add_task(runtime_task_class, runtime_task);
341 printf(
"Appended task to '%s'\n\n", class_name);
343 printf(
"Enter category name 'quit' to exit runtime test\n");
Contains functions for extracting content from the argument vector.
Contains the structures and procedures for hashmap-related operations.
A task class containing other tasks.
HashMap * task_class_table
A task collection containing other classes.
HashMap * task_collection
void remove_task(TaskClass *task_class, char *task_content)
Removes a task from a task class by its content.
TaskClass * get_task_class(TaskCollection *task_collection, const char *key)
Gets a task class by its class name from a task collection.
void add_task_class(TaskCollection *task_collection, TaskClass *task_class)
Adds a task class to a task collection.
TaskCollection * create_task_collection(size_t collection_size)
Creates a task collection of known size.
Task * create_task(char *class_of_task, char *task_content)
Creates a task of known class and content.
void remove_task_class(TaskCollection *task_collection, char *class_name)
Removes a task class from a task collection.
Task * get_task(TaskClass *task_class, const char *key)
Finds a task in a task class by its content.
TaskClass * create_task_class(char *class_name, size_t class_size)
Creates a task class of a known class and size.
void add_task(TaskClass *task_class, Task *new_task)
Adds a task to a task class.
Contains structures and functions for handling task-related operations.