kerneltest/e32test/system/t_console.cpp
changeset 271 dc268b18d709
equal deleted inserted replaced
269:d57b86b1867a 271:dc268b18d709
       
     1 // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // e32test\system\t_console.cpp
       
    15 // Overview:
       
    16 // Test methods of CConsoleBase, CProxyConsole and CColorConsole class.
       
    17 // API Information:
       
    18 // CConsoleBase.
       
    19 // Details:
       
    20 // - Create an object of CTestConsole class which is derived from CColorConsole. 
       
    21 // - Call methods of CColorConsole class with this test object.
       
    22 // - Create a full screen console object of CConsoleBase.
       
    23 // - Call methods of CConsoleBase class with this console object.
       
    24 // Platforms/Drives/Compatibility:
       
    25 // All 
       
    26 // Assumptions/Requirement/Pre-requisites:
       
    27 // Failures and causes:
       
    28 // Base Port information:
       
    29 // 
       
    30 //
       
    31 
       
    32 #define __E32TEST_EXTENSION__
       
    33 
       
    34 #include <e32test.h>
       
    35 #include <e32event.h>
       
    36 #include <e32svr.h>
       
    37 
       
    38 LOCAL_D RTest test(_L("T_CONSOLE"));
       
    39 
       
    40 // Literals
       
    41 _LIT(KTxtTitle,"Console App");
       
    42 _LIT(KTxtNewTitle,"New Console Title");
       
    43 _LIT(KTxtWrite,"Write some text ");
       
    44 _LIT(KTxtPressAnyKey,"Press any key or wait 2 seconds");
       
    45 
       
    46 // This is test class for testing methods of CColorConsoleBase
       
    47 class CTestConsole : public CColorConsoleBase
       
    48     {
       
    49     public:
       
    50     TInt Extension_(TUint aExtensionId, TAny*& a0, TAny* a1)
       
    51         {
       
    52         return CColorConsoleBase::Extension_(aExtensionId, a0, a1);
       
    53         }
       
    54     };
       
    55 
       
    56 // Creates an object of CTestConsole.
       
    57 // Calls methods of CColorConsoleBase 
       
    58 LOCAL_C void InitTestConsoleL()
       
    59     {
       
    60     // create a full screen test console object
       
    61     CTestConsole* testConsole;
       
    62     testConsole = (CTestConsole*)Console::NewL(KTxtTitle, TSize(KConsFullScreen,KConsFullScreen));
       
    63         
       
    64     CleanupStack::PushL(testConsole);
       
    65     
       
    66     // Defines the bold text attribute.
       
    67     testConsole->SetTextAttribute(ETextAttributeBold);
       
    68     testConsole->Write(KTxtWrite);
       
    69     // Defines the inverse text attribute.
       
    70     testConsole->SetTextAttribute(ETextAttributeInverse);
       
    71     testConsole->Write(KTxtWrite);
       
    72     // Defines the highlight text attribute.
       
    73     testConsole->SetTextAttribute(ETextAttributeHighlight);
       
    74     testConsole->Write(KTxtWrite);
       
    75     // Defines the normal text attribute.
       
    76     testConsole->SetTextAttribute(ETextAttributeNormal);
       
    77     testConsole->Write(KTxtWrite);
       
    78 	    
       
    79     TInt a1 = 0;
       
    80     TAny* any = 0;
       
    81     testConsole->Extension_((TUint)a1,any,any);
       
    82     
       
    83     // cleanup and return
       
    84     CleanupStack::PopAndDestroy(); // close console
       
    85     }
       
    86 
       
    87 LOCAL_C void SimulateKeyPress(TStdScanCode aScanCode)
       
    88     {
       
    89     TRawEvent eventDown;
       
    90     eventDown.Set(TRawEvent::EKeyDown, aScanCode);
       
    91     UserSvr::AddEvent(eventDown);
       
    92     TRawEvent eventUp;
       
    93     eventUp.Set(TRawEvent::EKeyUp, aScanCode);
       
    94     UserSvr::AddEvent(eventUp);    
       
    95     }
       
    96 
       
    97 LOCAL_C void ReadConsole(CConsoleBase* aConsole)
       
    98     {
       
    99     aConsole->Printf(KTxtPressAnyKey);
       
   100     
       
   101     TRequestStatus keyStatus;
       
   102     // Gets a keystroke from the console window, asynchronously
       
   103     aConsole->Read(keyStatus);
       
   104     RTimer timer;
       
   105     test_KErrNone(timer.CreateLocal());
       
   106     TRequestStatus timerStatus;
       
   107     timer.After(timerStatus,2*1000000);
       
   108     User::WaitForRequest(timerStatus,keyStatus);
       
   109     if(keyStatus!=KRequestPending)
       
   110         {
       
   111         TKeyCode keyCode = aConsole->KeyCode();
       
   112         aConsole->Printf(_L("Keycode %d\n"),keyCode);
       
   113         }
       
   114     timer.Cancel();
       
   115     // Cancels any outstanding request 
       
   116     aConsole->ReadCancel();
       
   117     User::WaitForAnyRequest();
       
   118     }
       
   119 
       
   120 LOCAL_C void InitConsoleL()
       
   121     {
       
   122     // create a full screen console object
       
   123     CConsoleBase* console;
       
   124     console = Console::NewL(KTxtTitle, TSize(KConsFullScreen,KConsFullScreen));
       
   125       
       
   126     CleanupStack::PushL(console);
       
   127   
       
   128     //Gets the size of the console
       
   129     TSize screenSize = console->ScreenSize();
       
   130     test.Printf(_L("Screen size %d %d\r\n"),screenSize.iWidth,screenSize.iHeight);
       
   131   
       
   132     // Gets the cursor's x-position
       
   133     TInt x = console->WhereX();
       
   134     // Gets the cursor's y-position
       
   135     TInt y = console->WhereY();
       
   136     test_Equal(x, 0);
       
   137     test_Equal(y, 0);
       
   138     test.Printf(_L("**1** Cursor positions x: %d  y: %d\r\n"),x, y);
       
   139   
       
   140     // Sets the cursor's x-position
       
   141     for(TInt i=0; i<4; i++)
       
   142         {
       
   143         console->SetPos(screenSize.iWidth + i);
       
   144         x = console->WhereX();
       
   145         test_Equal(x, screenSize.iWidth -3);
       
   146 		}
       
   147     
       
   148     test.Printf(_L("**2** Cursor positions x: %d  y: %d\r\n"),x, y);
       
   149       
       
   150     // Clears the console and set cursor to position 0,0
       
   151     console->ClearScreen();
       
   152     test_Equal(console->WhereX(), 0);
       
   153 	test_Equal(console->WhereY(), 0);
       
   154         
       
   155     // Sets the cursor's x-position and y-position
       
   156     for(TInt j=0; j<4; j++)
       
   157         {
       
   158         console->SetPos(screenSize.iWidth - j, screenSize.iHeight - j);
       
   159         x = console->WhereX();
       
   160         y = console->WhereY();
       
   161         test_Equal(x, screenSize.iWidth -3);
       
   162 		test_Equal(y, screenSize.iHeight -3);
       
   163 		}
       
   164     test.Printf(_L("**3** Cursor positions x: %d  y: %d\r\n"),x, y);
       
   165      
       
   166     console->SetPos(0,0);
       
   167     x = console->WhereX();
       
   168     y = console->WhereY();
       
   169     test_Equal(x, 0);
       
   170     test_Equal(y, 0);
       
   171 	test.Printf(_L("**4** Cursor positions x: %d  y: %d\r\n"),x, y);
       
   172   
       
   173     console->SetPos(screenSize.iWidth/2,screenSize.iHeight/2);
       
   174     x = console->WhereX();
       
   175     y = console->WhereY();
       
   176     test.Printf(_L("**5** Cursor positions x: %d  y: %d\r\n"),x, y);
       
   177   
       
   178     // Sets the percentage height of the cursor
       
   179     console->SetCursorHeight(50);
       
   180   
       
   181     // Gets the current cursor position relative to the console window
       
   182     TPoint cursorPos = console->CursorPos();
       
   183     test.Printf(_L("CursorPos iX: %d  iY: %d\r\n"),cursorPos.iX, cursorPos.iY);
       
   184     
       
   185     // Puts the cursor at the specified position relative
       
   186     // to the current cursor position
       
   187     TPoint relPos;
       
   188     relPos.iX = screenSize.iWidth/4;
       
   189     relPos.iY = screenSize.iHeight/4;
       
   190     console->SetCursorPosRel(relPos);
       
   191     cursorPos = console->CursorPos();
       
   192     test.Printf(_L("CursorPosRel iX: %d  iY: %d\r\n"),cursorPos.iX, cursorPos.iY);
       
   193   
       
   194     // Puts the cursor at the absolute position in the window
       
   195     cursorPos.iX = screenSize.iWidth/6;
       
   196     cursorPos.iY = screenSize.iHeight/6;
       
   197     console->SetCursorPosAbs(cursorPos);
       
   198     cursorPos = console->CursorPos();
       
   199     test.Printf(_L("CursorPosAbs iX: %d  iY: %d\r\n"),cursorPos.iX, cursorPos.iY);
       
   200   
       
   201     // Sets a new console title
       
   202     console->SetTitle(KTxtNewTitle);
       
   203     // Writes the content of the specified descriptor to the console window
       
   204     console->Write(KTxtWrite);
       
   205     cursorPos.iX = cursorPos.iX + 6;
       
   206     console->SetCursorPosAbs(cursorPos);
       
   207     // Clears the console from the current cursor position to the end of the line
       
   208     console->ClearToEndOfLine();
       
   209     // Clears the console and set cursor to position 0,0
       
   210     console->ClearScreen();
       
   211   
       
   212     TUint keyModifiers = console->KeyModifiers();
       
   213 	test.Printf(_L("keyModifiers %d"),keyModifiers);
       
   214     TKeyCode keyCode = console->KeyCode();
       
   215     ReadConsole(console);
       
   216   
       
   217     SimulateKeyPress(EStdKeyEnter);
       
   218     keyCode = console->Getch();
       
   219   
       
   220     // cleanup and return
       
   221     CleanupStack::PopAndDestroy(); // close console
       
   222     }
       
   223 
       
   224 TInt E32Main()
       
   225 //
       
   226 // 
       
   227 //
       
   228     {
       
   229     test.Title();
       
   230     __UHEAP_MARK;
       
   231 
       
   232     test.Start(_L("Testing Console"));
       
   233     // Get cleanup stack
       
   234     CTrapCleanup* cleanup = CTrapCleanup::New();
       
   235     TInt result = KErrNoMemory;
       
   236     if (cleanup)
       
   237 	    {
       
   238         TRAP(result, InitTestConsoleL());
       
   239 	    TRAP(result, InitConsoleL());
       
   240 	    // Destroy the cleanup stack
       
   241 	    delete cleanup;
       
   242 	    }
       
   243 	__UHEAP_MARKEND;
       
   244 	test.End();
       
   245 	return(result);
       
   246 	}
       
   247