controlpanelplugins/langandregplugin/t_languageplugin/src/t_languageplugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:18:12 +0300
changeset 42 3487b2ea501a
permissions -rw-r--r--
Revision: 201037 Kit: 201039

/*
* 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 "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:  Main test class for Control Panel's Language plugin.
*
*/

#include "t_languageplugin.h"
#include <QtTest/QtTest>
#include <QModelIndex>
#include <hbmainwindow.h>
#include <hbinputsettingproxy.h>
#include <hblocaleutil.h>
#include <hbinpututils.h>
#include <cpsettingformentryitemdataimpl.h>
#include <cpitemdatahelper.h>
#include "cplanguageplugin.h"
#include "extendedlocaleutil.h"
#include "cplanguageview.h"
#include "cplanguagepluginutil.h"

/*!
    Initialize test case.
    Called before each testfunction is executed.
*/
void TestLanguagePlugin::init() 
{   
    mMainWindow = new HbMainWindow();
    QVERIFY(mMainWindow);
    
    mPlugin = new CpLanguagePlugin;
    QVERIFY(mPlugin);
    // Note: we get different values for condition coverage of CpLanguageView()
    // depending on which values have been selected in Control Panel settings. 
	mView = new CpLanguageView();
	QVERIFY(mView);
	
	CpItemDataHelper itemDataHelper;
	QList<CpSettingFormItemData*> itemData = mPlugin->createSettingFormItemData(itemDataHelper); 
	mEntryItemData = qobject_cast<CpSettingFormEntryItemData*>(itemData.front());
}

/*!
    Cleanup test case.
    Called after every testfunction.
*/
void TestLanguagePlugin::cleanup()
{
	delete mView;
	mView = 0;
	
	delete mPlugin;
    mPlugin = 0;  	
    
    delete mEntryItemData;
    mEntryItemData = 0;
    
    delete mMainWindow;
    mMainWindow = 0;
}

/* ---------------------------------------------------------------------------
 * Unit test cases 
 * ---------------------------------------------------------------------------*/

/*!
 *  test CpLanguagePlugin::createSettingFormItemData
 */
void TestLanguagePlugin::test_CpLanguagePlugin_createSettingFormItemData()
{    
	CpItemDataHelper itemDataHelper;
    QList<CpSettingFormItemData*> itemData = mPlugin->createSettingFormItemData(itemDataHelper); 
    QVERIFY(itemData.count() == 1);     
    
    CpSettingFormEntryItemData *entryItemData = qobject_cast<CpSettingFormEntryItemData*>(itemData.front());
    QVERIFY(entryItemData != 0);
    QVERIFY(entryItemData->type() == static_cast<HbDataFormModelItem::DataItemType>(CpSettingFormEntryItemData::ListEntryItem) );
}

/*!
 * test CpLanguagePlugin::updateEntryItem
 */
void TestLanguagePlugin::test_CpLanguagePlugin_updateEntryItem()
{
    CpLanguagePlugin::updateEntryItem();
    
    QString localisedLanguage = HbLocaleUtil::localisedLanguageName(HbLocaleUtil::currentLanguage());
    
    QVERIFY(mEntryItemData->description() == localisedLanguage);
}

/*!
 * test ExtendedLocaleUtil::localeMappings
 */
void TestLanguagePlugin::test_ExtendedLocaleUtil_localeMappings()
{
    QList<LanguageRegionMapping> allMaps = ExtendedLocaleUtil::localeMappings(false);
    QVERIFY(allMaps.count() > 0);
    
    QList<LanguageRegionMapping> supportedMaps = ExtendedLocaleUtil::localeMappings(true);
    QVERIFY(supportedMaps.count() > 0);
    
    QVERIFY(allMaps.count() >= supportedMaps.count());
}

/*!
 * test CpLanguagePluginUtil::localizedLanguageNames
 */
