/*** tstmess.c - Test program for Message Manager (message.c) * * Microsoft Confidential * Copyright (C) Microsoft Corporation 1993-1994 * All Rights Reserved. * * Author: * Benjamin W. Slivka * * History: * 13-Aug-1993 bens Initial version * 14-Aug-1993 bens Added more test cases */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "types.h" #include "asrt.h" #include "message.h" #include "message.msg" // To verify error conditions int ctestTotal=0; int ctestSuccess=0; BOOL fVerbose=1; // Default to verbose output for now //** Function prototypes FNASSERTFAILURE(fnafReport); void chkMsg(char *pszNew, char *pszExpected); int __cdecl main (int argc, char **argv) { #ifdef ASSERT ASSERTFLAGS asf; #endif char ach[cbMSG_MAX]; AssertRegisterFunc(fnafReport); // Register assertion reporter if (fVerbose) { printf("TSTMESS: Test Message Manager\n"); printf("-----------------------------\n"); } //** Valid calls MsgSet(ach,"No parms"); chkMsg(ach,"No parms"); MsgSet(ach,"A string %1","%s","is born"); chkMsg(ach,"A string is born"); MsgSet(ach,"%1 is %2 months old %3.","%s%d%s","Joe",3,"today"); chkMsg(ach,"Joe is 3 months old today."); MsgSet(ach,"%3 is %1 months old %2.","%d%s%s",3,"today","Joe"); chkMsg(ach,"Joe is 3 months old today."); MsgSet(ach,"This is a long - %1","%ld",123456789); chkMsg(ach,"This is a long - 123456789"); MsgSet(ach,"This is a float - %1","%4.2f",3.14); chkMsg(ach,"This is a float - 3.14"); MsgSet(ach,"Test sizes - %1 %2 %3 %4","%hd%d%ld%s",32767,32767,32768L,"end"); chkMsg(ach,"Test sizes - 32767 32767 32768 end"); //** Bad calls #ifdef ASSERT //** Disable assertions in error paths asf = AssertGetFlags(); AssertSetFlags(asf || asfSKIP_ERROR_PATH_ASSERTS); #endif MsgSet(ach,"No Format Specifier %1","foo"); chkMsg(ach,pszMSGERR_BAD_FORMAT_SPECIFIER); MsgSet(ach,"No Format Specifier type %1","%%", "x","y"); chkMsg(ach,pszMSGERR_SPECIFIER_TOO_SHORT); MsgSet(ach,"Bad Format Specifier %1 %2","%z%s", "x","y"); chkMsg(ach,pszMSGERR_UNKNOWN_FORMAT_SPECIFIER); MsgSet(ach,"Not enough Format Specifiers %1 %2 %3","%s%s", "x","y"); chkMsg(ach,pszMSGERR_BAD_FORMAT_SPECIFIER); #ifdef ASSERT //** Restore Assertion Manager settings AssertSetFlags(asf); #endif //** Print Summary if (fVerbose) { printf("-----------------\n"); printf("Tests Passed: %3d\n",ctestSuccess); printf("Tests FAILED: %3d\n",ctestTotal-ctestSuccess); printf("-----------------\n"); printf("TOTAL: %3d\n",ctestTotal); printf("\n"); } if (ctestSuccess < ctestTotal) { printf("TSTMESS: %d FAILED out of %d test cases.\n", ctestTotal-ctestSuccess,ctestTotal); return 1; } else { printf("TSTMESS: PASSED %d test cases.\n",ctestTotal); return 0; } } /*** chkMsg - check that formatted result matched expectation * * Entry: * pszNew - Newly formatted message * pszExpected - Expected result * * Exit-Success: * Total tests and successful test counts updated; * If verbose output is enabled, print details; * * Exit-Failure: * Total test count updated; * If verbose output is enabled, print details; */ void chkMsg(char *pszNew, char *pszExpected) { ctestTotal++; if (!strcmp(pszNew,pszExpected)) { if (fVerbose) { printf("%3d: pass: \"%s\"\n",ctestTotal,pszNew); } ctestSuccess++; } else { if (fVerbose) { printf("%3d: FAIL: \"%s\"\n",ctestTotal,pszNew); printf(" Expected: \"%s\"\n",pszExpected); } } } #ifdef ASSERT /*** fnafReport - Report assertion failure * * NOTE: See asrt.h for entry/exit conditions. */ FNASSERTFAILURE(fnafReport) { printf("%s:(%d) Assertion Failed: %s\n",pszFile,iLine,pszMsg); exit(1); } #endif // ASSERT