|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 #include "SAXTester.h" |
|
19 #include "WSTester.h" |
|
20 |
|
21 #define STATUS_NEW 0 |
|
22 #define STATUS_READY 1 |
|
23 #define STATUS_EXPIRED 2 |
|
24 |
|
25 namespace |
|
26 { |
|
27 } |
|
28 |
|
29 enum TErrorState |
|
30 { |
|
31 ENoError = 0, |
|
32 ESoapError, |
|
33 ENestedError |
|
34 }; |
|
35 |
|
36 CSAXTester::CSAXTester( ): |
|
37 iDelegate(NULL) |
|
38 { |
|
39 iStartElem = 0; |
|
40 iEndElem = 0; |
|
41 iContent = 0; |
|
42 iRunCase = 0; |
|
43 iAsXml = NULL; |
|
44 } |
|
45 CSAXTester::~CSAXTester() |
|
46 { |
|
47 delete iXmlReader; |
|
48 delete iAsXml; |
|
49 if(iDelegate) |
|
50 { |
|
51 // iDelegate->ExtractElement(); // if delegate's element is onwned by this class |
|
52 delete iDelegate; |
|
53 } |
|
54 } |
|
55 |
|
56 CSAXTester* CSAXTester::NewL(const TDesC8& aLocalName) |
|
57 { |
|
58 CSAXTester* saxTester = new (ELeave) CSAXTester(); |
|
59 CleanupStack::PushL(saxTester); |
|
60 saxTester->ConstructL( aLocalName ); |
|
61 CleanupStack::Pop(); |
|
62 return saxTester; |
|
63 } |
|
64 |
|
65 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName ) |
|
66 { |
|
67 CSAXTester* saxTester = new (ELeave) CSAXTester(); |
|
68 CleanupStack::PushL(saxTester); |
|
69 saxTester->ConstructL( aNsUri, aLocalName ); |
|
70 CleanupStack::Pop(); |
|
71 return saxTester; |
|
72 } |
|
73 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName ) |
|
74 { |
|
75 CSAXTester* saxTester = new (ELeave) CSAXTester(); |
|
76 CleanupStack::PushL(saxTester); |
|
77 saxTester->ConstructL( aNsUri, aLocalName, aQName ); |
|
78 CleanupStack::Pop(); |
|
79 return saxTester; |
|
80 } |
|
81 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs ) |
|
82 { |
|
83 CSAXTester* saxTester = new (ELeave) CSAXTester(); |
|
84 CleanupStack::PushL(saxTester); |
|
85 saxTester->ConstructL( aNsUri, aLocalName, aQName, apAttrs ); |
|
86 CleanupStack::Pop(); |
|
87 return saxTester; |
|
88 } |
|
89 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs, CSenElement& aParent ) |
|
90 { |
|
91 CSAXTester* saxTester = new (ELeave) CSAXTester(); |
|
92 CleanupStack::PushL(saxTester); |
|
93 saxTester->ConstructL( aNsUri, aLocalName, aQName, apAttrs, aParent ); |
|
94 CleanupStack::Pop(); |
|
95 return saxTester; |
|
96 } |
|
97 |
|
98 CSAXTester* CSAXTester::NewL(CSenElement& aParent ) |
|
99 { |
|
100 CSAXTester* saxTester = new (ELeave) CSAXTester(); |
|
101 CleanupStack::PushL(saxTester); |
|
102 saxTester->ConstructL( aParent ); |
|
103 CleanupStack::Pop(); |
|
104 return saxTester; |
|
105 } |
|
106 |
|
107 void CSAXTester::ConstructL() |
|
108 { |
|
109 // CSenBaseFragment::BaseConstructL(KPpContract, KQueryResponseLocalName); |
|
110 //iReader.CreateL(); |
|
111 iXmlReader = CSenXmlReader::NewL(); |
|
112 } |
|
113 void CSAXTester::ConstructL( const TDesC8& aLocalName ) |
|
114 { |
|
115 CSenBaseFragment::BaseConstructL( aLocalName ); |
|
116 //iReader.CreateL(); |
|
117 iXmlReader = CSenXmlReader::NewL(); |
|
118 } |
|
119 |
|
120 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName ) |
|
121 { |
|
122 CSenBaseFragment::BaseConstructL( aNsUri, aLocalName ); |
|
123 //iReader.CreateL(); |
|
124 iXmlReader = CSenXmlReader::NewL(); |
|
125 } |
|
126 |
|
127 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName ) |
|
128 { |
|
129 CSenBaseFragment::BaseConstructL( aNsUri, aLocalName, aQName ); |
|
130 //iReader.CreateL(); |
|
131 iXmlReader = CSenXmlReader::NewL(); |
|
132 } |
|
133 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs ) |
|
134 { |
|
135 CSenBaseFragment::BaseConstructL( aNsUri, aLocalName, aQName, apAttrs ); |
|
136 //iReader.CreateL(); |
|
137 iXmlReader = CSenXmlReader::NewL(); |
|
138 } |
|
139 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs, CSenElement& aParent ) |
|
140 { |
|
141 CSenBaseFragment::BaseConstructL( aNsUri, aLocalName, aQName, apAttrs, aParent ); |
|
142 //iReader.CreateL(); |
|
143 iXmlReader = CSenXmlReader::NewL(); |
|
144 } |
|
145 void CSAXTester::ConstructL( CSenElement& aParent ) |
|
146 { |
|
147 CSenBaseFragment::BaseConstructL( aParent ); |
|
148 //iReader.CreateL(); |
|
149 iXmlReader = CSenXmlReader::NewL(); |
|
150 } |
|
151 |
|
152 void CSAXTester::StartElementL( const TDesC8& aNsUri, |
|
153 const TDesC8& aLocalName, |
|
154 const TDesC8& aQName, |
|
155 const RAttributeArray& aAttrs) |
|
156 { |
|
157 |
|
158 iStartElem++; |
|
159 |
|
160 if (iRunCase == KDelegateParsing && aLocalName == KL2Name8) |
|
161 { |
|
162 iState = KStateIgnore; |
|
163 iDelegate = CSenBaseFragment::NewL(KL2Name8); |
|
164 DelegateParsingL( *iDelegate ); |
|
165 } |
|
166 else if (iRunCase == KDelegateParsing2 && iStartElem == 2) |
|
167 { |
|
168 iState = KStateIgnore; |
|
169 DelegateParsingL( aNsUri, aLocalName, aQName, aAttrs ); |
|
170 |
|
171 } |
|
172 else if (iRunCase == KDetach && aLocalName == KL2Name8) |
|
173 { |
|
174 iState = KStateIgnore; |
|
175 iDelegate = CSenBaseFragment::NewL( KDefaultNS(), KL2Name8() ); |
|
176 DelegateParsingL( *iDelegate ); |
|
177 |
|
178 } |
|
179 else |
|
180 { |
|
181 CSenBaseFragment::StartElementL( aNsUri, aLocalName, aQName , aAttrs ); |
|
182 } |
|
183 |
|
184 |
|
185 // LOG_L("CAddressBookEngine::StartElementL() ***"); |
|
186 // LOG_FORMAT((_L("- namespace URI (%S)"), aNsUri)); |
|
187 // LOG_FORMAT((_L("- localname (%S)"), aLocalName)); |
|
188 // LOG_FORMAT((_L("- qualified name (%S)"), aQName)); |
|
189 // |
|
190 // if (aLocalName == KStatus) |
|
191 // { |
|
192 // |
|
193 // if (SenXmlUtils::LocalName(SenXmlUtils::AttrValue(aAttrs, KCode)) != KOk) |
|
194 // { |
|
195 // iErrorState = ENestedError; |
|
196 // delete iFaultDelegate; |
|
197 // iFaultDelegate = NULL; |
|
198 // iFaultDelegate = CSenDomFragment::NewL(aNsUri, |
|
199 // aLocalName, aQName, aAttrs); |
|
200 // DelegateParsingL(*iFaultDelegate); |
|
201 // return; |
|
202 // } |
|
203 // } |
|
204 // else if (aLocalName == KCard) |
|
205 // { |
|
206 // iErrorState = ENoError; |
|
207 // |
|
208 // CContact* delegate = CContact::NewL(); |
|
209 // iContacts.Append(delegate); |
|
210 // DelegateParsingL(*delegate); |
|
211 // return; |
|
212 // } |
|
213 } |
|
214 void CSAXTester::EndElementL( const TDesC8& aNsUri, |
|
215 const TDesC8& aLocalName, |
|
216 const TDesC8& aQName) |
|
217 { |
|
218 iEndElem++; |
|
219 if(iRunCase == KDelegateParsing || iRunCase == KDelegateParsing2 || |
|
220 iRunCase == KDetach ) |
|
221 { |
|
222 if(aLocalName == KL2Name8 ) |
|
223 { |
|
224 // got a call from delegate created by this class |
|
225 iState = KStateSave; |
|
226 |
|
227 // we could delete delegate here to efficiently free memory |
|
228 // asap |
|
229 } |
|
230 else |
|
231 { |
|
232 CSenBaseFragment::EndElementL( aNsUri, aLocalName, aQName ); |
|
233 } |
|
234 } |
|
235 else |
|
236 { |
|
237 CSenBaseFragment::EndElementL( aNsUri, aLocalName, aQName ); |
|
238 } |
|
239 // if(aLocalName == KStatus) |
|
240 // { |
|
241 // if (iErrorState == ENestedError) |
|
242 // { |
|
243 // iErrorState = ENoError; |
|
244 // CSenElement* statusElement = NULL; |
|
245 // if (iFaultDelegate) |
|
246 // { |
|
247 // statusElement = |
|
248 // iFaultDelegate->AsElement().Element(KStatus); |
|
249 // } |
|
250 // |
|
251 // if(statusElement) |
|
252 // { |
|
253 // const TDesC8* errorCode = statusElement->AttrValue(KCode); |
|
254 // iContacts.ResetAndDestroy(); |
|
255 // if (errorCode) |
|
256 // { |
|
257 // if (SenXmlUtils::LocalName(*errorCode) == KTooManyMatches) |
|
258 // { |
|
259 // iObserver.ErrorL(ETooManyMatches); |
|
260 // } |
|
261 // else |
|
262 // { |
|
263 // iObserver.ErrorL(ESearchFailed); // Default error |
|
264 // } |
|
265 // } |
|
266 // } |
|
267 // else |
|
268 // { |
|
269 // // could not find status element: |
|
270 // iObserver.ErrorL(ESearchFailed); // Default error |
|
271 // } |
|
272 // } |
|
273 // else if (iErrorState == ESoapError) |
|
274 // { |
|
275 // iErrorState = ENoError; |
|
276 // delete iFaultDelegate; |
|
277 // iFaultDelegate = NULL; |
|
278 // iContacts.ResetAndDestroy(); |
|
279 // iObserver.ErrorL(ESearchFailed); // Default error |
|
280 // } |
|
281 // |
|
282 // } |
|
283 // else |
|
284 // { |
|
285 // CSenBaseFragment::EndElementL(aNsUri, aLocalName, aQName); |
|
286 // } |
|
287 } |
|
288 |
|
289 void CSAXTester::CharactersL( const TDesC8& aChars, |
|
290 TInt aStart, |
|
291 TInt aLength |
|
292 ) |
|
293 { |
|
294 CSenBaseFragment::CharactersL( aChars, aStart, aLength ); |
|
295 |
|
296 iContent++; |
|
297 } |
|
298 |
|
299 TBool CSAXTester::CheckParsingStatus(TInt aStart, TInt aEnd, TInt aContent ) |
|
300 { |
|
301 if (aStart != iStartElem || aEnd != iEndElem || aContent != iContent ) |
|
302 { |
|
303 return EFalse; |
|
304 } |
|
305 else |
|
306 { |
|
307 return ETrue; |
|
308 } |
|
309 } |
|
310 void CSAXTester::SetRunCase(TInt aCase) |
|
311 { |
|
312 iRunCase = aCase; |
|
313 } |
|
314 CSenBaseFragment* CSAXTester::GetDetachedDelegate() |
|
315 { |
|
316 iDelegate->DetachL(); |
|
317 return iDelegate; |
|
318 } |
|
319 CSenBaseFragment* CSAXTester::GetDelegate() |
|
320 { |
|
321 return iDelegate; |
|
322 } |