void TestLanguagePlugin::test_CpLanguagePluginUtil_localizedLanguageNames()
{
    QStringList supportLanguages = HbLocaleUtil::supportedLanguages();
    QStringList localisedLanguages = CpLanguagePluginUtil::localizedLanguageNames(supportLanguages);
    
    QVERIFY (supportLanguages.count() == localisedLanguages.count());
}

/*!
 * test CpLanguagePluginUtil::localizedRegionNames
 */
void TestLanguagePlugin::test_CpLanguagePluginUtil_localizedRegionNames()
{
    QStringList supportedRegions = HbLocaleUtil::supportedRegions();
    QStringList localisedRegions = CpLanguagePluginUtil::localizedRegionNames(supportedRegions);
    
    QVERIFY (supportedRegions.count() == localisedRegions.count());
}

/*
 * test CpLanguagePluginUtil::localizedInputLanguageNames
 */
void TestLanguagePlugin::test_CpLanguagePluginUtil_localizedInputLanguageNames()
{
    QList<HbInputLanguage> supportedInputLanguages;
    HbInputUtils::listSupportedInputLanguages(supportedInputLanguages);
    
    QStringList localisedInputLanguages = CpLanguagePluginUtil::localizedInputLanguageNames(supportedInputLanguages);
    QVERIFY(supportedInputLanguages.count() == localisedInputLanguages.count());
}

/*!
 * test CpLanguagePluginUtil::isChineseVariant
 */
void TestLanguagePlugin::test_CpLanguagePluginUtil_isChineseVariant()
{
    bool isChineseVariant = CpLanguagePluginUtil::isChineseVariant();
    
    QStringList supportedLanguages = HbLocaleUtil::supportedLanguages();
    foreach(const QString &language, supportedLanguages) {
        if (QLocale(language).language() == QLocale::Chinese) {
            QVERIFY (isChineseVariant);
            return;
        }
    }
    
    QVERIFY (!isChineseVariant);
}

/*!
 * test new CpLanguageView
 */
void TestLanguagePlugin::test_CpLanguageView_new()
{
    CpLanguageView* view = new CpLanguageView();
    QVERIFY(view != 0);
    delete view;
}

/*!
 * test CpLanguageView::onRegionChanged(int index)
 */
void TestLanguagePlugin::test_CpLanguageView_onRegionChanged()
{
    QString oldRegion = HbLocaleUtil::currentRegion();
    
    QStringList allRegions = mView->mSupportedRegions;
    QVERIFY(allRegions.count() > 0);
    
    for(int i = 0; i < allRegions.count();i++) {
        if (!allRegions.at(i).trimmed().isEmpty()) {
            mView->onRegionChanged(i);
            QVERIFY(HbLocaleUtil::currentRegion() == allRegions.at(i));
        }
    }
    
    HbLocaleUtil::changeRegion(oldRegion);
    QVERIFY(HbLocaleUtil::currentRegion() == oldRegion);
    
    mView->onRegionChanged(-1);
    QVERIFY(HbLocaleUtil::currentRegion() == oldRegion);
    
    mView->onRegionChanged(allRegions.count());
    QVERIFY(HbLocaleUtil::currentRegion() == oldRegion);
}

/*!
 * test CpLanguageView::onPrimaryInputLanguageChanged(int index)
 */
void TestLanguagePlugin::test_CpLanguageView_onPrimaryInputLanguageChanged()
{
    HbInputLanguage oldPrimaryInputLanguage = HbInputSettingProxy::instance()->globalInputLanguage();
    
    QList<HbInputLanguage> supportedInputLanguages = mView->mPrimaryInputLanguages;
    
    QVERIFY(supportedInputLanguages.count() > 0);
    for (int i = 0; i < supportedInputLanguages.count();i++) {
        mView->onPrimaryInputLanguageChanged(i);
        QVERIFY(HbInputSettingProxy::instance()->globalInputLanguage() == supportedInputLanguages.at(i));
    }
    
    HbInputSettingProxy::instance()->setGlobalInputLanguage(oldPrimaryInputLanguage);
    QVERIFY(HbInputSettingProxy::instance()->globalInputLanguage() == oldPrimaryInputLanguage);
    
    mView->onPrimaryInputLanguageChanged(-1);
    QVERIFY(HbInputSettingProxy::instance()->globalInputLanguage() == oldPrimaryInputLanguage);
    
    mView->onPrimaryInputLanguageChanged(supportedInputLanguages.count());
    QVERIFY(HbInputSettingProxy::instance()->globalInputLanguage() == oldPrimaryInputLanguage);
}

