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 |