appfw/apparchitecture/tef/T_StartDocStep.CPP
author William Roberts <williamr@symbian.org>
Fri, 23 Apr 2010 14:37:17 +0100
branchRCL_3
changeset 22 c82a39b81a38
parent 0 2e3d3ce01487
child 29 6a787171e1de
permissions -rw-r--r--
Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414) Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can arrange to use the same source file name in sfimage, without having to export over the original Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.

// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//

/**
 @file
 @internalComponent - Internal Symbian test code 
*/


#include "testableapalssession.h"
#include "T_StartDocStep.h"
#include "TStartDoc.h"

/**
   @SYMTestCaseID T-StartDocStep-TestStartDocL
  
   @SYMPREQ PHAR-5NTCWY
  
   @SYMTestCaseDesc
   Checks that document names longer than 256 characters can be started.
   The test starts a document and checks that the application launched
   to handle that document is passed the full document name.
   The test uses the StartDocument overload which does not provide an
   application UID or mime type, because we want the test to check that
   the long document name is supported by the data recognizer framework.
   The test also checks that the data recognizer framework doesn't return
   an error because it incorrectly assumes the document name is a file name
   and tries to open the document to read its contents before performing
   data recognition.
   In this case, the document name isn't a file name, it's a pretend URL
  
   @SYMTestPriority High
  
   @SYMTestStatus Implemented
  
   @SYMTestActions
   1. Call RApaLsSession::StartDocument passing a long document name (KLitLongURL).
   2. StartDocument should cause TStartDocApp.app to be launched, so wait
      for the application thread to terminate.
   3. Check the thread has terminated in the way we expected
  
   @SYMTestExpectedResults
   Calling RApaLsSession::StartDocument should cause the apparc server to
   call CLongUrlRec::DoRecognizeL as part of trying to find the mime type
   of the document. CLongUrlRec returns a mime type which is associated with
   TStartDocApp.app, so apparc server starts TStartDocApp.app passing the
   long document name on the command line.
   The long document name should eventually be passed through to
   CStartDocAppUi::ProcessCommandParametersL which will panic with
   EPanicDocNameCheck1Failed if the document name isn't KLitLongURL.
   CStartDocDocument::OpenFileL panics with EPanicDocNameCheck1NotExecuted if
   the document name check in CStartDocAppUi::ProcessCommandParametersL wasn't
   executed.
   CStartDocDocument::OpenFileL panics with EPanicDocNameCheck2Failed if
   the document name returned by CApaProcess::MainDocFileName isn't KLitLongURL.
  
   TStartDocApp.app should exit with KTStartDocTestPassed.
  
 */
void CT_StartDocStep::TestStartDocL(RApaLsSession& aLs)
	{
	TPtrC longURL(KLitLongURL);
	// sanity check to ensure the document name we're going to pass to
	// RApaLsSession::StartDocument is longer than the maximum length
	// of a file name
	TEST(longURL.Length() > KMaxFileName);

	TThreadId appThreadId(0U);
	// start document, causing TStartDocApp.app to be launched
	INFO_PRINTF1(_L("Starting document..."));
	TInt ret = aLs.StartDocument(longURL, appThreadId);
	TEST(ret == KErrNone);
	User::LeaveIfError(ret);

	RThread appThread;
	User::LeaveIfError(appThread.Open(appThreadId));
	TRequestStatus logonRequestStatus;
	appThread.Logon(logonRequestStatus);

	// wait for TStartDocApp.app to terminate
	INFO_PRINTF1(_L("Waiting for application to terminate..."));
	User::WaitForRequest(logonRequestStatus);

	const TExitType exitType = appThread.ExitType();
	const TInt exitReason = appThread.ExitReason();
	TExitCategoryName categoryName = appThread.ExitCategory();
	appThread.Close();

	TBuf<50> msg;
	if (exitType == EExitPanic)
		{
		_LIT(KAppPanicInfo, "Application panic: %S %d");
		msg.Format(KAppPanicInfo, &categoryName, exitReason);
		}
	else
		{
		_LIT(KAppExitInfo, "Application exited with code %d");
		msg.Format(KAppExitInfo, exitReason);
		}
	INFO_PRINTF1(msg);

	TEST(logonRequestStatus == KTStartDocTestPassed);
	TEST(exitType == EExitKill);
	TEST(exitReason == KTStartDocTestPassed);

	//avoid race conditions
	User::After(1500000);
	}

TVerdict CT_StartDocStep::doTestStepL()
{
	INFO_PRINTF1(_L("Test Started"));
	
	RTestableApaLsSession ls;
	TEST(KErrNone == ls.Connect());
	CleanupClosePushL(ls);

	//avoid race conditions
	User::After(1500000);

	// run the test
	HEAP_TEST_LS_SESSION(ls, 0, 0, TestStartDocL(ls), NO_CLEANUP);
	
	CleanupStack::PopAndDestroy(&ls);

	INFO_PRINTF1(_L("Test Finished"));

	return TestStepResult();
}