symhelp/helpmodel/tsrc/tcontext.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:15:23 +0200
changeset 0 1f04cf54edd8
permissions -rw-r--r--
Revision: 201004

// Copyright (c) 2003-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 Context module
// 
//

#pragma message(__FILE__ "(1) : NOTE: Requires TContext.dat in the help directory")

// System includes
#include <e32test.h>
#include <f32file.h>
#include <coehelp.h>

// User includes
#include "hlpmodel.h"

// Globals
static RFs					TheFs;
static RTest				TheTest(_L("TCONTEXT - Test context sensitive searching in help model"));
static CTrapCleanup*		TheTrapCleanup;
static CActiveScheduler*	TheScheduler;

// Constants
const TInt KTestCleanupStack=0x20;


class CHelpTester : public CBase, public MHlpModelObserver
	{
public:
	CHelpTester();
	~CHelpTester();
	void ConstructL();

public:
	void Test1L();

public: // from MHlpModelObserver
	void HandleModelEventL(TInt aEvent);

private:
	TInt iLastResponse;
	CHlpModel* iModel;
	};


CHelpTester::CHelpTester()
	{
	}

CHelpTester::~CHelpTester()
	{
	delete iModel;
	}

void CHelpTester::ConstructL()
	{
	iModel = CHlpModel::NewL(TheFs, this);
	}

/**
@SYMTestCaseID PIM-TCONTEXT-0001
*/	
void CHelpTester::Test1L()
	{
	TheTest.Next(_L("@SYMTestCaseID PIM-TCONTEXT-0001 Test 1: Test category searching"));
	
	iModel->OpenL();

	// Create a context that we know exists
	TCoeContextName contextName(_L("A_Remove_dialog"));
	TUid contextUid = {268450396};
	TCoeHelpContext context(contextUid, contextName);

	// Request a search on the context
	iModel->ContextSearchL(context);
	
	// Check that the response is "Found"
	TheTest(iLastResponse == ETopicAvailable);

	// Now get the topic text
	CHlpTopic* topic = CHlpTopic::NewLC();
	TRAPD(error, iModel->LoadTopicL(topic));
	TheTest(error == KErrNone);
	CleanupStack::PopAndDestroy(); // topic
	
	// Create a context that we know doesn't exists
	contextName = _L("SomeSymbianTopic");
	contextUid.iUid = 123456789;
	TCoeHelpContext missingContext(contextUid, contextName);

	// Request a search on the context
	iModel->ContextSearchL(missingContext);
	
	// Check that the response is "Found"
	TheTest(iLastResponse == ETopicNotFound);
	
	iModel->CloseL();
	}

void CHelpTester::HandleModelEventL(TInt aEvent)
	{
	// Just store the last event reported by the model so that we
	// can test against it in the actual test.
	iLastResponse = aEvent;
	}






static void DoTestL()
	{
	CHelpTester* tester = new(ELeave) CHelpTester();
	CleanupStack::PushL(tester);
	tester->ConstructL();
	tester->Test1L();
	CleanupStack::PopAndDestroy();
	}

static void setupFileServerAndSchedulerL()
//
// Initialise the cleanup stack.
//
	{
	TheTest(TheFs.Connect() == KErrNone);
	TheScheduler = new (ELeave) CActiveScheduler;
	CActiveScheduler::Install(TheScheduler);
	}


static void setupCleanup()
//
// Initialise the cleanup stack.
//
    {
	TheTrapCleanup = CTrapCleanup::New();
	TheTest(TheTrapCleanup!=NULL);
	TRAPD(r,\
		{\
		for (TInt i=KTestCleanupStack;i>0;i--)\
			CleanupStack::PushL((TAny*)0);\
		CleanupStack::Pop(KTestCleanupStack);\
		});
	TheTest(r==KErrNone);
	}

GLDEF_C TInt E32Main()
//
// Test Help Model API
//
    {
	__UHEAP_MARK;

	TheTest.Title();
	setupCleanup();

	TRAPD(r, 
			setupFileServerAndSchedulerL();
			DoTestL();
		);
	TheTest(r==KErrNone);

	delete TheScheduler;
	delete TheTrapCleanup;
	TheFs.Close();
	TheTest.Close();

	__UHEAP_MARKEND;
	return KErrNone;
    }