Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

202 lines
5.8 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: tests.cpp
//
// Contents: Implementations of the Upper Layer unit tests for Inplace
//
// Classes:
//
// Functions: Test1
//
// History: dd-mmm-yy Author Comment
// 27-Apr-94 ricksa author
//
//--------------------------------------------------------------------------
#include "pre.h"
#include "iocs.h"
#include "ias.h"
#include "ioipf.h"
#include "ioips.h"
#include "app.h"
#include "site.h"
#include "doc.h"
#include "tests.h"
#include "utaccel.h"
const CLSID CLSID_SimpleServer = {0xbcf6d4a0, 0xbe8c, 0x1068, { 0xb6, 0xd4,
0x00, 0xdd, 0x01, 0x0c, 0x05, 0x09 }};
const TCHAR *pszErrorTitle = TEXT("Unit Test FAILURE");
//+-------------------------------------------------------------------------
//
// Function: TestMsgPostThread
//
// Synopsis: We use this thread to post messages to the inplace server
//
// Arguments: [pvApp] - application object
//
// Algorithm: Post key board message for the accelerator for the container
// and wait 3 seconds to see if we get response. If we do, then
// continue by posting an accelerator to the embeddinging and
// waiting three seconds for a response. Finally post messages
// to everyone telling them the test is over.
//
// History: dd-mmm-yy Author Comment
// 02-May-94 ricksa author
//
// Notes:
//
//--------------------------------------------------------------------------
extern "C" DWORD TestMsgPostThread(void *pvApp)
{
CSimpleApp *pApp = (CSimpleApp *) pvApp;
HRESULT hr = ResultFromScode(E_UNEXPECTED);
// Send an accelerator bound for the container
PostMessage(pApp->m_hwndUIActiveObj, WM_CHAR, SIMPCNTR_UT_ACCEL, 1);
// Give 6 seconds for chance to process an accelerator
for (int i = 0; i < 6; i++)
{
// Get embedding and container a chance to process the accelerator
Sleep(1000);
// See if it got processed
if (pApp->m_fGotUtestAccelerator)
{
break;
}
}
if (pApp->m_fGotUtestAccelerator)
{
hr = S_OK;
}
else
{
// The container did not received the accelerator
MessageBox(pApp->m_hAppWnd,
TEXT("Container didn't recieve accelerator"),
pszErrorTitle, MB_OK);
}
PostMessage(pApp->m_hDriverWnd, WM_TESTEND,
SUCCEEDED(hr) ? TEST_SUCCESS : TEST_FAILURE, (LPARAM) hr);
PostMessage(pApp->m_hAppWnd, WM_SYSCOMMAND, SC_CLOSE, 0L);
return 0;
}
//+-------------------------------------------------------------------------
//
// Function: Test1
//
// Synopsis: Inserts an inplace object into this container
//
// Arguments: pApp -- a pointer to the CSimpleApp that we're a part of
//
// Algorithm: Create a simple server object. Activate the simple server
// object. Send the container an accelerator and confirm that
// the accelerator worked. Send the object an accelerator and
// make sure that that accelerator worked. Then return the
// result of the test to the test driver.
//
// History: dd-mmm-yy Author Comment
// 27-Apr-94 ricksa author
//
// Notes:
//
//--------------------------------------------------------------------------
void Test1(CSimpleApp *pApp)
{
// Create the inplace object
HRESULT hr;
static FORMATETC formatetc;
//insert the simple server object
formatetc.dwAspect = DVASPECT_CONTENT;
formatetc.cfFormat = NULL;
formatetc.lindex = -1;
//need to create the client site
pApp->m_lpDoc->m_lpSite = CSimpleSite::Create(pApp->m_lpDoc);
hr = OleCreate(
CLSID_SimpleServer,
IID_IOleObject,
OLERENDER_DRAW,
&formatetc,
&pApp->m_lpDoc->m_lpSite->m_OleClientSite,
pApp->m_lpDoc->m_lpSite->m_lpObjStorage,
(void **) &(pApp->m_lpDoc->m_lpSite->m_lpOleObject));
if(hr == NOERROR)
{
// Activate the inplace object
pApp->m_lpDoc->m_lpSite->InitObject(TRUE);
// Default to unexpected failure
hr = ResultFromScode(E_UNEXPECTED);
if (pApp->m_lpDoc->m_fInPlaceActive)
{
// Create thread to send windows messages to container and
// embedding
DWORD dwThreadId;
HANDLE hThread = CreateThread(
NULL, // Security attributes - default
0, // Stack size - default
TestMsgPostThread, // Addresss of thread function
pApp, // Parameter to thread
0, // Flags - run immediately
&dwThreadId); // Thread ID returned - unused.
if (hThread != NULL)
{
// Thread was created so tell routine & dump handle
// we won't use.
hr = S_OK;
CloseHandle(hThread);
}
else
{
// The container did not received the accelerator
MessageBox(pApp->m_hAppWnd,
TEXT("Could not create message sending thread"),
pszErrorTitle, MB_OK);
}
}
else
{
// The object did not get activated in place
MessageBox(pApp->m_hAppWnd, TEXT("Could not activate in place"),
pszErrorTitle, MB_OK);
}
}
else
{
// We could not create the object
MessageBox(pApp->m_hAppWnd, TEXT("Could not create embedding"),
pszErrorTitle, MB_OK);
}
if (FAILED(hr))
{
PostMessage(pApp->m_hDriverWnd, WM_TESTEND,
SUCCEEDED(hr) ? TEST_SUCCESS : TEST_FAILURE, (LPARAM) hr);
}
return;
}