/*!
 * test CpLanguageView::onSecondaryInputLanguageChanged(int index)
 */
void TestLanguagePlugin::test_CpLanguageView_onSecondaryInputLanguageChanged()
{
    HbInputLanguage primaryInputLanguage = HbInputSettingProxy::instance()->globalInputLanguage();
    HbInputLanguage oldSecondaryInputLanguage = HbInputSettingProxy::instance()->globalSecondaryInputLanguage();
    
    QList<HbInputLanguage> supportedInputLanguages = mView->mSecondaryInputLanguages;
    
    QVERIFY(supportedInputLanguages.count() > 0);
    for (int i = 0; i < supportedInputLanguages.count();i++) {
        if ( supportedInputLanguages.at(i) != primaryInputLanguage) {
            mView->onSecondaryInputLanguageChanged(i);
            QVERIFY(HbInputSettingProxy::instance()->globalSecondaryInputLanguage() == supportedInputLanguages.at(i));
        }
    }
    
    HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(oldSecondaryInputLanguage);
    QVERIFY(HbInputSettingProxy::instance()->globalSecondaryInputLanguage() == oldSecondaryInputLanguage);
    
    mView->onSecondaryInputLanguageChanged(-1);
    QVERIFY(HbInputSettingProxy::instance()->globalSecondaryInputLanguage() == oldSecondaryInputLanguage);
    
    mView->onSecondaryInputLanguageChanged(supportedInputLanguages.count());
    QVERIFY(HbInputSettingProxy::instance()->globalSecondaryInputLanguage() == oldSecondaryInputLanguage);
}

/*!
 * test CpLanguageView::onPrimaryInputLanguageChanged(const HbInputLanguage &inputLanguage)
 */
void TestLanguagePlugin::test_CpLanguageView_onPrimaryInputLanguageChanged2()
{
    int oldIndex = mView->mCurrentPrimaryInputLanguageItem->contentWidgetData("currentIndex").toInt();
    
    QList<HbInputLanguage> supportedInputLanguages = mView->mPrimaryInputLanguages;
    
    QVERIFY(supportedInputLanguages.count() > 0);
    for (int i = 0; i < supportedInputLanguages.count();i++) {
        mView->onPrimaryInputLanguageChanged(supportedInputLanguages.at(i));
        QVERIFY( mView->mCurrentPrimaryInputLanguageItem->contentWidgetData("currentIndex").toInt() == i );
    }
    
    mView->mCurrentPrimaryInputLanguageItem->setContentWidgetData("currentIndex",oldIndex);
    
    QVERIFY(oldIndex == mView->mCurrentPrimaryInputLanguageItem->contentWidgetData("currentIndex").toInt());
}

/*!
 * test CpLanguageView::onSecondaryInputLanguageChanged(const HbInputLanguage &inputLanguage)
 */
