plugins/contacts/symbian/contactsmodel/tsrc/cntplsql/src/t_cpcskeymap.cpp
changeset 0 876b1a06bc25
child 5 603d3f8b6302
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/contacts/symbian/contactsmodel/tsrc/cntplsql/src/t_cpcskeymap.cpp	Wed Aug 25 15:49:42 2010 +0300
@@ -0,0 +1,487 @@
+/*
+* Copyright (c) 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:  Unit test class for testing C12keyKeyMap
+*
+*/
+
+// INTERNAL INCLUDES
+#include "t_cpcskeymap.h"
+#include "c12keykeymap.h"
+#include <QString>
+#include <QTextCodec>
+
+// SYSTEM INCLUDES
+#include <digia/eunit/eunitmacros.h>
+#if defined(USE_ORBIT_KEYMAP)
+#include <hbinputkeymapfactory.h>
+#endif
+
+
+// 10.1 wk12 SDK's Thai keymap does not map anything to *,# keys
+// so must use either a hardcoded keymap, or replace the SDK's keymap
+// with a newer one by copying the keymap file 120.txt to
+// \epoc32\release\winscw\udeb\z\resource\keymaps
+
+/* New Thai keymap, not yet present in the wk12 SDK
+1   x0E01\x0E02\x0E03\x0E04\x0E05\x0031\t\x0E01\x0E02\x0E03\x0E04\x0E05\x0031"
+2   x0E06\x0E07\x0E08\x0E09\x0032\t\x0E06\x0E07\x0E08\x0E09\x0032"
+3   x0E0A\x0E0B\x0E0C\x0E0D\x0033\t\x0E0A\x0E0B\x0E0C\x0E0D\x0033"
+4   x0E0E\x0E0F\x0E10\x0E11\x0E12\x0E13\x0034\t\x0E0E\x0E0F\x0E10\x0E11\x0E12\x0E13\x0034"
+5   x0E14\x0E15\x0E16\x0E17\x0E18\x0035\t\x0E14\x0E15\x0E16\x0E17\x0E18\x0035"
+6   x0E19\x0E1A\x0E1B\x0E1C\x0E1D\x0036\t\x0E19\x0E1A\x0E1B\x0E1C\x0E1D\x0036"
+7   x0E1E\x0E1F\x0E20\x0E21\x0E22\x0037\t\x0E1E\x0E1F\x0E20\x0E21\x0E22\x0037"
+8   x0E23\x0E24\x0E25\x0E26\x0E27\x0E28\x0E29\x0038\t\x0E23\x0E24\x0E25\x0E26\x0E27\x0E28\x0E29\x0038"
+9   x0E2A\x0E2B\x0E2C\x0E2D\x0E2E\x0039\t\x0E2A\x0E2B\x0E2C\x0E2D\x0E2E\x0039"
+0   0\x21B2\t 0\x21B2"
+*   x0E2F\x0E3F\x0E31\x0E34\x0E35\x0E36\x0E37\x0E38\x0E39\x0E46\x0E47\x0E48\x0E49\x0E4A\x0E4B\x0E4C\t\x0E2F\x0E3F\x0E31\x0E34\x0E35\x0E36\x0E37\x0E38\x0E39\x0E46\x0E47\x0E48\x0E49\x0E4A\x0E4B\x0E4C"
+#   x0E30\x0E32\x0E33\x0E40\x0E41\x0E42\x0E43\x0E44\t\x0E30\x0E32\x0E33\x0E40\x0E41\x0E42\x0E43\x0E44" */
+const TChar KThaiChar0 = 0x21B2; // char from key-0
+const TChar KThaiChar1 = 0x0E05; // char from key-1
+const TChar KThaiChar2 = 0x0E06; // char from key-2
+const TChar KThaiChar3 = 0x0E0A; // char from key-3
+const TChar KThaiChar4 = 0x0E0E; // char from key-4
+const TChar KThaiChar5 = 0x0E14; // char from key-5
+const TChar KThaiChar6 = 0x0E19; // char from key-6
+const TChar KThaiChar7 = 0x0E1E; // char from key-7
+const TChar KThaiChar8 = 0x0E23; // char from key-8
+const TChar KThaiChar9 = 0x0E2A; // char from key-9
+const TChar KThaiChar10 = 0x0E34; // char from key-*
+const TChar KThaiChar11 = 0x0E41; // char from key-#
+
+    
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::NewL
+// -----------------------------------------------------------------------------
+//
+UT_CPcsKeyMap* UT_CPcsKeyMap::NewL()
+    {
+    UT_CPcsKeyMap* self = UT_CPcsKeyMap::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::NewLC
+// -----------------------------------------------------------------------------
+//
+UT_CPcsKeyMap* UT_CPcsKeyMap::NewLC()
+    {
+    UT_CPcsKeyMap* self = new( ELeave ) UT_CPcsKeyMap();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::~UT_CPcsKeyMap
+// -----------------------------------------------------------------------------
+//
+UT_CPcsKeyMap::~UT_CPcsKeyMap()
+    {
+    delete iKeyMap;
+    iKeyMap = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_CPcsKeyMap
+// -----------------------------------------------------------------------------
+//
+UT_CPcsKeyMap::UT_CPcsKeyMap()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::ConstructL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    
+    
+    // When instantiating keymap was moved to here, it removed a resource leak.
+    iKeyMap = C12keyKeyMap::NewL();
+    
+    
+    
+    // EUnit shows that the first call to Thai text codec's canEncode() leaks
+    // 10 cells. That's why we call canEncode() here, so when the actual test
+    // calls canEncode(), the leak no longer happens.
+    const int KThaiLanguage = 2259; // Thai Industrial Standards Institute
+    QTextCodec* thaiCodec = QTextCodec::codecForMib(KThaiLanguage);
+    if (thaiCodec)
+        {
+        thaiCodec->canEncode('a');
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::SetupL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::SetupL()
+    {
+#if defined(USE_ORBIT_KEYMAP)
+    // Create singleton outside actual test cases so that it is not treated as
+    // resource leak, since it can't be deleted.
+    HbKeymapFactory::instance();
+#endif
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::Teardown
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::Teardown()
+    {
+    }
+
+
+// TEST CASES
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_NewLL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_NewLL()
+    {
+#if defined(USE_ORBIT_KEYMAP)
+	// Must be same as in c12keykeymap.cpp
+	const TInt KAmountOfKeys = 12;
+
+    // Each numeric key has been mapped
+    EUNIT_ASSERT_EQUALS( KAmountOfKeys, iKeyMap->iKeyMapping.count() );
+    for (TInt i = 0; i < KAmountOfKeys; ++i)
+        {
+        EUNIT_ASSERT( iKeyMap->iKeyMapping.at(i).length() > 0 );
+        }
+#endif
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringL()
+	{
+	_LIT( KAlpha, "abjqmca" );
+	_LIT( KNumeric, "2257622" );
+	HBufC* numericBuf = iKeyMap->GetMappedStringL( KAlpha );
+	CleanupStack::PushL( numericBuf );
+	EUNIT_ASSERT_EQUALS( *numericBuf, KNumeric );
+	CleanupStack::PopAndDestroy( numericBuf );
+	numericBuf = NULL;
+
+	
+	_LIT( KAlphaOneChar, "m" );
+	_LIT( KNumericOneChar, "6" );
+	numericBuf = iKeyMap->GetMappedStringL( KAlphaOneChar );
+	CleanupStack::PushL( numericBuf );
+	EUNIT_ASSERT_EQUALS( *numericBuf, KNumericOneChar );
+	CleanupStack::PopAndDestroy( numericBuf );
+	numericBuf = NULL;
+	
+
+	_LIT( KAlphaWithSpaces, "kjhgfdsa qwert " );
+	_LIT( KNumericWithSpaces, "55443372 79378 " );
+	numericBuf = iKeyMap->GetMappedStringL( KAlphaWithSpaces );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumericWithSpaces );
+    CleanupStack::PopAndDestroy( numericBuf );
+    
+    
+    _LIT( KAlphaLongString, "adg   1230 0zbzb0 0 e56e101at 00  " );
+    _LIT( KNumericLongString, "234   1230 092920 0 356310128 00  " );
+    numericBuf = iKeyMap->GetMappedStringL( KAlphaLongString );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumericLongString );
+    CleanupStack::PopAndDestroy( numericBuf );
+	}
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringSeparatorL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringSeparatorL()
+    {
+    _LIT( KAlpha, "abjqmca" );
+    _LIT( KNumeric, "2257622" );
+    HBufC* numericBuf = iKeyMap->GetMappedStringL( KAlpha );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumeric );
+    CleanupStack::PopAndDestroy( numericBuf );
+    numericBuf = NULL;
+
+
+    _LIT( KAlphaOneChar, "m" );
+    _LIT( KNumericOneChar, "6" );
+    numericBuf = iKeyMap->GetMappedStringL( KAlphaOneChar );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumericOneChar );
+    CleanupStack::PopAndDestroy( numericBuf );
+    numericBuf = NULL;
+    
+
+    _LIT( KAlphaWithSpaces, " kjh gfdsa qwert " );
+    _LIT( KNumericWithSpaces, " 554 43372 79378 " ); // The leading space remains
+    numericBuf = iKeyMap->GetMappedStringL( KAlphaWithSpaces );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumericWithSpaces );
+    CleanupStack::PopAndDestroy( numericBuf );
+    
+
+    _LIT( KAlphaLongString, "adg   1230 0zbzb0 0 e56e101at 00  " );
+    _LIT( KNumericLongString, "234   1230 092920 0 356310128 00  " );  
+    numericBuf = iKeyMap->GetMappedStringL( KAlphaLongString );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumericLongString );
+    CleanupStack::PopAndDestroy( numericBuf );
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringWithNumbersL
+// Source string contains numbers
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringWithNumbersL()
+    {
+    _LIT( KAlpha, "11098" );
+    _LIT( KNumeric, "11098" );
+    HBufC* numericBuf = iKeyMap->GetMappedStringL( KAlpha );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumeric );
+    CleanupStack::PopAndDestroy(numericBuf);
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringWithSpecialCharactersL
+// Source string contains numbers
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringWithSpecialCharactersL()
+    {
+	_LIT( KAlpha, " +g-*[#5]?t" );
+	_LIT( KNumeric, " a41afb5f18" );
+    HBufC* numericBuf = iKeyMap->GetMappedStringL( KAlpha );
+    CleanupStack::PushL( numericBuf );
+    EUNIT_ASSERT_EQUALS( *numericBuf, KNumeric );
+    CleanupStack::PopAndDestroy(numericBuf);
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringThaiLanguageOneCharL
+// Source string contains one Thai character.
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringThaiLanguageOneCharL()
+    {
+    HBufC* thaiText = HBufC::NewLC(1);
+    TPtr16 p = thaiText->Des();
+    p.Append(KThaiChar2);
+    _LIT(KNumeric, "2");
+    HBufC* numericBuf = iKeyMap->GetMappedStringL(*thaiText);
+    CleanupStack::PopAndDestroy(thaiText);
+    CleanupStack::PushL(numericBuf);
+    EUNIT_ASSERT_EQUALS(*numericBuf, KNumeric);
+    CleanupStack::PopAndDestroy(numericBuf);
+    
+    
+    QString source;
+    QChar thaiChar3(KThaiChar3);
+    QChar thaiChar5(KThaiChar5);
+    source.append(thaiChar3);
+    source.append(thaiChar5);
+    QString result = iKeyMap->GetMappedString(source);
+    EUNIT_ASSERT(result == "35");
+    }
+
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringThaiLanguageL
+// Source string is Thai.
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringThaiLanguageL()
+    {
+    HBufC* thaiText = HBufC::NewLC(20);
+    TPtr16 p = thaiText->Des();
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar1);
+    p.Append(KThaiChar2);
+    p.Append(KThaiChar3);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar4);
+    p.Append(KThaiChar5);
+    p.Append(KThaiChar6);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar7);
+    p.Append(KThaiChar8);
+    p.Append(KThaiChar9);
+    p.Append(KThaiChar11);
+    // For some reason, the Thai text codec indicates KThaiChar0 as invalid
+    // character, so that's why it is not used here.
+
+    _LIT(KNumeric, "123456789"); // keys * and # are skipped from result
+    HBufC* numericBuf = iKeyMap->GetMappedStringL(*thaiText);
+    CleanupStack::PopAndDestroy(thaiText);
+    CleanupStack::PushL(numericBuf);
+
+    EUNIT_ASSERT_EQUALS(*numericBuf, KNumeric);
+    CleanupStack::PopAndDestroy(numericBuf);
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetMappedStringThaiLanguageEmptyResultL
+// Input string only contains characters that map to * and # keys.
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetMappedStringThaiLanguageEmptyResultL()
+    {
+    HBufC* thaiText = HBufC::NewLC(20);
+    TPtr16 p = thaiText->Des();
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar10);
+    p.Append(KThaiChar11);
+    p.Append(KThaiChar10);
+
+    HBufC* numericBuf = iKeyMap->GetMappedStringL(*thaiText);
+    CleanupStack::PopAndDestroy(thaiText);
+    CleanupStack::PushL(numericBuf);
+
+    EUNIT_ASSERT_EQUALS(*numericBuf, KNullDesC);
+    CleanupStack::PopAndDestroy(numericBuf);
+    }
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetNumericLimitsL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetNumericLimitsL()
+	{
+	QString lowerLimit;
+	QString upperLimit;
+	TInt err = iKeyMap->GetNumericLimits("123", lowerLimit, upperLimit);
+	QString expectedLowerLimit("81909218222800895");
+	QString expectedUpperLimit("82190693199511552");
+	EUNIT_ASSERT(lowerLimit == expectedLowerLimit);
+	EUNIT_ASSERT(upperLimit == expectedUpperLimit);
+	}
+
+// -----------------------------------------------------------------------------
+// UT_CPcsKeyMap::UT_GetNumericLimitsLongInputL
+// -----------------------------------------------------------------------------
+//
+void UT_CPcsKeyMap::UT_GetNumericLimitsLongInputL()
+    {
+    QString lowerLimit;
+    QString upperLimit;
+    TInt err = iKeyMap->GetNumericLimits("1234567890ab123456789", lowerLimit, upperLimit);
+    QString expectedLowerLimit("81985529205928226");
+    QString expectedUpperLimit("81985529205928228");
+    EUNIT_ASSERT(lowerLimit == expectedLowerLimit);
+    EUNIT_ASSERT(upperLimit == expectedUpperLimit);
+    }
+
+
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE(
+    UT_CPcsKeyMap,
+    "UT_CPcsKeyMap",
+    "UNIT" )
+
+EUNIT_TEST(
+    "NewL - test ",
+    "UT_CPcsKeyMap",
+    "NewL",
+    "FUNCTIONALITY",
+    SetupL, UT_NewLL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - test ",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - test separator",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringSeparatorL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - test numbers",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringWithNumbersL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - test special characters",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringWithSpecialCharactersL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - Thai, test one character input",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringThaiLanguageOneCharL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - test Thai language",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringThaiLanguageL, Teardown )
+
+EUNIT_TEST(
+    "GetMappedString - Thai, empty result",
+    "UT_CPcsKeyMap",
+    "GetMappedStringL",
+    "FUNCTIONALITY",
+    SetupL, UT_GetMappedStringThaiLanguageEmptyResultL, Teardown )
+
+EUNIT_TEST(
+    "GetNumericLimits",
+    "UT_CPcsKeyMap",
+    "GetNumericLimits",
+    "FUNCTIONALITY",
+    SetupL, UT_GetNumericLimitsL, Teardown )
+
+EUNIT_TEST(
+    "GetNumericLimits - too long input",
+    "UT_CPcsKeyMap",
+    "GetNumericLimits",
+    "FUNCTIONALITY",
+    SetupL, UT_GetNumericLimitsLongInputL, Teardown )
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE