diff -r c16e04725da3 -r 5c4486441ae6 cmmanager/cppacketdataapplugin/tsrc/ut/testcppacketdataapplugin.cpp --- a/cmmanager/cppacketdataapplugin/tsrc/ut/testcppacketdataapplugin.cpp Mon May 17 09:55:27 2010 +0300 +++ b/cmmanager/cppacketdataapplugin/tsrc/ut/testcppacketdataapplugin.cpp Mon May 24 20:51:35 2010 +0300 @@ -24,12 +24,17 @@ #include #include #include +#include +#include +#include #include +#include #include #include #include #include "cppacketdataapview.h" +#include "cppacketdataapadvancedview.h" #include "hbautotest.h" #include "testcppacketdataapplugin.h" @@ -50,28 +55,30 @@ static const int waitTime = 10; // UI coordinates -static const QPoint sideTop(350, 60); -static const QPoint scrollStart(350, 300); -static const QPoint scrollStop(350, 240); +static const QPoint scrollMiddle(350, 280); +static const QPoint scrollTop(350, 30); +static const QPoint scrollBottom(350, 540); -static const QPoint messageBoxOkButton(170, 320); - -// These are measured when view is scrolled to top -static const QPoint connectionNameLineEdit(330, 110); - -static const QPoint accessPointNameLineEdit(330, 190); +// 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 userNameLineEdit(330, 265); +static const QPoint exitEditorOffset(-10, -20); -// These are measured when view is scrolled to bottom -static const QPoint passwordPromptCheckbox(50, 295); -static const QPoint passwordLineEdit(330, 380); +static const QPoint messageBoxOkButtonOffset(160, 140); -static const QPoint authenticationComboBox(175, 470); -static const QPoint authenticationSecure(100, 420); -static const QPoint authenticationNormal(100, 365); +// Advanced settings groups +static const QPoint ipGroup(160, 10); +static const QPoint proxyGroup(160, 60); -static const QPoint homepageLineEdit(330, 555); +// Test strings +static const QString tooLongUserName = + "too long name 123456789012345678901234567890123456THISISEXTRA"; +static const QString truncatedUserName = + "too long name 123456789012345678901234567890123456"; // ----------------------------------------------------------------------------- // FRAMEWORK FUNCTIONS @@ -111,15 +118,20 @@ // Load plugin QDir dir(pluginDir); - QPluginLoader loader(dir.absoluteFilePath(pluginName)); - mPlugin = qobject_cast(loader.instance()); + 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(); } /** @@ -129,6 +141,11 @@ { delete mMainWindow; mMainWindow = 0; + + // Force unloading of plugin + mPluginLoader->unload(); + delete mPluginLoader; + mPluginLoader = 0; } /** @@ -158,15 +175,16 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::CmNameLength); + QString text = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -184,11 +202,11 @@ QTest::addColumn("result"); QTest::newRow("maximum length") - << "really long name 1234567890123" - << "really long name 1234567890123"; + << "really long name 123456789012345678901234567890123" + << "really long name 123456789012345678901234567890123"; QTest::newRow("too long") - << "too long name 123456789012345678901234567890" - << "too long name 1234567890123456"; + << "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"; @@ -202,16 +220,20 @@ QString previous = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); - HbAutoTest::mouseClick(mMainWindow, mTestView, connectionNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::CmNameLength); + QString text = mTestView->mConnectionNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mConnectionNameWidget, exitEditorOffset); QTest::qWait(100); // Dismiss messagebox - HbAutoTest::mouseClick(mMainWindow, mTestView, messageBoxOkButton); + HbAutoTest::mouseClick( + mMainWindow, + mTestView->mMessageBox.data(), + messageBoxOkButtonOffset); // Verify both commsdat and UI widget subVerifyString( @@ -228,15 +250,16 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, accessPointNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::PacketDataAPNameLength); + QString text = mTestView->mAccessPointNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -272,16 +295,20 @@ QString previous = mTestView->mAccessPointNameItem->contentWidgetData("text").toString(); - HbAutoTest::mouseClick(mMainWindow, mTestView, accessPointNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::PacketDataAPNameLength); + QString text = mTestView->mAccessPointNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mAccessPointNameWidget, exitEditorOffset); QTest::qWait(100); // Dismiss messagebox - HbAutoTest::mouseClick(mMainWindow, mTestView, messageBoxOkButton); + HbAutoTest::mouseClick( + mMainWindow, + mTestView->mMessageBox.data(), + messageBoxOkButtonOffset); // Verify both commsdat and UI widget subVerifyString( @@ -290,6 +317,33 @@ 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. */ @@ -298,15 +352,16 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, userNameLineEdit); + HbAutoTest::mouseClick(mMainWindow, mUserNameWidget); // Erase old string - subClearLineEdit(CMManagerShim::PacketDataIFAuthNameLength); + QString text = mTestView->mUserNameItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mUserNameWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -323,13 +378,12 @@ QTest::addColumn("string"); QTest::addColumn("result"); -// Long strings don't work, Orbit bug? Screen goes blank -// 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("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"; @@ -343,11 +397,7 @@ */ void TestCpPacketDataApPlugin::tcScrollToBottom() { - // Scroll to the bottom of the view - HbAutoTest::mousePress(mMainWindow, mTestView, scrollStart); - QTest::qWait(500); - HbAutoTest::mouseMove(mMainWindow, mTestView, scrollStop); - HbAutoTest::mouseRelease(mMainWindow, mTestView, scrollStop); + subScrollToBottom(); } /** @@ -359,25 +409,22 @@ bool prompt = subGetBool(CMManagerShim::PacketDataIFPromptForAuth); if (prompt) { // Disable prompt for password - HbAutoTest::mouseClick( - mMainWindow, - mTestView, - passwordPromptCheckbox); + HbAutoTest::mouseClick(mMainWindow, mPasswordPromptWidget); } // Enable prompt for password and verify - HbAutoTest::mouseClick(mMainWindow, mTestView, passwordPromptCheckbox); + HbAutoTest::mouseClick(mMainWindow, mPasswordPromptWidget); subVerifyBool( CMManagerShim::PacketDataIFPromptForAuth, true); // Verify that password lineedit is disabled, following steps will // fail if editing is allowed - HbAutoTest::mouseClick(mMainWindow, mTestView, passwordLineEdit); + HbAutoTest::mouseClick(mMainWindow, mPasswordWidget); QTest::qWait(waitTime); // Disable prompt for password and verify - HbAutoTest::mouseClick(mMainWindow, mTestView, passwordPromptCheckbox); + HbAutoTest::mouseClick(mMainWindow, mPasswordPromptWidget); subVerifyBool( CMManagerShim::PacketDataIFPromptForAuth, false); @@ -391,15 +438,16 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, passwordLineEdit); + HbAutoTest::mouseClick(mMainWindow, mPasswordWidget); // Erase old string - subClearLineEdit(CMManagerShim::PacketDataIFAuthPassLength); + QString text = mTestView->mPasswordItem->contentWidgetData("text").toString(); + subClearLineEdit(text.size()); // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mPasswordWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -416,13 +464,12 @@ QTest::addColumn("string"); QTest::addColumn("result"); -// Long strings don't work, Orbit bug? Screen goes blank -// 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("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"; @@ -436,19 +483,22 @@ */ void TestCpPacketDataApPlugin::tcChangeAuthenticationMode() { + QPointF normalPointOffset = comboBoxFirstItemOffset; + QPointF securePointOffset = comboBoxFirstItemOffset + comboBoxItemOffset; + // Set authentication mode to secure - HbAutoTest::mouseClick(mMainWindow, mTestView, authenticationComboBox, 100); + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget); QTest::qWait(100); - HbAutoTest::mouseClick(mMainWindow, mTestView, authenticationSecure, 100); + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget, securePointOffset); subVerifyBool( CMManagerShim::PacketDataDisablePlainTextAuth, true); // Set authentication mode to normal - HbAutoTest::mouseClick(mMainWindow, mTestView, authenticationComboBox, 100); + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget); QTest::qWait(100); - HbAutoTest::mouseClick(mMainWindow, mTestView, authenticationNormal, 100); + HbAutoTest::mouseClick(mMainWindow, mAuthenticationWidget, normalPointOffset); subVerifyBool( CMManagerShim::PacketDataDisablePlainTextAuth, @@ -463,7 +513,7 @@ QFETCH(QString, string); QFETCH(QString, result); - HbAutoTest::mouseClick(mMainWindow, mTestView, homepageLineEdit); + HbAutoTest::mouseClick(mMainWindow, mHomepageWidget); // Erase old string QString text = mTestView->mHomepageItem->contentWidgetData("text").toString(); @@ -472,7 +522,7 @@ // Enter new string HbAutoTest::keyClicks(mMainWindow, string, 0, waitTime); - HbAutoTest::mouseClick(mMainWindow, mTestView, sideTop); + HbAutoTest::mouseClick(mMainWindow, mHomepageWidget, exitEditorOffset); // Verify both commsdat and UI widget subVerifyString( @@ -489,10 +539,9 @@ QTest::addColumn("string"); QTest::addColumn("result"); -// Doesn't work always, view goes blank sometimes, Orbit bug? -// 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("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/"; @@ -502,9 +551,9 @@ } /** - * Tests advanced settings view (which is currently empty). + * Opens advanced settings view. */ -void TestCpPacketDataApPlugin::tcAdvancedSettings() +void TestCpPacketDataApPlugin::tcOpenAdvancedSettingsView() { // Launch advanced settings view bool status = connect( @@ -515,8 +564,622 @@ Q_ASSERT(status); emit menuActionTriggered(mTestView->mAdvancedSettingsAction); - QTest::qWait(2000); + 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"); } @@ -526,6 +1189,128 @@ // ----------------------------------------------------------------------------- /** + * 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)); + mPasswordPromptWidget = subGetWidgetByIndex( + mTestView->mForm, + iterator.index(3, 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) @@ -549,6 +1334,8 @@ HbDataFormModelItem *item, QString expected) { + QTest::qWait(waitTime); + // Read attribute value from CommsDat QScopedPointer cmManager(new CmManagerShim); QScopedPointer connectionMethod( @@ -569,17 +1356,15 @@ void TestCpPacketDataApPlugin::subClearLineEdit( uint length) { - // Erase old string - QTest::qWait(5000); // TODO: Remove this when item specific menu doesn't pop up anymore - // Move cursor to end of string - //HbAutoTest::keyClick(mMainWindow, Qt::Key_End, 0, waitTime); // doesn't seem to do anything? + //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( @@ -614,6 +1401,24 @@ } /** + * 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) @@ -636,3 +1441,27 @@ 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); +}