diff options
Diffstat (limited to 'private/oleauto/tests/disptest/ctime.cpp')
-rw-r--r-- | private/oleauto/tests/disptest/ctime.cpp | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/private/oleauto/tests/disptest/ctime.cpp b/private/oleauto/tests/disptest/ctime.cpp new file mode 100644 index 000000000..fd8303d41 --- /dev/null +++ b/private/oleauto/tests/disptest/ctime.cpp @@ -0,0 +1,266 @@ +/*** +*ctime.cpp +* +* Copyright (C) 1992, Microsoft Corporation. All Rights Reserved. +* Information Contained Herein Is Proprietary and Confidential. +* +*Purpose: +* This file implements the CTimeSuite test object. +* +*Revision History: +* +* [00] 30-Oct-92 bradlo: Created. +* +*Implementation Notes: +* +*****************************************************************************/ + +#include "disptest.h" +#include "tstsuite.h" + + +void DbPrDosDateTime(unsigned short, unsigned short); + +struct TEST { + HRESULT (*pfnTest)(void); + OLECHAR FAR* szName; +}; + +HRESULT DosToVariant(void); +HRESULT VariantToDos(void); + +static TEST rgtest[] = { + { DosToVariant, OLESTR("DosDateTimeToVariantTime") }, + { VariantToDos, OLESTR("VariantTimeToDosDateTime") } +}; + + +SUITE_CONSTRUCTION_IMPL(CTimeSuite) + +SUITE_IUNKNOWN_IMPL(CTimeSuite) + + +//--------------------------------------------------------------------- +// ITestSuite Methods +//--------------------------------------------------------------------- + +STDMETHODIMP +CTimeSuite::GetNameOfSuite(BSTR FAR* pbstr) +{ + return ErrBstrAlloc(OLESTR("Time API"), pbstr); +} + +STDMETHODIMP +CTimeSuite::GetNameOfLogfile(BSTR FAR* pbstr) +{ + return ErrBstrAlloc(OLESTR("timeapi.log"), pbstr); +} + +STDMETHODIMP +CTimeSuite::GetTestCount(unsigned int FAR* pcTests) +{ + *pcTests = DIM(rgtest); + return NOERROR; +} + +STDMETHODIMP +CTimeSuite::GetNameOfTest(unsigned int iTest, BSTR FAR* pbstr) +{ + if(iTest >= DIM(rgtest)) + return RESULT(E_INVALIDARG); + + return ErrBstrAlloc(rgtest[iTest].szName, pbstr); +} + +/*** +*HRESULT CTimeSuite::DoTest(unsigned int) +*Purpose: +* Execute a single CTimeSuite test. +* +*Entry: +* iTest = the index of the test to execute +* +*Exit: +* return value = HRESULT +* +***********************************************************************/ +STDMETHODIMP +CTimeSuite::DoTest(unsigned int iTest) +{ + if(iTest >= DIM(rgtest)) + return RESULT(E_INVALIDARG); + + return rgtest[iTest].pfnTest(); +} + +#define DOSDATE(MONTH, DAY, YEAR)\ + ((((YEAR)-1980) << 9) + ((MONTH) << 5) + (DAY)) + +#define DOSTIME(HOUR, MIN, SEC)\ + (((HOUR) << 11) + ((MIN) << 5) + ((SEC) / 2)) + +HRESULT +DosToVariant() +{ + int i; + VARIANT var; + unsigned short wDosDate, wDosTime; +static struct { + unsigned short wDosDate; + unsigned short wDosTime; +} rgdostime[] = { + { DOSDATE(1, 1, 1980), DOSTIME(0, 0, 0) } + , { DOSDATE(1, 1, 1990), DOSTIME(0, 0, 0) } + , { DOSDATE(1, 1, 2000), DOSTIME(0, 0, 0) } + , { DOSDATE(1, 1, 2099), DOSTIME(0, 0, 0) } + , { DOSDATE(1, 1, 1980), DOSTIME(1, 0, 0) } + , { DOSDATE(1, 1, 1980), DOSTIME(1, 1, 0) } + , { DOSDATE(1, 1, 1980), DOSTIME(1, 1, 1) } + , { DOSDATE(1, 1, 1980), DOSTIME(1, 1, 2) } + , { DOSDATE(1, 1, 1980), DOSTIME(1, 1, 3) } + , { DOSDATE(1, 1, 1980), DOSTIME(1, 1, 4) } + , { DOSDATE(5, 8, 1983), DOSTIME(12, 22, 4) } + , { DOSDATE(10, 23, 2000), DOSTIME(1, 1, 9) } + , { DOSDATE(10, 23, 2015), DOSTIME(1, 1, 22) } + , { DOSDATE(11, 30, 2099), DOSTIME(23, 59, 59) } +}; + + for(i = 0; i < DIM(rgdostime); ++i){ + wDosDate = rgdostime[i].wDosDate; + wDosTime = rgdostime[i].wDosTime; + + DbPrDosDateTime(wDosDate, wDosTime); + DbPrintf(" = "); + + V_VT(&var) = VT_DATE; + V_DATE(&var) = 0.0; + if(DosDateTimeToVariantTime(wDosDate, wDosTime, &V_DATE(&var)) == 0){ + DbPrintf("False\n"); + }else{ + DbPrintf("vartime(%#g) = ", V_DATE(&var)); + if(VariantChangeType(&var, &var, 0, VT_BSTR) != NOERROR) + return RESULT(E_FAIL); +#if HC_MPW + DbPrintf("%s\n", V_BSTR(&var)); +#else + DbPrintf("%Fs\n", STRING(V_BSTR(&var))); +#endif + } + if(VariantClear(&var) != NOERROR) + return RESULT(E_FAIL); + } + + return NOERROR; +} + +HRESULT +VariantToDos() +{ + int i; + VARIANT var; + unsigned short wDosDate; + unsigned short wDosTime; + +static OLECHAR FAR* rgszTime[] = { + OLESTR("1/1/1980") + , OLESTR("1/1/1990") + , OLESTR("1/1/2000") + , OLESTR("1/1/2099") + , OLESTR("1/1/1980 1:0:0") + , OLESTR("1/1/1980 1:1:0") + , OLESTR("1/1/1980 1:1:1") + , OLESTR("1/1/1980 1:1:2") + , OLESTR("1/1/1980 1:1:3") + , OLESTR("1/1/1980 1:1:4") + , OLESTR("5/8/1983 12:22:4") + , OLESTR("10/10/2000 1:1:18") + , OLESTR("11/30/2099 23:59:59") +}; + + VariantInit(&var); + for(i = 0; i < DIM(rgszTime); ++i){ +#if HC_MPW + DbPrintf("\'%s' = ", rgszTime[i]); +#else + DbPrintf("\'%Fs' = ", STRING(rgszTime[i])); +#endif + V_VT(&var) = VT_BSTR; + V_BSTR(&var) = SysAllocString(rgszTime[i]); + if(VariantChangeType(&var, &var, 0, VT_DATE) != NOERROR) + return RESULT(E_FAIL); + DbPrintf("vartime(%#g) = ", V_DATE(&var)); + if(VariantTimeToDosDateTime(V_DATE(&var), &wDosDate, &wDosTime) == 0){ + DbPrintf("False\n"); + }else{ + DbPrDosDateTime(wDosDate, wDosTime); + DbPrintf("\n"); + } + if(VariantClear(&var) != NOERROR) + return RESULT(E_FAIL); + } + + return NOERROR; +} + +unsigned short +YearOfDosDate(unsigned short wDosDate) +{ + return ((wDosDate >> 9) & 0x007f); +} + +unsigned short +MonthOfDosDate(unsigned short wDosDate) +{ + return ((wDosDate >> 5) & 0x000f); +} + +unsigned short +DayOfDosDate(unsigned short wDosDate) +{ + return ((wDosDate) & 0x001f); +} + +void +DbPrDosDate(unsigned short wDosDate) +{ + DbPrintf("%d-%d-%d", + MonthOfDosDate(wDosDate), + DayOfDosDate(wDosDate), + YearOfDosDate(wDosDate)); +} + +unsigned short +HourOfDosTime(unsigned short wDosTime) +{ + return ((wDosTime >> 11) & 0x001f); +} + +unsigned short +MinOfDosTime(unsigned short wDosTime) +{ + return ((wDosTime >> 5) & 0x003f); +} + +unsigned short +SecOfDosTime(unsigned short wDosTime) +{ + return ((wDosTime) & 0x001f); +} + +void +DbPrDosTime(unsigned short wDosTime) +{ + DbPrintf("%d:%d:%d", + HourOfDosTime(wDosTime), + MinOfDosTime(wDosTime), + SecOfDosTime(wDosTime)); +} + +void +DbPrDosDateTime(unsigned short wDosDate, unsigned short wDosTime) +{ + DbPrDosDate(wDosDate); + DbPrintf(" "); + DbPrDosTime(wDosTime); +} + |