c-template
command_line_test.c
Go to the documentation of this file.
1 #include <stdbool.h>
2 #include <stdlib.h>
3 #include <stdarg.h>
4 #include <stddef.h>
5 #include <setjmp.h>
6 #include <cmocka.h>
7 #include <assert.h>
8 #include "command_line.c"
9 
10 void print_hello_world();
12  printf("hello world");
13 }
16  command_handler *handler = malloc(sizeof(command_handler));
17  if (handler == NULL) {
18  printf("failed to malloc comand_handler\n");
19  return NULL;
20  }
21  handler->callback = print_hello_world;
22  handler->name = "hello-world";
23  return handler;
24 }
25 
26 #pragma GCC diagnostic ignored "-Wunused-parameter"
27 #pragma GCC diagnostic ignored "-Wunused-variable"
28 void test_new_command_object(void **state) {
29  int argc = MAX_COMMAND_ARGS;
30  // increase argc beyond the maximum limit
31  argc++;
32  char *argv[1] = {"test_arg"};
33  command_object *cmdobj = new_command_object(argc, argv);
34  assert(cmdobj == NULL);
35  argc = 1;
36  cmdobj = new_command_object(argc, argv);
37  assert(cmdobj != NULL);
38  assert(cmdobj->argc == 1);
39  assert(strcmp(cmdobj->argv[0], "test_arg") == 0);
40  free_command_object(cmdobj);
41 }
42 
43 #pragma GCC diagnostic ignored "-Wunused-parameter"
44 // for some reason gcc complains response isn't used
45 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
46 void test_load_command(void **state) {
47  int argc = 1;
48  char *argv[MAX_COMMAND_ARGS] = {"hello"};
49  command_object *cmdobj = new_command_object(argc, argv);
50  assert(cmdobj != NULL);
52  int response = load_command(cmdobj, cmd);
53  assert(response == 0);
54  assert(cmdobj->command_count == 1);
55  int old_count = cmdobj->command_count;
56  cmdobj->command_count = 33;
57  response = load_command(cmdobj, new_test_command());
58  assert(response == -1);
59  free_command_object(cmdobj);
60 }
61 
62 #pragma GCC diagnostic ignored "-Wunused-parameter"
63 // for some reason gcc complains response isn't used
64 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
65 void test_execute(void **state) {
66  int argc = 1;
67  char *argv[MAX_COMMAND_ARGS] = {"hello"};
68  command_object *cmdobj = new_command_object(argc, argv);
69  assert(cmdobj != NULL);
71  int response = load_command(cmdobj, cmd);
72  assert(response == 0);
73  response = execute(cmdobj, "hello-world");
74  assert(response == 0);
75  response = execute(cmdobj, "not-a-command");
76  assert(response == -1);
77  free_command_object(cmdobj);
78 }
79 
80 int main(void) {
81  const struct CMUnitTest tests[] = {
82  cmocka_unit_test(test_new_command_object),
83  cmocka_unit_test(test_load_command),
84  cmocka_unit_test(test_execute),
85  };
86  return cmocka_run_group_tests(tests, NULL, NULL);
87 }
free_command_object
void free_command_object(command_object *self)
frees memory allocated for the command_object and sets pointer to null for some reason this is causin...
Definition: command_line.c:74
test_load_command
void test_load_command(void **state)
Definition: command_line_test.c:46
load_command
int load_command(command_object *self, command_handler *command)
loads command handler and makes it executable
Definition: command_line.c:47
command_handler::name
char * name
Definition: command_line.h:41
print_hello_world
void print_hello_world()
Definition: command_line_test.c:11
test_execute
void test_execute(void **state)
Definition: command_line_test.c:65
command_handler
Definition: command_line.h:40
MAX_COMMAND_ARGS
#define MAX_COMMAND_ARGS
Definition: command_line.h:22
execute
int execute(command_object *self, char *run)
checks to see if we have a command named according to run and executes it
Definition: command_line.c:59
command::argc
int argc
Definition: command_line.h:50
command
Definition: command_line.h:48
test_new_command_object
void test_new_command_object(void **state)
Definition: command_line_test.c:28
command::argv
char * argv[32]
Definition: command_line.h:51
command_handler::callback
command_handler_callback callback
Definition: command_line.h:42
new_command_object
command_object * new_command_object(int argc, char *argv[])
intializes a new command_object to have commands loaded into
Definition: command_line.c:14
command::command_count
int command_count
Definition: command_line.h:49
main
int main(void)
Definition: command_line_test.c:80
command_line.c
new_test_command
command_handler * new_test_command()
Definition: command_line_test.c:15