diff -r a179b74831c9 -r c1f20ce4abcf kerneltest/f32test/server/t_pwstr.cpp --- a/kerneltest/f32test/server/t_pwstr.cpp Thu Aug 19 11:14:22 2010 +0300 +++ b/kerneltest/f32test/server/t_pwstr.cpp Tue Aug 31 16:34:26 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 1998-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of the License "Eclipse Public License v1.0" @@ -18,6 +18,7 @@ //#include +#define __E32TEST_EXTENSION__ #include #include #include @@ -100,6 +101,7 @@ // integrator, TBLDNum should be set to 3. LOCAL_D TInt RFsDNum = -1; // File Server Drive number +LOCAL_D TBool gManual = EFalse; // Manual Tests enabled struct TTestMapping { @@ -389,9 +391,13 @@ wStore.SetLength(i); TInt r(TBLD.WritePasswordData(wStore)); if (i == 0 || i == mapSizes[0][0] || i == mapSizes[0][0] + mapSizes[1][1]) - test(r == KErrNone); + { + test_KErrNone(r); + } else - test(r == KErrCorrupt && TBLD.PasswordStoreLengthInBytes() == 0); + { + test_Value(r, r == KErrCorrupt && TBLD.PasswordStoreLengthInBytes() == 0); + } } test.Next(_L("Exceeding password store size")); @@ -409,9 +415,13 @@ const TInt r = TBLD.WritePasswordData(wStore); test.Printf(_L("WritePasswordData() --> ret=%d\n"), r); if(n==KMaxNumOfStoreEntries) - test(r == KErrOverflow); + { + test_Value(r, r == KErrOverflow); + } else - test(r == KErrNone); + { + test_KErrNone(r); + } } @@ -461,7 +471,7 @@ if ((r = TBLD.WritePasswordData(wStore)) != KErrNone) { - test(r == KErrNoMemory); + test_Value(r, r == KErrNoMemory); test(TBLD.PasswordStoreLengthInBytes() == 0); } else @@ -600,7 +610,7 @@ mp.iCIDIdx = cidIdx; mp.iPWDIdx = pwdIdx; TRAP(r, aMP->InsertL(0, mp)); - test(r == KErrNone); + test_KErrNone(r); iBIdx += KMMCCIDLength + sizeof(TInt32) + pwd_len; } @@ -743,7 +753,7 @@ TInt r = AccessDisk(); if (r != KErrLocked) test.Printf(_L("AccessDisk() returned %d\n"), r); - test(r == KErrLocked); + test_Value(r, r == KErrLocked); test(TBLD.Unlock(aPWD, aStore) == KErrNone); } @@ -1222,25 +1232,41 @@ test.Next(_L("open connection")); RFs theFs; test(theFs.Connect() == KErrNone); - + // So that we are in a consistant state lets + // Remove the password file first. i.e. could be passwords left over from previous test failures + test.Next(_L("tidy up")); + TEntry theEntry; + TBuf mediaPWrdFile(KMediaPWrdFile); + mediaPWrdFile[0] = (TUint8) RFs::GetSystemDriveChar(); + test.Printf(_L("password file : %S\n"),&mediaPWrdFile); + error = theFs.Delete(mediaPWrdFile); + // Should be either KErrNone, KErrPathNotFound or KErrNotFound + test.Printf(_L("password file deleted: %d\n"),error); // Now set the first password that we will use test.Next(_L("lock the media card")); TMediaPassword& nulPWrd = *PWDs[0]; TMediaPassword& oldPWrd = *PWDs[1]; error = theFs.LockDrive(KDriveNum, nulPWrd, oldPWrd, ETrue); - test(KErrNone == error); + if (KErrNotSupported == error) + { + // Appears that passwords aren't supported on this drive config (i.e. NFE) + theFs.Close(); + test.End(); + return; + } + test_KErrNone(error); // Verify that the password file does exist and is in the correct place test.Next(_L("check password file exists")); - TEntry theEntry; - TBuf mediaPWrdFile(KMediaPWrdFile); - mediaPWrdFile[0] = (TUint8) RFs::GetSystemDriveChar(); error = theFs.Entry(mediaPWrdFile, theEntry); - test (KErrNone == error); - + test.Printf(_L("password file exists: %d\n"),error); + if (error != KErrNone && error != KErrNotFound) + { + test(0); + } // Attempt to set a new password without specifying the current one test.Next(_L("change password failure")); @@ -1252,27 +1278,44 @@ // Change the password for a new one... test.Next(_L("change password success")); error = theFs.LockDrive(KDriveNum, oldPWrd, newPWrd, ETrue); - test(KErrNone == error); + test_KErrNone(error); // Clear the password + // NB The file server uses a separate thread to write to the password file, + // so we may need to wait a short while to see any change... test.Next(_L("clear the password")); error = theFs.ClearPassword(KDriveNum, newPWrd); - test(KErrNone == error); + test_KErrNone(error); // Check that the password has been removed from the file // (KMediaPWrdFile should now be zero bytes in size) test.Next(_L("check password removal")); - error = theFs.Entry(mediaPWrdFile, theEntry); - test (KErrNone == error); - test (0 == theEntry.iSize); + theEntry.iSize = KMaxTInt; + TInt n; + for (n=0; theEntry.iSize > 0 && n<10; n++) + { + error = theFs.Entry(mediaPWrdFile, theEntry); + test_KErrNone(error); + test.Printf(_L("Password file size is %d\n"), theEntry.iSize); + if (theEntry.iSize > 0) + User::After(1000000); + } + test (theEntry.iSize == 0); // Remove the password file test.Next(_L("tidy up")); - error = theFs.Delete(mediaPWrdFile); - test (KErrNone == error); + error = KErrInUse; + for (n=0; error == KErrInUse && n<10; n++) + { + error = theFs.Delete(mediaPWrdFile); + test.Printf(_L("Deleting %S, Iter %d, r %d\n"), &mediaPWrdFile, n, error); + if (error == KErrInUse) + User::After(1000000); + } + test_KErrNone(error); theFs.Close(); @@ -1316,7 +1359,7 @@ r = fs.LockDrive(RFsDNum, nulPWrd, oldPWrd, EFalse); if (r != KErrNone) test.Printf(_L("RFs::LockDrive() returned %d\n"), r); - test(r == KErrNone); + test_KErrNone(r); RemountMedia(); // card is now locked @@ -1329,7 +1372,7 @@ r = fmt.Open(fs, driveName, EHighDensity, stepPkg()); if (r != KErrLocked) test.Printf(_L("RFormat::Next() returned %d\n"), r); - test(r == KErrLocked); + test_Value(r, r == KErrLocked); test.Printf(_L("\n")); fmt.Close(); @@ -1339,7 +1382,7 @@ r = fmt.Open(fs, driveName, EHighDensity | EForceErase, stepPkg()); if (r != KErrNone) test.Printf(_L("RFormat::Open() returned %d\n"), r); - test (r == KErrNone); + test_KErrNone(r); while (stepPkg() > 0) { @@ -1388,7 +1431,7 @@ test.Next(_L("lock card")); test.Next(_L("assign test password")); r = TBLD.SetPassword(nulPWrd, testPassword, EFalse); - test(r == KErrNone); + test_KErrNone(r); RemountMedia(); // card is now locked @@ -1399,7 +1442,7 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("Caps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) != 0); // Write correct password to store @@ -1413,14 +1456,14 @@ test.Printf(_L("WritePasswordData() returned %d\n"), r); - test(r == KErrNone); + test_KErrNone(r); // test Caps() reports that card is unlocked test.Next(_L("test card is unlocked")); r = TBLD.Caps(driveCapsPkg); test.Printf(_L("Caps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); // Clear the password, remount and test card is unlocked @@ -1433,7 +1476,7 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("Caps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); @@ -1457,15 +1500,18 @@ UserHal::DriveInfo(diBuf); TDriveInfoV1 &di=diBuf(); - test.Printf(_L(" iRegisteredDriveBitmask 0x%08X"), di.iRegisteredDriveBitmask); + test.Printf(_L(" iRegisteredDriveBitmask 0x%08X\n"), di.iRegisteredDriveBitmask); aDrive = -1; TLocalDriveCapsV5Buf capsBuf; TBusLocalDrive TBLD; TLocalDriveCapsV5& caps = capsBuf(); + TPtrC8 localSerialNum; TInt registeredDriveNum = 0; + + // Find a Drive that has Password support. for(aDrive=0; aDrive < KMaxLocalDrives; aDrive++) { TInt driveNumberMask = 1 << aDrive; @@ -1474,27 +1520,29 @@ test.Printf(_L(" Drive %d - %S\r\n"), aDrive, &di.iDriveName[registeredDriveNum]); - // check that the card is readable (so we can ignore for empty card slots) - if ((di.iDriveName[registeredDriveNum].MatchF(_L("MultiMediaCard0")) == KErrNone) || - (di.iDriveName[registeredDriveNum].MatchF(_L("SDIOCard0")) == KErrNone)) - { - - TBool TBLDChangedFlag; - TInt r = TBLD.Connect(aDrive, TBLDChangedFlag); + TBool TBLDChangedFlag; + TInt r = TBLD.Connect(aDrive, TBLDChangedFlag); //test.Printf(_L(" Connect returned %d\n"), r); - if (r == KErrNone) - { - r = TBLD.Caps(capsBuf); - localSerialNum.Set(caps.iSerialNum, caps.iSerialNumLength); - const TInt KSectSize = 512; - TBuf8 sect; - r = TBLD.Read(0, KSectSize, sect); + if (r == KErrNone) + { + r = TBLD.Caps(capsBuf); + + //Check media is lockable if not carry on + if (caps.iMediaAtt & KMediaAttLockable) + { + test.Printf(_L("Drive %d is Lockable\n"),aDrive); + localSerialNum.Set(caps.iSerialNum, caps.iSerialNumLength); + const TInt KSectSize = 512; + TBuf8 sect; + r = TBLD.Read(0, KSectSize, sect); //test.Printf(_L(" Read returned %d\n"), r); TBLD.Disconnect(); if (r == KErrNone) break; } + + TBLD.Disconnect(); } registeredDriveNum++; } @@ -1604,7 +1652,7 @@ TDriveInfo info; TInt r = aFs.Drive(info, aTheMemoryCardDrive); - test (r == KErrNone); + test_KErrNone(r); return (info.iMediaAtt & KMediaAttLocked)?(TBool)ETrue:(TBool)EFalse; } @@ -1616,7 +1664,9 @@ for (n=0; n<30 && !TestLocked(aFs, aTheMemoryCardDrive); n++) { User::After(1000000); + test.Printf(_L(".")); } + test.Printf(_L("\n")); test(n < 30); test(TestLocked(aFs, aTheMemoryCardDrive)); // should now be locked } @@ -1657,7 +1707,7 @@ test.Next(_L("Locking card (Successful)")) ; r = TestLockCard(fs, RFsDNum, oldpassword, password, ETrue); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down @@ -1665,7 +1715,7 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("\tCaps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); WaitForPowerDownUnlock(fs, RFsDNum); @@ -1674,19 +1724,19 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("\tCaps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); test.Next(_L("Clear password (Successful)")); r = TestClearPassword(fs, RFsDNum, password); - test(r == KErrNone); + test_KErrNone(r); // Lock card (without password in store) test.Next(_L("Locking card - Password NOT Stored")); test.Next(_L("Locking card (Successful)")); r = TestLockCard(fs, RFsDNum, oldpassword, password, EFalse); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down @@ -1694,7 +1744,7 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("\tCaps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); WaitForPowerDownLock(fs, RFsDNum); @@ -1703,7 +1753,7 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("\tCaps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) != 0); // Unlock card @@ -1711,14 +1761,14 @@ test.Next(_L("Unlocking card (Successful)")) ; r = TestUnlockCard(fs, RFsDNum, password, ETrue); - test(r == KErrNone); + test_KErrNone(r); test (!TestLocked(fs, RFsDNum)); // not locked as stack hasn't powered down test.Next(_L("Card reports unlocked - before PowerDown")); r = TBLD.Caps(driveCapsPkg); test.Printf(_L("\tCaps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); WaitForPowerDownUnlock(fs, RFsDNum); @@ -1727,12 +1777,12 @@ r = TBLD.Caps(driveCapsPkg); test.Printf(_L("\tCaps() returned %d , iMediaAtt %08x\n"), r, driveCaps.iMediaAtt); - test (r == KErrNone); + test_KErrNone(r); test ((driveCaps.iMediaAtt & KMediaAttLocked) == 0); test.Next(_L("Clearing Password (Successful)")); r = TestClearPassword(fs, RFsDNum, password); - test(r == KErrNone); + test_KErrNone(r); fs.Close(); @@ -1757,22 +1807,22 @@ TMediaPassword wrongpwd = (TUint8*) "failtest"; r = TestLockCard(fs, RFsDNum, oldpassword, newpassword, EFalse); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down test.Next(_L("test unlocking fails if still powered up")); r = TestUnlockCard(fs, RFsDNum, newpassword, EFalse); - test(r == KErrAlreadyExists); // already unlocked (as stack won't have powered down yet) + test_Value(r, r == KErrAlreadyExists); // already unlocked (as stack won't have powered down yet) test (!TestLocked(fs, RFsDNum)); test.Next(_L("test clearing succeeds if still powered up")); r = TestClearPassword(fs, RFsDNum, newpassword); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); test.Next(_L("test locking card again")); r = TestLockCard(fs, RFsDNum, oldpassword, newpassword, EFalse); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down WaitForPowerDownLock(fs, RFsDNum); @@ -1788,17 +1838,17 @@ sessionPath=_L("?:\\"); TChar driveLetter; r = fs.DriveToChar(RFsDNum,driveLetter); - test(r==KErrNone); + test_KErrNone(r); sessionPath[0]=(TText)driveLetter; r = fs.CheckDisk(sessionPath); - test(r == KErrNone || r == KErrLocked); + test_Value(r, r == KErrNone || r == KErrLocked); WaitForPowerDownLock(fs, RFsDNum); // DEF111700: Formatting a locked SD/MMC leaves it in a bad state (causes panics later) // This was caused by format calling TDrive::MountMedia(ETrue) and then not dismounting r = fs.RemountDrive(RFsDNum); - test (r == KErrNone); + test_KErrNone(r); RFormat fmt; TPckgBuf stepPkg; TDriveUnit driveUnit(RFsDNum); @@ -1807,63 +1857,63 @@ r = fmt.Open(fs, driveName, EHighDensity, stepPkg()); if (r != KErrLocked) test.Printf(_L("RFormat::Next() returned %d\n"), r); - test(r == KErrLocked); + test_Value(r, r == KErrLocked); test.Printf(_L("\n")); fmt.Close(); r = fs.CheckDisk(sessionPath); - test(r == KErrLocked); + test_Value(r, r == KErrLocked); test.Next(_L("test unlocking fails after powered down & unlocked with wrong password")); r = TestUnlockCard(fs, RFsDNum, wrongpwd, EFalse); - test(r == KErrAccessDenied); // unlocked should now fail + test_Value(r, r == KErrAccessDenied); // unlocked should now fail test.Next(_L("test unlocking succeeds for correct password after powered down & locked")); r = TestUnlockCard(fs, RFsDNum, newpassword, EFalse); - test(r == KErrNone); // unlocked should now succeed + test_KErrNone(r); // unlocked should now succeed test.Next(_L("test unlocking fails after successful unlock")); r = TestUnlockCard(fs, RFsDNum, wrongpwd, EFalse); - test(r == KErrAlreadyExists); // unlocked should now succeed + test_Value(r, r == KErrAlreadyExists); // unlocked should now succeed test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down test.Next(_L("test locking card with new password (with wrong password as old password)")); r = TestLockCard(fs, RFsDNum, wrongpwd, newpassword, EFalse); - test(r == KErrAccessDenied); + test_Value(r, r == KErrAccessDenied); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down test.Next(_L("test locking card with new password (with right password as old password)")); r = TestLockCard(fs, RFsDNum, newpassword, wrongpwd, EFalse); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down WaitForPowerDownLock(fs, RFsDNum); test.Next(_L("test clearing fails with wrong password if powered down & locked")); r = TestClearPassword(fs, RFsDNum, newpassword); // Note: we have set the wrong password as the new password - test(r == KErrAccessDenied); + test_Value(r, r == KErrAccessDenied); test(TestLocked(fs, RFsDNum)); test.Next(_L("test clearing succeeds with right password if powered down & locked")); r = TestClearPassword(fs, RFsDNum, wrongpwd); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); test.Next(_L("test locking card again")); r = TestLockCard(fs, RFsDNum, oldpassword, newpassword, EFalse); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); // not locked yet as stack hasn't powered down test.Next(_L("test forced erase fails if still powered up")); r = ExecuteForcedEraseTestL(fs, RFsDNum); - test(r == KErrAccessDenied); // fails because card is not yet locked + test_Value(r, r == KErrAccessDenied); // fails because card is not yet locked WaitForPowerDownLock(fs, RFsDNum); test.Next(_L("test forced erase succeeds if powered down & locked")); r = ExecuteForcedEraseTestL(fs, RFsDNum); - test(r == KErrNone); + test_KErrNone(r); fs.Close(); test.End(); @@ -1884,16 +1934,16 @@ sessionPath=_L("?:\\"); TChar driveLetter; TInt r=fs.DriveToChar(RFsDNum,driveLetter); - test(r==KErrNone); + test_KErrNone(r); sessionPath[0]=(TText)driveLetter; r=fs.SetSessionPath(sessionPath); - test(r==KErrNone); + test_KErrNone(r); TInt nRes; TDriveInfo dInfo; nRes = fs.Drive(dInfo, RFsDNum); - test(nRes == KErrNone); + test_KErrNone(nRes); if (!(dInfo.iMediaAtt & KMediaAttLockable)) { test.Printf(_L("Drive %d is not lockable %d\n"), RFsDNum); @@ -1905,7 +1955,7 @@ TMediaPassword oldPassword; TMediaPassword newPassword = (TUint8*) "salasana"; nRes = fs.LockDrive(RFsDNum, oldPassword, newPassword, EFalse ); - test(nRes == KErrNone); + test_KErrNone(nRes); WaitForPowerDownLock(fs, RFsDNum); @@ -1924,7 +1974,7 @@ test(reqStatNotify1.Int() == KErrNone); r = TestClearPassword(fs, RFsDNum, newPassword); - test(r == KErrNone); + test_KErrNone(r); test(!TestLocked(fs, RFsDNum)); @@ -1932,7 +1982,6 @@ fs.Close(); } - LOCAL_C void RunTests() // // Main test routine. Calls other test functions. @@ -1955,34 +2004,47 @@ test.Next(_L("Allocating test data")); AllocateTestData(); - test.Next(_L("Testing locking / unlocking using file server APIs")); - TestFsLockUnlock(); + if (gManual) + { + test.Next(_L("Testing locking / unlocking using file server APIs")); + TestFsLockUnlock(); - test.Next(_L("Testing Power Down Status Reporting using file server APIs")); - TestPowerDownStatus(); + test.Next(_L("Testing Power Down Status Reporting using file server APIs")); + TestPowerDownStatus(); - test.Next(_L("Testing RFs::NotifyChange() with RFs::UnlockDrive()")); - TestUnlockDriveNotifyChange(); + test.Next(_L("Testing RFs::NotifyChange() with RFs::UnlockDrive()")); + TestUnlockDriveNotifyChange(); - test.Next(_L("Forced Erase")); - TestFormatErase(); + test.Next(_L("Forced Erase")); + TestFormatErase(); + } + test.Next(_L("Testing store management")); TestStaticStore(); - test.Next(_L("Testing locking functions")); - TestLockUnlock(); - test.Next(_L("Testing Elide Passwords")); - TestElidePasswords(); - test.Next(_L("Testing Null Passwords")); - TestNullPasswords(); - test.Next(_L("Testing controller store")); - TestControllerStore(); - test.Next(_L("Testing auto unlock")); - TestAutoUnlock(); + + if (gManual) + { + test.Next(_L("Testing locking functions")); + TestLockUnlock(); + test.Next(_L("Testing Elide Passwords")); + TestElidePasswords(); + test.Next(_L("Testing Null Passwords")); + TestNullPasswords(); + test.Next(_L("Testing controller store")); + TestControllerStore(); + test.Next(_L("Testing auto unlock")); + TestAutoUnlock(); + } + test.Next(_L("Testing password file")); TestPasswordFile(); - test.Next(_L("Testing writing a valid password to store unlocks card")); - TestWriteToPasswordStoreUnlocksCard(); - + + if (gManual) + { + test.Next(_L("Testing writing a valid password to store unlocks card")); + TestWriteToPasswordStoreUnlocksCard(); + } + test.Next(_L("Disconnecting TBLD")); TBLD.Disconnect(); @@ -1992,15 +2054,43 @@ __UHEAP_MARKEND; } +LOCAL_D void ParseCommandLineArgs() + { + + TBuf<0x100> cmd; + User::CommandLine(cmd); + TLex lex(cmd); + + for (TPtrC token=lex.NextToken(); token.Length() != 0;token.Set(lex.NextToken())) + { + if (token.CompareF(_L("-m"))== 0) + { + gManual = ETrue; + continue; + } + } + } TInt E32Main() { test.Title(); - test.Start(_L("E32Main")); + test.Start(_L("T_PWSTR")); + +#if defined(__WINS__) + if (!gManual) + { + test.Printf(_L("Automated T_PWSTR not supported on emulated devices\n")); + } + else +#endif + { + ParseCommandLineArgs(); + + RunTests(); + } + - RunTests(); - test.End(); test.Close();