diff -r d57b86b1867a -r dc268b18d709 kerneltest/e32test/system/t_console.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/system/t_console.cpp Wed Sep 22 10:53:45 2010 +0100 @@ -0,0 +1,247 @@ +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// e32test\system\t_console.cpp +// Overview: +// Test methods of CConsoleBase, CProxyConsole and CColorConsole class. +// API Information: +// CConsoleBase. +// Details: +// - Create an object of CTestConsole class which is derived from CColorConsole. +// - Call methods of CColorConsole class with this test object. +// - Create a full screen console object of CConsoleBase. +// - Call methods of CConsoleBase class with this console object. +// Platforms/Drives/Compatibility: +// All +// Assumptions/Requirement/Pre-requisites: +// Failures and causes: +// Base Port information: +// +// + +#define __E32TEST_EXTENSION__ + +#include +#include +#include + +LOCAL_D RTest test(_L("T_CONSOLE")); + +// Literals +_LIT(KTxtTitle,"Console App"); +_LIT(KTxtNewTitle,"New Console Title"); +_LIT(KTxtWrite,"Write some text "); +_LIT(KTxtPressAnyKey,"Press any key or wait 2 seconds"); + +// This is test class for testing methods of CColorConsoleBase +class CTestConsole : public CColorConsoleBase + { + public: + TInt Extension_(TUint aExtensionId, TAny*& a0, TAny* a1) + { + return CColorConsoleBase::Extension_(aExtensionId, a0, a1); + } + }; + +// Creates an object of CTestConsole. +// Calls methods of CColorConsoleBase +LOCAL_C void InitTestConsoleL() + { + // create a full screen test console object + CTestConsole* testConsole; + testConsole = (CTestConsole*)Console::NewL(KTxtTitle, TSize(KConsFullScreen,KConsFullScreen)); + + CleanupStack::PushL(testConsole); + + // Defines the bold text attribute. + testConsole->SetTextAttribute(ETextAttributeBold); + testConsole->Write(KTxtWrite); + // Defines the inverse text attribute. + testConsole->SetTextAttribute(ETextAttributeInverse); + testConsole->Write(KTxtWrite); + // Defines the highlight text attribute. + testConsole->SetTextAttribute(ETextAttributeHighlight); + testConsole->Write(KTxtWrite); + // Defines the normal text attribute. + testConsole->SetTextAttribute(ETextAttributeNormal); + testConsole->Write(KTxtWrite); + + TInt a1 = 0; + TAny* any = 0; + testConsole->Extension_((TUint)a1,any,any); + + // cleanup and return + CleanupStack::PopAndDestroy(); // close console + } + +LOCAL_C void SimulateKeyPress(TStdScanCode aScanCode) + { + TRawEvent eventDown; + eventDown.Set(TRawEvent::EKeyDown, aScanCode); + UserSvr::AddEvent(eventDown); + TRawEvent eventUp; + eventUp.Set(TRawEvent::EKeyUp, aScanCode); + UserSvr::AddEvent(eventUp); + } + +LOCAL_C void ReadConsole(CConsoleBase* aConsole) + { + aConsole->Printf(KTxtPressAnyKey); + + TRequestStatus keyStatus; + // Gets a keystroke from the console window, asynchronously + aConsole->Read(keyStatus); + RTimer timer; + test_KErrNone(timer.CreateLocal()); + TRequestStatus timerStatus; + timer.After(timerStatus,2*1000000); + User::WaitForRequest(timerStatus,keyStatus); + if(keyStatus!=KRequestPending) + { + TKeyCode keyCode = aConsole->KeyCode(); + aConsole->Printf(_L("Keycode %d\n"),keyCode); + } + timer.Cancel(); + // Cancels any outstanding request + aConsole->ReadCancel(); + User::WaitForAnyRequest(); + } + +LOCAL_C void InitConsoleL() + { + // create a full screen console object + CConsoleBase* console; + console = Console::NewL(KTxtTitle, TSize(KConsFullScreen,KConsFullScreen)); + + CleanupStack::PushL(console); + + //Gets the size of the console + TSize screenSize = console->ScreenSize(); + test.Printf(_L("Screen size %d %d\r\n"),screenSize.iWidth,screenSize.iHeight); + + // Gets the cursor's x-position + TInt x = console->WhereX(); + // Gets the cursor's y-position + TInt y = console->WhereY(); + test_Equal(x, 0); + test_Equal(y, 0); + test.Printf(_L("**1** Cursor positions x: %d y: %d\r\n"),x, y); + + // Sets the cursor's x-position + for(TInt i=0; i<4; i++) + { + console->SetPos(screenSize.iWidth + i); + x = console->WhereX(); + test_Equal(x, screenSize.iWidth -3); + } + + test.Printf(_L("**2** Cursor positions x: %d y: %d\r\n"),x, y); + + // Clears the console and set cursor to position 0,0 + console->ClearScreen(); + test_Equal(console->WhereX(), 0); + test_Equal(console->WhereY(), 0); + + // Sets the cursor's x-position and y-position + for(TInt j=0; j<4; j++) + { + console->SetPos(screenSize.iWidth - j, screenSize.iHeight - j); + x = console->WhereX(); + y = console->WhereY(); + test_Equal(x, screenSize.iWidth -3); + test_Equal(y, screenSize.iHeight -3); + } + test.Printf(_L("**3** Cursor positions x: %d y: %d\r\n"),x, y); + + console->SetPos(0,0); + x = console->WhereX(); + y = console->WhereY(); + test_Equal(x, 0); + test_Equal(y, 0); + test.Printf(_L("**4** Cursor positions x: %d y: %d\r\n"),x, y); + + console->SetPos(screenSize.iWidth/2,screenSize.iHeight/2); + x = console->WhereX(); + y = console->WhereY(); + test.Printf(_L("**5** Cursor positions x: %d y: %d\r\n"),x, y); + + // Sets the percentage height of the cursor + console->SetCursorHeight(50); + + // Gets the current cursor position relative to the console window + TPoint cursorPos = console->CursorPos(); + test.Printf(_L("CursorPos iX: %d iY: %d\r\n"),cursorPos.iX, cursorPos.iY); + + // Puts the cursor at the specified position relative + // to the current cursor position + TPoint relPos; + relPos.iX = screenSize.iWidth/4; + relPos.iY = screenSize.iHeight/4; + console->SetCursorPosRel(relPos); + cursorPos = console->CursorPos(); + test.Printf(_L("CursorPosRel iX: %d iY: %d\r\n"),cursorPos.iX, cursorPos.iY); + + // Puts the cursor at the absolute position in the window + cursorPos.iX = screenSize.iWidth/6; + cursorPos.iY = screenSize.iHeight/6; + console->SetCursorPosAbs(cursorPos); + cursorPos = console->CursorPos(); + test.Printf(_L("CursorPosAbs iX: %d iY: %d\r\n"),cursorPos.iX, cursorPos.iY); + + // Sets a new console title + console->SetTitle(KTxtNewTitle); + // Writes the content of the specified descriptor to the console window + console->Write(KTxtWrite); + cursorPos.iX = cursorPos.iX + 6; + console->SetCursorPosAbs(cursorPos); + // Clears the console from the current cursor position to the end of the line + console->ClearToEndOfLine(); + // Clears the console and set cursor to position 0,0 + console->ClearScreen(); + + TUint keyModifiers = console->KeyModifiers(); + test.Printf(_L("keyModifiers %d"),keyModifiers); + TKeyCode keyCode = console->KeyCode(); + ReadConsole(console); + + SimulateKeyPress(EStdKeyEnter); + keyCode = console->Getch(); + + // cleanup and return + CleanupStack::PopAndDestroy(); // close console + } + +TInt E32Main() +// +// +// + { + test.Title(); + __UHEAP_MARK; + + test.Start(_L("Testing Console")); + // Get cleanup stack + CTrapCleanup* cleanup = CTrapCleanup::New(); + TInt result = KErrNoMemory; + if (cleanup) + { + TRAP(result, InitTestConsoleL()); + TRAP(result, InitConsoleL()); + // Destroy the cleanup stack + delete cleanup; + } + __UHEAP_MARKEND; + test.End(); + return(result); + } +