diff -r fc7b30ed2058 -r 05bc53fe583b cmmanager/cppacketdataapplugin/tsrc/ut/testcppacketdataapplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmmanager/cppacketdataapplugin/tsrc/ut/testcppacketdataapplugin.cpp Tue Aug 31 15:35:44 2010 +0300 @@ -0,0 +1,1434 @@ +/* +* 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: +* Control Panel packet data AP plugin unit testing. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cppacketdataapview.h" +#include "cppacketdataapadvancedview.h" + +#include "hbautotest.h" +#include "testcppacketdataapplugin.h" + +// ----------------------------------------------------------------------------- +// STATIC TEST DATA +// ----------------------------------------------------------------------------- + +// Connection method (AP) ID used for testing +static const uint testApId = 1; + +static const QString pluginDir = + "\\resource\\qt\\plugins\\controlpanel\\bearerap"; + +static const QString pluginName = "cppacketdataapplugin.dll"; + +// Time to wait before continuing after an UI step +static const int waitTime = 10; + +// UI coordinates +static const QPoint scrollMiddle(350, 280); +static const QPoint scrollTop(350, 30); +static const QPoint scrollBottom(350, 540); + +// Use positive offset if dropdown opens under the combobox +static const QPoint comboBoxFirstItemOffset(80, 75); +static const QPoint comboBoxItemOffset(0, 51); +// Use negative offset if dropdown opens above the combobox +static const QPoint comboBoxFirstItemNegativeOffset(80, -29); +static const QPoint comboBoxItemNegativeOffset(0, -51); + +static const QPoint exitEditorOffset(-10, -20); + +static const QPoint messageBoxOkButtonOffset(160, 140); + +// Advanced settings groups +static const QPoint ipGroup(160, 10); +static const QPoint proxyGroup(160, 60); + +// Test strings +static const QString tooLongUserName = + "too long name 123456789012345678901234567890123456THISISEXTRA"; +static const QString truncatedUserName = + "too long name 123456789012345678901234567890123456"; + +// ----------------------------------------------------------------------------- +// FRAMEWORK FUNCTIONS +// ----------------------------------------------------------------------------- + +/** + * Test main function. Runs all test cases. + */ +#ifndef TESTCMAPPLSETTINGSUI_NO_OUTPUT_REDIRECT +int main(int argc, char *argv[]) +{ + HbApplication app(argc, argv); + app.setApplicationName("TestCpPacketDataApPlugin"); + + char *pass[3]; + pass[0] = argv[0]; + pass[1] = "-o"; + pass[2] = "c:\\data\\TestCpPacketDataApPlugin.txt"; + + TestCpPacketDataApPlugin tc; + int res = QTest::qExec(&tc, 3, pass); + + return res; +} +#else +QTEST_MAIN(TestCpPacketDataApPlugin) +#endif + +/** + * This function is be called before the first test case is executed. + */ +void TestCpPacketDataApPlugin::initTestCase() +{ + mMainWindow = new HbAutoTestMainWindow; + //mMainWindow = new HbMainWindow; + mMainWindow->show(); + + // Load plugin + QDir dir(pluginDir); + mPluginLoader = new QPluginLoader(dir.absoluteFilePath(pluginName)); + mPlugin = qobject_cast(mPluginLoader->instance()); + QVERIFY(mPlugin != NULL); + + // Verify plugin bearer type + QVERIFY(mPlugin->bearerType() == CMManagerShim::BearerTypePacketData); + + // Write initial settings to CommsDat + subInitializeCommsDat(); + + // Create packet data settings view (connection method ID given) + subCreateSettingsView(testApId); + + subGetUiWidgets(); +} + +/** + * This function is be called after the last test case was executed. + */ +void TestCpPacketDataApPlugin::cleanupTestCase() +{ + delete mMainWindow; + mMainWindow = 0; + + // Force unloading of plugin + mPluginLoader->unload(); + delete mPluginLoader; + mPluginLoader = 0; +} + +/** + * This function is be called before each test case is executed. + */ +void TestCpPacketDataApPlugin::init() +{ + QTest::qWait(1000); +} + +/** + * This function is be called after each test case is executed. + */ +void TestCpPacketDataApPlugin::cleanup() +{ +} + +// ----------------------------------------------------------------------------- +// TEST CASES +// ----------------------------------------------------------------------------- + +/** + * Tests changing of connection name. + */ +void TestCpPacketDataApPlugin::tcChangeConnectionName() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget); + + // Erase old string + QString text = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmName, + mTestView->mConnectionNameItem, + result); +} + +/** + * Test data for connection name change test case. + */ +void TestCpPacketDataApPlugin::tcChangeConnectionName_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("maximum length") + << "really long name 123456789012345678901234567890123" + << "really long name 123456789012345678901234567890123"; + QTest::newRow("too long") + << "too long name 12345678901234567890123456789012345678901234" + << "too long name 123456789012345678901234567890123456"; + QTest::newRow("basic") // last one must always fit on one line in UI + << "test packet AP" + << "test packet AP"; +} + +/** + * Tests that empty connection name is not accepted. + */ +void TestCpPacketDataApPlugin::tcConnectionNameEmpty() +{ + QString previous = + mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget); + + // Erase old string + QString text = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestView->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmName, + mTestView->mConnectionNameItem, + previous); +} + +/** + * Tests changing of access point name. + */ +void TestCpPacketDataApPlugin::tcChangeAccessPointName() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget); + + // Erase old string + QString text = mTestView->mAccessPointNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataAPName, + mTestView->mAccessPointNameItem, + result); +} + +/** + * Test data for access point name change test case. + */ +void TestCpPacketDataApPlugin::tcChangeAccessPointName_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("maximum length") + << "really long name 12345678901234567890123456789012345678901234567890123456789012345678901234567890123" + << "really long name 12345678901234567890123456789012345678901234567890123456789012345678901234567890123"; + QTest::newRow("too long") + << "too long name 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345" + << "too long name 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456"; + QTest::newRow("basic") // last one must always fit on one line in UI + << "test AP name" + << "test AP name"; +} + +/** + * Tests that empty access point name is not accepted. + */ +void TestCpPacketDataApPlugin::tcAccessPointNameEmpty() +{ + QString previous = + mTestView->mAccessPointNameItem->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget); + + // Erase old string + QString text = mTestView->mAccessPointNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestView->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataAPName, + mTestView->mAccessPointNameItem, + previous); +} + + +/** + * Tests handling of too long string from CommsDat (longer than UI accepts). + */ +void TestCpPacketDataApPlugin::tcTooLongUserNameInCommsDat() +{ + // Verify UI text, the widget contains the too long string, even though + // it is not shown completely on UI + QString text = mTestView->mUserNameItem->contentWidgetData("text").toString(); + QCOMPARE(tooLongUserName, text); + + QTest::qWait(1000); + + // Visit editing state, truncated string should be saved to CommsDat + HbAutoTest::mouseClick(mMainWindow, mUserNameWidget); + + QTest::qWait(1000); + + HbAutoTest::mouseClick(mMainWindow, mUserNameWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIFAuthName, + mTestView->mUserNameItem, + truncatedUserName); +} + +/** + * Tests changing of user name. + */ +void TestCpPacketDataApPlugin::tcChangeUserName() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mUserNameWidget); + + // Erase old string + QString text = mTestView->mUserNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mUserNameWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIFAuthName, + mTestView->mUserNameItem, + result); +} + +/** + * Test data for user name change test case. + */ +void TestCpPacketDataApPlugin::tcChangeUserName_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("maximum length") + << "really long name 123456789012345678901234567890123" + << "really long name 123456789012345678901234567890123"; + QTest::newRow("too long") + << "too long name 1234567890123456789012345678901234567890123" + << "too long name 123456789012345678901234567890123456"; + QTest::newRow("basic") + << "username" + << "username"; + QTest::newRow("empty") // last one must always fit on one line in UI + << "" + << ""; +} + +/** + * Scrolls the tested view to the bottom. + */ +void TestCpPacketDataApPlugin::tcScrollToBottom() +{ + subScrollToBottom(); +} + +/** + * Tests changing of password. + */ +void TestCpPacketDataApPlugin::tcChangePassword() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mPasswordWidget); + + // Erase old string + QString text = mTestView->mPasswordItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mPasswordWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIFAuthPass, + mTestView->mPasswordItem, + result); +} + +/** + * Test data for password change test case. + */ +void TestCpPacketDataApPlugin::tcChangePassword_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("maximum length") + << "really long name 123456789012345678901234567890123" + << "really long name 123456789012345678901234567890123"; + QTest::newRow("too long") + << "too long name 1234567890123456789012345678901234567890123" + << "too long name 123456789012345678901234567890123456"; + QTest::newRow("basic") + << "password" + << "password"; + QTest::newRow("empty") // last one must always fit on one line in UI + << "" + << ""; +} + +/** + * Tests changing of authentication mode. + */ +void TestCpPacketDataApPlugin::tcChangeAuthenticationMode() +{ + QPointF normalPointOffset = comboBoxFirstItemOffset; + QPointF securePointOffset = comboBoxFirstItemOffset + comboBoxItemOffset; + + // Set authentication mode to secure + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget, securePointOffset); + + subVerifyBool( + CMManagerShim::PacketDataDisablePlainTextAuth, + true); + + // Set authentication mode to normal + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget, normalPointOffset); + + subVerifyBool( + CMManagerShim::PacketDataDisablePlainTextAuth, + false); +} + +/** + * Tests changing of homepage. + */ +void TestCpPacketDataApPlugin::tcChangeHomepage() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mHomepageWidget); + + // Erase old string + QString text = mTestView->mHomepageItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mHomepageWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmStartPage, + mTestView->mHomepageItem, + result); +} + +/** + * Test data for homepage change test case. + */ +void TestCpPacketDataApPlugin::tcChangeHomepage_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("long") + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html" + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html"; + QTest::newRow("basic") // last one should always fit on one line in UI + << "http://www.symbian.org/" + << "http://www.symbian.org/"; + QTest::newRow("empty") + << "" + << ""; +} + +/** + * Opens advanced settings view. + */ +void TestCpPacketDataApPlugin::tcOpenAdvancedSettingsView() +{ + // Launch advanced settings view + bool status = connect( + this, + SIGNAL(menuActionTriggered(HbAction *)), + mTestView, + SLOT(menuActionTriggered(HbAction *))); + Q_ASSERT(status); + emit menuActionTriggered(mTestView->mAdvancedSettingsAction); + + QTest::qWait(1000); + + mTestViewAdvanced = static_cast(mMainWindow->currentView()); +} + +/** + * Expands the IP settings group. + */ +void TestCpPacketDataApPlugin::tcExpandIpSettings() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, ipGroup); + + subGetAdvancedUiWidgets(0); +} + +/** + * Sets the network type to IPv4 and gets UI widget pointers. + */ +void TestCpPacketDataApPlugin::tcSetIpv4NetworkType() +{ + QPointF ipv4PointOffset = comboBoxFirstItemOffset; + + // Set network type to IPv4 + HbAutoTest::mouseClick(mMainWindow, mNetworkTypeWidget); + HbAutoTest::mouseClick(mMainWindow, mNetworkTypeWidget, ipv4PointOffset, 100); + subVerifyUint(CMManagerShim::PacketDataPDPType, RPacketContext::EPdpTypeIPv4); + + subGetAdvancedUiWidgets(0); +} + +/** + * Tests enabling of automatic phone IP address. + */ +void TestCpPacketDataApPlugin::tcEnableAutomaticIpv4Address() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4Automatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IP address + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressAutomaticWidget); + } + // Enable automatic IP address + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressAutomaticWidget); + subVerifyBool( + CMManagerShim::PacketDataIPAddrFromServer, + true); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressWidget); +} + +/** + * Tests disabling of automatic phone IP address. + */ +void TestCpPacketDataApPlugin::tcEnableUserDefinedIpv4Address() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4Automatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IP address + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressAutomaticWidget); + } + // Can't verify the setting from CommsDat here, because CMManager will + // set it back to true if no valid IP address is yet defined. The flag + // is verified in tcChangeIpAddress(). +} + +/** + * Tests changing of IP address. + */ +void TestCpPacketDataApPlugin::tcChangeIpAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4Address->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4AddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPAddr, + mTestViewAdvanced->mIpv4Address, + result); + subVerifyBool( + CMManagerShim::PacketDataIPAddrFromServer, + false); +} + +/** + * Test data for IP address change test case. + */ +void TestCpPacketDataApPlugin::tcChangeIpAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("too long") + << "255.255.255.2551234" + << "255.255.255.255"; + QTest::newRow("normal") + << "192.168.0.1" + << "192.168.0.1"; +} + +/** + * Scrolls the tested view to the bottom. + */ +void TestCpPacketDataApPlugin::tcScrollToBottom2() +{ + subScrollToBottom(); + + subGetAdvancedUiWidgets(0); +} + +/** + * Tests enabling of automatic IPv4 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcEnableAutomaticIpv4DnsAddress() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4DnsAutomatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IPv4 DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4DnsAddressAutomaticWidget); + } + // Enable automatic IPv4 DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4DnsAddressAutomaticWidget); + subVerifyBool( + CMManagerShim::PacketDataIPDNSAddrFromServer, + true); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv4SecondaryDnsAddressWidget); +} + +/** + * Tests disabling of automatic IPv4 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcEnableUserDefinedIpv4DnsAddress() +{ + Qt::CheckState state = static_cast + (mTestViewAdvanced->mIpv4DnsAutomatic->contentWidgetData("checkState").toInt()); + if (state == Qt::Checked) { + // Disable automatic IPv4 DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4DnsAddressAutomaticWidget); + } + // Can't verify the setting from CommsDat here, because CMManager will + // set it back to true if no valid IP address is yet defined. The flag + // is verified in tcChangeIpv4DnsAddress(). +} + +/** + * Tests changing of IPv4 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcChangeIpv4DnsAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + // Primary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPNameServer1, + mTestViewAdvanced->mIpv4DnsAddress1, + result); + + // Secondary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv4SecondaryDnsAddressWidget); + + // Erase old string + text = mTestViewAdvanced->mIpv4DnsAddress2->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4SecondaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPNameServer2, + mTestViewAdvanced->mIpv4DnsAddress2, + result); + + // Verify user defined address is in use + subVerifyBool( + CMManagerShim::PacketDataIPDNSAddrFromServer, + false); +} + +/** + * Test data for IPv4 DNS address change test case. + */ +void TestCpPacketDataApPlugin::tcChangeIpv4DnsAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("too long") + << "255.255.255.2551234" + << "255.255.255.255"; + QTest::newRow("normal") + << "192.168.0.1" + << "192.168.0.1"; +} + +/** + * Tests invalid IPv4 DNS address. + */ +void TestCpPacketDataApPlugin::tcInvalidIpv4DnsAddress() +{ + QString previous = + mTestViewAdvanced->mIpv4DnsAddress1->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv4DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "999.999.999.999", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv4PrimaryDnsAddressWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPNameServer1, + mTestViewAdvanced->mIpv4DnsAddress1, + previous); +} + +/** + * Scrolls the tested view to the top. + */ +void TestCpPacketDataApPlugin::tcScrollToTop() +{ + subScrollToTop(); +} + +/** + * Sets the network type to IPv6 and gets UI widget pointers. + */ +void TestCpPacketDataApPlugin::tcSetIpv6NetworkType() +{ + QPointF ipv6PointOffset = comboBoxFirstItemOffset + comboBoxItemOffset; + + // Set network type to IPv6 + HbAutoTest::mouseClick(mMainWindow, mNetworkTypeWidget); + HbAutoTest::mouseClick(mMainWindow, mNetworkTypeWidget, ipv6PointOffset, 100); + subVerifyUint(CMManagerShim::PacketDataPDPType, RPacketContext::EPdpTypeIPv6); + + subGetAdvancedUiWidgets(0); +} + +/** + * Tests enabling of automatic IPv6 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcEnableAutomaticIpv6DnsAddress() +{ + // Enable automatic IPv6 DNS address + QPointF automaticPointOffset = comboBoxFirstItemOffset; + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget, automaticPointOffset, 100); + QTest::qWait(100); + subVerifyBool( + CMManagerShim::PacketDataIPIP6DNSAddrFromServer, + true); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget); +} + +/** + * Tests enabling of well-known IPv6 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcEnableWellKnownIpv6DnsAddress() +{ + // Enable well-known IPv6 DNS address + QPointF wellKnownPointOffset = comboBoxFirstItemOffset + comboBoxItemOffset; + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget, wellKnownPointOffset, 100); + QTest::qWait(100); + subVerifyBool( + CMManagerShim::PacketDataIPIP6DNSAddrFromServer, + false); + subVerifyString( + CMManagerShim::PacketDataIPIP6NameServer1, + mTestViewAdvanced->mIpv6DnsAddress1, + "fec0:000:0000:ffff::1"); + subVerifyString( + CMManagerShim::PacketDataIPIP6NameServer2, + mTestViewAdvanced->mIpv6DnsAddress2, + "fec0:000:0000:ffff::2"); + + // Ensure that editing the IP address is not allowed + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget); +} + +/** + * Tests enabling of user defined IPv6 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcEnableUserDefinedIpv6DnsAddress() +{ + // Select user defined IPv6 DNS address + QPointF userDefinedPointOffset = comboBoxFirstItemOffset + comboBoxItemOffset * 2; + //QPointF userDefinedPointOffset(0, 160); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget); + QTest::qWait(100); + HbAutoTest::mouseClick(mMainWindow, mIpv6DnsAddressAutomaticWidget, userDefinedPointOffset, 100); + QTest::qWait(100); + // Can't verify the setting from CommsDat here, because CMManager will + // set it back to true if no valid IP address is yet defined. The flag + // is verified in tcChangeIpv4DnsAddress(). +} + +/** + * Tests changing of IPv6 DNS addresses. + */ +void TestCpPacketDataApPlugin::tcChangeIpv6DnsAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + // Primary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv6DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPIP6NameServer1, + mTestViewAdvanced->mIpv6DnsAddress1, + result); + + // Secondary DNS address + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget); + + // Erase old string + text = mTestViewAdvanced->mIpv6DnsAddress2->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv6SecondaryDnsAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPIP6NameServer2, + mTestViewAdvanced->mIpv6DnsAddress2, + result); + + // Verify user defined address is in use + subVerifyBool( + CMManagerShim::PacketDataIPIP6DNSAddrFromServer, + false); +} + +/** + * Test data for IPv6 DNS address change test case. + */ +void TestCpPacketDataApPlugin::tcChangeIpv6DnsAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("normal") + << "2001:db8:85a3::8a2e:370:7334" + << "2001:db8:85a3:0:0:8a2e:370:7334"; +} + +/** + * Tests invalid IPv6 DNS address. + */ +void TestCpPacketDataApPlugin::tcInvalidIpv6DnsAddress() +{ + QString previous = + mTestViewAdvanced->mIpv6DnsAddress1->contentWidgetData("text").toString(); + + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mIpv6DnsAddress1->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "abcdef:fedcba", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mIpv6PrimaryDnsAddressWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::PacketDataIPIP6NameServer1, + mTestViewAdvanced->mIpv6DnsAddress1, + previous); +} + +/** + * Collapses the IP settings group. + */ +void TestCpPacketDataApPlugin::tcCollapseIpSettings() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, ipGroup); +} + +/** + * Expands the proxy settings group and gets UI widget pointers. + */ +void TestCpPacketDataApPlugin::tcExpandProxySettingsAndGetUiWidgets() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, proxyGroup); + + QTest::qWait(500); + + subGetAdvancedUiWidgets(1); +} + +/** + * Tests changing of proxy server address. + */ +void TestCpPacketDataApPlugin::tcChangeProxyServerAddress() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mProxyServerAddressWidget); + + // Erase old string + QString text = mTestViewAdvanced->mProxyServer->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mProxyServerAddressWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyString( + CMManagerShim::CmProxyServerName, + mTestViewAdvanced->mProxyServer, + result); + // Verify user defined address flag is set correctly + if (result.isEmpty()) { + subVerifyBool( + CMManagerShim::CmProxyUsageEnabled, + false); + } else { + subVerifyBool( + CMManagerShim::CmProxyUsageEnabled, + true); + } +} + +/** + * Test data for proxy server address change test case. + */ +void TestCpPacketDataApPlugin::tcChangeProxyServerAddress_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("long") + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html" + << "http://developer.symbian.org/main/documentation/reference/s^3/doc_source/AboutSymbianOSLibrary9.6/index.html"; + QTest::newRow("empty") + << "" + << ""; + QTest::newRow("basic") // last one should always fit on one line in UI + << "http://www.symbian.org/" + << "http://www.symbian.org/"; +} + +/** + * Tests changing of proxy port number. + */ +void TestCpPacketDataApPlugin::tcChangeProxyPortNumber() +{ + QFETCH(QString, string); + QFETCH(QString, result); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget); + + // Erase old string + QString text = mTestViewAdvanced->mProxyPort->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget, exitEditorOffset); + + // Verify both commsdat and UI widget + subVerifyUint( + CMManagerShim::CmProxyPortNumber, + result.toInt()); + QCOMPARE( + mTestViewAdvanced->mProxyPort->contentWidgetData("text").toInt(), + result.toInt()); +} + +/** + * Test data for proxy port number change test case. + */ +void TestCpPacketDataApPlugin::tcChangeProxyPortNumber_data() +{ + QTest::addColumn("string"); + QTest::addColumn("result"); + + QTest::newRow("basic") + << "8080" + << "8080"; + QTest::newRow("too long") + << "1234567890" + << "12345"; + QTest::newRow("zero") + << "0" + << ""; + QTest::newRow("empty") + << "" + << ""; +} + +/** + * Tests invalid proxy port number. + */ +void TestCpPacketDataApPlugin::tcInvalidProxyPortNumber() +{ + int previous = + mTestViewAdvanced->mProxyPort->contentWidgetData("text").toInt(); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget); + + // Erase old string + QString text = mTestViewAdvanced->mProxyPort->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); + + // Enter new string + HbAutoTest::keyClicks(mMainWindow, "65536", 0, waitTime); + + HbAutoTest::mouseClick(mMainWindow, mProxyPortNumberWidget, exitEditorOffset); + + QTest::qWait(100); + // Dismiss messagebox + HbAutoTest::mouseClick( + mMainWindow, + mTestViewAdvanced->mMessageBox.data(), + messageBoxOkButtonOffset); + + // Verify both commsdat and UI widget + subVerifyUint( + CMManagerShim::CmProxyPortNumber, + previous); + QCOMPARE( + mTestViewAdvanced->mProxyPort->contentWidgetData("text").toInt(), + previous); +} + +/** + * Collapses the proxy settings group. + */ +void TestCpPacketDataApPlugin::tcCollapseProxySettings() +{ + HbAutoTest::mouseClick(mMainWindow, mTestViewAdvanced, proxyGroup); +} + +/** + * Returns from advanced settings view. + */ +void TestCpPacketDataApPlugin::tcCloseAdvancedSettingsView() +{ + // Return from advanced settings view + subClickWidget("HbNavigationButton"); +} + +// ----------------------------------------------------------------------------- +// SUB TEST CASES +// ----------------------------------------------------------------------------- + +/** + * Gets UI widget pointers. + */ +void TestCpPacketDataApPlugin::subGetUiWidgets() +{ + HbModelIterator iterator(mTestView->mModel); + + // Get "Access point settings" group item + QModelIndex apGroupIndex = iterator.index(0); + + // Get UI widgets + mConnectionNameWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(0, apGroupIndex)); + mAccessPointNameWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(1, apGroupIndex)); + mUserNameWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(2, apGroupIndex)); + mPasswordWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(4, apGroupIndex)); + mAuthenticationWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(5, apGroupIndex)); + mHomepageWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(6, apGroupIndex)); +} + +/** + * Gets advanced settings view UI widget pointers by group index. + */ +void TestCpPacketDataApPlugin::subGetAdvancedUiWidgets( + uint index) +{ + // Get the group item + HbModelIterator iterator(mTestViewAdvanced->mModel); + QModelIndex groupIndex = iterator.index(index); + + // Get UI widgets + if (index == 0) { + // IP settings group + mNetworkTypeWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(0, groupIndex)); + if (qobject_cast(mNetworkTypeWidget)->currentIndex() == 0) { + // IPv4 + mIpv4AddressAutomaticWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(1, groupIndex)); + mIpv4AddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(2, groupIndex)); + mIpv4DnsAddressAutomaticWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(3, groupIndex)); + mIpv4PrimaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(4, groupIndex)); + mIpv4SecondaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(5, groupIndex)); + } else { + // IPv6 + mIpv6DnsAddressAutomaticWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(1, groupIndex)); + mIpv6PrimaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(2, groupIndex)); + mIpv6SecondaryDnsAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(3, groupIndex)); + } + } else { + // Proxy settings group + mProxyServerAddressWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(0, groupIndex)); + mProxyPortNumberWidget = subGetWidgetByIndex( + mTestViewAdvanced->mForm, + iterator.index(1, groupIndex)); + } +} + +/** + * Gets an UI widget from HbDataForm by index. + */ +HbWidget *TestCpPacketDataApPlugin::subGetWidgetByIndex( + HbDataForm *form, + const QModelIndex &index) +{ + HbDataFormViewItem *viewItem = qobject_cast + (form->itemByIndex(index)); + HbWidget *widget = viewItem->dataItemContentWidget(); + //QString widgetClassName(widget->metaObject()->className()); + //qDebug() << widgetClassName; + return widget; +} + +/** + * Writes initial settings to CommsDat needed by some test cases. + */ +void TestCpPacketDataApPlugin::subInitializeCommsDat() +{ + QScopedPointer cmManager(new CmManagerShim); + QScopedPointer connectionMethod( + cmManager->connectionMethod(testApId)); + + // Initial settings + connectionMethod->setStringAttribute( + CMManagerShim::PacketDataIFAuthName, + tooLongUserName); + + connectionMethod->update(); +} + +/** + * Creates the settings view and shows it. + */ +void TestCpPacketDataApPlugin::subCreateSettingsView(uint connectionMethodId) +{ + // Create settings view + HbView *view = mPlugin->createSettingView(connectionMethodId); + QVERIFY(view != NULL); + + // Display the view + mMainWindow->addView(view); + mMainWindow->setCurrentView(view); + // Store pointer to settings view class + mTestView = static_cast(view); +} + +/** + * Verifies that given string is correctly stored in CommsDat and shown on UI. + */ +void TestCpPacketDataApPlugin::subVerifyString( + CMManagerShim::ConnectionMethodAttribute attribute, + HbDataFormModelItem *item, + QString expected) +{ + QTest::qWait(waitTime); + + // Read attribute value from CommsDat + QScopedPointer cmManager(new CmManagerShim); + QScopedPointer connectionMethod( + cmManager->connectionMethod(testApId)); + QString commsdat = connectionMethod->getStringAttribute(attribute); + + QCOMPARE(commsdat, expected); + + // Get value from UI widget + QString widget = item->contentWidgetData("text").toString(); + + QCOMPARE(widget, expected); +} + +/** + * Clears a HbLineEdit. + */ +void TestCpPacketDataApPlugin::subClearLineEdit( + uint length) +{ + // Move cursor to end of string + //HbAutoTest::keyClick(mMainWindow, Qt::Key_End, Qt::ControlModifier, waitTime); // doesn't seem to do anything? + HbAutoTest::keyClick(mMainWindow, Qt::Key_Down, 0, waitTime); + HbAutoTest::keyClick(mMainWindow, Qt::Key_Down, 0, waitTime); + HbAutoTest::keyClick(mMainWindow, Qt::Key_Down, 0, waitTime); + for (int i=0; i<25; i++) { + HbAutoTest::keyClick(mMainWindow, Qt::Key_Right, 0, waitTime); + } + // Erase string + for (int i=0; i cmManager(new CmManagerShim); + QScopedPointer connectionMethod( + cmManager->connectionMethod(testApId)); + return connectionMethod->getBoolAttribute(attribute); +} + +/** + * Verifies that given attribute contains expected boolean value in CommsDat. + */ +void TestCpPacketDataApPlugin::subVerifyBool( + CMManagerShim::ConnectionMethodAttribute attribute, + bool expected) +{ + QTest::qWait(waitTime); + + // Read attribute value from CommsDat + QScopedPointer cmManager(new CmManagerShim); + QScopedPointer connectionMethod( + cmManager->connectionMethod(testApId)); + bool commsdat = connectionMethod->getBoolAttribute(attribute); + + QCOMPARE(commsdat, expected); +} + +/** + * Verifies that given attribute contains expected integer value in CommsDat. + */ +void TestCpPacketDataApPlugin::subVerifyUint( + CMManagerShim::ConnectionMethodAttribute attribute, + uint expected) +{ + QTest::qWait(waitTime); + + // Read attribute value from CommsDat + QScopedPointer cmManager(new CmManagerShim); + QScopedPointer connectionMethod( + cmManager->connectionMethod(testApId)); + uint commsdat = connectionMethod->getIntAttribute(attribute); + + QCOMPARE(commsdat, expected); +} + +/** + * Clicks a widget currently on UI by class name. + */ +void TestCpPacketDataApPlugin::subClickWidget(const QString &name) +{ + QList itemList = mMainWindow->scene()->items(); + + QGraphicsItem *target = 0; + foreach (QGraphicsItem* item, itemList) { + if (item->isWidget()) { + QString widgetClassName(static_cast(item)->metaObject()->className()); + //qDebug() << widgetClassName; + + if (widgetClassName == name) { + target = item; + break; + } + } + } + + Q_ASSERT(target); + HbAutoTest::mouseClick(mMainWindow, static_cast(target)); +} + +/** + * Scrolls the tested view to the bottom. + */ +void TestCpPacketDataApPlugin::subScrollToBottom() +{ + // Scroll to the bottom of the view + HbAutoTest::mousePress(mMainWindow, mTestView, scrollMiddle); + QTest::qWait(1000); + HbAutoTest::mouseMove(mMainWindow, mTestView, scrollTop); + HbAutoTest::mouseRelease(mMainWindow, mTestView, scrollTop); +} + +/** + * Scrolls the tested view to the top. + */ +void TestCpPacketDataApPlugin::subScrollToTop() +{ + // Scroll to the top of the view + HbAutoTest::mousePress(mMainWindow, mTestView, scrollMiddle); + QTest::qWait(1000); + HbAutoTest::mouseMove(mMainWindow, mTestView, scrollBottom); + HbAutoTest::mouseRelease(mMainWindow, mTestView, scrollBottom); +}