|
1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // Example CTestStep derived implementation |
|
15 // |
|
16 // |
|
17 |
|
18 /** |
|
19 @file ModuleClassesStep.cpp |
|
20 @internalTechnology |
|
21 */ |
|
22 #include "moduleclassesstep.h" |
|
23 #include "te_lbsapisuitedefs.h" |
|
24 |
|
25 #include "lcfsbucommondefinitions.h" |
|
26 |
|
27 #include <lbs.h> |
|
28 #include <lbssatellite.h> |
|
29 |
|
30 CModuleClassesStep::~CModuleClassesStep() |
|
31 /** |
|
32 * Destructor |
|
33 */ |
|
34 { |
|
35 } |
|
36 |
|
37 CModuleClassesStep::CModuleClassesStep() |
|
38 /** |
|
39 * Constructor |
|
40 */ |
|
41 { |
|
42 // **MUST** call SetTestStepName in the constructor as the controlling |
|
43 // framework uses the test step name immediately following construction to set |
|
44 // up the step's unique logging ID. |
|
45 SetTestStepName(KModuleClassesStep); |
|
46 } |
|
47 |
|
48 TVerdict CModuleClassesStep::doTestStepPreambleL() |
|
49 /** |
|
50 * @return - TVerdict code |
|
51 * Override of base class virtual |
|
52 */ |
|
53 { |
|
54 CTe_LbsApiSuiteStepBase::doTestStepPreambleL(); |
|
55 if (TestStepResult()!=EPass) |
|
56 return TestStepResult(); |
|
57 // process some pre setting to this test step then set SetTestStepResult to EFail or Epass. |
|
58 SetTestStepResult(EPass); |
|
59 return TestStepResult(); |
|
60 } |
|
61 |
|
62 |
|
63 TVerdict CModuleClassesStep::doTestStepL() |
|
64 /** |
|
65 * @return - TVerdict code |
|
66 * Override of base class pure virtual |
|
67 * Our implementation only gets called if the base class doTestStepPreambleL() did |
|
68 * not leave. That being the case, the current test result value will be EPass. |
|
69 */ |
|
70 { |
|
71 if (TestStepResult()==EPass) |
|
72 { |
|
73 TInt test; |
|
74 if(!GetIntFromConfig(ConfigSection(),KTe_LbsApiSuiteInt,test) |
|
75 ) |
|
76 { |
|
77 // Leave if there's any error. |
|
78 User::Leave(KErrNotFound); |
|
79 } |
|
80 SetTestStepResult(EPass); |
|
81 StartL(test); |
|
82 } |
|
83 return TestStepResult(); |
|
84 } |
|
85 |
|
86 |
|
87 |
|
88 TVerdict CModuleClassesStep::doTestStepPostambleL() |
|
89 /** |
|
90 * @return - TVerdict code |
|
91 * Override of base class virtual |
|
92 */ |
|
93 { |
|
94 return TestStepResult(); |
|
95 } |
|
96 |
|
97 |
|
98 void CModuleClassesStep::StartL(TInt aIndex) |
|
99 { |
|
100 switch (aIndex) |
|
101 { |
|
102 case 0: |
|
103 TPositionModuleInfo_ConstructionL (); |
|
104 break; |
|
105 case 1: |
|
106 TPositionModuleInfo_GettersL (); |
|
107 break; |
|
108 case 2: |
|
109 TPositionModuleInfo_InvalidL (); |
|
110 break; |
|
111 case 3: |
|
112 TPositionQuality_ConstructionL (); |
|
113 break; |
|
114 case 4: |
|
115 TPositionQuality_SettersL (); |
|
116 break; |
|
117 case 5: |
|
118 TPositionQuality_InvalidL (); |
|
119 break; |
|
120 case 6: |
|
121 TPositionQuality_ComparisonL (); |
|
122 break; |
|
123 case 7: |
|
124 ModuleClasses_ConstructionL (); |
|
125 break; |
|
126 case 8: |
|
127 ModuleClasses_SettersL (); |
|
128 break; |
|
129 case 9: |
|
130 TPositionUpdateOptions_InvalidL (); |
|
131 break; |
|
132 default: |
|
133 break; |
|
134 } |
|
135 } |
|
136 |
|
137 |
|
138 // |
|
139 // |
|
140 // TPositionModuleInfo |
|
141 // |
|
142 // |
|
143 |
|
144 // 6.1.1. Construction |
|
145 void CModuleClassesStep::TPositionModuleInfo_ConstructionL() |
|
146 { |
|
147 DECLARE_ERROR_LOGGING; |
|
148 StandardPrepareL(); |
|
149 |
|
150 TPositionModuleInfo posModInfo; |
|
151 |
|
152 CHECK_EQUAL_(sizeof(TPositionModuleInfo), posModInfo.PositionClassSize()); |
|
153 CHECK(EPositionModuleInfoClass == posModInfo.PositionClassType()); |
|
154 |
|
155 CHECK(KPositionNullModuleId.iUid == posModInfo.ModuleId().iUid); |
|
156 |
|
157 TPositionQuality posQuality; |
|
158 posModInfo.GetPositionQuality(posQuality); |
|
159 CHECK(Math::IsNaN(posQuality.HorizontalAccuracy())); // new pos quality |
|
160 |
|
161 CHECK(!posModInfo.IsAvailable()); |
|
162 |
|
163 TBuf<KPositionMaxModuleName> moduleName; |
|
164 posModInfo.GetModuleName(moduleName); |
|
165 CHECK_EQUAL_(0, moduleName.Length()); |
|
166 |
|
167 CHECK_EQUAL_(TPositionModuleInfo::TTechnologyType(TPositionModuleInfo::ETechnologyUnknown), |
|
168 posModInfo.TechnologyType()); |
|
169 CHECK_EQUAL_(TPositionModuleInfo::TDeviceLocation(TPositionModuleInfo::EDeviceUnknown), |
|
170 posModInfo.DeviceLocation()); |
|
171 CHECK_EQUAL_(TPositionModuleInfo::TCapabilities(TPositionModuleInfo::ECapabilityNone), |
|
172 posModInfo.Capabilities()); |
|
173 |
|
174 for(TInt i=0; i<EPositionLastFamily; i++) |
|
175 CHECK(0 == posModInfo.ClassesSupported(TPositionClassFamily(i))); |
|
176 |
|
177 TVersion version = posModInfo.Version(); |
|
178 TVersion defaultVersion; |
|
179 CHECK_EQUAL_(version.iMajor, defaultVersion.iMajor); |
|
180 CHECK_EQUAL_(version.iMinor, defaultVersion.iMinor); |
|
181 CHECK_EQUAL_(version.iBuild, defaultVersion.iBuild); |
|
182 |
|
183 StandardCleanup(); |
|
184 } |
|
185 |
|
186 // 6.1.2. Set and Get |
|
187 void CModuleClassesStep::TPositionModuleInfo_GettersL() |
|
188 { |
|
189 DECLARE_ERROR_LOGGING; |
|
190 StandardPrepareL(); |
|
191 |
|
192 TPositionModuleInfo posModInfo; |
|
193 |
|
194 const TPositionModuleId KDummyModuleId = {0x32}; |
|
195 posModInfo.SetModuleId(KDummyModuleId); |
|
196 CHECK_EQUAL_(KDummyModuleId.iUid, posModInfo.ModuleId().iUid); |
|
197 |
|
198 posModInfo.SetIsAvailable(ETrue); |
|
199 CHECK(posModInfo.IsAvailable()); |
|
200 posModInfo.SetIsAvailable(EFalse); |
|
201 CHECK(!posModInfo.IsAvailable()); |
|
202 |
|
203 _LIT(KDummyModuleName, "Testing 1,2,3"); |
|
204 posModInfo.SetModuleName(KDummyModuleName); |
|
205 TBuf<KPositionMaxModuleName> tempBuf; |
|
206 posModInfo.GetModuleName(tempBuf); |
|
207 CHECK(0 == tempBuf.Compare(KDummyModuleName)); |
|
208 |
|
209 TPositionQuality quality, quality2; |
|
210 const TPositionQuality::TCostIndicator KDummyCostIndicator = TPositionQuality::ECostCharge; |
|
211 quality.SetCostIndicator(KDummyCostIndicator); |
|
212 posModInfo.SetPositionQuality(quality); |
|
213 |
|
214 posModInfo.GetPositionQuality(quality2); |
|
215 CHECK_EQUAL_(KDummyCostIndicator, quality2.CostIndicator()); |
|
216 |
|
217 posModInfo.SetTechnologyType(TPositionModuleInfo::ETechnologyNetwork); |
|
218 posModInfo.SetDeviceLocation(TPositionModuleInfo::EDeviceExternal); |
|
219 |
|
220 CHECK_EQUAL_(TPositionModuleInfo::TTechnologyType(TPositionModuleInfo::ETechnologyNetwork), |
|
221 posModInfo.TechnologyType()); |
|
222 CHECK_EQUAL_(TPositionModuleInfo::TDeviceLocation(TPositionModuleInfo::EDeviceExternal), |
|
223 posModInfo.DeviceLocation()); |
|
224 |
|
225 const TPositionModuleInfo::TCapabilities KDummyCaps = |
|
226 TPositionModuleInfo::ECapabilitySpeed | |
|
227 TPositionModuleInfo::ECapabilityNmea; |
|
228 |
|
229 posModInfo.SetCapabilities(KDummyCaps); |
|
230 CHECK_EQUAL_(KDummyCaps, posModInfo.Capabilities()); |
|
231 |
|
232 for(TUint i=0; i<EPositionLastFamily; i++) |
|
233 posModInfo.SetClassesSupported(TPositionClassFamily(i), 2*i); |
|
234 |
|
235 for(TUint j=0; j<EPositionLastFamily; j++) |
|
236 CHECK(2*j == posModInfo.ClassesSupported(TPositionClassFamily(j))); |
|
237 |
|
238 TVersion KDummyVersion(12,31,45); //Should be const, but Name isn't a const method for some reason! |
|
239 posModInfo.SetVersion(KDummyVersion); |
|
240 CHECK(posModInfo.Version().Name()==KDummyVersion.Name()); |
|
241 |
|
242 StandardCleanup(); |
|
243 } |
|
244 |
|
245 // 6.1.3. Invalid calls to Setters |
|
246 |
|
247 TInt Set_Bad_Class_Type_TPositionModuleInfo(TAny* /*aPtr*/) |
|
248 { |
|
249 TPositionModuleInfo modInfo; |
|
250 modInfo.SetClassesSupported(EPositionLastFamily, 0); //This should panic |
|
251 return KErrGeneral; |
|
252 } |
|
253 |
|
254 |
|
255 TInt Get_Bad_Class_Type_TPositionModuleInfo(TAny* /*aPtr*/) |
|
256 { |
|
257 TPositionModuleInfo modInfo; |
|
258 (void)modInfo.ClassesSupported(EPositionLastFamily); //This should panic |
|
259 return KErrGeneral; |
|
260 } |
|
261 |
|
262 void CModuleClassesStep::TPositionModuleInfo_InvalidL() |
|
263 { |
|
264 DECLARE_ERROR_LOGGING; |
|
265 StandardPrepareL(); |
|
266 |
|
267 DO_PANIC_TEST_L(Set_Bad_Class_Type_TPositionModuleInfo, KPosClientFault, |
|
268 EPositionInvalidClassType, KDefaultTestTimeout); |
|
269 DO_PANIC_TEST_L(Get_Bad_Class_Type_TPositionModuleInfo, KPosClientFault, |
|
270 EPositionInvalidClassType, KDefaultTestTimeout); |
|
271 |
|
272 StandardCleanup(); |
|
273 } |
|
274 |
|
275 // |
|
276 // |
|
277 // TPositionQuality |
|
278 // |
|
279 // |
|
280 |
|
281 // 6.2.1. Construction |
|
282 void CModuleClassesStep::TPositionQuality_ConstructionL() |
|
283 { |
|
284 DECLARE_ERROR_LOGGING; |
|
285 StandardPrepareL(); |
|
286 |
|
287 TPositionQuality quality; |
|
288 |
|
289 CHECK(Math::IsNaN(quality.HorizontalAccuracy())); |
|
290 CHECK(Math::IsNaN(quality.VerticalAccuracy())); |
|
291 |
|
292 CHECK(quality.PositionClassSize() == sizeof(TPositionQuality)); |
|
293 CHECK(quality.PositionClassType() == EPositionQualityClass); |
|
294 |
|
295 CHECK(quality.TimeToFirstFix() == TTimeIntervalMicroSeconds(TInt64(0))); |
|
296 CHECK(quality.TimeToNextFix() == TTimeIntervalMicroSeconds(TInt64(0))); |
|
297 CHECK(quality.CostIndicator() == TPositionQuality::ECostUnknown); |
|
298 CHECK(quality.PowerConsumption() == TPositionQuality::EPowerUnknown); |
|
299 |
|
300 StandardCleanup(); |
|
301 } |
|
302 |
|
303 // 6.2.2. Getter and Setters |
|
304 void CModuleClassesStep::TPositionQuality_SettersL() |
|
305 { |
|
306 DECLARE_ERROR_LOGGING; |
|
307 StandardPrepareL(); |
|
308 |
|
309 TPositionQuality posQuality; |
|
310 |
|
311 // "time to" fixes |
|
312 const TTimeIntervalMicroSeconds KTTFF(3425234); |
|
313 const TTimeIntervalMicroSeconds KTTNF(45256265); |
|
314 const TReal32 KHorizontalAccuracy(TReal32(34252.23452)); |
|
315 const TReal32 KVerticalAccuracy(TReal32(423.456563)); |
|
316 const TPositionQuality::TCostIndicator KDummyCost(TPositionQuality::ECostPossible); |
|
317 const TPositionQuality::TPowerConsumption KDummyPowerConsumption(TPositionQuality::EPowerMedium); |
|
318 |
|
319 posQuality.SetTimeToFirstFix(KTTFF); |
|
320 posQuality.SetTimeToNextFix(KTTNF); |
|
321 posQuality.SetHorizontalAccuracy(KHorizontalAccuracy); |
|
322 posQuality.SetVerticalAccuracy(KVerticalAccuracy); |
|
323 posQuality.SetCostIndicator(KDummyCost); |
|
324 posQuality.SetPowerConsumption(KDummyPowerConsumption); |
|
325 |
|
326 CHECK_EQUAL_(posQuality.TimeToFirstFix().Int64(), KTTFF.Int64()); |
|
327 CHECK_EQUAL_(posQuality.TimeToNextFix().Int64(), KTTNF.Int64()); |
|
328 CHECK_EQUAL_(posQuality.HorizontalAccuracy(), KHorizontalAccuracy); |
|
329 CHECK_EQUAL_(posQuality.VerticalAccuracy(), KVerticalAccuracy); |
|
330 CHECK_EQUAL_(posQuality.CostIndicator(), KDummyCost); |
|
331 CHECK_EQUAL_(posQuality.PowerConsumption(), KDummyPowerConsumption); |
|
332 |
|
333 // NaNs |
|
334 TRealX nan; |
|
335 nan.SetNaN(); |
|
336 |
|
337 posQuality.SetHorizontalAccuracy(nan); |
|
338 posQuality.SetVerticalAccuracy(nan); |
|
339 |
|
340 CHECK(Math::IsNaN(posQuality.HorizontalAccuracy())); |
|
341 CHECK(Math::IsNaN(posQuality.VerticalAccuracy())); |
|
342 |
|
343 // "Zeroes" |
|
344 posQuality.SetTimeToFirstFix(TTimeIntervalMicroSeconds(0)); |
|
345 posQuality.SetTimeToNextFix(TTimeIntervalMicroSeconds(0)); |
|
346 posQuality.SetCostIndicator(TPositionQuality::ECostUnknown); |
|
347 posQuality.SetPowerConsumption(TPositionQuality::EPowerUnknown); |
|
348 |
|
349 CHECK_EQUAL_(posQuality.TimeToFirstFix().Int64(), TInt64(0)); |
|
350 CHECK_EQUAL_(posQuality.TimeToNextFix().Int64(), TInt64(0)); |
|
351 CHECK_EQUAL_(posQuality.CostIndicator(), TPositionQuality::ECostUnknown); |
|
352 CHECK_EQUAL_(posQuality.PowerConsumption(), TPositionQuality::EPowerUnknown); |
|
353 |
|
354 StandardCleanup(); |
|
355 } |
|
356 |
|
357 // 6.2.3. Invalid Input |
|
358 TInt TPositionQuality_Set_Negative_HAccuracy(TAny* /*aPtr*/) |
|
359 { |
|
360 TPositionQuality quality; |
|
361 quality.SetHorizontalAccuracy(TReal32(-0.1)); |
|
362 return KErrGeneral; |
|
363 } |
|
364 |
|
365 |
|
366 TInt TPositionQuality_Set_Negative_VAccuracy(TAny* /*aPtr*/) |
|
367 { |
|
368 TPositionQuality quality; |
|
369 quality.SetVerticalAccuracy(TReal32(-0.1)); |
|
370 return KErrGeneral; |
|
371 } |
|
372 |
|
373 |
|
374 TInt TPositionQuality_Set_Negative_TTFirstFix(TAny* /*aPtr*/) |
|
375 { |
|
376 TPositionQuality quality; |
|
377 quality.SetTimeToFirstFix(TTimeIntervalMicroSeconds(-1)); |
|
378 return KErrGeneral; |
|
379 } |
|
380 |
|
381 |
|
382 TInt TPositionQuality_Set_Negative_TTNextFix(TAny* /*aPtr*/) |
|
383 { |
|
384 TPositionQuality quality; |
|
385 quality.SetTimeToNextFix(TTimeIntervalMicroSeconds(-1)); |
|
386 return KErrGeneral; |
|
387 } |
|
388 |
|
389 |
|
390 void CModuleClassesStep::TPositionQuality_InvalidL() |
|
391 { |
|
392 DECLARE_ERROR_LOGGING; |
|
393 StandardPrepareL(); |
|
394 |
|
395 DO_PANIC_TEST_L(TPositionQuality_Set_Negative_HAccuracy, |
|
396 KPosClientFault, EPositionBadAccuracy, KDefaultTestTimeout); |
|
397 DO_PANIC_TEST_L(TPositionQuality_Set_Negative_VAccuracy, |
|
398 KPosClientFault, EPositionBadAccuracy, KDefaultTestTimeout); |
|
399 DO_PANIC_TEST_L(TPositionQuality_Set_Negative_TTFirstFix, |
|
400 KPosClientFault, EPositionBadTime, KDefaultTestTimeout); |
|
401 DO_PANIC_TEST_L(TPositionQuality_Set_Negative_TTNextFix, |
|
402 KPosClientFault, EPositionBadTime, KDefaultTestTimeout); |
|
403 |
|
404 StandardCleanup(); |
|
405 } |
|
406 |
|
407 // 6.2.4 Element Comparison |
|
408 #define SET_ELEMENT(aId, aType, aPref, aData) \ |
|
409 if (aId < KPositionMaxSectionFields) SetElement(aId, aType, aPref, aData); |
|
410 |
|
411 #pragma warning (push) |
|
412 #pragma warning (disable: 4127) |
|
413 |
|
414 void CModuleClassesStep::TPositionQuality_ComparisonL() |
|
415 { |
|
416 DECLARE_ERROR_LOGGING; |
|
417 StandardPrepareL(); |
|
418 |
|
419 TPositionQuality q1, q2; |
|
420 TPositionQualityItem::TResult result; |
|
421 |
|
422 // set high values |
|
423 q1.SetTimeToFirstFix( TTimeIntervalMicroSeconds(20000)); |
|
424 q1.SetTimeToNextFix( TTimeIntervalMicroSeconds(10000)); |
|
425 q1.SetHorizontalAccuracy( TReal32(1000)); |
|
426 q1.SetVerticalAccuracy( TReal32(2000)); |
|
427 q1.SetCostIndicator( TPositionQuality::ECostCharge); |
|
428 q1.SetPowerConsumption( TPositionQuality::EPowerHigh); |
|
429 |
|
430 // set low values |
|
431 q2.SetTimeToFirstFix( TTimeIntervalMicroSeconds(2)); |
|
432 q2.SetTimeToNextFix( TTimeIntervalMicroSeconds(1)); |
|
433 q2.SetHorizontalAccuracy( TReal32(1)); |
|
434 q2.SetVerticalAccuracy( TReal32(2)); |
|
435 q2.SetCostIndicator( TPositionQuality::ECostZero); |
|
436 q2.SetPowerConsumption( TPositionQuality::EPowerZero); |
|
437 |
|
438 for (TInt i = 0; i < q1.HighWaterMark() + 1; i++) |
|
439 { |
|
440 q1.Compare(q2, i, result); |
|
441 CHECK_EQUAL_(TPositionQualityItem::EIsBetter, result); |
|
442 } |
|
443 |
|
444 // more common test :-) |
|
445 |
|
446 class TBigQuality1 : public TPositionQualityBase { |
|
447 public: |
|
448 TBigQuality1() |
|
449 { |
|
450 SET_ELEMENT(0, TPositionQualityItem::EUndefined, |
|
451 TPositionQualityItem::EPreferGreaterValues, TInt8(100)); |
|
452 SET_ELEMENT(1, TPositionQualityItem::ETInt8, |
|
453 TPositionQualityItem::EPreferSmallerValues, TInt8(100)); |
|
454 SET_ELEMENT(2, TPositionQualityItem::ETInt16, |
|
455 TPositionQualityItem::EPreferGreaterValues, TInt16(100)); |
|
456 SET_ELEMENT(3, TPositionQualityItem::ETInt32, |
|
457 TPositionQualityItem::EPreferSmallerValues, TInt32(100)); |
|
458 SET_ELEMENT(4, TPositionQualityItem::ETInt64, |
|
459 TPositionQualityItem::EPreferGreaterValues, TInt64(100)); |
|
460 SET_ELEMENT(5, TPositionQualityItem::ETUint8, |
|
461 TPositionQualityItem::EPreferSmallerValues, TUint8(100)); |
|
462 SET_ELEMENT(6, TPositionQualityItem::ETUint16, |
|
463 TPositionQualityItem::EPreferGreaterValues, TUint16(100)); |
|
464 SET_ELEMENT(7, TPositionQualityItem::ETUint32, |
|
465 TPositionQualityItem::EPreferSmallerValues, TUint32(100)); |
|
466 }; |
|
467 } bigQ1; |
|
468 class TBigQuality2 : public TPositionQualityBase { |
|
469 public: |
|
470 TBigQuality2() |
|
471 { |
|
472 SET_ELEMENT(0, TPositionQualityItem::ETReal32, |
|
473 TPositionQualityItem::EPreferGreaterValues, TReal32(100)); |
|
474 SET_ELEMENT(1, TPositionQualityItem::ETReal64, |
|
475 TPositionQualityItem::EPreferSmallerValues, TReal64(100)); |
|
476 SET_ELEMENT(2,TPositionQualityItem::ETTime, |
|
477 TPositionQualityItem::EPreferGreaterValues, TTime(100)); |
|
478 SET_ELEMENT(3,TPositionQualityItem::ETTimeIntervalMicroSeconds, |
|
479 TPositionQualityItem::EPreferSmallerValues, TTimeIntervalMicroSeconds(100)); |
|
480 }; |
|
481 } bigQ2; |
|
482 |
|
483 class TLowQuality1 : public TPositionQualityBase { |
|
484 public: |
|
485 TLowQuality1() |
|
486 { |
|
487 SET_ELEMENT(0, TPositionQualityItem::EUndefined, |
|
488 TPositionQualityItem::EPreferGreaterValues, TInt8(1)); |
|
489 SET_ELEMENT(1, TPositionQualityItem::ETInt8, |
|
490 TPositionQualityItem::EPreferSmallerValues, TInt8(1)); |
|
491 SET_ELEMENT(2, TPositionQualityItem::ETInt16, |
|
492 TPositionQualityItem::EPreferGreaterValues, TInt16(1)); |
|
493 SET_ELEMENT(3, TPositionQualityItem::ETInt32, |
|
494 TPositionQualityItem::EPreferSmallerValues, TInt32(1)); |
|
495 SET_ELEMENT(4, TPositionQualityItem::ETInt64, |
|
496 TPositionQualityItem::EPreferGreaterValues, TInt64(1)); |
|
497 SET_ELEMENT(5, TPositionQualityItem::ETUint8, |
|
498 TPositionQualityItem::EPreferSmallerValues, TUint8(1)); |
|
499 SET_ELEMENT(6, TPositionQualityItem::ETUint16, |
|
500 TPositionQualityItem::EPreferGreaterValues, TUint16(1)); |
|
501 SET_ELEMENT(7, TPositionQualityItem::ETUint32, |
|
502 TPositionQualityItem::EPreferSmallerValues, TUint32(1)); |
|
503 }; |
|
504 } lowQ1; |
|
505 class TLowQuality2 : public TPositionQualityBase { |
|
506 public: |
|
507 TLowQuality2() |
|
508 { |
|
509 SET_ELEMENT(0, TPositionQualityItem::ETReal32, |
|
510 TPositionQualityItem::EPreferGreaterValues, TReal32(1)); |
|
511 SET_ELEMENT(1, TPositionQualityItem::ETReal64, |
|
512 TPositionQualityItem::EPreferSmallerValues, TReal64(1)); |
|
513 SET_ELEMENT(2, TPositionQualityItem::ETTime, |
|
514 TPositionQualityItem::EPreferGreaterValues, TTime(1)); |
|
515 SET_ELEMENT(3, TPositionQualityItem::ETTimeIntervalMicroSeconds, |
|
516 TPositionQualityItem::EPreferSmallerValues, TTimeIntervalMicroSeconds(1)); |
|
517 }; |
|
518 } lowQ2; |
|
519 |
|
520 // 1st part |
|
521 TInt j = 0; |
|
522 for (j = 0; j < lowQ1.HighWaterMark() + 1; j++) |
|
523 { |
|
524 lowQ1.Compare(bigQ1, j, result); |
|
525 |
|
526 if (j % 2 == 0) |
|
527 { |
|
528 // we prefer greater values here |
|
529 CHECK_EQUAL_(TPositionQualityItem::EIsBetter, result); |
|
530 } |
|
531 else // odd ids |
|
532 { |
|
533 // we prefer smaller values here |
|
534 CHECK_EQUAL_(TPositionQualityItem::EIsWorse, result); |
|
535 } |
|
536 } |
|
537 // same for the 2nd part |
|
538 for (j = 0; j < lowQ2.HighWaterMark() + 1; j++) |
|
539 { |
|
540 lowQ2.Compare(bigQ2, j, result); |
|
541 TPositionQualityItem::TResult pref; |
|
542 pref = (j % 2 == 0) ? TPositionQualityItem::EIsBetter : TPositionQualityItem::EIsWorse; |
|
543 CHECK_EQUAL_(pref, result); |
|
544 } |
|
545 |
|
546 // specific test for different preferences and data types |
|
547 |
|
548 class TQualityGreaterSigned : public TPositionQualityBase { |
|
549 public: |
|
550 TQualityGreaterSigned() |
|
551 { |
|
552 SET_ELEMENT(0, TPositionQualityItem::ETInt8, |
|
553 TPositionQualityItem::EPreferGreaterValues, TInt8(1)); |
|
554 SET_ELEMENT(1, TPositionQualityItem::ETInt8, |
|
555 TPositionQualityItem::EPreferGreaterValues, TInt8(2)); |
|
556 SET_ELEMENT(2, TPositionQualityItem::ETInt8, |
|
557 TPositionQualityItem::EPreferGreaterValues, TInt8(3)); |
|
558 }; |
|
559 } qGS; |
|
560 |
|
561 class TQualityReverse : public TPositionQualityBase { |
|
562 public: |
|
563 TQualityReverse() |
|
564 { |
|
565 SET_ELEMENT(0, TPositionQualityItem::ETInt8, |
|
566 TPositionQualityItem::EPreferSmallerValues, TInt8(1)); |
|
567 SET_ELEMENT(1, TPositionQualityItem::ETUint8, |
|
568 TPositionQualityItem::EPreferGreaterValues, TUint8(2)); |
|
569 SET_ELEMENT(2, TPositionQualityItem::ETUint8, |
|
570 TPositionQualityItem::EPreferSmallerValues, TUint8(3)); |
|
571 |
|
572 SET_ELEMENT(3, TPositionQualityItem::ETUint8, |
|
573 TPositionQualityItem::EPreferSmallerValues, TUint8(3)); |
|
574 ResetElement(3); |
|
575 }; |
|
576 } qR; |
|
577 |
|
578 // in all cases KErrArgument should be returned |
|
579 CHECK_EQUAL_(KErrArgument, qGS.Compare(qR, 0, result)); |
|
580 CHECK_EQUAL_(KErrArgument, qGS.Compare(qR, 1, result)); |
|
581 CHECK_EQUAL_(KErrArgument, qGS.Compare(qR, 2, result)); |
|
582 |
|
583 StandardCleanup(); |
|
584 } |
|
585 #pragma warning (pop) |
|
586 |
|
587 // |
|
588 // |
|
589 // Module Updates, Status, Events classes |
|
590 // |
|
591 // |
|
592 |
|
593 // 7.1.1. Construction |
|
594 void CModuleClassesStep::ModuleClasses_ConstructionL() |
|
595 { |
|
596 DECLARE_ERROR_LOGGING; |
|
597 StandardPrepareL(); |
|
598 |
|
599 // Update Options |
|
600 TPositionUpdateOptions updateOptions; |
|
601 |
|
602 CHECK(updateOptions.PositionClassSize() == sizeof(TPositionUpdateOptions)); |
|
603 CHECK(updateOptions.PositionClassType() == EPositionUpdateOptionsClass); |
|
604 |
|
605 CHECK_EQUAL_(TInt64(0), updateOptions.UpdateInterval().Int64()); |
|
606 CHECK_EQUAL_(TInt64(0), updateOptions.UpdateTimeOut().Int64()); |
|
607 CHECK_EQUAL_(TInt64(0), updateOptions.MaxUpdateAge().Int64()); |
|
608 CHECK(!updateOptions.AcceptPartialUpdates()); |
|
609 |
|
610 const TBool KDummyAcceptUpdates = ETrue; |
|
611 const TTimeIntervalMicroSeconds KUpdateInterval(23412); |
|
612 const TTimeIntervalMicroSeconds KTimeOut(4123523); |
|
613 const TTimeIntervalMicroSeconds KMaxUpdateAge(3245); |
|
614 |
|
615 TPositionUpdateOptions updateOptions2( |
|
616 KUpdateInterval, |
|
617 KTimeOut, |
|
618 KMaxUpdateAge, |
|
619 KDummyAcceptUpdates); |
|
620 |
|
621 CHECK_EQUAL_(KUpdateInterval, updateOptions2.UpdateInterval()); |
|
622 CHECK_EQUAL_(KTimeOut, updateOptions2.UpdateTimeOut().Int64()); |
|
623 CHECK_EQUAL_(KMaxUpdateAge, updateOptions2.MaxUpdateAge().Int64()); |
|
624 CHECK(updateOptions2.AcceptPartialUpdates()); |
|
625 |
|
626 // Module Status |
|
627 TPositionModuleStatus moduleStatus; |
|
628 |
|
629 CHECK(moduleStatus.PositionClassSize() == sizeof(TPositionModuleStatus)); |
|
630 CHECK(moduleStatus.PositionClassType() == EPositionModuleStatusClass); |
|
631 |
|
632 CHECK(moduleStatus.DeviceStatus() == TPositionModuleStatus::EDeviceUnknown); |
|
633 CHECK(moduleStatus.DataQualityStatus() == TPositionModuleStatus::EDataQualityUnknown); |
|
634 |
|
635 // Module status event |
|
636 TPositionModuleStatusEvent posModEvent; |
|
637 |
|
638 CHECK(posModEvent.PositionClassSize() == sizeof(TPositionModuleStatusEvent)); |
|
639 CHECK(posModEvent.PositionClassType() == EPositionModuleStatusEventClass); |
|
640 |
|
641 CHECK(posModEvent.RequestedEvents() == TPositionModuleStatusEvent::EEventNone); |
|
642 CHECK(posModEvent.OccurredEvents() == TPositionModuleStatusEvent::EEventNone); |
|
643 |
|
644 posModEvent.GetModuleStatus(moduleStatus); |
|
645 |
|
646 CHECK(moduleStatus.DeviceStatus() == TPositionModuleStatus::EDeviceUnknown); |
|
647 CHECK(moduleStatus.DataQualityStatus() == TPositionModuleStatus::EDataQualityUnknown); |
|
648 |
|
649 //Just do a check here for construction with requested events parameter. |
|
650 TPositionModuleStatusEvent posModEvent2(TPositionModuleStatusEvent::EEventDataQualityStatus); |
|
651 CHECK(posModEvent2.RequestedEvents() == TPositionModuleStatusEvent::EEventDataQualityStatus); |
|
652 |
|
653 StandardCleanup(); |
|
654 } |
|
655 |
|
656 // 7.1.2. Setters/Getters |
|
657 void CModuleClassesStep::ModuleClasses_SettersL() |
|
658 { |
|
659 DECLARE_ERROR_LOGGING; |
|
660 StandardPrepareL(); |
|
661 |
|
662 // Update Options |
|
663 TPositionUpdateOptions updateOptions; |
|
664 |
|
665 const TBool KDummyAcceptUpdates = ETrue; |
|
666 const TTimeIntervalMicroSeconds KUpdateInterval(23412); |
|
667 const TTimeIntervalMicroSeconds KTimeOut(4123523); |
|
668 const TTimeIntervalMicroSeconds KMaxUpdateAge(3245); |
|
669 |
|
670 updateOptions.SetAcceptPartialUpdates(KDummyAcceptUpdates); |
|
671 updateOptions.SetUpdateInterval(KUpdateInterval); |
|
672 updateOptions.SetUpdateTimeOut(KTimeOut); |
|
673 updateOptions.SetMaxUpdateAge(KMaxUpdateAge); |
|
674 |
|
675 CHECK(updateOptions.AcceptPartialUpdates()); |
|
676 CHECK_EQUAL_(updateOptions.UpdateInterval().Int64(), KUpdateInterval.Int64()); |
|
677 CHECK_EQUAL_(updateOptions.UpdateTimeOut().Int64(), KTimeOut.Int64()); |
|
678 CHECK_EQUAL_(updateOptions.MaxUpdateAge().Int64(), KMaxUpdateAge.Int64()); |
|
679 |
|
680 // Module status |
|
681 TPositionModuleStatus moduleStatus; |
|
682 |
|
683 const TPositionModuleStatus::TDeviceStatus |
|
684 KDummyDeviceStatus(TPositionModuleStatus::EDeviceInactive); |
|
685 const TPositionModuleStatus::TDataQualityStatus |
|
686 KDummyQualityStatus(TPositionModuleStatus::EDataQualityPartial); |
|
687 |
|
688 moduleStatus.SetDeviceStatus(KDummyDeviceStatus); |
|
689 moduleStatus.SetDataQualityStatus(KDummyQualityStatus); |
|
690 |
|
691 CHECK_EQUAL_(KDummyDeviceStatus, moduleStatus.DeviceStatus()); |
|
692 CHECK_EQUAL_(KDummyQualityStatus, moduleStatus.DataQualityStatus()); |
|
693 |
|
694 // Module status event |
|
695 TPositionModuleStatusEvent posModEvent; |
|
696 |
|
697 const TPositionModuleId KDummyModuleId = {0x00355463}; |
|
698 const TPositionModuleStatusEvent::TModuleEvent |
|
699 KDummyRequestedEvent(TPositionModuleStatusEvent::EEventDeviceStatus); |
|
700 const TPositionModuleStatusEvent::TModuleEvent |
|
701 KDummyOccurredEvent(TPositionModuleStatusEvent::EEventDataQualityStatus); |
|
702 const TPositionModuleStatusEvent::TSystemModuleEvent |
|
703 KDummySystemEvent(TPositionModuleStatusEvent::ESystemModuleRemoved); |
|
704 |
|
705 posModEvent.SetModuleId(KDummyModuleId); |
|
706 posModEvent.SetRequestedEvents(KDummyRequestedEvent); |
|
707 posModEvent.SetOccurredEvents(KDummyOccurredEvent); |
|
708 posModEvent.SetSystemModuleEvent(KDummySystemEvent); |
|
709 |
|
710 CHECK_EQUAL_(KDummyModuleId.iUid, posModEvent.ModuleId().iUid); |
|
711 CHECK_EQUAL_(KDummyRequestedEvent, posModEvent.RequestedEvents()); |
|
712 CHECK_EQUAL_(KDummyOccurredEvent, posModEvent.OccurredEvents()); |
|
713 CHECK_EQUAL_(KDummySystemEvent, posModEvent.SystemModuleEvent()); |
|
714 |
|
715 TPositionModuleStatus modStatus2; |
|
716 posModEvent.SetModuleStatus(moduleStatus); |
|
717 posModEvent.GetModuleStatus(modStatus2); |
|
718 |
|
719 CHECK_EQUAL_(modStatus2.DeviceStatus(), KDummyDeviceStatus); |
|
720 CHECK_EQUAL_(modStatus2.DataQualityStatus(), KDummyQualityStatus); |
|
721 |
|
722 StandardCleanup(); |
|
723 } |
|
724 |
|
725 // 7.2.1. Invalid Input in TPositionUpdateOptions |
|
726 const TInt timeNEG(-1); |
|
727 const TInt timeZero(-1); |
|
728 |
|
729 |
|
730 TInt NegativeTimeConstructionInterval(TAny* /*aPtr*/) |
|
731 { |
|
732 TPositionUpdateOptions updateOptions(timeNEG, timeZero, timeZero); |
|
733 return KErrGeneral; |
|
734 } |
|
735 |
|
736 |
|
737 TInt NegativeTimeConstructionTimeOut(TAny* /*aPtr*/) |
|
738 { |
|
739 TPositionUpdateOptions updateOptions(timeZero, timeNEG, timeZero); |
|
740 return KErrGeneral; |
|
741 } |
|
742 |
|
743 |
|
744 TInt NegativeTimeConstructionMaxAge(TAny* /*aPtr*/) |
|
745 { |
|
746 TPositionUpdateOptions updateOptions(timeZero, timeZero, timeNEG); |
|
747 return KErrGeneral; |
|
748 } |
|
749 |
|
750 |
|
751 TInt NegativeTimeSettingInterval(TAny* /*aPtr*/) |
|
752 { |
|
753 TPositionUpdateOptions updateOptions; |
|
754 updateOptions.SetUpdateInterval(timeNEG); |
|
755 return KErrGeneral; |
|
756 } |
|
757 |
|
758 |
|
759 TInt NegativeTimeSettingTimeOut(TAny* /*aPtr*/) |
|
760 { |
|
761 TPositionUpdateOptions updateOptions; |
|
762 updateOptions.SetUpdateTimeOut(timeNEG); |
|
763 return KErrGeneral; |
|
764 } |
|
765 |
|
766 |
|
767 TInt NegativeTimeSettingMaxAge(TAny* /*aPtr*/) |
|
768 { |
|
769 TPositionUpdateOptions updateOptions; |
|
770 updateOptions.SetMaxUpdateAge(timeNEG); |
|
771 return KErrGeneral; |
|
772 } |
|
773 |
|
774 |
|
775 void CModuleClassesStep::TPositionUpdateOptions_InvalidL() |
|
776 { |
|
777 DECLARE_ERROR_LOGGING; |
|
778 StandardPrepareL(); |
|
779 |
|
780 // construction |
|
781 DO_PANIC_TEST_L(NegativeTimeConstructionInterval, KPosClientFault, |
|
782 EPositionBadTime, KDefaultTestTimeout); |
|
783 DO_PANIC_TEST_L(NegativeTimeConstructionTimeOut, KPosClientFault, |
|
784 EPositionBadTime, KDefaultTestTimeout); |
|
785 DO_PANIC_TEST_L(NegativeTimeConstructionMaxAge, KPosClientFault, |
|
786 EPositionBadTime, KDefaultTestTimeout); |
|
787 |
|
788 // setting |
|
789 DO_PANIC_TEST_L(NegativeTimeSettingInterval, KPosClientFault, |
|
790 EPositionBadTime, KDefaultTestTimeout); |
|
791 DO_PANIC_TEST_L(NegativeTimeSettingTimeOut, KPosClientFault, |
|
792 EPositionBadTime, KDefaultTestTimeout); |
|
793 DO_PANIC_TEST_L(NegativeTimeSettingMaxAge, KPosClientFault, |
|
794 EPositionBadTime, KDefaultTestTimeout); |
|
795 |
|
796 StandardCleanup(); |
|
797 } |
|
798 |