void TestLanguagePlugin::test_CpLanguageView_onSecondaryInputLanguageChanged2()
{
    int oldIndex = mView->mCurrentSecondaryInputLanguageItem->contentWidgetData("currentIndex").toInt();
    
    QList<HbInputLanguage> supportedInputLanguages = mView->mSecondaryInputLanguages;
    
    QVERIFY(supportedInputLanguages.count() > 0);
    for (int i = 0; i < supportedInputLanguages.count();i++) {
        mView->onSecondaryInputLanguageChanged(supportedInputLanguages.at(i));
        QVERIFY( mView->mCurrentSecondaryInputLanguageItem->contentWidgetData("currentIndex").toInt() == i );
    }
    
    mView->mCurrentSecondaryInputLanguageItem->setContentWidgetData("currentIndex",oldIndex);
    
    QVERIFY(oldIndex == mView->mCurrentSecondaryInputLanguageItem->contentWidgetData("currentIndex").toInt());
}

/*!
 * test CpLanguageView::launchRegionalSettingsView()
 */
void TestLanguagePlugin::test_CpLanguageView_launchRegionalSettingsView()
{
    mView->launchRegionalSettingsView();
    QVERIFY(mView->mClockPluginLoader != 0);
}

/*!
 * test CpLanguageView::onDataFormItemActivated(const QModelIndex &modelIndex)
 */
void TestLanguagePlugin::test_CpLanguageView_onDataFormItemActivated()
{
    QVERIFY(true);
}

/*!
 * test CpLanguageView::close()
 */
void TestLanguagePlugin::test_CpLanguageView_close()
{
    QVERIFY(true);
}

/*!
 * test CpLanguageView::fillDataFormComboBoxItem
 */
void TestLanguagePlugin::test_CpLanguageView_fillDataFormComboBoxItem()
{
    QStringList supportedRegions = HbLocaleUtil::supportedRegions();
    QStringList localizedRegions = CpLanguagePluginUtil::localizedRegionNames(supportedRegions);
    
    int regionIndex = supportedRegions.indexOf(HbLocaleUtil::currentRegion());
    
    mView->fillDataFormComboBoxItem(mView->mCurrentRegionItem,localizedRegions,regionIndex);
    
    QVERIFY(mView->mCurrentRegionItem->contentWidgetData("currentIndex").toInt() == regionIndex);
    QVERIFY(mView->mCurrentRegionItem->contentWidgetData("items").toStringList() == localizedRegions);
}

/*!
 * test CpLanguageView::updateSecondaryInputLanguageItem
 */
void TestLanguagePlugin::test_CpLanguageView_updateSecondaryInputLanguageItem()
{
    QList<HbInputLanguage> supportedInputLanguages;
    HbInputUtils::listSupportedInputLanguages(supportedInputLanguages);
    
    HbInputLanguage primaryInputLanguage = HbInputSettingProxy::instance()->globalInputLanguage();
    HbInputLanguage secondaryInputLanguage = HbInputSettingProxy::instance()->globalSecondaryInputLanguage();
    
    QVERIFY(supportedInputLanguages.count() > 0);
    
    HbInputSettingProxy::instance()->setGlobalInputLanguage(supportedInputLanguages.front());
    HbInputSettingProxy::instance()->setGlobalSecondaryInputLanguage(supportedInputLanguages.front());
    
    mView->updateSecondaryInputLanguageItem();
    
    QVERIFY(mView->mCurrentSecondaryInputLanguageItem->contentWidgetData("currentIndex").toInt() == 0);
    
}

/*!
 * test CpLanguageView::promptRestart
 */
void TestLanguagePlugin::test_CpLanguageView_promptRestart()
{
    QVERIFY(true);
}

/*!
 * test CpLanguageView::restartDevice
 */
void TestLanguagePlugin::test_CpLanguageView_restartDevice()
{
    QVERIFY(true);
}

/*!
 * test CpLanguageView::languageRegionMapping
 */
void TestLanguagePlugin::test_CpLanguageView_languageRegionMapping()
{
    QStringList supportedLanguages = HbLocaleUtil::supportedLanguages();
    foreach(const QString &language,supportedLanguages) {
        LanguageRegionMapping *entry = mView->languageRegionMapping(language);
        QVERIFY(entry != 0);
    }
}

QTEST_MAIN(TestLanguagePlugin)