--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/tef/T_StartDocStep.CPP Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,143 @@
+// 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();
+}
+
+