--- /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 <e32test.h>
+#include <e32event.h>
+#include <e32svr.h>
+
+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);
+ }
+