lafagnosticuifoundation/cone/tef/statecon.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/cone/tef/statecon.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,227 @@
+// Copyright (c) 2007-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
+ @test
+*/
+
+#include "statecon.h"
+#include "tconestateobs.h"
+
+const TFontSpec CStateObserverControl::iFontSpec(KFontName,256);
+
+
+/**
+   Set up the control
+ */
+void CStateObserverControl::ConstructL()
+	{
+	TSize scrSize(iCoeEnv->ScreenDevice()->SizeInPixels());
+	SetExtent(TPoint(scrSize.iWidth/4,0),TSize(scrSize.iWidth-scrSize.iWidth/4,scrSize.iHeight));
+	CreateWindowL();
+	Window().SetBackgroundColor(TRgb(85,85,255));	//Bright Blue
+	ActivateL();
+	iFont=iCoeEnv->CreateScreenFontL(iFontSpec);
+	//iCoeEnv->WsSession().LogCommand(RWsSession::ELoggingStatusDump);		//Useful for debugging window creation problems
+	DrawNow();
+	Flush();
+	iShouldBeVisible=ETrue;	//Initial State
+	iShouldBeDimmed=EFalse;	//Initial State
+	}
+
+/**
+   Delete the controls resources
+ */
+CStateObserverControl::~CStateObserverControl()
+	{
+	iCoeEnv->ReleaseScreenFont(iFont);
+	}
+
+/**
+   Set which interface should be recieving events
+ */
+void CStateObserverControl::SetRecievers(TBool aControlRecieving,TBool aCoeEnvRecieving)
+	{
+	iControlRecieving=aControlRecieving;
+	iCoeEnvRecieving=aCoeEnvRecieving;
+	}
+
+/**
+   Reset the control counts so that a new test can be run
+ */
+void CStateObserverControl::ResetCount()
+	{
+	iTestNo=0;
+	DrawNow();
+	Flush();
+	iLastCalled=0;
+	iFailAt=0;
+	}
+
+/**
+   Draw the controls window
+ */
+void CStateObserverControl::Draw(const TRect& aRect) const
+	{
+	_LIT(KString1,"Win ");
+	_LIT(KString2,"Faded");
+	_LIT(KString3,"Not Faded");
+	_LIT(KString4,", Subtest %d");
+	TBuf<32> buf;
+	buf.Copy(KString1);
+	buf.Append(IsDimmed()?KString2():KString3());
+	if (iTestNo>0)
+		buf.AppendFormat(KString4,iTestNo);
+	TRect rect(aRect);
+	const TSize size(aRect.Size());
+	rect.Shrink(size.iWidth/5,size.iHeight/5);
+	CWindowGc& gc=SystemGc();
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(TRgb(85,255,85));	//Bright Green
+	gc.DrawRect(rect);
+	gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+	gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(TRgb(255,85,85));	//Bright Red
+	gc.UseFont(iFont);
+	gc.DrawText(buf,TPoint(rect.iTl.iX+20,aRect.Height()/2));
+	gc.DiscardFont();
+	}
+
+/**
+   Set the control's and windows dimmed state
+ */
+void CStateObserverControl::DoSetDimmed(TBool aDimmed)
+	{
+	Window().SetFaded(aDimmed,RWindowTreeNode::EFadeWindowOnly,0,127);
+	SetDimmed(aDimmed);
+	}
+
+/**
+   Run a set of tests on the control
+ */
+TInt CStateObserverControl::DoTest()
+	{
+	EnableReportControlStateChange(ETrue);
+	DoTestStep(MCoeControlStateObserver::EStateDimmed,ETrue);
+	DoTestStep(MCoeControlStateObserver::EStateVisibility,EFalse);
+	DoTestStep(MCoeControlStateObserver::EStateVisibility,ETrue);
+	DoTestStep(MCoeControlStateObserver::EStateDimmed,ETrue);
+	DoTestStep(MCoeControlStateObserver::EStateDimmed,EFalse);
+	DoTestStep(MCoeControlStateObserver::EStateDimmed,EFalse);
+	DoTestStep(MCoeControlStateObserver::EStateVisibility,ETrue);
+	DoTestStep(MCoeControlStateObserver::EStateVisibility,EFalse);
+	DoTestStep(MCoeControlStateObserver::EStateVisibility,EFalse);
+	DoTestStep(MCoeControlStateObserver::EStateDimmed,ETrue);
+	DoTestStep(MCoeControlStateObserver::EStateDimmed,EFalse);
+	DoTestStep(MCoeControlStateObserver::EStateVisibility,ETrue);
+	EnableReportControlStateChange(EFalse);
+	return iFailAt;
+	}
+
+void CStateObserverControl::Failed()
+	{
+	if (!iFailAt)
+		iFailAt=iTestNo;
+	}
+
+/**
+   Run a particular test on the control
+ */
+void CStateObserverControl::DoTestStep(MCoeControlStateObserver::TCoeState aStateToChange,TBool aNewState)
+	{
+	++iTestNo;
+	iCntCalled=EFalse;
+	iEnvCalled=EFalse;
+	iExpectedChange=aStateToChange;
+	if (iExpectedChange==MCoeControlStateObserver::EStateVisibility)
+		{
+		iNoChange=(iShouldBeVisible==aNewState);
+		iShouldBeVisible=aNewState;
+		MakeVisible(aNewState);
+		}
+	else
+		{
+		iNoChange=(iShouldBeDimmed==aNewState);
+		iShouldBeDimmed=aNewState;
+		DoSetDimmed(aNewState);
+		}
+	if (IsVisible())
+		DrawNow();
+	Flush();
+	//Test to see that either
+	//the control changed its state (iNoChange==EFalse) and function were called (iLastCalled==iTestNo) OR
+	//the control state was unchanged (iNoChange==ETrue) and function was not called (iLastCalled<iTestNo)
+	if ((iLastCalled!=iTestNo)==(!iNoChange))
+		Failed();
+	}
+
+/**
+   Handles calls to the Mop interface on this control
+ */
+TInt CStateObserverControl::HandleControlStateChange(CCoeControl* aControl,MCoeControlStateObserver::TCoeState aState)
+	{
+	TestFail(!iControlRecieving,aControl,aState,iCntCalled);
+	return KErrNone;
+	}
+
+/**
+   Handles calls to the Mop interface on the control enviroment
+ */
+TInt CStateObserverControl::ControlStateChangePassOn(CCoeControl* aControl,MCoeControlStateObserver::TCoeState aState)
+	{
+	TestFail(!iCoeEnvRecieving,aControl,aState,iEnvCalled);
+	return KErrNone;
+	}
+
+/**
+   Check if calls to the Mop interface are correct
+ */
+void CStateObserverControl::TestFail(TBool aNotGetting,CCoeControl* aControl
+							,MCoeControlStateObserver::TCoeState aState,TBool& aCalled)
+	{
+	iLastCalled=iTestNo;
+	//Check to see that:
+	//The observer function hasn't been called before [aCalled=EFalse]
+	//That we should be receiving calls [aNotGetting=EFalse]
+	//That the control state has actually changed [iNoChange=EFalse]
+	//The right control changed it's state [aControl==this]
+	//The right state of the control changes [aState==iExpectedChange]
+	//The control if dimmed or not if it should be [iShouldBeDimmed==IsDimmed()]
+	//The control if visible or not if it should be [iShouldBeVisible==IsVisible()]
+	if (aCalled || aNotGetting || iNoChange || aControl!=this || aState!=iExpectedChange
+						|| !iShouldBeDimmed!=!IsDimmed() || !iShouldBeVisible!=!IsVisible())
+		Failed();
+	aCalled=ETrue;
+	}
+
+/**
+   Returns a Mop interface
+ */
+TTypeUid::Ptr CStateObserverControl::MopSupplyObject(TTypeUid aId)
+	{
+	switch (iRetObserver)
+		{
+	case EObserver:
+		if (aId.iUid==MCoeControlStateObserver::ETypeId)
+			return aId.MakePtr(static_cast<MCoeControlStateObserver*>(this));
+		break;
+	case ECoeEnvObserver:
+		return iEnv->MopSupplyObject(aId);
+	default:;
+		}
+	return CCoeControl::MopSupplyObject(aId);
+	}