// 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:
// Test wrapper to Application Architecture Server.
// Tests Application information, Data recognition and application
// launching capabilities of the application architecture server.\n
//
// t_serv3step.cpp
//
/**
@file t_serv3step.cpp
@internalComponent - Internal Symbian test code
*/
#include <f32file.h>
#include <fbs.h>
#include <apaid.h>
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
#include <apaidpartner.h>
#include <apgicnflpartner.h>
#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
#include <apgaplst.h>
#include <apaflrec.h>
#include "testableapalssession.h"
#include <apacmdln.h>
#include <apfrec.h>
#include <datastor.h>
#include <apgicnfl.h>
#include <apasvst.h>
#include "tstapp.h"
//
#include <e32test.h>
#include "T_Serv3Step.h"
#include <coemain.h>
#include <eikenv.h>
#include "TAppEmbedUids.h"
#include "appfwk_test_utils.h"
//Literals for directory and file naming
_LIT(KMimeDir,"c:\\system\\data\\Mimepath\\");
_LIT(KMimeFile,"c:\\system\\data\\Mimepath\\mime_content");
_LIT(KEmptyDir,"c:\\system\\data\\Testpath\\Empty\\");
_LIT8(KTextContent, "Never hit your mother with a shovel.\
It leaves a dark impression on her mind.");
_LIT(KSuffixText, ".txt");
_LIT(KSuffixHtml, ".html");
_LIT8(KHtmlContent, "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0\
Transitional//EN'><HTML><HEAD><TITLE>SYMBIAN Centre\
- 5 Day Forecast for London, United Kingdom</TITLE>\
<META http-equiv=Content-Type content=text/html;\
charset=iso-8859-1><META content='Symbian Five Day Forecast'\
name=type><META content='The Symbian five day forecast'\
name=description>");
_LIT(KSuffixUnknown, ".canyoutell");
const TInt KFixedNumWidth = 3;
CT_Serv3Step::~CT_Serv3Step()
/**
* Destructor
*/
{
delete iActiveScheduler;
}
CT_Serv3Step::CT_Serv3Step()
/**
* Constructor
*/
{
// Call base class method to set up the human readable name for logging
SetTestStepName(KT_Serv3Step);
}
/**
@SYMTestCaseID T_Serv3Step_DoSyncRecognizerTest1L
@SYMPREQ 699
@SYMREQ 3897
@SYMTestCaseDesc Test PREQ699.1.0 Validate Synchronous RecognizeFilesL function and CDataRecognitionResultArray\n
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Calls RecognizeFilesL() with a folder containing two files of zero and one byte sizes. Validates
the returned number of files and file types. Tests CDataRecognitionResultArray by using the object.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, CDataRecognitionResultArray& aResult);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
CDataRecognitionResultArray::const TFileName& Path() const\n
CDataRecognitionResultArray::GetDataRecognitionResultL(TDataRecognitionResult& aResult, const TUint aIndex) const;\n
CDataRecognitionResultArray::GetFileNameL(TFileName& aFileName, const TUint aIndex) const\n
@SYMTestExpectedResults KErrNone and CDataRecognitionResultArray returned containing two entries, of MIME type "text/plain" \n
*/
void CT_Serv3Step::DoSyncFolderRecognizerTest1L(RApaLsSession& aLs)
{
//Synchronous Folder File Recognition Test Group 1
_LIT(KStandardDir,"z:\\system\\data\\Testpath\\");
// Copy App files around and delete them to check whether
// the app list updates and stores the cache correctly.
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
INFO_PRINTF1(_L("Synchronous Folder File Recognition Test PREQ699.1.0"));
TInt ret=aLs.RecognizeFilesL(KStandardDir,*result);
TEST(ret==KErrNone);
User::LeaveIfError(ret);
// Test the CDataRecognitionResultArray object
TFileName path = result->Path(); //test: CDataRecognitionResultArray::Path()
TFullName standardDir(KStandardDir);
//Test the path created is correct
TEST(path==standardDir);
TUint count = result->Count(); //test: CDataRecognitionResultArray::Count()
TEST(count==2); //two files in directory
//get each result from the test directory. Check the MIME values against their known types
for(TUint i=0; i<count;i++)
{
//test: CDataRecognitionResultArray::GetDataRecognitionResultL
TDataRecognitionResult res;
result->GetDataRecognitionResultL(res, i);
//test: correct MIME type is returned - "text/plain"
TEST(res.iDataType.Des8().Compare(TDataType(_L8("text/plain")).Des8()) == 0);
//test: CDataRecognitionResultArray::GetFileNameL
TFileName fileName;
result->GetFileNameL(fileName, i);
TEST(fileName.Compare( (i==0 ? _L("file1.txt") : _L("file2.txt")) ) == 0);
}
// Cleanup
CleanupStack::PopAndDestroy(result);//result
}
/**
@SYMTestCaseID T_Serv3Step_DoSyncRecognizerTest2L
@SYMPREQ 699
@SYMREQ 3899
@SYMTestCaseDesc Test PREQ699.2.0 and PREQ699.2.1 Validate Synchronous RecognizeFilesL function for error handling.\n
@SYMTestStatus Implemented
@SYMTestPriority High
@SYMTestActions. Test 2.0 Calls RecognizeFilesL() (without a data filter then with a data filter) using an unknown folder path.
Checks returned value is KErrPathNotFound.
Test 2.1 Calls RecognizeFilesL() (without a data filter then with a data filter) using an empty folder path.
Checks returned value is KErrNone and that returned array is empty.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, CDataRecognitionResultArray& aResult);\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
@SYMTestExpectedResults Test 2.0 returned value is KErrPathNotFound.\n
Test 2.1 returned value is KErrNone and that returned array is empty.\n
*/
void CT_Serv3Step::DoSyncFolderRecognizerTest2L(RApaLsSession& aLs)
{
TBufC<50> emptyDir(KEmptyDir);
TPtr ptrEmptyDir(emptyDir.Des());
//Synchronous Folder File Recognition Test Group
//**************
// Test Case 2.0 - Test Recognizer for incorrect folder path.Test both versions of synchronous RecognizeFiles
//**************
INFO_PRINTF1(_L("Synchronous Folder File Recognition Test PREQ699.2.0"));
_LIT(KNotKnownDir,"z:\\system\\data\\Testpath\\NotKnown\\");
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
TInt ret=aLs.RecognizeFilesL(KNotKnownDir,*result1);
TEST(ret==KErrPathNotFound);
ret=aLs.RecognizeFilesL(KNotKnownDir,_L8("text/plain"),*result1);
TEST(ret==KErrPathNotFound);
// Cleanup
CleanupStack::PopAndDestroy(result1);//result1
// Create a directory with no files
RSmlTestUtils utils;
CleanupClosePushL(utils);
CreateDirL(&utils, ptrEmptyDir);
//**************
// Test Case 2.1 -Test Recognizer for empty folder. Test both versions of synchronous RecognizeFiles
//**************
INFO_PRINTF1(_L("Synchronous Folder File Recognition Test PREQ699.2.1"));
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result2);
ret=aLs.RecognizeFilesL(KEmptyDir,*result2);
TEST(ret==KErrNone);
TUint count = result2->Count();
TEST(count==0);
INFO_PRINTF1(_L("Test empty folder for filter version parameter"));
ret=aLs.RecognizeFilesL(KEmptyDir,_L8("text/plain"),*result2);
TEST(ret==KErrNone);
count = result2->Count();
TEST(count==0);
//Delete empty directory
DeleteDirL(&utils, ptrEmptyDir);
// Cleanup
CleanupStack::PopAndDestroy(result2);//result2
CleanupStack::PopAndDestroy(&utils);//utils
}
/**
@SYMTestCaseID T_Serv3Step_DoSyncRecognizerTest3L
@SYMPREQ 699
@SYMREQ 3899
@SYMTestCaseDesc Validate Synchronous RecognizeFilesL data filter function using various filters.\n
Test 3.0 Validate Synchronous RecognizeFilesL data filter function and CDataRecognitionResultArray\n
Test 3.1 Validate Synchronous RecognizeFilesL functions with wildcard/MIME type validity.\n
Test 3.2 Validate Synchronous RecognizeFilesL functions with irregular strings.\n
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Call RecognizeFilesL with three different data filters: i) standard= "text/plain"; ii) wildcard: "text*"; iii) non-valid \n
For each call, check the results are correct: number of files identified and the MIME types.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();\n
CDataRecognitionResultArray::Count() const;\n
CDataRecognitionResultArray::const TFileName& Path() const\n
CDataRecognitionResultArray::GetDataRecognitionResultL(TDataRecognitionResult& aResult, const TUint aIndex) const;\n
CDataRecognitionResultArray::GetFileNameL(TFileName& aFileName, const TUint aIndex) const\n
@SYMTestExpectedResults\n
Test 3.0 KErrNone and CDataRecognitionResultArray returned containing four entries, of MIME type "text/plain" \n
Test 3.1 KErrNone and CDataRecognitionResultArray returned containing four entries, of MIME type "text/plain" \n
Test 3.2 KErrNone and CDataRecognitionResultArray returned containing zero entries\n
*/
void CT_Serv3Step::DoSyncFolderRecognizerTest3L(RApaLsSession& aLs)
{
//**************
// Test Case 3.0 - Test Recognizer filter version with datatype filter type validity.
// Also test CDataRecognitionResultArray::GetDataRecognitionResultL();
// CDataRecognitionResultArray::
//***************
//Synchronous Folder File Recognition Test Group 3;
_LIT(KFilterTestDir,"z:\\system\\data\\Testpath\\FilterTests\\");
CDataRecognitionResultArray* result3 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result3);
INFO_PRINTF1(_L("Synchronous Folder File Recognition Test PREQ699.3.0"));
TInt ret=aLs.RecognizeFilesL(KFilterTestDir,_L8("text/plain"),*result3);
TEST(ret==KErrNone);
TUint count = result3->Count();
TEST(count==4);
//get each result from the test directory. Check the MIME values against known types
for(TUint i=0; i<count;i++)
{
TDataRecognitionResult res;
result3->GetDataRecognitionResultL(res, i); //the result
TFileName fileName;
result3->GetFileNameL(fileName, i); //the file we are looking at
//test for correct MIME type result
TEST(res.iDataType.Des8().Compare(TDataType(_L8("text/plain")).Des8())==0);//report an error if not text/plain
}
// Cleanup
CleanupStack::PopAndDestroy(result3);//result
//*****************
// Test Case 3.1 - Test Recognizer filter version for wildcard/MIME type validity.
// Also test CDataRecognitionResultArray
//*********
INFO_PRINTF1(_L("Synchronous Folder File Recognition Test PREQ699.3.1"));
CDataRecognitionResultArray* result4 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result4);
ret=aLs.RecognizeFilesL(KFilterTestDir,_L8("text*"),*result4);
TEST(ret==KErrNone);
count = result3->Count();
TEST(count==4);
//get each result from the test directory. Check the MIME values against some known types
for(TUint j=0; j<count;j++)
{
TDataRecognitionResult res;
result4->GetDataRecognitionResultL(res, j); //the result
TFileName fileName;
result4->GetFileNameL(fileName, j); //the file we are looking at
//test for correct MIME type result
TEST(res.iDataType.Des8().Compare(TDataType(_L8("text/plain")).Des8())==0);//report an error if not text
}
// Cleanup
CleanupStack::PopAndDestroy(result4);//result
//*****************
// Test Case 3.2 -Test Recognizer filter version for with irregular strings.
//*********
INFO_PRINTF1(_L("Synchronous Folder File Recognition Test PREQ699.3.2"));
CDataRecognitionResultArray* result5 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result5);
ret=aLs.RecognizeFilesL(KFilterTestDir,_L8("&*/?|=+-"),*result5);
TEST(ret==KErrNone);
count = result5->Count();
TEST(count==0);
ret=aLs.RecognizeFilesL(KFilterTestDir,_L8("'/"),*result5);
TEST(ret==KErrNone);
count = result5->Count();
TEST(count==0);
// Cleanup
CleanupStack::PopAndDestroy(result5);//result
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest1L
@SYMPREQ 699
@SYMREQ Non-Specific
@SYMTestCaseDesc Test PREQ699.4.0 Validate Asynchronous RecognizeFilesL (non-filtered) function and CDataRecognitionResultArray\n
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Calls RecognizeFilesL() with a folder containing two files of zero and one byte sizes. Uses a Test Active Object
within the request. Validates the returned number of files and file types. Tests CDataRecognitionResultArray by using the object.\n
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
CDataRecognitionResultArray::const TFileName& Path() const\n
CDataRecognitionResultArray::GetDataRecognitionResultL(TDataRecognitionResult& aResult, const TUint aIndex) const;\n
CDataRecognitionResultArray::GetFileNameL(TFileName& aFileName, const TUint aIndex) const\n
@SYMTestExpectedResults status= KErrNone and CDataRecognitionResultArray returned containing two entries, of MIME type "text/plain" \n
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest1L(RApaLsSession& aLs)
{
//Asynchronous folder file recognition Test Group 4
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
//Check results and Stop AS
_LIT(KStandardDir,"z:\\system\\data\\Testpath\\");
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.4.0"));
aLs.RecognizeFilesL(KStandardDir,*result,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result->Count();
TEST(count==2); //two files in directory
//get each result from the test directory. Check the MIME values against some known types
for(TUint i=0; i<count;i++)
{
TDataRecognitionResult res;
result->GetDataRecognitionResultL(res, i); // the result
//test MIME type result = "text/plain"
TEST(res.iDataType.Des8().Compare(TDataType(_L8("text/plain")).Des8())==0);
TFileName fileName;
result->GetFileNameL(fileName, i); //the file we are looking at
TEST(fileName.Compare( (i==0 ? _L("file1.txt") : _L("file2.txt")) ) == 0);
}
}
// Cleanup
CleanupStack::PopAndDestroy(result);//result
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest2L
@SYMPREQ 699
@SYMREQ 3899
@SYMTestCaseDesc Test PREQ699.5.0 Validate Asynchronous RecognizeFilesL (filtered) function and CDataRecognitionResultArray\n
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Call RecognizeFilesL() with a Data Type Filter (aDataType ="Text/Plain") and a Test Active Object.
Test that the number and data type of files returned is correct.
Tests CDataRecognitionResultArray by using the object.\n
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
CDataRecognitionResultArray::GetDataRecognitionResultL(TDataRecognitionResult& aResult, const TUint aIndex) const;\n
CDataRecognitionResultArray::GetFileNameL(TFileName& aFileName, const TUint aIndex) const\n
@SYMTestExpectedResults status= KErrNone and CDataRecognitionResultArray returned containing four entries, of MIME type "text/plain" \n
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest2L(RApaLsSession& aLs)
{
//Asynchronous folder file recognition Test Group 5
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
_LIT(KFilterDir,"z:\\system\\data\\Testpath\\FilterTests\\");
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.5.0"));
//Test RecognizeFilesL with a MIME type filter "text/plain"
aLs.RecognizeFilesL(KFilterDir,_L8("text/plain"), *result,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result->Count();
TEST(count==4); //four files in directory
//get each result from the test directory. Check the MIME values against some known types
for(TUint i=0; i<count;i++)
{
TDataRecognitionResult res;
result->GetDataRecognitionResultL(res, i); // the result
TFileName fileName;
result->GetFileNameL(fileName, i); // the file we are looking at
//test MIME type result = "text/plain"
TEST(res.iDataType.Des8().Compare(TDataType(_L8("text/plain")).Des8())==0);
}
}
// Cleanup
CleanupStack::PopAndDestroy(result);//result
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest3L
@SYMPREQ 699
@SYMREQ 3899
@SYMTestCaseDesc Test PREQ699.6.0 Validate Asynchronous RecognizeFilesL function (with data filter and wildcard) \n
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Call RecognizeFilesL() with a Data Type Filter and wildcard (aDataType ="Text/ *") and a Test Active Object.
Test that the number and data type of files returned is correct.
Tests CDataRecognitionResultArray by using the object.\n
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
CDataRecognitionResultArray::GetDataRecognitionResultL(TDataRecognitionResult& aResult, const TUint aIndex) const;\n
CDataRecognitionResultArray::GetFileNameL(TFileName& aFileName, const TUint aIndex) const\n
@SYMTestExpectedResults status= KErrNone and CDataRecognitionResultArray returned containing four entries, of MIME type "text/plain" \n
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest3L(RApaLsSession& aLs)
{
// Asynchronous folder file recognition Test Group 6
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
_LIT(KFilterDir,"z:\\system\\data\\Testpath\\FilterTests\\");
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.6.0"));
aLs.RecognizeFilesL(KFilterDir,_L8("text*"), *result,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);//Test no error returned
if (active->iStatus==KErrNone)
{
TUint count = result->Count();
TEST(count==4); //four files in directory
//get each result from the test directory. Check the MIME values against some known types
for(TUint i=0; i<count;i++)
{
TDataRecognitionResult res;
result->GetDataRecognitionResultL(res, i); // the result
TFileName fileName;
result->GetFileNameL(fileName, i); //the file we are looking at
//test MIME type result="text/plain"
TEST(res.iDataType.Des8().Compare(TDataType(_L8("text/plain")).Des8())==0);
}
}
// Cleanup
CleanupStack::PopAndDestroy(result);//result
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest4L
@SYMPREQ 699
@SYMREQ 3899
@SYMTestCaseDesc Test PREQ699.7.0 Validate Asynchronous RecognizeFilesL function (with unknown and irregular data filters).
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Call RecognizeFilesL() with Data Type Filters of an irregular nature and a Test Active Object.
Test that no files are returned and status= KErrNone.\n
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
@SYMTestExpectedResults status= KErrNone and CDataRecognitionResultArray returned containing zero entries \n
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest4L(RApaLsSession& aLs)
{
//Asynchronous folder file recognition Test Group 7
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
INFO_PRINTF1(_L("Testing Recognition of folder filtered with irregular strings"));
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
_LIT(KFilterDir,"z:\\system\\data\\Testpath\\FilterTests\\");
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.7.0"));
aLs.RecognizeFilesL(KFilterDir,_L8("&* /?|=+-"),*result, active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result->Count();
TEST(count==0); //no files should be found
}
// Cleanup
CleanupStack::PopAndDestroy(result);//result
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest5L
@SYMPREQ 699
@SYMREQ Non-Specific
@SYMTestCaseDesc Test PREQ699.8.0 Validate Asynchronous RecognizeFilesL function with large directory to test Cache upperlimit. \n
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions. Call RecognizeFilesL() with a folder containing a large number of files and a Test Active Object.
Test that the number of files returned is correct.
Tests CDataRecognitionResultArray by using the object.\n
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath, const TDesC8& aDataType, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus);\n
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;\n
@SYMTestExpectedResults status= KErrNone and CDataRecognitionResultArray returned containing 550 entries. \n
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest5L(RApaLsSession& aLs)
{
_LIT(KLargeDir,"c:\\system\\data\\Testpath\\largeDir\\");
_LIT(KLargeDirRoot, "c:\\system\\data\\Testpath\\largeDir\\focus");
TBufC<50> bigDir(KLargeDir);
TPtr ptrBigDir (bigDir.Des());
TBufC<50> bigDirRoot(KLargeDirRoot);
TPtr ptrBigDirRoot (bigDirRoot.Des());
// Asynchronous folder file recognition Test Group 8
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
//File server and utils
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
CreateDirL(&utils, ptrBigDir);
CreateFilesL(theFS, file, ptrBigDirRoot, (TDesC&)KSuffixText, 550, KTextContent, 0);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.8.0"));
//Check results and Stop AS
aLs.RecognizeFilesL(KLargeDir,*result,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result->Count();
TEST(count==550); //550 files in directory - 500 files is thought to be cache capacity
}
DeleteFilesL(&utils, ptrBigDirRoot, (TDesC&)KSuffixText, 550);
DeleteDirL(&utils, ptrBigDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils);//utils
CleanupStack::PopAndDestroy(result);//result
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest6L
@SYMPREQ 699
@SYMREQ 3898 3899
@SYMTestCaseDesc Test PREQ699.9.0, PREQ699.9.1, PREQ699.9.2 Validates cache functionality with changed file mime type
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Recognize a directory with a filter and then change the mime type of one file.
Recognize the directory with a filter again and ensure that the file type change has been registered.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for file creation
9.0 count = 1 CDataRecognitionResultArray::Count returns one entry of MIME type "text/plain"
status = KErrNone for file content changed to html
9.1 count = 0 CDataRecognitionResultArray::Count returns no entries of MIME type "text/plain"
9.2 count = 0 CDataRecognitionResultArray::Count returns no entries of MIME type "text/plain"
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest6L(RApaLsSession& aLs)
{
TBufC<50> mimeDir(KMimeDir);
TPtr ptrMimeDir(mimeDir.Des());
TBufC<50> mimeFile(KMimeFile);
TPtr ptrMimeFile(mimeFile.Des());
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
//Asynchronous folder file recognition Test Group 9
//Declare result arrays for storing seperate recognition results
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result3 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
CleanupStack::PushL(result3);
//File server and utils
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directory for test files
CreateDirL(&utils, ptrMimeDir);
//Timestamp details for files
TTime time;
time.UniversalTime();
TTime aLaterTime(time);
TTimeIntervalMinutes aInterval(1);
aLaterTime+=(aInterval);
// Create file mime_content000.txt containing text
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixText, 1, KTextContent, time);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.9.0"));
//Test RecognizeFilesL with a MIME type filter "text/plain"
aLs.RecognizeFilesL(KMimeDir,_L8("text/plain"), *result1 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result1->Count();
TEST(count==1);
}
//Change file content to html
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixText, 1, KHtmlContent, aLaterTime);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.9.1"));
//Test RecognizeFilesL with a MIME type filter "text/plain"
aLs.RecognizeFilesL(KMimeDir,_L8("text/plain"), *result2 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result2->Count();
TEST(count==0);
}
//Delete file and recognise again
DeleteFilesL(&utils, ptrMimeFile, (TDesC&)KSuffixText, 1);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.9.2"));
aLs.RecognizeFilesL(KMimeDir, *result3,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result3->Count();
TEST(count==0);
}
//Remove test directory
DeleteDirL(&utils, ptrMimeDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils); //utils
CleanupStack::PopAndDestroy(result3);//result1
CleanupStack::PopAndDestroy(result2);//result2
CleanupStack::PopAndDestroy(result1);//result3
CleanupStack::PopAndDestroy(active); //active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest7L
@SYMPREQ 699
@SYMREQ 3898 3899
@SYMTestCaseDesc Test PREQ699.10.0 Validates cache functionality with changed mime type and filter (1)
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Recognize a directory with a filter. Change the mime type of one file in the
directory such that it is now described by the filter. Recognize the
directory again with the same filter and ensure that the file type change has
been registered.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for file creation
count = 3 CDataRecognitionResultArray::Count returns three entries of MIME type "text/html"
status = KErrNone for file content changed to html
count = 4 CDataRecognitionResultArray::Count returns four entries of MIME type "text/html"
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest7L(RApaLsSession& aLs)
{
TBufC<50> mimeDir(KMimeDir);
TPtr ptrMimeDir (mimeDir.Des());
TBufC<50> mimeFile(KMimeFile);
TPtr ptrMimeFile(mimeFile.Des());
//Asynchronous folder file recognition Test Group 10
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directory for test files
CreateDirL(&utils, ptrMimeDir);
//Timestamp details for files
TTime time;
time.UniversalTime();
TTime aLaterTime(time);
TTimeIntervalMinutes aInterval(1);
aLaterTime+=(aInterval);
// Create files mime_content000.canyoutell - mime_content003.canyoutell
// 000 with text content and 001-003 with html content
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 4, KHtmlContent, time);
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KTextContent, time);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.10.0"));
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result1 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result1->Count();
TEST(count == 3);
}
//Change file content to html and update the timestamp
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KHtmlContent, aLaterTime);
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result2 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result2->Count();
TEST(count == 4);
}
DeleteFilesL(&utils, ptrMimeFile, (TDesC&)KSuffixUnknown, 4);
//Remove test directory
DeleteDirL(&utils, ptrMimeDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils);//utils
CleanupStack::PopAndDestroy(result2);//result1
CleanupStack::PopAndDestroy(result1);//result2
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest8L
@SYMPREQ 699
@SYMREQ 3898 3899
@SYMTestCaseDesc Test PREQ699.11.0 Validates cache functionality with changed file mime type and filter (2)
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Recognize a directory with a filter. Change the mime type of one file in the
directory such that it is now not described by the filter. Recognize the
directory again with the same filter and ensure that the file type change has
been registered.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for file creation
count = 4 CDataRecognitionResultArray::Count returns four entries of MIME type "text/html"
status = KErrNone for file content changed to html
count = 3 CDataRecognitionResultArray::Count returns three entries of MIME type "text/html"
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest8L(RApaLsSession& aLs)
{
TBufC<50> mimeDir(KMimeDir);
TPtr ptrMimeDir (mimeDir.Des());
TBufC<50> mimeFile(KMimeFile);
TPtr ptrMimeFile(mimeFile.Des());
//Asynchronous folder file recognition Test Group 11
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directory for test files
CreateDirL(&utils, ptrMimeDir);
//Timestamp details for files
TTime time;
time.UniversalTime();
TTime aLaterTime(time);
TTimeIntervalMinutes aInterval(1);
aLaterTime+=(aInterval);
// Create files mime_content000.canyoutell - mime_content003.canyoutell with html content
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 4, KHtmlContent, time);
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result1 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result1->Count();
TEST(count == 4);
}
//Change file content to text
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KTextContent, aLaterTime);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.11.0"));
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result2 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result2->Count();
TEST(count == 3);
}
DeleteFilesL(&utils, ptrMimeFile, (TDesC&)KSuffixUnknown, 4);
//Remove test directory
DeleteDirL(&utils, ptrMimeDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils);//utils
CleanupStack::PopAndDestroy(result2);//result1
CleanupStack::PopAndDestroy(result1);//result2
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest9L
@SYMPREQ 699
@SYMREQ 3898 3899
@SYMTestCaseDesc Test PREQ699.12.0 Validates cache functionality with older timestamp(1)
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Recognize a directory. Change the timestamp on one file to be older and alter
the mime type. Repeat the directory recognition and ensure that the mime type
has been updated..
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for html file creation
count = 1 CDataRecognitionResultArray::Count returns one entry of MIME type "text/html"
status = KErrNone for file content changed to text
count = 0 CDataRecognitionResultArray::Count returns zero entries of MIME type "text/html"
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest9L(RApaLsSession& aLs)
{
TBufC<50> mimeDir(KMimeDir);
TPtr ptrMimeDir (mimeDir.Des());
TBufC<50> mimeFile(KMimeFile);
TPtr ptrMimeFile(mimeFile.Des());
//Asynchronous folder file recognition Test Group 12
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directory for test files
CreateDirL(&utils, ptrMimeDir);
//Timestamp details for files
TTime time;
time.UniversalTime();
TTime aLaterTime(time);
TTimeIntervalMinutes aInterval(1);
aLaterTime+=(aInterval);
//Set the directory timestamp to be 'new'
theFS.SetModified(ptrMimeDir, aLaterTime);
// Create file mime_content000.canyoutell with html content and 'new' time
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KHtmlContent, aLaterTime);
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result1 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result1->Count();
TEST(count == 1);
}
//Change file content to text and set the timestamp to 'old'
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KTextContent, time);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.12.0"));
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result2 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result2->Count();
TEST(count == 0);
}
//Delete file
utils.DeleteFileL(_L("c:\\system\\data\\Mimepath\\mime_content000.canyoutell"));
//Remove test directory
DeleteDirL(&utils, ptrMimeDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils);//utils
CleanupStack::PopAndDestroy(result2);//result1
CleanupStack::PopAndDestroy(result1);//result2
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest10L
@SYMPREQ 699
@SYMREQ 3898 3899
@SYMTestCaseDesc Test PREQ699.13.0 Validates cache functionality with older timestamp.
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Recognize a directory. Change the timestamp on one file to be older and alter
the mime type. Change the timestamp on the directory to be newer. Repeat the
directory recognition and ensure that the mime type has been updated..
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for html file creation
count = 1 CDataRecognitionResultArray::Count returns one entry of MIME type "text/html"
status = KErrNone for file content changed to text
count = 0 CDataRecognitionResultArray::Count returns zero entries of MIME type "text/html"
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest10L(RApaLsSession& aLs)
{
TBufC<50> mimeDir(KMimeDir);
TPtr ptrMimeDir (mimeDir.Des());
TBufC<50> mimeFile(KMimeFile);
TPtr ptrMimeFile(mimeFile.Des());
//Asynchronous folder file recognition Test Group 13
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directory for test files
CreateDirL(&utils, ptrMimeDir);
//Timestamp details for files
TTime time;
time.UniversalTime();
TTime aLaterTime(time);
TTimeIntervalMinutes aInterval(1);
aLaterTime+=(aInterval);
//Set the directory timestamp to be 'old'
theFS.SetModified(ptrMimeDir, time);
// Create file mime_content000.canyoutell with html content and 'old' time
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KHtmlContent, time);
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result1 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result1->Count();
TEST(count == 1);
}
//Change file content to text and set the timestamp to 'new'
//Change dir timestamp to 'old'
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KTextContent, aLaterTime);
//Set the directory timestamp to be 'new'
theFS.SetModified(ptrMimeDir, aLaterTime);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.13.0"));
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result2 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result2->Count();
TEST(count == 0);
}
//Delete file
utils.DeleteFileL(_L("c:\\system\\data\\Mimepath\\mime_content000.canyoutell"));
//Remove test directory
DeleteDirL(&utils, ptrMimeDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils);//utils
CleanupStack::PopAndDestroy(result2);//result1
CleanupStack::PopAndDestroy(result1);//result2
CleanupStack::PopAndDestroy(active);//active
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest11L
@SYMPREQ 699
@SYMREQ 3989 3899
@SYMTestCaseDesc Test PREQ699.14.0 Validates cache functionality with substituted directory
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Recognize a directory. Substitute a directory of the same name with
different contents and repeat the recognition. Ensure that the file
contents are correctly listed.
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for file creation
count = 4 CDataRecognitionResultArray::Count returns four entries of MIME type "text/html"
status = KErrNone for file content changed to text
count = 2 CDataRecognitionResultArray::Count returns two entries of MIME type "text/html"
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest11L(RApaLsSession& aLs)
{
_LIT(KMimeDir1,"c:\\system\\data\\Mimepath1\\");
_LIT(KMimeDir2,"c:\\system\\data\\Mimepath2\\");
_LIT(KMimeDir1Html,"c:\\system\\data\\Mimepath1\\dir1_html");
_LIT(KMimeDir1Text,"c:\\system\\data\\Mimepath1\\dir1_text");
_LIT(KMimeDir2Html,"c:\\system\\data\\Mimepath2\\dir2_html");
_LIT(KMimeDir2Text,"c:\\system\\data\\Mimepath2\\dir2_text");
//After directory renaming
_LIT(KRenameHtml,"c:\\system\\data\\Mimepath1\\dir2_html");
_LIT(KRenameText,"c:\\system\\data\\Mimepath1\\dir2_text");
TBufC<50> mimeDir1(KMimeDir1);
TPtr ptrMimeDir1 (mimeDir1.Des());
TBufC<50> mimeDir2(KMimeDir2);
TPtr ptrMimeDir2 (mimeDir2.Des());
TBufC<50> mimeDir1Html(KMimeDir1Html);
TPtr ptrFile1x4(mimeDir1Html.Des());
TBufC<50> mimeDir1Text(KMimeDir1Text);
TPtr ptrFile1x2(mimeDir1Text.Des());
TBufC<50> mimeDir2Html(KMimeDir2Html);
TPtr ptrFile2x2(mimeDir2Html.Des());
TBufC<50> mimeDir2Text(KMimeDir2Text);
TPtr ptrFile2x4(mimeDir2Text.Des());
TBufC<50> renameText(KRenameText);
TPtr ptrRenameText(renameText.Des());
TBufC<50> renameHtml(KRenameHtml);
TPtr ptrRenameHtml(renameHtml.Des());
//"Asynchronous folder file recognition Test Group 14
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directories for test files
CreateDirL(&utils, ptrMimeDir1);
CreateDirL(&utils, ptrMimeDir2);
//Timestamp details for files
TTime time;
time.UniversalTime();
TTime aLaterTime(time);
TTimeIntervalMinutes aInterval(1);
aLaterTime+=(aInterval);
// Fill the first directory with files
// Create files dir1_html000.html - dir1_html003.html with html content
// Create files dir1_text000.txt - dir1_text001.txt with text content
CreateFilesL(theFS, file, ptrFile1x4, (TDesC&)KSuffixHtml, 4, KHtmlContent, time);
CreateFilesL(theFS, file, ptrFile1x2, (TDesC&)KSuffixText, 2, KTextContent, time);
// Fill the second directory with files
// Create files dir2_text000.txt - dir2_text003.txt with text content
// Create files dir2_html001.html - dir2_html002.html with html content
CreateFilesL(theFS, file, ptrFile2x4, (TDesC&)KSuffixText, 4, KTextContent, time);
CreateFilesL(theFS, file, ptrFile2x2, (TDesC&)KSuffixHtml, 2, KHtmlContent, time);
//Test RecognizeFilesL on first directory with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir1,_L8("text/html"), *result1 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result1->Count();
TEST(count == 4);
}
//Delete first directory (KMimeDir1) and rename second directory to be the
//first (KMimeDir2 -> KMimeDir1)
DeleteFilesL(&utils, ptrFile1x4, (TDesC&)KSuffixHtml, 4);
DeleteFilesL(&utils, ptrFile1x2, (TDesC&)KSuffixText, 2);
DeleteDirL(&utils, ptrMimeDir1);
utils.RenameDirectoryL(mimeDir2, mimeDir1);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.14.0"));
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir1,_L8("text/html"), *result2 ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result2->Count();
TEST(count == 2);
}
//Bin out all the remaining created files
DeleteFilesL(&utils, ptrRenameText, (TDesC&)KSuffixText, 4);
DeleteFilesL(&utils, ptrRenameHtml, (TDesC&)KSuffixHtml, 2);
//Remove test directory
DeleteDirL(&utils, ptrMimeDir1);
// Cleanup
CleanupStack::PopAndDestroy(4, active); // utils, result2, result1, active
}
/**
@SYMTestCaseID T_Serv3Step_DoSyncRecognizerTest4L
@SYMPREQ 699
@SYMREQ 3898
@SYMTestCaseDesc Test PREQ699.15.0, PREQ699.15.1 Validates cache performance with a typical directory
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions 1st Recognition - Recognize a directory that has significant file content
with the cache enabled and log the time taken.
15.0 Repeat the recognition on the directory, it should be faster than
the first recognition.
15.1 Alter a number of files and repeat, again logging the time. The time
taken should be faster than the 1st recognition, but slower than test 15.0
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for file creation
15.0 Time taken faster than 1st recognition
15.1 Time taken faster than 1st recognition, but slower than 15.0
*/
void CT_Serv3Step::DoSyncFolderRecognizerTest4L(RApaLsSession& aLs)
{
//Synchronous folder file recognition Test Group 15
_LIT(KTestAppSource, "Z:\\System\\data\\" );
_LIT(KTestAppDest, "C:\\System\\data\\TestPath\\" );
_LIT(KEmpty, "");
_LIT(KTestWaitingForApplistUpdate,"\nWaiting %d microseconds for applist to be updated");
const TInt KApplistUpdateTime = 8000000;
TBufC<128> fileDir(KEmpty);
TPtr ptrFileDir(fileDir.Des());
CDataRecognitionResultArray* result1 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result2 = new(ELeave) CDataRecognitionResultArray();
CDataRecognitionResultArray* result3 = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result1);
CleanupStack::PushL(result2);
CleanupStack::PushL(result3);
RFs theFS;
theFS.Connect();
RFile file;
// Remove Test app from the file system
CFileMan* fileManager = CFileMan::NewL (theFS);
INFO_PRINTF1(_L("Copying the app to C"));
TEST(KErrNone == fileManager->Copy (KTestAppSource, KTestAppDest, CFileMan::EOverWrite ));
INFO_PRINTF2(KTestWaitingForApplistUpdate, KApplistUpdateTime);
User::After(KApplistUpdateTime);
TTime time;
TTime timeLater;
//1st recognition
time.HomeTime();
TInt ret=aLs.RecognizeFilesL(KTestAppDest,*result1);
timeLater.HomeTime();
TEST(ret==KErrNone);
User::LeaveIfError(ret);
TTimeIntervalMicroSeconds delayNoCache = timeLater.MicroSecondsFrom(time);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.15.0"));
time.HomeTime();
ret=aLs.RecognizeFilesL(KTestAppDest,*result2);
timeLater.HomeTime();
TEST(ret==KErrNone);
User::LeaveIfError(ret);
TTimeIntervalMicroSeconds delayCache = timeLater.MicroSecondsFrom(time);
//Modify the timestamps on a few files
TInt count = result1->Count();
for(TInt i=1; i < (count/2); i++)
{
TDataRecognitionResult res;
result1->GetDataRecognitionResultL(res, i);
TFileName fileName;
result1->GetFileNameL(fileName, i);
ptrFileDir.Copy(KTestAppDest);
ptrFileDir.Append(fileName);
time.HomeTime();
theFS.SetModified(ptrFileDir, time);
}
INFO_PRINTF2(KTestWaitingForApplistUpdate, KApplistUpdateTime);
User::After(KApplistUpdateTime);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.15.1"));
time.HomeTime();
ret=aLs.RecognizeFilesL(KTestAppDest,*result3);
timeLater.HomeTime();
TEST(ret==KErrNone);
User::LeaveIfError(ret);
TTimeIntervalMicroSeconds delayCache2 = timeLater.MicroSecondsFrom(time);
#ifndef __WINS__
// On Emulator, these time related checks cannot always be ensured.
TEST(delayCache2 > delayCache);
TEST(delayCache2 < delayNoCache);
#endif
// Cleanup
delete fileManager;
CleanupStack::PopAndDestroy(3, result1); // result3, result2, result1
}
/**
@SYMTestCaseID T_Serv3Step_DoAsyncRecognizerTest13L
@SYMPREQ 699
@SYMREQ 3899
@SYMTestCaseDesc Test PREQ699.17.0 Validates performance of recognition.
@SYMTestPriority High
@SYMTestStatus Not Implemented
@SYMTestActions Call RecognizeFilesL() without a filter on a directory
containing a text file named text.canyoutell
API Calls:\n
RApaLsSession::RecognizeFilesL(const TDesC& aPath,
const TDesC8& aDataType,
CDataRecognitionResultArray& aResult,
TRequestStatus& aStatus);
CDataRecognitionResultArray::CDataRecognitionResultArray();
CDataRecognitionResultArray::Count() const;
@SYMTestExpectedResults\n
status = KErrNone for file creation
count = 1 returned
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest13L(RApaLsSession& aLs)
{
//Asynchronous folder file recognition Test Group 17
TBufC<50> mimeDir(KMimeDir);
TPtr ptrMimeDir (mimeDir.Des());
TBufC<350> mimeFile(KMimeFile);
TPtr ptrMimeFile(mimeFile.Des());
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
RFs theFS;
theFS.Connect();
RFile file;
RSmlTestUtils utils;
CleanupClosePushL(utils);
//Create directory for test files
CreateDirL(&utils, ptrMimeDir);
//Timestamp details for files
TTime time;
time.UniversalTime();
// Create file mime_content000.canyoutell with text content
CreateFilesL(theFS, file, ptrMimeFile, (TDesC&)KSuffixUnknown, 1, KHtmlContent, time);
INFO_PRINTF1(_L("Asynchronous folder file Recognition Test PREQ699.17.0"));
//Test RecognizeFilesL with a MIME type filter "text/html"
aLs.RecognizeFilesL(KMimeDir,_L8("text/html"), *result ,active->iStatus);
active->StartL();//set active
CActiveScheduler::Start();
TEST(active->iStatus==KErrNone);
if (active->iStatus==KErrNone)
{
TUint count = result->Count();
TEST(count == 1);
}
DeleteFilesL(&utils, ptrMimeFile, (TDesC&)KSuffixUnknown, 1);
//Remove test directory
DeleteDirL(&utils, ptrMimeDir);
// Cleanup
CleanupStack::PopAndDestroy(&utils);//utils
CleanupStack::PopAndDestroy(result);//result2
CleanupStack::PopAndDestroy(active);//active
}
/*
@SYMTestCaseID APPFWK-APPARC-0098
@SYMDEF INC125788
@SYMTestCaseDesc The test verify that RApaLsSession::CancelRecognizeFiles() complete TRequestStatus with KErrCancel
that was passed to RApaLsSession::RecognizeFilesL() when cancelling the outstanding async recognition request.
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions
1.RApaLsSession::RecognizeFilesL(const TDesC& aPath, CDataRecognitionResultArray& aResult, TRequestStatus& aStatus)
is called to get data (MIME) types for files in a specified directory.
2.Outstanding async recognition request is cancelled using RApaLsSession::CancelRecognizeFiles().
@SYMTestExpectedResults
RApaLsSession::CancelRecognizeFiles() complete the TRequestStatus with KErrCancel.
*/
void CT_Serv3Step::DoAsyncFolderRecognizerTest14L(RApaLsSession& aLs)
{
//Setup Active Object
CActiveTest2* active = new(ELeave) CActiveTest2();
CleanupStack::PushL(active);
CDataRecognitionResultArray* result = new(ELeave) CDataRecognitionResultArray();
CleanupStack::PushL(result);
//Check results and Stop AS
_LIT(KStandardDir,"z:\\system\\data\\Testpath\\");
INFO_PRINTF1(_L("Asynchronous RecognizeFilesL Test"));
aLs.RecognizeFilesL(KStandardDir,*result,active->iStatus);
active->StartL();//set active
TEST(active->iStatus==KRequestPending);
INFO_PRINTF2(_L("RecognizeFilesL: iStatus = %d\n"), active->iStatus.Int());
aLs.CancelRecognizeFiles();
TEST(active->iStatus==KErrCancel);
INFO_PRINTF2(_L("CancelRecognizeFiles: iStatus = %d\n"), active->iStatus.Int());
CActiveScheduler::Start();
// Cleanup
CleanupStack::PopAndDestroy(result);//result
CleanupStack::PopAndDestroy(active);//active
}
/**
* Auxiliary Fn for the entire Test Step
*
* This method initiates all the tests.
*
*/
TInt CT_Serv3Step::DoServComTestL()
{
INFO_PRINTF1(_L("Testing Server Com"));
RFs theServFs;
TInt ret = theServFs.Connect();
TEST(ret==KErrNone);
CleanupClosePushL(theServFs);
RTestableApaLsSession ls;
ret = ls.Connect();
TEST(ret==KErrNone);
CleanupClosePushL(ls);
//wait for CExtrasAppKeyLayout to open up a RApaLsSession so it doesn't mess with our result
//unsure why it affects this test but not the others
User::After(10000000);
HEAP_TEST_LS_SESSION(ls, 0, 0, DoSyncFolderRecognizerTest1L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoSyncFolderRecognizerTest2L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoSyncFolderRecognizerTest3L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest1L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest2L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest3L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest4L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest5L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest6L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest7L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest8L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest9L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest10L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest11L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoSyncFolderRecognizerTest4L(ls), ls.FlushRecognitionCache() );
HEAP_TEST_LS_SESSION(ls, 0, 0, DoAsyncFolderRecognizerTest13L(ls), ls.FlushRecognitionCache() );
//DONT_CHECK Skips the heap check at server side. This heap imbalance occurs randomly in server side
// while canceling the outstanding async request.
HEAP_TEST_LS_SESSION(ls, 0, DONT_CHECK, DoAsyncFolderRecognizerTest14L(ls), ls.FlushRecognitionCache() );
CleanupStack::PopAndDestroy(&ls);
// close the server session and we have done some type store reloading
CleanupStack::PopAndDestroy(&theServFs);
return KErrNone;
}
TVerdict CT_Serv3Step::doTestStepPreambleL()
/**
* @return - TVerdict code
* Override of base class virtual
*/
{
SetTestStepResult(EPass);
return TestStepResult();
}
TVerdict CT_Serv3Step::doTestStepPostambleL()
/**
* @return - TVerdict code
* Override of base class virtual
*/
{
return TestStepResult();
}
void CT_Serv3Step::CreateDirL(RSmlTestUtils* aPtrUtils, TPtr aDirName)
{
User::LeaveIfError(aPtrUtils->Connect());
aPtrUtils->CreateDirectoryL(aDirName);
//Delay required to prevent armv5 failure
const TInt KApplistUpdateTime = 800000;
User::After(KApplistUpdateTime);
}
void CT_Serv3Step::CreateFilesL(RFs& aFS, RFile& aFile, TPtr aFileRoot, TDesC& aSuffix, TInt aFileNumber, const TDesC8& aFileContent, TTime aTime = 0)
{
if(aTime == 0)
{
aTime.UniversalTime();
}
for(TInt counter=0; counter<aFileNumber; counter++)
{
aFileRoot.AppendNumFixedWidth(counter, EDecimal, KFixedNumWidth);
aFileRoot.Append(aSuffix);
//Creates a file if does not already exist. If file exists,
//content is overwritten
TEST(KErrNone == aFile.Replace(aFS, aFileRoot, EFileWrite));
TEST(KErrNone == aFile.Write(aFileContent));
TEST(KErrNone == aFile.SetModified(aTime));
TEST(KErrNone == aFile.Flush());
aFile.Close();
TInt Length = aFileRoot.Length();
TInt DeleteLength = aSuffix.Length() + KFixedNumWidth;
aFileRoot.Delete( (Length - DeleteLength) , DeleteLength);
}
//Delay required to prevent armv5 failure
const TInt KApplistUpdateTime = 800000;
User::After(KApplistUpdateTime);
}
void CT_Serv3Step::DeleteDirL(RSmlTestUtils* aPtrUtils, TPtr aDirName)
{
aPtrUtils->DeleteDirectoryL(aDirName);
}
void CT_Serv3Step::DeleteFilesL(RSmlTestUtils* aPtrUtils, TPtr aDirName, TDesC& aSuffix, TInt aFileNumber)
{
for(TInt counter=0; counter<aFileNumber; counter++)
{
aDirName.AppendNumFixedWidth(counter, EDecimal, KFixedNumWidth);
aDirName.Append(aSuffix);
aPtrUtils->DeleteFileL(aDirName);
TInt Length = aDirName.Length();
TInt DeleteLength = aSuffix.Length() + KFixedNumWidth;
aDirName.Delete( (Length - DeleteLength) , DeleteLength);
}
}
TVerdict CT_Serv3Step::doTestStepL()
/**
* Override of base class virtual.
* @return - TVerdict code
*/
{
//Set up active scheduler
iActiveScheduler= new(ELeave) CActiveScheduler;
CActiveScheduler::Install(iActiveScheduler);
FbsStartup();
TInt ret = RFbsSession::Connect();
TEST(ret==KErrNone);
// run the testcode (inside an alloc heaven harness)
INFO_PRINTF1(_L("About to start tests:"));
TRAP(ret,DoServComTestL());
INFO_PRINTF2(_L(" DoServComTestL completes with %d"), ret);
TEST(ret==KErrNone);
INFO_PRINTF1(_L("Test Completed!"));
return TestStepResult();
}
/**
*
* Methods for Active Object Test
*
* Used in for Asynchronous Data Recognizer tests
*
*/
CActiveTest2::CActiveTest2()
:CActive(0)
{
CActiveScheduler::Add(this);
}
CActiveTest2::~CActiveTest2()
{
Cancel();
}
void CActiveTest2::DoCancel()
{
TRequestStatus* s=&iStatus;
User::RequestComplete(s, KErrNone);
}
void CActiveTest2::StartL()
{
SetActive();
}
void CActiveTest2::RunL()
{
//Stop AS
CActiveScheduler::Stop();
}