sl@0: // Copyright (c) 1996-2010 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "../sfbs/UTILS.H" sl@0: #include "tipctest.h" sl@0: #include "fbsdefs.h" sl@0: #include "fbsmessage.h" sl@0: sl@0: // Invalid parameters to be passed in SendCommand() calls. sl@0: const TInt KInvalidParam1 = 963955448; sl@0: const TInt KInvalidParam2 = 963955368; sl@0: const TInt KInvalidParam3 = 963955300; sl@0: const TInt KInvalidParam4 = 963955232; sl@0: sl@0: CTIPCTest::CTIPCTest(CTestStep* aStep): sl@0: CTGraphicsBase(aStep), sl@0: iFbs(NULL), sl@0: iFs(NULL) sl@0: {} sl@0: sl@0: CTIPCTest::~CTIPCTest() sl@0: { sl@0: if(iShutdownFbs) sl@0: RFbsSession::GetSession()->SendCommand(EFbsMessShutdown); sl@0: RFbsSession::Disconnect(); sl@0: delete iFs; sl@0: iHeap->Close(); sl@0: } sl@0: sl@0: void CTIPCTest::ConstructL() sl@0: { sl@0: INFO_PRINTF1(_L("Font/Bitmap Server IPC Messages Testing")); sl@0: sl@0: if(RFbsSession::Connect()==KErrNone) sl@0: { sl@0: RFbsSession::Disconnect(); sl@0: iShutdownFbs = EFalse; sl@0: } sl@0: else sl@0: { sl@0: FbsStartup(); sl@0: iShutdownFbs = ETrue; sl@0: } sl@0: RFbsSession::Connect(); sl@0: iFbs=RFbsSession::GetSession(); sl@0: sl@0: if(!iShutdownFbs) sl@0: { sl@0: if(iClient.Connect() == KErrNone) sl@0: { sl@0: iShutdownFbs = EFalse; sl@0: } sl@0: else sl@0: { sl@0: iShutdownFbs = ETrue; sl@0: } sl@0: } sl@0: sl@0: iHeap=UserHeap::ChunkHeap(NULL,0x10000,0x10000); sl@0: TRAPD(ret,iFs=CFontStore::NewL(iHeap)); sl@0: TEST(ret==KErrNone); sl@0: TEST(iFs != NULL); sl@0: sl@0: } sl@0: sl@0: void CTIPCTest::RunTestCaseL(TInt aCurTestCase) sl@0: { sl@0: _LIT(KCaseNumber, "CaseNumber"); sl@0: sl@0: TBool res = iStep->GetIntFromConfig(iStep->ConfigSection(), KCaseNumber, aCurTestCase); sl@0: sl@0: if(!res) sl@0: { sl@0: return; sl@0: } sl@0: sl@0: switch(aCurTestCase) sl@0: { sl@0: /** sl@0: @SYMTestCaseID sl@0: GRAPHICS-FBSERV-0603 sl@0: sl@0: @SYMTestCaseDesc sl@0: Tests the sending of commands to a FbsSession sl@0: server thru Inter Process Communication. Sends sl@0: both valid and invalid commands. sl@0: sl@0: @SYMTestActions sl@0: Commands sent to the server: sl@0: 1. EFbsMessShutdown sl@0: 2. EFbsMessFontHeightInTwips sl@0: 3. EFbsMessFontHeightInTwips sl@0: 4. EFbsMessFontHeightInPixels sl@0: 5. EFbsMessFontHeightInPixels sl@0: 6. EFbsMessAddFontStoreFile sl@0: 7. EFbsMessAddFontStoreFile sl@0: 8. EFbsMessInstallFontStoreFile sl@0: 9. EFbsMessInstallFontStoreFile sl@0: 10. EFbsMessInstallFontStoreFile sl@0: 11. EFbsMessBitmapCreate sl@0: 12. EFbsMessRasterize sl@0: 13. EFbsMessFaceAttrib sl@0: 14. EFbsMessHasCharacter sl@0: 15. EFbsMessFontNameAlias sl@0: 16. EFbsMessGetNearestFontToDesignHeightInTwips sl@0: 17. EFbsMessGetNearestFontToMaxHeightInTwips sl@0: 18. EFbsMessGetNearestFontToDesignHeightInPixels sl@0: 19. EFbsMessGetNearestFontToMaxHeightInPixels sl@0: 20. EFbsMessShapeText sl@0: 21. EFbsMessShapeDelete sl@0: 22. EFbsMessSetTwipsHeight sl@0: 23. EFbsMessGetTwipsHeight sl@0: sl@0: @SYMTestExpectedResults sl@0: Test should pass sl@0: */ sl@0: case 1: sl@0: INFO_PRINTF1(_L("Shutdown")); sl@0: iFbs->SendCommand(EFbsMessShutdown); sl@0: TestComplete(); sl@0: break; sl@0: case 2: sl@0: INFO_PRINTF1(_L("Height in twips with negative typeface index")); sl@0: iFbs->SendCommand(EFbsMessFontHeightInTwips, -1); sl@0: TEST(EFalse); // Previous line should have paniced sl@0: TestComplete(); sl@0: break; sl@0: case 3: sl@0: INFO_PRINTF1(_L("Height in twips with invalid size")); sl@0: iClient.SendInvalidSize(EFbsMessFontHeightInTwips); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 4: sl@0: INFO_PRINTF1(_L("Height in pixels with negative typeface index")); sl@0: iFbs->SendCommand(EFbsMessFontHeightInPixels, -1); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 5: sl@0: INFO_PRINTF1(_L("Height in pixels with invalid size")); sl@0: iClient.SendInvalidSize(EFbsMessFontHeightInPixels); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 6: sl@0: INFO_PRINTF1(_L("Add font store file with negative length")); sl@0: iFbs->SendCommand(EFbsMessAddFontStoreFile, 0, -1); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 7: sl@0: INFO_PRINTF1(_L("Add font store file with huge length")); sl@0: iFbs->SendCommand(EFbsMessAddFontStoreFile, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 8: sl@0: INFO_PRINTF1(_L("Install font store file with negative length")); sl@0: iFbs->SendCommand(EFbsMessInstallFontStoreFile, 0, -1); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 9: sl@0: INFO_PRINTF1(_L("Install font store file with huge length")); sl@0: iFbs->SendCommand(EFbsMessInstallFontStoreFile, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 10: sl@0: INFO_PRINTF1(_L("Remove font store file with active references")); sl@0: iFbs->SendCommand(EFbsMessRemoveFontStoreFile, 11); sl@0: // With PDEF121246 (INC120690) fix in place, this test will always pass. Without the fix there will be a KERN 4 panic. sl@0: TEST(ETrue); sl@0: TestComplete(); sl@0: break; sl@0: case 11: sl@0: INFO_PRINTF1(_L("Bitmap create with invalid display mode")); sl@0: iClient.SendInvalidDisplayMode(EFbsMessBitmapCreate); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 12: sl@0: INFO_PRINTF1(_L("Rasterize with invalid bitmap handle")); sl@0: iFbs->SendCommand(EFbsMessRasterize, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 13: sl@0: INFO_PRINTF1(_L("Face Attribute with invalid bitmap handle")); sl@0: iFbs->SendCommand(EFbsMessFaceAttrib, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 14: sl@0: INFO_PRINTF1(_L("Has Character with invalid bitmap handle")); sl@0: iFbs->SendCommand(EFbsMessHasCharacter, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 15: sl@0: INFO_PRINTF1(_L("Name Alias with huge alias name length")); sl@0: iFbs->SendCommand(EFbsMessFontNameAlias, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 16: sl@0: INFO_PRINTF1(_L("Get nearest font to design height in twips with invalid typeface name length")); sl@0: iClient.SendInvalidNameLength(EFbsMessGetNearestFontToDesignHeightInTwips); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 17: sl@0: INFO_PRINTF1(_L("Get nearest font to max height in twips with invalid typeface name length")); sl@0: iClient.SendInvalidNameLength(EFbsMessGetNearestFontToMaxHeightInTwips); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 18: sl@0: INFO_PRINTF1(_L("Get nearest font to design height in pixels with invalid typeface name length")); sl@0: iClient.SendInvalidNameLength(EFbsMessGetNearestFontToDesignHeightInPixels); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 19: sl@0: INFO_PRINTF1(_L("Get nearest font to max height in pixels with invalid typeface name length")); sl@0: iClient.SendInvalidNameLength(EFbsMessGetNearestFontToMaxHeightInPixels); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 20: sl@0: INFO_PRINTF1(_L("Shape text with invalid bitmap font handle")); sl@0: iFbs->SendCommand(EFbsMessShapeText, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 21: sl@0: INFO_PRINTF1(_L("Shape delete with invalid bitmap font handle")); sl@0: iFbs->SendCommand(EFbsMessShapeDelete, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 22: sl@0: INFO_PRINTF1(_L("Set twips height with invalid font handle")); sl@0: iFbs->SendCommand(EFbsMessSetTwipsHeight, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 23: sl@0: INFO_PRINTF1(_L("Get twips height with invalid font handle")); sl@0: iFbs->SendCommand(EFbsMessGetTwipsHeight, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 24: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-FBSERV-0630 sl@0: sl@0: @SYMTestCaseDesc sl@0: Tests that invalid font handle to EFbsMessGetGlyphs causes panic sl@0: sl@0: @SYMTestExpectedResults sl@0: Client should panic with FBSERV -8 sl@0: */ sl@0: INFO_PRINTF1(_L("Get glyphs from glyph atlas with invalid font handle")); sl@0: iFbs->SendCommand(EFbsMessGetGlyphs, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 25: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-FBSERV-0670 sl@0: sl@0: @SYMTestCaseDesc sl@0: Tests that invalid font handle to EFbsMessGetGlyphMetrics causes panic sl@0: sl@0: @SYMTestExpectedResults sl@0: Client should panic with FBSERV -8 sl@0: */ sl@0: INFO_PRINTF1(_L("Get glyph metrics with invalid font handle")); sl@0: iFbs->SendCommand(EFbsMessGetGlyphMetrics, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID sl@0: TI18N-GDI-CIT-4086 sl@0: sl@0: @SYMTestCaseDesc sl@0: Test if FBS can handle invalid messages correctly sl@0: and panic the client as needed. sl@0: sl@0: @SYMTestActions sl@0: 26. EFbsMessGetFontTable sl@0: 27. EFbsMessReleaseFontTable sl@0: 28. EFbsMessGetGlyphOutline sl@0: 29. EFbsMessReleaseGlyphOutline sl@0: sl@0: @SYMTestExpectedResults sl@0: Test should pass sl@0: */ sl@0: case 26: sl@0: INFO_PRINTF1(_L("Get Font Table with wrong msg")); sl@0: iFbs->SendCommand(EFbsMessGetFontTable, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 27: sl@0: INFO_PRINTF1(_L("Release Font Table with wrong msg")); sl@0: iFbs->SendCommand(EFbsMessReleaseFontTable, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 28: sl@0: INFO_PRINTF1(_L("Get Glyph outline with wrong msg")); sl@0: iFbs->SendCommand(EFbsMessGetGlyphOutline,KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 29: sl@0: INFO_PRINTF1(_L("Release Glyph outline with wrong msg")); sl@0: iFbs->SendCommand(EFbsMessReleaseGlyphOutline, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4); sl@0: TEST(EFalse); sl@0: TestComplete(); sl@0: break; sl@0: case 30: sl@0: TestComplete(); sl@0: break; sl@0: } sl@0: } sl@0: sl@0: RIPCTestFbservClient::RIPCTestFbservClient() sl@0: { sl@0: sl@0: } sl@0: sl@0: RIPCTestFbservClient::~RIPCTestFbservClient() sl@0: { sl@0: sl@0: } sl@0: sl@0: TInt RIPCTestFbservClient::Connect(void) sl@0: { sl@0: _LIT(KFbServerName, "!Fontbitmapserver"); sl@0: TVersion version(0, 0, 0); sl@0: TInt ret = CreateSession(KFbServerName, version); sl@0: return ret; sl@0: } sl@0: sl@0: void RIPCTestFbservClient::SendInvalidSize(TInt aFunctionNumber) sl@0: { sl@0: TPckgBuf size; sl@0: size().iHeight = 0; sl@0: size().iWidth = 0; sl@0: TIpcArgs args; sl@0: args.Set(0, 1); sl@0: args.Set(2, &size); sl@0: sl@0: SendReceive(aFunctionNumber, args); sl@0: } sl@0: sl@0: void RIPCTestFbservClient::SendInvalidDisplayMode(TInt aFunctionNumber) sl@0: { sl@0: TPckgBuf bmpSpec; sl@0: bmpSpec().iDispMode = EColorLast; sl@0: TIpcArgs args = TIpcArgs(); sl@0: args.Set(0, &bmpSpec); sl@0: sl@0: SendReceive(aFunctionNumber, args); sl@0: } sl@0: sl@0: void RIPCTestFbservClient::SendInvalidNameLength(TInt aFunctionNumber) sl@0: { sl@0: TIpcArgs args = TIpcArgs(); sl@0: _LIT(KDefault, "Default"); sl@0: TInt size = 7; sl@0: HBufC8 *buf1 = HBufC8::NewLC(size); sl@0: TPtr8 ptr1 = buf1->Des(); sl@0: ptr1.Copy(KDefault); sl@0: CleanupStack::PopAndDestroy(buf1); sl@0: args.Set(0, &ptr1); sl@0: SendReceive(aFunctionNumber, args); sl@0: } sl@0: sl@0: sl@0: //-------------- sl@0: __CONSTRUCT_STEP__(IPCTest) sl@0: