#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(); }