logsui/logsengine/tsrc/at_logsengine/src/at_logsengine.cpp
changeset 21 2f0af9ba7665
parent 0 4a5361db8937
equal deleted inserted replaced
18:acd4e87b24b4 21:2f0af9ba7665
    63 
    63 
    64 void AT_LogsEngine::initTestCase()
    64 void AT_LogsEngine::initTestCase()
    65 {
    65 {
    66     TRAPD( err, clearEventsL() );
    66     TRAPD( err, clearEventsL() );
    67     Q_ASSERT( err == KErrNone );
    67     Q_ASSERT( err == KErrNone );
    68     QTest::qWait(2000);
    68     User::After(2000000);
    69     TRAP( err, writeEventsL() );
    69     TRAP( err, writeEventsL() );
    70     Q_ASSERT( err == KErrNone );
    70     Q_ASSERT( err == KErrNone );
    71     QTest::qWait(2000);
    71     User::After(2000000);
    72     mModel = new LogsModel(LogsModel::LogsFullModel);
    72     mWaiter = new LogsTestModelObserver;
    73     QTest::qWait(5000); // wait model to be populated from db
    73     mModel = new LogsModel(LogsModel::LogsFullModel, true);
       
    74     mModel->refreshData();
       
    75     connect( mModel, SIGNAL( dataChanged(const QModelIndex&,const QModelIndex&)), 
       
    76            mWaiter, SLOT(somethingCompleted()) );
       
    77     connect( mModel, SIGNAL( rowsInserted(const QModelIndex&,int,int)), 
       
    78         mWaiter, SLOT(somethingCompleted()) );
       
    79     connect( mModel, SIGNAL( rowsRemoved(const QModelIndex&,int,int)), 
       
    80         mWaiter, SLOT(somethingCompleted()) );
       
    81     connect( mModel, SIGNAL(modelReset()), 
       
    82         mWaiter, SLOT(somethingCompleted()) );
       
    83     mWaiter->startWaiting(5000);// wait model to be populated from db
    74 }
    84 }
    75 
    85 
    76 void AT_LogsEngine::cleanupTestCase()
    86 void AT_LogsEngine::cleanupTestCase()
    77 {
    87 {
    78     delete mModel;
    88     delete mModel;
    79     mModel = 0;
    89     mModel = 0;
       
    90     delete mWaiter;
    80 }
    91 }
    81 
    92 
    82 
    93 
    83 void AT_LogsEngine::init()
    94 void AT_LogsEngine::init()
    84 {
    95 {
   133         }
   144         }
   134     }
   145     }
   135     QVERIFY( unseenCount == 2 );
   146     QVERIFY( unseenCount == 2 );
   136     QSignalSpy spy( &filter, SIGNAL( markingCompleted(int)));
   147     QSignalSpy spy( &filter, SIGNAL( markingCompleted(int)));
   137     QVERIFY( filter.markEventsSeen() );
   148     QVERIFY( filter.markEventsSeen() );
   138     QTest::qWait(1000); // wait marking completion
   149     connect( &filter, SIGNAL( markingCompleted(int) ), mWaiter, SLOT( somethingCompleted() ) );
       
   150     mWaiter->startWaiting(1000);  // wait marking completion
       
   151     mModel->compressData(); // Force refresh
       
   152     mModel->refreshData();
       
   153     mWaiter->startWaiting(2000);  // wait db refresh completion
   139    
   154    
   140     QVERIFY( spy.count() == 1 );
   155     QVERIFY( spy.count() == 1 );
   141     int seenCount = 0;
   156     int seenCount = 0;
   142     for ( int i = 0; i < filter.rowCount(); i++ ){
   157     for ( int i = 0; i < filter.rowCount(); i++ ){
   143         LogsEvent* event = qVariantValue<LogsEvent*>( 
   158         LogsEvent* event = qVariantValue<LogsEvent*>( 
   144                 filter.data( filter.index(i, 0), LogsModel::RoleFullEvent ) );
   159                 filter.data( filter.index(i, 0), LogsModel::RoleFullEvent ) );
   145         if ( event && event->isRead() ){
   160         if ( event && event->isRead() ){
   146             seenCount++;
   161             seenCount++;
   147         }
   162         }
   148     }
   163     }
   149     QVERIFY( seenCount == 2 );
   164     QCOMPARE( seenCount, 2 );
   150     
   165     
   151 }
   166 }
   152 
   167 
   153 void AT_LogsEngine::testClearEvents()
   168 void AT_LogsEngine::testClearEvents()
   154 {
   169 {
   157     filter.setSourceModel(mModel);
   172     filter.setSourceModel(mModel);
   158     QVERIFY( filter.rowCount() == 2 );
   173     QVERIFY( filter.rowCount() == 2 );
   159     int unseenCount = 0;
   174     int unseenCount = 0;
   160     QSignalSpy spy( &filter, SIGNAL( clearingCompleted(int)));
   175     QSignalSpy spy( &filter, SIGNAL( clearingCompleted(int)));
   161     QVERIFY( filter.clearEvents() );
   176     QVERIFY( filter.clearEvents() );
   162     QTest::qWait(1000); // wait clearing completion
   177     connect( &filter, SIGNAL( clearingCompleted(int) ), mWaiter, SLOT( somethingCompleted() ) );
   163     QVERIFY( filter.rowCount() == 0 );
   178     mWaiter->startWaiting(1000); // wait clearing completion
   164     QVERIFY( spy.count() == 1 );
   179     mModel->compressData(); // Force refresh
       
   180     mModel->refreshData();
       
   181     mWaiter->startWaiting(2000); // wait db update completion
       
   182     QCOMPARE( filter.rowCount(), 0 );
       
   183     QCOMPARE( spy.count(), 1 );
   165 }
   184 }
   166 
   185 
   167 void AT_LogsEngine::testHomeScreenUsecase()
   186 void AT_LogsEngine::testHomeScreenUsecase()
   168 {
   187 {
   169     // Homescreen missed calls notification plugin uses full model with
   188     // Homescreen missed calls notification plugin uses full model with
   174     
   193     
   175     LogsFilter filter(LogsFilter::Missed);
   194     LogsFilter filter(LogsFilter::Missed);
   176     const int maxNumMissedCalls = 2;
   195     const int maxNumMissedCalls = 2;
   177     filter.setMaxSize(maxNumMissedCalls);
   196     filter.setMaxSize(maxNumMissedCalls);
   178     LogsModel optimizedModel(LogsModel::LogsFullModel);   
   197     LogsModel optimizedModel(LogsModel::LogsFullModel);   
   179     QTest::qWait(5000); // wait model to be populated from db
   198     connect( &optimizedModel, SIGNAL( dataChanged(const QModelIndex&,const QModelIndex&)), 
       
   199              mWaiter, SLOT(somethingCompleted()) );
       
   200     connect( &optimizedModel, SIGNAL( rowsInserted(const QModelIndex&,int,int)), 
       
   201         mWaiter, SLOT(somethingCompleted()) );
       
   202     connect( &optimizedModel, SIGNAL( rowsRemoved(const QModelIndex&,int,int)), 
       
   203         mWaiter, SLOT(somethingCompleted()) );
       
   204     connect( &optimizedModel, SIGNAL(modelReset()), 
       
   205         mWaiter, SLOT(somethingCompleted()) );
       
   206     mWaiter->startWaiting(5000);// wait model to be populated from db
   180     filter.setSourceModel(&optimizedModel);
   207     filter.setSourceModel(&optimizedModel);
   181     
   208     
   182     // Test data has 10 missed calls from Jeppa but readsize has been configured to 2 so
   209     // Test data has 10 missed calls from Jeppa but readsize has been configured to 2 so
   183     // reading stops when 2 missed calls has been read
   210     // reading stops when 2 missed calls has been read
   184     QCOMPARE( filter.rowCount(), maxNumMissedCalls );
   211     QCOMPARE( filter.rowCount(), maxNumMissedCalls );
   192     
   219     
   193     // Verify decoration and display data
   220     // Verify decoration and display data
   194     QStringList displayData = filter.data( filter.index(0, 0), Qt::DisplayRole ).toStringList();
   221     QStringList displayData = filter.data( filter.index(0, 0), Qt::DisplayRole ).toStringList();
   195     QVERIFY( displayData.count() == 2 );
   222     QVERIFY( displayData.count() == 2 );
   196     QVERIFY( displayData.at(0) == logsTestHomeScreenMissedCallerName );
   223     QVERIFY( displayData.at(0) == logsTestHomeScreenMissedCallerName );
   197     HbIcon icon = qVariantValue<HbIcon>( filter.data( filter.index(0, 0), Qt::DecorationRole ).toList().at(0) );
   224     QVariant decor = filter.data( filter.index(0, 0), Qt::DecorationRole );
   198     QVERIFY( !icon.isNull() );
   225     QApplication* app = qobject_cast<QApplication*>( qApp );
       
   226     if ( app ){
       
   227         HbIcon icon = qVariantValue<HbIcon>( decor.toList().at(0) );
       
   228         QVERIFY( !icon.isNull() );
       
   229     } else {
       
   230         QVERIFY( decor.isNull() );
       
   231     }
       
   232     
   199     
   233     
   200     // Cenrep missed calls counter is not tested here
   234     // Cenrep missed calls counter is not tested here
   201 }
   235 }
   202 
   236 
   203 void AT_LogsEngine::clearEventsL()
   237 void AT_LogsEngine::clearEventsL()
   219     CleanupClosePushL( process );
   253     CleanupClosePushL( process );
   220     User::LeaveIfError( process.Create( exeName, commandLine ) );
   254     User::LeaveIfError( process.Create( exeName, commandLine ) );
   221     process.Resume();
   255     process.Resume();
   222     CleanupStack::PopAndDestroy( &process );
   256     CleanupStack::PopAndDestroy( &process );
   223 }
   257 }
       
   258 
       
   259 
       
   260 // -----------------------------------------------------------------------------
       
   261 //
       
   262 // -----------------------------------------------------------------------------
       
   263 //
       
   264 
       
   265 LogsTestModelObserver::LogsTestModelObserver() : 
       
   266     mWait(0), mTimer(0), mTimerCallBack(asyncTimerExpired, this)
       
   267 {
       
   268     mTimerEntry.Set(mTimerCallBack);
       
   269     mWait = new CActiveSchedulerWait;
       
   270     mTimer = CDeltaTimer::NewL(CActive::EPriorityStandard);
       
   271     
       
   272 }
       
   273 LogsTestModelObserver::~LogsTestModelObserver()
       
   274 {
       
   275     if ( mTimer ){
       
   276         mTimer->Remove( mTimerEntry );
       
   277     }
       
   278     delete mTimer;
       
   279     if ( mWait && mWait->IsStarted() ){
       
   280         mWait->AsyncStop();
       
   281     }
       
   282     delete mWait;
       
   283     
       
   284 }
       
   285 void LogsTestModelObserver::startWaiting(int timeoutInMsec)
       
   286 {
       
   287     if ( !mWait->IsStarted() ){
       
   288         startTimerForAsync(timeoutInMsec);
       
   289         mWait->Start();
       
   290     }
       
   291 }
       
   292      
       
   293 void LogsTestModelObserver::somethingCompleted()
       
   294 {
       
   295     if ( mWait->IsStarted() ){
       
   296         mWait->AsyncStop();
       
   297     }
       
   298 }
       
   299 void LogsTestModelObserver::startTimerForAsync(int msecs)
       
   300 {
       
   301     mTimer->Remove(mTimerEntry);
       
   302     TTimeIntervalMicroSeconds32 interval(msecs*1000);
       
   303     mTimer->Queue(interval, mTimerEntry);
       
   304 }
       
   305 
       
   306 TInt LogsTestModelObserver::asyncTimerExpired(TAny* ptr)
       
   307 {
       
   308     if ( ptr ){
       
   309         static_cast<LogsTestModelObserver*>( ptr )->somethingCompleted();
       
   310     }
       
   311     return 0;
       
   312 }
       
   313