qthighway/tsrc/at_xqapplicationmanager/at_xqapplicationmanager.cpp
branchRCL_3
changeset 9 5d007b20cfd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qthighway/tsrc/at_xqapplicationmanager/at_xqapplicationmanager.cpp	Tue Aug 31 16:02:37 2010 +0300
@@ -0,0 +1,710 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not,
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:
+*
+*/
+
+
+#include <QtTest/QtTest>
+#include <QObject>
+#include <QUrl>
+#include <QFile>
+#include <QVariantList>
+
+#include <xqaiwrequest.h>
+#include <xqsharablefile.h>
+
+#include "at_xqapplicationmanager.h"
+#include "../inc/testdata.h"
+
+namespace
+{
+    const QString endOfLine("\n");
+    const QString testString("TestString");
+    const QString operation("request(QString)");
+    const QString operation_async("asyncRequest(QString)");
+    const QString testFileStr(drive + ":\\data\\Others\\test.txt");
+
+    const QUrl testUrl("testto://address");
+    
+    const QFile testFile(testFileStr);
+}
+
+
+void Test_XQApplicationManager::init()
+{
+    testSharableFile = new XQSharableFile();
+    QVERIFY2(testSharableFile->open(testFileStr), mLog.join(endOfLine).toAscii());
+    mAppManager = new XQApplicationManager();
+    QVERIFY2(mAppManager != NULL, mLog.join(endOfLine).toAscii()); 
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii()); 
+}
+
+void Test_XQApplicationManager::drm_file()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] drm_file";
+
+#ifdef __WINS__
+    QSKIP("Checking drm attributes does not work correctly on emulator", SkipAll);
+#endif
+    
+    QStringList logmem = mLog;
+    
+    foreach (QString fileStr, testData.files.keys()) {
+        QFile file(fileStr);
+        QVariantList drmValues;
+        mAppManager->getDrmAttributes(file, listDrmAttr(), drmValues);
+        
+        mLog << "[QTH] [Test_XQApplicationManager] drm_file:" + fileStr;
+        
+        foreach (QVariant value, testData.files[fileStr].values()) {
+            if (!value.isValid())
+                mLog << "[QTH] [Test_XQApplicationManager] test attribute: not valid";
+            else if (value.type() == QVariant::Int)
+                mLog << "[QTH] [Test_XQApplicationManager] test attribute:" + QString::number(value.toInt());
+            else if (value.type() == QVariant::String)
+                mLog << "[QTH] [Test_XQApplicationManager] test attribute:" + value.toString();
+        }
+        
+        foreach (QVariant value, drmValues) {
+            if (!value.isValid())
+                mLog << "[QTH] [Test_XQApplicationManager] getDrmAttributes: not valid";
+            else if (value.type() == QVariant::Int)
+                mLog << "[QTH] [Test_XQApplicationManager] getDrmAttributes:" + QString::number(value.toInt());
+            else if (value.type() == QVariant::String)
+                mLog << "[QTH] [Test_XQApplicationManager] getDrmAttributes:" + value.toString();
+        }
+        
+        QVERIFY2(testData.files[fileStr].values() == drmValues, mLog.join(endOfLine).toAscii());
+        mLog = logmem;
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] drm_file end";
+}
+
+void Test_XQApplicationManager::drm_sharablefile()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] drm_sharablefile";
+    
+#ifdef __WINS__
+    QSKIP("Checking drm attributes does not work correctly on emulator", SkipAll);
+#endif
+    
+    QStringList logmem = mLog;
+
+    foreach (QString fileStr, testData.files.keys()) {
+        XQSharableFile sharableFile;
+        QVariantList drmValues;
+        
+        sharableFile.open(fileStr);
+        mAppManager->getDrmAttributes(sharableFile, listDrmAttr(), drmValues);
+        sharableFile.close();
+        
+        mLog << "[QTH] [Test_XQApplicationManager] drm_sharablefile:" + fileStr;
+        foreach (QVariant value, testData.files[fileStr].values()) {
+            if (!value.isValid())
+                mLog << "[QTH] [Test_XQApplicationManager] test attribute: not valid";
+            else if (value.type() == QVariant::Int)
+                mLog << "[QTH] [Test_XQApplicationManager] test attribute:" + QString::number(value.toInt());
+            else if (value.type() == QVariant::String)
+                mLog << "[QTH] [Test_XQApplicationManager] test attribute:" + value.toString();
+        }
+        
+        foreach (QVariant value, drmValues) {
+            if (!value.isValid())
+                mLog << "[QTH] [Test_XQApplicationManager] getDrmAttributes: not valid";
+            else if (value.type() == QVariant::Int)
+                mLog << "[QTH] [Test_XQApplicationManager] getDrmAttributes:" + QString::number(value.toInt());
+            else if (value.type() == QVariant::String)
+                mLog << "[QTH] [Test_XQApplicationManager] getDrmAttributes:" + value.toString();
+        }
+        
+        QVERIFY2(testData.files[fileStr].values() == drmValues, mLog.join(endOfLine).toAscii());
+        mLog = logmem;
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] drm_sharablefile end";
+}
+
+void Test_XQApplicationManager::list_interface()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] list_interface";
+    
+    foreach (QString interface, testData.interfaces.keys()) {
+        if (interface == IUriView || interface == IFileView)
+            continue;
+    
+        QList<XQAiwInterfaceDescriptor> list = mAppManager->list(interface, operation);
+        
+        mLog << "[QTH] [Test_XQApplicationManager] list_interface interfaces defined:" 
+                 + QString::number(testData.interfaces.values(interface).count());
+        mLog << "[QTH] [Test_XQApplicationManager] list_interface system interfaces:" 
+                 + QString::number(list.count());
+        QVERIFY2(list.count() == testData.interfaces.values(interface).count(), mLog.join(endOfLine).toAscii());
+        
+        foreach (XQAiwInterfaceDescriptor interfaceDesc, list) {
+            bool equal = false;
+            foreach (InterfaceData* interfaceData, testData.interfaces.values(interface)) {
+                if (interfaceData->compare(interfaceDesc, mLog)) {
+                    equal = true;
+                    break;
+                }
+            }
+            
+            mLog << "[QTH] [Test_XQApplicationManager] list_interface service name:" + interfaceDesc.serviceName();
+            mLog << "[QTH] [Test_XQApplicationManager] list_interface interface name:" + interfaceDesc.interfaceName();
+            mLog << "[QTH] [Test_XQApplicationManager] list_interface interface OK?:" + QString::number((int)equal) << QString::number((int)interfaceDesc.isValid());
+            
+            QVERIFY2(equal, mLog.join(endOfLine).toAscii());
+            QVERIFY2(interfaceDesc.isValid(), mLog.join(endOfLine).toAscii());
+        }
+    }
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] list_interface end";
+}
+
+void Test_XQApplicationManager::list_service_interface()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] list_service_interface";
+    
+    foreach (InterfaceData* interfaceData1, testData.interfaces.values()) {
+        if (interfaceData1->mInterfaceName == IUriView || interfaceData1->mInterfaceName == IFileView)
+            continue;
+        
+        QList<XQAiwInterfaceDescriptor> list = mAppManager->list(interfaceData1->mServiceName, interfaceData1->mInterfaceName, operation);
+        
+        int countInterfaces = 0;
+        foreach (XQAiwInterfaceDescriptor interfaceDesc, list) {
+            bool equal = false;
+            foreach (InterfaceData* interfaceData2, testData.interfaces.values(interfaceData1->mInterfaceName))
+            {
+                if (interfaceData2->compare(interfaceDesc, mLog))
+                    equal = true;
+                if (interfaceData2->mServiceName == interfaceData1->mServiceName)
+                    countInterfaces++;
+            }
+            
+            mLog << "[QTH] [Test_XQApplicationManager] list_service_interface service name:" + interfaceDesc.serviceName();
+            mLog << "[QTH] [Test_XQApplicationManager] list_service_interface interface name:" + interfaceDesc.interfaceName();
+            mLog << "[QTH] [Test_XQApplicationManager] list_service_interface interface OK?:" + QString::number((int)equal)
+                                                                                              + QString::number((int)interfaceDesc.isValid());
+            
+            QVERIFY2(equal, mLog.join(endOfLine).toAscii());
+            QVERIFY2(interfaceDesc.isValid(), mLog.join(endOfLine).toAscii());
+        }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] list_service_interface interfaces defined:" 
+                 + QString::number(countInterfaces);
+        mLog << "[QTH] [Test_XQApplicationManager] list_service_interface system interfaces:" 
+                 + QString::number(list.count());
+        QVERIFY2(list.count() == countInterfaces, mLog.join(endOfLine).toAscii());
+    }
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] list_service_interface end";
+}
+
+void Test_XQApplicationManager::list_uri()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] list_uri";
+    
+    QList<XQAiwInterfaceDescriptor> list = mAppManager->list(testUrl);
+    
+    mLog << "[QTH] [Test_XQApplicationManager] list_uri interfaces defined:" 
+             + QString::number(testData.interfaces.values(IUriView).count());
+    mLog << "[QTH] [Test_XQApplicationManager] list_uri system interfaces:" 
+             + QString::number(list.count());    
+    QVERIFY2(list.count() == testData.interfaces.values(IUriView).count(), mLog.join(endOfLine).toAscii());
+    
+    foreach (XQAiwInterfaceDescriptor interfaceDesc, list) {
+        bool equal = false;
+        foreach (InterfaceData* interfaceData, testData.interfaces.values(IUriView))
+            if (interfaceData->compare(interfaceDesc, mLog))
+            {
+                equal = true;
+                break;
+            }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] list_uri service name:" + interfaceDesc.serviceName();
+        mLog << "[QTH] [Test_XQApplicationManager] list_uri interface name:" + interfaceDesc.interfaceName();
+        mLog << "[QTH] [Test_XQApplicationManager] list_uri interface OK?:" + QString::number((int)equal) 
+                                                                            + QString::number((int)interfaceDesc.isValid());
+                    
+        QVERIFY2(equal, mLog.join(endOfLine).toAscii());
+        QVERIFY2(interfaceDesc.isValid(), mLog.join(endOfLine).toAscii());
+    }
+    
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] list_uri end";
+}
+
+void Test_XQApplicationManager::list_file()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] list_file";
+    
+    QSKIP("Currently function list(const QFile& file) returns maximum one interface", SkipAll);
+    
+    QList<XQAiwInterfaceDescriptor> list = mAppManager->list(testFile);
+    
+    foreach (InterfaceData* interfaceData, testData.interfaces.values(IFileView)) {
+        bool equal = false;
+        foreach (XQAiwInterfaceDescriptor interfaceDesc, list)
+            if (interfaceData->compare(interfaceDesc, mLog)) {
+                equal = true;
+                break;
+            }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] list_file service name:" + interfaceData->mServiceName;
+        mLog << "[QTH] [Test_XQApplicationManager] list_file interface name:" + interfaceData->mInterfaceName;
+        mLog << "[QTH] [Test_XQApplicationManager] list_file interface OK?:" + QString::number((int)equal);
+        
+        QVERIFY2(equal, mLog.join(endOfLine).toAscii());
+    }
+    
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] list_file end";
+}
+
+void Test_XQApplicationManager::list_sharablefile()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] list_sharablefile";
+
+    QSKIP("Currently function list(const XQSharableFile& file) returns maximum one interface", SkipAll);
+    
+    QList<XQAiwInterfaceDescriptor> list = mAppManager->list(*testSharableFile);
+    
+    foreach (InterfaceData* interfaceData, testData.interfaces.values(IFileView)) {
+        bool equal = false;
+        foreach (XQAiwInterfaceDescriptor interfaceDesc, list) {
+            if (interfaceData->compare(interfaceDesc, mLog)) {
+                equal = true;
+                break;
+            }
+        }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] list_sharablefile service name:" + interfaceData->mServiceName;
+        mLog << "[QTH] [Test_XQApplicationManager] list_sharablefile interface name:" + interfaceData->mInterfaceName;
+        mLog << "[QTH] [Test_XQApplicationManager] list_sharablefile interface OK?:" + QString::number((int)equal);
+        
+        QVERIFY2(equal, mLog.join(endOfLine).toAscii());
+    }
+    
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] list_sharablefile end";
+}
+
+void Test_XQApplicationManager::create_interface()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_interface";
+    
+    foreach (QString interface, testData.interfaces.keys()) {
+        if (interface == IUriView || interface == IFileView)
+            continue;
+        
+        mLog << "[QTH] [Test_XQApplicationManager] create_interface:" + interface;
+        
+        {
+            XQAiwRequest* request = mAppManager->create(interface, operation, true);
+            testRequest(request, operation, testString, true, true);
+            delete request;
+        }
+        
+        {
+            XQAiwRequest* request = mAppManager->create(interface, operation_async, true);
+            testRequest(request, operation_async, testString, true, false);
+            delete request;
+        }
+        
+        {
+            XQAiwRequest* request = mAppManager->create(interface, operation, false);
+            testRequest(request, operation, testString, false, true);
+            delete request;
+        }
+        
+        {
+            XQAiwRequest* request = mAppManager->create(interface, operation_async, false);
+            testRequest(request, operation_async, testString, false, false);
+            delete request;
+        }
+    }
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_interface end";
+}
+
+void Test_XQApplicationManager::create_service_interface()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_service_interface";
+
+    foreach (InterfaceData* interfaceData, testData.interfaces.values()) {
+        if (interfaceData->mInterfaceName == IUriView || interfaceData->mInterfaceName == IFileView)
+           continue;
+    
+        mLog << "[QTH] [Test_XQApplicationManager] create_service_interface service:" + interfaceData->mServiceName;
+        mLog << "[QTH] [Test_XQApplicationManager] create_service_interface interface:" + interfaceData->mInterfaceName;
+        
+        {
+            XQAiwRequest* request = mAppManager->create(interfaceData->mServiceName, interfaceData->mInterfaceName, operation, true);
+            testRequest(request, operation, testString, true, true);
+            delete request;
+        }
+            
+        {
+            XQAiwRequest* request = mAppManager->create(interfaceData->mServiceName, interfaceData->mInterfaceName, operation_async, true);
+            testRequest(request, operation_async, testString, true, false);
+            delete request;
+        }
+            
+        {
+            XQAiwRequest* request = mAppManager->create(interfaceData->mServiceName, interfaceData->mInterfaceName, operation, false);
+            testRequest(request, operation, testString, false, true);
+            delete request;
+        }
+            
+        {
+            XQAiwRequest* request = mAppManager->create(interfaceData->mServiceName, interfaceData->mInterfaceName, operation_async, false);
+            testRequest(request, operation_async, testString, false, false);
+            delete request;
+        }
+    }
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_service_interface end";
+}
+
+void Test_XQApplicationManager::create_implementation()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_implementation";
+
+    foreach (InterfaceData* interfaceData, testData.interfaces.values()) {
+        if (interfaceData->mInterfaceName == IUriView || interfaceData->mInterfaceName == IFileView)
+            continue;
+        foreach (XQAiwInterfaceDescriptor interfaceDesc, mAppManager->list(interfaceData->mServiceName, interfaceData->mInterfaceName, operation)) {
+            mLog << "[QTH] [Test_XQApplicationManager] create_implementation service:" + interfaceDesc.interfaceName();
+            mLog << "[QTH] [Test_XQApplicationManager] create_implementation interface:" + interfaceDesc.serviceName();
+            mLog << "[QTH] [Test_XQApplicationManager] create_implementation version:" 
+                     + QString::number(interfaceDesc.majorVersion()) + "." + QString::number(interfaceDesc.minorVersion());
+            
+            {
+                XQAiwRequest* request = mAppManager->create(interfaceDesc, operation, true);
+                testRequest(request, operation, testString, true, true);
+                delete request;
+            }
+                
+            {
+                XQAiwRequest* request = mAppManager->create(interfaceDesc, operation_async, true);
+                testRequest(request, operation_async, testString, true, false);
+                delete request;
+            }
+                
+            {
+                XQAiwRequest* request = mAppManager->create(interfaceDesc, operation, false);
+                testRequest(request, operation, testString, false, true);
+                delete request;
+            }
+                
+            {
+                XQAiwRequest* request = mAppManager->create(interfaceDesc, operation_async, false);
+                testRequest(request, operation_async, testString, false, false);
+                delete request;
+            }
+        }
+    }
+    
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_implementation end";
+}
+
+void Test_XQApplicationManager::create_uri()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_uri";
+
+    {
+        XQAiwRequest* request = mAppManager->create(testUrl, true);
+        testRequest(request, QString(), testUrl.toString(), true, true);
+        delete request;
+    }
+        
+    {
+        XQAiwRequest* request = mAppManager->create(testUrl, false);
+        testRequest(request, QString(), testUrl.toString(), false, true);
+        delete request;
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_uri end";
+}
+
+void Test_XQApplicationManager::create_uri_implementation()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_uri_implementation";
+
+    QList<XQAiwInterfaceDescriptor> list = mAppManager->list(testUrl);
+    
+    foreach (XQAiwInterfaceDescriptor interfaceDesc, list)
+        foreach (InterfaceData* interfaceData, testData.interfaces.values(IUriView))
+        {
+            if (interfaceData->compare(interfaceDesc, mLog)) {
+                {
+                    XQAiwRequest* request = mAppManager->create(testUrl, interfaceDesc, true);
+                    testRequest(request, QString(), testUrl.toString(), true, true);
+                    delete request;
+                }
+                    
+                {
+                    XQAiwRequest* request = mAppManager->create(testUrl, interfaceDesc, false);
+                    testRequest(request, QString(), testUrl.toString(), false, true);
+                    delete request;
+                }
+            }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] create_uri_implementation service:" + interfaceDesc.interfaceName();
+        mLog << "[QTH] [Test_XQApplicationManager] create_uri_implementation interface:" + interfaceDesc.serviceName();
+        mLog << "[QTH] [Test_XQApplicationManager] create_uri_implementation version:" 
+                 + QString::number(interfaceDesc.majorVersion()) + "." + QString::number(interfaceDesc.minorVersion());
+        
+        QVERIFY2(interfaceDesc.isValid(), mLog.join(endOfLine).toAscii());
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_uri_implementation end";
+}
+
+void Test_XQApplicationManager::create_file()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_file";
+
+    {
+        XQAiwRequest* request = mAppManager->create(testFile, true);
+        testRequest(request, QString(), testFileStr, true, true);
+        delete request;
+    }
+        
+    {
+        XQAiwRequest* request = mAppManager->create(testFile, false);
+        testRequest(request, QString(), testFileStr, false, true);
+        delete request;
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_file end";
+}
+
+void Test_XQApplicationManager::create_file_implementation()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_file_implementation";
+
+    QList<XQAiwInterfaceDescriptor> list = mAppManager->list(testFile);
+    QVERIFY2(list.count() > 0, mLog.join(endOfLine).toAscii());
+    
+    foreach (XQAiwInterfaceDescriptor interfaceDesc, list)
+        foreach (InterfaceData* interfaceData, testData.interfaces.values(IFileView)) {
+            if (interfaceData->compare(interfaceDesc, mLog)) {
+                {
+                    XQAiwRequest* request = mAppManager->create(testFile, interfaceDesc, true);
+                    testRequest(request, QString(), testFileStr, true, true);
+                    delete request;
+                }
+                    
+                {
+                    XQAiwRequest* request = mAppManager->create(testFile, interfaceDesc, false);
+                    testRequest(request, QString(), testFileStr, false, true);
+                    delete request;
+                }
+            }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] create_file_implementation service:" + interfaceDesc.interfaceName();
+        mLog << "[QTH] [Test_XQApplicationManager] create_file_implementation interface:" + interfaceDesc.serviceName();
+        mLog << "[QTH] [Test_XQApplicationManager] create_file_implementation version:" 
+                 + QString::number(interfaceDesc.majorVersion()) + "." + QString::number(interfaceDesc.minorVersion());
+        
+        QVERIFY2(interfaceDesc.isValid(), mLog.join(endOfLine).toAscii());
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_file_implementation end";
+}
+
+void Test_XQApplicationManager::create_sharablefile()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile";
+    
+    {
+        XQAiwRequest* request = mAppManager->create(*testSharableFile, true);
+        testRequest(request, QString(), QString(), true, true, testSharableFile);
+        delete request;
+    }
+        
+    {
+        XQAiwRequest* request = mAppManager->create(*testSharableFile, false);
+        testRequest(request, QString(), testFileStr, false, true, testSharableFile);
+        delete request;
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile end";
+}
+
+void Test_XQApplicationManager::create_sharablefile_implementation()
+{
+    mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile_implementation";
+    
+    QList<XQAiwInterfaceDescriptor> list = mAppManager->list(*testSharableFile);
+    QVERIFY2(list.count() > 0, mLog.join(endOfLine).toAscii());
+    
+    foreach (XQAiwInterfaceDescriptor interfaceDesc, list) {
+        foreach (InterfaceData* interfaceData, testData.interfaces.values(IFileView)) {
+            if (interfaceData->compare(interfaceDesc, mLog)) {
+                {
+                    XQAiwRequest* request = mAppManager->create(*testSharableFile, interfaceDesc, true);
+                    testRequest(request, QString(), testFileStr, true, true, testSharableFile);
+                    delete request;
+                }
+                    
+                {
+                    XQAiwRequest* request = mAppManager->create(*testSharableFile, interfaceDesc, false);
+                    testRequest(request, QString(), testFileStr, false, true, testSharableFile);
+                    delete request;
+                }
+            }
+        }
+        
+        mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile_implementation service:" + interfaceDesc.interfaceName();
+        mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile_implementation interface:" + interfaceDesc.serviceName();
+        mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile_implementation version:" 
+                 + QString::number(interfaceDesc.majorVersion()) + "." + QString::number(interfaceDesc.minorVersion());
+        
+        QVERIFY2(interfaceDesc.isValid(), mLog.join(endOfLine).toAscii());
+    }
+            
+    QVERIFY2(mAppManager->lastError() == XQService::ENoError, mLog.join(endOfLine).toAscii());
+    
+    mLog << "[QTH] [Test_XQApplicationManager] create_sharablefile_implementation end";
+}
+
+const QList<int> Test_XQApplicationManager::listDrmAttr()
+{
+    QList<int> attr;
+    
+    attr.append(XQApplicationManager::IsProtected);
+    attr.append(XQApplicationManager::IsForwardable);
+    attr.append(XQApplicationManager::Description);
+    attr.append(XQApplicationManager::MimeType);
+    
+    return attr;
+}
+
+
+void Test_XQApplicationManager::cleanup()
+{
+    delete mAppManager;
+    mAppManager = NULL;
+    mLog.clear();
+    testSharableFile->close();
+    delete testSharableFile;
+    testSharableFile = NULL;
+}
+
+void Test_XQApplicationManager::testRequest(XQAiwRequest* request, const QString &operation, 
+        const QString &arguments, bool embedded, bool synchronous, XQSharableFile *sharablefile)
+{
+    QVERIFY2(request != NULL, mLog.join(endOfLine).toAscii());
+    
+    QVERIFY2(request->isEmbedded() == embedded, mLog.join(endOfLine).toAscii());
+    
+    request->setSynchronous(synchronous);
+    QVERIFY2(request->isSynchronous() == synchronous, mLog.join(endOfLine).toAscii());
+    
+    if (!operation.isEmpty())
+        QVERIFY2(request->operation() == operation, mLog.join(endOfLine).toAscii());
+    
+    QList<QVariant> args;
+    if (sharablefile) {
+        args << qVariantFromValue(*sharablefile);
+    } else {
+        args << arguments;
+    }
+    
+    request->setArguments(args);
+    
+    connect(request, SIGNAL(requestOk(const QVariant&)), this, SLOT(handleOk(const QVariant&)));
+    connect(request, SIGNAL(requestError(int,const QString&)), this, SLOT(handleError(int,const QString&)));
+    
+    mLog << "[QTH] [Test_XQApplicationManager] send " + operation;
+    mServiceAnswered = false;
+    QVERIFY2(request->send(), mLog.join(endOfLine).toAscii());
+   
+    if (!operation.isEmpty()) {
+        while (!mServiceAnswered)
+            QTest::qWait(20);
+        
+        QStringList retList = returnValue.toStringList();
+        
+        QVERIFY2(retList.value(0) == request->descriptor().serviceName(), mLog.join(endOfLine).toAscii());
+        QVERIFY2(retList.value(1) == request->descriptor().interfaceName(), mLog.join(endOfLine).toAscii());
+        QVERIFY2(retList.value(2) == testString, mLog.join(endOfLine).toAscii());
+    }
+    else
+        QTest::qWait(100);
+}
+
+void Test_XQApplicationManager::handleOk(const QVariant& ret)
+{
+    mLog << "[QTH] [Test_XQApplicationManager] request results:" + ret.toStringList().join(", ");
+    returnValue = ret;
+    mServiceAnswered = true;
+}
+
+void Test_XQApplicationManager::handleError(int err ,const QString& errString)
+{
+    mLog << "[QTH] [Test_XQApplicationManager] handleError: " + errString; 
+    mLog << "[QTH] [Test_XQApplicationManager] err: " + QString::number(err);
+    mServiceAnswered = true;
+}
+
+int main (int argc, char* argv[]) 
+{
+    QApplication app(argc, argv);
+    QTEST_DISABLE_KEYPAD_NAVIGATION
+    Test_XQApplicationManager tc;
+    int ret = 0;
+    if (argc == 1) {
+        int c = 5;
+        char* v[] = {argv[0], "-o", "c:/at_am.txt", "-maxwarnings", "0"};
+        ret = QTest::qExec(&tc, c, v);
+    }
+    else {
+        ret = QTest::qExec(&tc, argc, argv);
+    }
+    return ret;
+}
+