Files
uC_libs/test/cmd_parser/cmd_parser_test.c
2022-12-03 20:00:11 +01:00

283 lines
12 KiB
C

#include "unity.h"
#include "fff.h"
#include "cmd_parser.h"
DEFINE_FFF_GLOBALS;
FAKE_VALUE_FUNC(result_t, parse_callback, char, char *);
cmd_t led_cmd = {.name = "led", .parser = parse_callback};
void setUp(void)
{
RESET_FAKE(parse_callback);
FFF_RESET_HISTORY();
}
void tearDown(void)
{
}
void test_splittoken1(void)
{
char msg[] = "led";
parse_callback_fake.return_val = CMD_OK;
msg_parse(msg);
TEST_ASSERT_EQUAL(1, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken2(void)
{
char msg[] = "led set";
parse_callback_fake.return_val = CMD_OK;
msg_parse(msg);
TEST_ASSERT_EQUAL(2, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_ARG, parse_callback_fake.arg0_history[0]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("set", parse_callback_fake.arg1_history[0], 3);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken3(void)
{
char msg[] = "led set -p";
parse_callback_fake.return_val = CMD_OK;
msg_parse(msg);
TEST_ASSERT_EQUAL(3, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('p', parse_callback_fake.arg0_history[1]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[1]);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken4(void)
{
char msg[] = "led set -p 50";
result_t returnValue[] = {CMD_OK, CMD_VALUE_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(4, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('p', parse_callback_fake.arg0_history[1]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[1]);
TEST_ASSERT_EQUAL_CHAR('p', parse_callback_fake.arg0_history[2]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("50", parse_callback_fake.arg1_history[2], 2);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken5(void)
{
char msg[] = "led set -p 50 -l";
result_t returnValue[] = {CMD_OK, CMD_VALUE_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(5, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[3]);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken6(void)
{
char msg[] = "led set -p 50 -l Atop, Btop, Ctop";
result_t returnValue[] = {CMD_OK, CMD_VALUE_REQ, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(8, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[3]);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[4]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Atop", parse_callback_fake.arg1_history[4], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[5]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Btop", parse_callback_fake.arg1_history[5], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[6]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Ctop", parse_callback_fake.arg1_history[6], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken7(void)
{
char msg[] = "led set -p -l Atop, Btop, Ctop";
result_t returnValue[] = {CMD_OK, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(7, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[2]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[2]);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Atop", parse_callback_fake.arg1_history[3], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[4]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Btop", parse_callback_fake.arg1_history[4], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[5]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Ctop", parse_callback_fake.arg1_history[5], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken8(void)
{
char msg[] = "led set -p -l Atop, Btop, Ctop test";
result_t returnValue[] = {CMD_OK, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK, CMD_OK, CMD_OK, CMD_UNKNOWN, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(9, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_ARG, parse_callback_fake.arg0_history[7]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("test", parse_callback_fake.arg1_history[7], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken9(void)
{
char msg[] = "led set -p -l Atop, Btop, Wrong test";
result_t returnValue[] = {CMD_OK, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK, CMD_OK, CMD_UNKNOWN, CMD_UNKNOWN, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(8, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_STOP, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken10(void)
{
char msg[] = "led set -p50";
result_t returnValue[] = {CMD_OK, CMD_VALUE_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(4, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('p', parse_callback_fake.arg0_history[1]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[1]);
TEST_ASSERT_EQUAL_CHAR('p', parse_callback_fake.arg0_history[2]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("50", parse_callback_fake.arg1_history[2], 2);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken11(void)
{
char msg[] = "led set -p50 -l Atop,Btop,Ctop";
result_t returnValue[] = {CMD_OK, CMD_VALUE_REQ, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(8, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[3]);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[4]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Atop", parse_callback_fake.arg1_history[4], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[5]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Btop", parse_callback_fake.arg1_history[5], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[6]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Ctop", parse_callback_fake.arg1_history[6], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken12(void)
{
char msg[] = "led set -p50 -lAtop,Btop,Ctop";
result_t returnValue[] = {CMD_OK, CMD_VALUE_REQ, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(8, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[3]);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[4]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Atop", parse_callback_fake.arg1_history[4], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[5]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Btop", parse_callback_fake.arg1_history[5], 4);
TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[6]);
TEST_ASSERT_EQUAL_CHAR_ARRAY("Ctop", parse_callback_fake.arg1_history[6], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_DONE, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken13(void)
{
char msg[] = "led wrong";
result_t returnValue[] = {CMD_UNKNOWN, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, 5);
msg_parse(msg);
TEST_ASSERT_EQUAL(2, parse_callback_fake.call_count);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_STOP, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken14(void)
{
char msg[] = "led wrong -p 50 -l Atop,Btop,Ctop";
result_t returnValue[] = {CMD_UNKNOWN, CMD_VALUE_REQ, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(2, parse_callback_fake.call_count);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
// TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[3]);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[4]);
// TEST_ASSERT_EQUAL_CHAR_ARRAY("Atop", parse_callback_fake.arg1_history[4], 4);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[5]);
// TEST_ASSERT_EQUAL_CHAR_ARRAY("Btop", parse_callback_fake.arg1_history[5], 4);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[6]);
// TEST_ASSERT_EQUAL_CHAR_ARRAY("Ctop", parse_callback_fake.arg1_history[6], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_STOP, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
void test_splittoken15(void)
{
char msg[] = "led set -X 50 -l Atop,Btop,Ctop";
result_t returnValue[] = {CMD_OK, CMD_UNKNOWN, CMD_OK, CMD_MULTIVAL_REQ, CMD_OK};
SET_RETURN_SEQ(parse_callback, returnValue, sizeof(returnValue) / sizeof(returnValue[0]));
msg_parse(msg);
TEST_ASSERT_EQUAL(3, parse_callback_fake.call_count);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[3]);
// TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_history[3]);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[4]);
// TEST_ASSERT_EQUAL_CHAR_ARRAY("Atop", parse_callback_fake.arg1_history[4], 4);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[5]);
// TEST_ASSERT_EQUAL_CHAR_ARRAY("Btop", parse_callback_fake.arg1_history[5], 4);
// TEST_ASSERT_EQUAL_CHAR('l', parse_callback_fake.arg0_history[6]);
// TEST_ASSERT_EQUAL_CHAR_ARRAY("Ctop", parse_callback_fake.arg1_history[6], 4);
TEST_ASSERT_EQUAL_UINT8(CMDP_KEY_STOP, parse_callback_fake.arg0_val);
TEST_ASSERT_EQUAL_PTR(NULL, parse_callback_fake.arg1_val);
}
int main(void)
{
cmd_t led_cmd = {.name = "led", .parser = parse_callback};
const cmd_t *cmd_list[] = {&led_cmd};
cmd_parser_init(cmd_list, sizeof(cmd_list)/sizeof(cmd_list[0]) );
UNITY_BEGIN();
RUN_TEST(test_splittoken1);
RUN_TEST(test_splittoken2);
RUN_TEST(test_splittoken3);
RUN_TEST(test_splittoken4);
RUN_TEST(test_splittoken5);
RUN_TEST(test_splittoken6);
RUN_TEST(test_splittoken7);
RUN_TEST(test_splittoken8);
RUN_TEST(test_splittoken9);
RUN_TEST(test_splittoken10);
RUN_TEST(test_splittoken11);
RUN_TEST(test_splittoken12);
RUN_TEST(test_splittoken13);
RUN_TEST(test_splittoken14);
RUN_TEST(test_splittoken15);
return UNITY_END();
}