/** Handler function called at completion of each test. * @param pTest The test being run (non-NULL). * @param pSuite The suite containing the test (non-NULL). * @param pFailure Pointer to the 1st failure record for this test. */ static void automated_test_complete_message_handler(const CU_pTest pTest, const CU_pSuite pSuite, const CU_pFailureRecord pFailure) { CU_pFailureRecord pTempFailure = pFailure; CU_UNREFERENCED_PARAMETER(pSuite); /* pSuite is not used except in assertion */ assert(NULL != pTest); assert(NULL != pSuite); assert(NULL != f_pTestResultFile); if (NULL != pTempFailure) { /* worst cast is a string of special chars */ char szTemp[CUNIT_MAX_ENTITY_LEN * CUNIT_MAX_STRING_LENGTH]; while (NULL != pTempFailure) { assert((NULL != pTempFailure->pSuite) && (pTempFailure->pSuite == pSuite)); assert((NULL != pTempFailure->pTest) && (pTempFailure->pTest == pTest)); if (NULL != pTempFailure->strCondition) { CU_translate_special_characters(pTempFailure->strCondition, szTemp, sizeof(szTemp)); } else { szTemp[0] = '\0'; } fprintf(f_pTestResultFile, " <CUNIT_RUN_TEST_RECORD> \n" " <CUNIT_RUN_TEST_FAILURE> \n" " <TEST_NAME> %s </TEST_NAME> \n" " <FILE_NAME> %s </FILE_NAME> \n" " <LINE_NUMBER> %u </LINE_NUMBER> \n" " <CONDITION> %s </CONDITION> \n" " </CUNIT_RUN_TEST_FAILURE> \n" " </CUNIT_RUN_TEST_RECORD> \n", (NULL != pTest->pName) ? pTest->pName : "", (NULL != pTempFailure->strFileName) ? pTempFailure->strFileName : "", pTempFailure->uiLineNumber, szTemp); pTempFailure = pTempFailure->pNext; } } else { fprintf(f_pTestResultFile, " <CUNIT_RUN_TEST_RECORD> \n" " <CUNIT_RUN_TEST_SUCCESS> \n" " <TEST_NAME> %s </TEST_NAME> \n" " </CUNIT_RUN_TEST_SUCCESS> \n" " </CUNIT_RUN_TEST_RECORD> \n", (NULL != pTest->pName) ? pTest->pName : ""); } }
static void test_CU_translate_special_characters(void) { char dest_buf[BUF_LEN]; char *dest = dest_buf + MAX_LEN; char ref_buf[BUF_LEN]; const int mask_char = 0x01; /* char written to buffer */ /* set up reference buffer for testing of translated strings */ memset(ref_buf, mask_char, BUF_LEN); /* empty src */ memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("", dest, MAX_LEN)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+1), ref_buf, MAX_LEN-1)); /* 1 char src */ memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("#", dest, 0)); TEST(!strncmp(dest_buf, ref_buf, BUF_LEN)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("#", dest, 1)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+1), ref_buf, MAX_LEN-1)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("&", dest, 2)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+2), ref_buf, MAX_LEN-2)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("&", dest, 4)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+4), ref_buf, MAX_LEN-4)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("&", dest, 5)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+5), ref_buf, MAX_LEN-5)); memset(dest_buf, mask_char, BUF_LEN); TEST(1 == CU_translate_special_characters("&", dest, 6)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "&\0", 6)); TEST(!strncmp((dest+6), ref_buf, MAX_LEN-6)); /* maxlen=0 */ memset(dest_buf, mask_char, BUF_LEN); strcpy(dest, "random initialized string"); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 0)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strcmp(dest, "random initialized string")); TEST(!strncmp(dest+strlen(dest)+1, ref_buf, MAX_LEN-strlen(dest)-1)); /* maxlen < len(converted szSrc) */ memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 1)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+1), ref_buf, MAX_LEN-1)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 2)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+2), ref_buf, MAX_LEN-2)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 5)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+5), ref_buf, MAX_LEN-5)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 10)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+10), ref_buf, MAX_LEN-10)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 20)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+20), ref_buf, MAX_LEN-20)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 24)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+24), ref_buf, MAX_LEN-24)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 25)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+25), ref_buf, MAX_LEN-25)); memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some <<string & another>", dest, 37)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "\0", 1)); TEST(!strncmp((dest+37), ref_buf, MAX_LEN-37)); /* maxlen > len(converted szSrc) */ memset(dest_buf, mask_char, BUF_LEN); TEST(4 == CU_translate_special_characters("some <<string & another>", dest, 38)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "some <<string & another>\0", 38)); TEST(!strncmp((dest+38), ref_buf, MAX_LEN-38)); /* maxlen > len(converted szSrc) */ memset(dest_buf, mask_char, BUF_LEN); TEST(4 == CU_translate_special_characters("some <<string & another>", dest, MAX_LEN)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "some <<string & another>\0", 38)); /* no special characters */ memset(dest_buf, mask_char, BUF_LEN); TEST(0 == CU_translate_special_characters("some string or another", dest, MAX_LEN)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strncmp(dest, "some string or another\0", 23)); /* only special characters */ memset(dest_buf, mask_char, BUF_LEN); TEST(11 == CU_translate_special_characters("<><><<>>&&&", dest, MAX_LEN)); TEST(!strncmp(dest_buf, ref_buf, MAX_LEN)); TEST(!strcmp(dest, "<><><<>>&&&")); }