//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: assert.cpp // // Contents: Assertion handling code for OleTest // // Classes: // // Functions: OleTestAssert // DlgAssertProc // // History: dd-mmm-yy Author Comment // 09-Dec-94 MikeW author // //-------------------------------------------------------------------------- #include "oletest.h" #include "appwin.h" //+------------------------------------------------------------------------- // // Function: OleTestAssert // // Synopsis: Reports assertion failures to the user // // Effects: // // Arguments: [pszMessage] -- the assertion message // [pszFile] -- the file it occured in // [uLine] -- the line it occured at // // Requires: // // Returns: void // // Signals: // // Modifies: // // Algorithm: Format the message and then put up a dialog box for the user. // They can then choose to abort the test, break to the debugger, // or ignore the assertion. // // History: dd-mmm-yy Author Comment // 09-Dec-94 MikeW author // // Notes: // //-------------------------------------------------------------------------- void OleTestAssert(char *pszMessage, char *pszFile, UINT uLine) { char szErrorMessage[3 * 80]; // room for 3 lines of info int cch; int nAction; OutputDebugString("OleTest -- Assertion Failure\r\n"); // // format the message // cch = _snprintf(szErrorMessage, sizeof(szErrorMessage), "%s\r\nIn file: %s\r\nAt line: %u", pszMessage, pszFile, uLine); if (cch < 0) { // // the whole assertion message doesn't fit in the buffer so // just worry about the file name and line number // OutputDebugString(pszMessage); // send original text to the debugger OutputDebugString("\r\n"); _snprintf(szErrorMessage, sizeof(szErrorMessage), "In file: %s\r\nAt line: %d", pszFile, uLine); szErrorMessage[sizeof(szErrorMessage) - 1] = '\0'; // just in case } OutputDebugString(szErrorMessage); OutputDebugString("\r\n"); nAction = DialogBoxParam(vApp.m_hinst, // get the users choice MAKEINTRESOURCE(IDD_ASSERTIONFAILURE), vApp.m_hwndMain, DlgAssertProc, (LPARAM) szErrorMessage); switch (nAction) { case IDABORT: // abort the test RaiseException(E_ABORT, 0, 0, NULL); case IDB_BREAK: // break into the debugger DebugBreak(); break; case IDIGNORE: // ignore the assertion break; default: // whoops RaiseException(E_UNEXPECTED, 0, 0, NULL); } } //+------------------------------------------------------------------------- // // Function: DlgAssertProc // // Synopsis: Window procedure for the assertion dialog box // // Effects: // // Arguments: [hWnd] -- dialog window // [uMsg] -- message // [wParam] -- wParam // [lParam] -- lParam (for INITDIALOG it points to assert text) // // Requires: // // Returns: BOOL // // Signals: // // Modifies: // // Algorithm: Just wait for a button to be pressed // // History: dd-mmm-yy Author Comment // 09-Dec-94 MikeW author // // Notes: // //-------------------------------------------------------------------------- INT_PTR CALLBACK DlgAssertProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: DeleteMenu(GetSystemMenu(hWnd, FALSE), SC_CLOSE, MF_BYCOMMAND); DrawMenuBar(hWnd); SetDlgItemText(hWnd, IDC_EDIT, (LPCSTR) lParam); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDABORT: case IDB_BREAK: case IDIGNORE: EndDialog(hWnd, LOWORD(wParam)); return TRUE; default: return FALSE; } default: return FALSE; } }