3 <title>tests coverage</title>
4 <link rel ="stylesheet" type="text/css" href="../../../../style.css" title="Style">
5 <script type="text/javascript" src="../../../../sorttable.js"></script>
6 <script type="text/javascript">
7 targetPage = "" + window.location.search;
8 if (targetPage != "" && targetPage != "undefined")
9 targetPage = targetPage.substring(1);
10 if (targetPage.indexOf(":") != -1 || (targetPage != "" && !validURL(targetPage)))
11 targetPage = "undefined";
12 function validURL(url) {
13 var pos = url.indexOf(".html");
14 if (pos == -1 || pos != url.length - 5)
16 var allowNumber = false;
19 for (var i = 0; i < url.length - 5; i++) {
20 var ch = url.charAt(i);
21 if ('a' <= ch && ch <= 'z' ||
22 'A' <= ch && ch <= 'Z' ||
27 } else if ('0' <= ch && ch <= '9' ||
31 } else if (ch == '/' || ch == '.') {
38 if (ch == '/' && seenDot)
46 function loadFrames() {
47 if (targetPage != "" && targetPage != "undefined")
48 top.classFrame.location = top.targetPage;
56 <a href="../../../../index.html?net/jaekl/qd/xml/ParseResult.html" target="_top">Frames</a>
57 <a href="ParseResult.html" target="_top">No Frames</a>
62 <table cellspacing="0" cellpadding="0"class="report">
64 <th class="report"> </th>
65 <th class="report">%method</th>
66 <th class="report">%block</th>
67 <th class="report">%branch</th>
68 <th class="report">%line</th>
71 <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult</span></td>
72 <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>89</b>%(8/9)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 89"></td><td class="percentUnCovered" width="11.0"></td></tr></table></td></tr></table></td>
73 <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>81</b>%(38/47)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 81"></td><td class="percentUnCovered" width="19.0"></td></tr></table></td></tr></table></td>
74 <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>74</b>%(25/34)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 74"></td><td class="percentUnCovered" width="26.0"></td></tr></table></td></tr></table></td>
75 <td class="reportValue"><table class="percentGraph" cellpadding="0" cellspacing="0" align="right"><tr><td><span class="text"><b>91</b>%(60/66)</span></td><td><table class="percentGraph" cellpadding="0" cellspacing="0"><tr><td class="percentCovered" width=" 91"></td><td class="percentUnCovered" width="9.0"></td></tr></table></td></tr></table></td>
80 <table cellspacing="0" cellpadding="0"class="report" id="mcoverage">
82 <th class="report">hit count</th>
83 <th class="report">method name</th>
84 <th class="report">method modifiers</th>
85 <th class="report">method signature</th>
88 <td class="reportValue_covered"><span class="text">1</span></td>
89 <td class="reportText"><span class="text"><a href="#src_19"><clinit></a></span></td>
90 <td class="reportText"><span class="text">[static]</span></td>
91 <td class="reportText"><span class="text">void <clinit>()</span></td>
94 <td class="reportValue_covered"><span class="text">45</span></td>
95 <td class="reportText"><span class="text"><a href="#src_32"><init></a></span></td>
96 <td class="reportText"><span class="text">[public]</span></td>
97 <td class="reportText"><span class="text">void <init>(java.lang.String,java.lang.String[],java.lang.Object[][])</span></td>
100 <td class="reportValue_covered"><span class="text">195</span></td>
101 <td class="reportText"><span class="text"><a href="#src_61">characters</a></span></td>
102 <td class="reportText"><span class="text">[public]</span></td>
103 <td class="reportText"><span class="text">void characters(char[],int,int)</span></td>
106 <td class="reportValue_covered"><span class="text">20</span></td>
107 <td class="reportText"><span class="text"><a href="#src_65">collectParsedChildren</a></span></td>
108 <td class="reportText"><span class="text">[protected]</span></td>
109 <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult[] collectParsedChildren(java.lang.Class)</span></td>
112 <td class="reportValue_covered"><span class="text">216</span></td>
113 <td class="reportText"><span class="text"><a href="#src_82">endElement</a></span></td>
114 <td class="reportText"><span class="text">[public]</span></td>
115 <td class="reportText"><span class="text">boolean endElement(java.lang.String,java.lang.String,java.lang.String)</span></td>
118 <td class="reportValue_covered"><span class="text">1</span></td>
119 <td class="reportText"><span class="text"><a href="#src_56">getTagName</a></span></td>
120 <td class="reportText"><span class="text">[public]</span></td>
121 <td class="reportText"><span class="text">java.lang.String getTagName()</span></td>
124 <td class="reportValue_uncovered"><span class="text">0</span></td>
125 <td class="reportText"><span class="text"><a href="#src_57">haveSeenMyTag</a></span></td>
126 <td class="reportText"><span class="text">[public]</span></td>
127 <td class="reportText"><span class="text">boolean haveSeenMyTag()</span></td>
130 <td class="reportValue_covered"><span class="text">255</span></td>
131 <td class="reportText"><span class="text"><a href="#src_116">startElement</a></span></td>
132 <td class="reportText"><span class="text">[public]</span></td>
133 <td class="reportText"><span class="text">net.jaekl.qd.xml.ParseResult startElement(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.Attributes)</span></td>
136 <td class="reportValue_covered"><span class="text">31</span></td>
137 <td class="reportText"><span class="text"><a href="#src_164">validate</a></span></td>
138 <td class="reportText"><span class="text">[public]</span></td>
139 <td class="reportText"><span class="text">void validate()</span></td>
143 <table cellspacing="0" cellpadding="0" class="src">
145 <td class="numLine"> 1</td>
146 <td class="nbHits"> </td>
147 <td class="src"><pre class="src"> <span Class="comment">// Copyright (C) 2004, 2014 Christian Jaekl</span></pre></td>
150 <td class="numLine"> 2</td>
151 <td class="nbHits"> </td>
152 <td class="src"><pre class="src"> </pre></td>
155 <td class="numLine"> 3</td>
156 <td class="nbHits"> </td>
157 <td class="src"><pre class="src"> <span Class="comment">// Abstract class representing the result of parsing an XML Element.</span></pre></td>
160 <td class="numLine"> 4</td>
161 <td class="nbHits"> </td>
162 <td class="src"><pre class="src"> <span Class="comment">// A class derived from this one will know how to parse a subtree inside an XML file, and </span></pre></td>
165 <td class="numLine"> 5</td>
166 <td class="nbHits"> </td>
167 <td class="src"><pre class="src"> <span Class="comment">// will contain the result of that parse within itself when the parse has completed.</span></pre></td>
170 <td class="numLine"> 6</td>
171 <td class="nbHits"> </td>
172 <td class="src"><pre class="src"> <span Class="comment">//</span></pre></td>
175 <td class="numLine"> 7</td>
176 <td class="nbHits"> </td>
177 <td class="src"><pre class="src"> <span Class="comment">// Note that this code will need to be augmented and fixed if XML namespace support is desired.</span></pre></td>
180 <td class="numLine"> 8</td>
181 <td class="nbHits"> </td>
182 <td class="src"><pre class="src"> </pre></td>
185 <td class="numLine"> 9</td>
186 <td class="nbHits"> </td>
187 <td class="src"><pre class="src"> <span Class="keyword">package</span> net.jaekl.qd.xml;</pre></td>
190 <td class="numLine"> 10</td>
191 <td class="nbHits"> </td>
192 <td class="src"><pre class="src"> </pre></td>
195 <td class="numLine"> 11</td>
196 <td class="nbHits"> </td>
197 <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.ArrayList;</pre></td>
200 <td class="numLine"> 12</td>
201 <td class="nbHits"> </td>
202 <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.HashMap;</pre></td>
205 <td class="numLine"> 13</td>
206 <td class="nbHits"> </td>
207 <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.HashSet;</pre></td>
210 <td class="numLine"> 14</td>
211 <td class="nbHits"> </td>
212 <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Iterator;</pre></td>
215 <td class="numLine"> 15</td>
216 <td class="nbHits"> </td>
217 <td class="src"><pre class="src"> <span Class="keyword">import</span> java.util.Stack;</pre></td>
220 <td class="numLine"> 16</td>
221 <td class="nbHits"> </td>
222 <td class="src"><pre class="src"> </pre></td>
225 <td class="numLine"> 17</td>
226 <td class="nbHits"> </td>
227 <td class="src"><pre class="src"> <span Class="keyword">import</span> org.xml.sax.Attributes;</pre></td>
230 <td class="numLine"> 18</td>
231 <td class="nbHits"> </td>
232 <td class="src"><pre class="src"> </pre></td>
235 <td class="numLineCover"> 19<a name="src_19"></a></td>
236 <td class="nbHitsCovered"> Block: 1/1 </td>
237 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">class</span> ParseResult</span></pre></td>
240 <td class="numLine"> 20</td>
241 <td class="nbHits"> </td>
242 <td class="src"><pre class="src"> {</pre></td>
245 <td class="numLine"> 21</td>
246 <td class="nbHits"> </td>
247 <td class="src"><pre class="src"> Stack<String> m_current; <span Class="comment">// Name of the element that we're currently inside</span></pre></td>
250 <td class="numLine"> 22</td>
251 <td class="nbHits"> </td>
252 <td class="src"><pre class="src"> StringBuilder m_chars; <span Class="comment">// character content of m_current.peek()</span></pre></td>
255 <td class="numLine"> 23</td>
256 <td class="nbHits"> </td>
257 <td class="src"><pre class="src"> ArrayList<ParseResult> m_childParsers; <span Class="comment">// Set of all child parsers</span></pre></td>
260 <td class="numLine"> 24</td>
261 <td class="nbHits"> </td>
262 <td class="src"><pre class="src"> <span Class="keyword">boolean</span> m_haveSeenMyTag; <span Class="comment">// Have I encountered my own (root) tag yet?</span></pre></td>
265 <td class="numLine"> 25</td>
266 <td class="nbHits"> </td>
267 <td class="src"><pre class="src"> </pre></td>
270 <td class="numLine"> 26</td>
271 <td class="nbHits"> </td>
272 <td class="src"><pre class="src"> String m_tagName; <span Class="comment">// Name of the (root) element tag that I'm parsing</span></pre></td>
275 <td class="numLine"> 27</td>
276 <td class="nbHits"> </td>
277 <td class="src"><pre class="src"> HashSet<String> m_internal; <span Class="comment">// Tags that we will store as members of this class instance</span></pre></td>
280 <td class="numLine"> 28</td>
281 <td class="nbHits"> </td>
282 <td class="src"><pre class="src"> HashMap<String,Class<? <span Class="keyword">extends</span> ParseResult>> m_external; <span Class="comment">// Tags that we will store as child ParseResult-derived objects</span></pre></td>
285 <td class="numLine"> 29</td>
286 <td class="nbHits"> </td>
287 <td class="src"><pre class="src"> </pre></td>
290 <td class="numLine"> 30</td>
291 <td class="nbHits"> </td>
292 <td class="src"><pre class="src"> @SuppressWarnings(<span Class="string">"unchecked"</span>)</pre></td>
295 <td class="numLine"> 31</td>
296 <td class="nbHits"> </td>
297 <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseResult(String tagName, String[] internalMemberTags, Object[][] externalParserTags)</pre></td>
300 <td class="numLineCover"> 32<a name="src_32"></a></td>
301 <td class="nbHitsCovered"> Block: 1/1 </td>
302 <td class="src"><pre class="src"> {</span></pre></td>
305 <td class="numLineCover"> 33</td>
306 <td class="nbHits"> </td>
307 <td class="src"><pre class="src"> m_current = <span Class="keyword">new</span> Stack<String>();</pre></td>
310 <td class="numLineCover"> 34</td>
311 <td class="nbHits"> </td>
312 <td class="src"><pre class="src"> m_chars = <span Class="keyword">new</span> StringBuilder();</pre></td>
315 <td class="numLineCover"> 35</td>
316 <td class="nbHits"> </td>
317 <td class="src"><pre class="src"> m_childParsers = <span Class="keyword">new</span> ArrayList<ParseResult>();</pre></td>
320 <td class="numLineCover"> 36</td>
321 <td class="nbHits"> </td>
322 <td class="src"><pre class="src"> m_haveSeenMyTag = <span Class="keyword">false</span>;</pre></td>
325 <td class="numLine"> 37</td>
326 <td class="nbHits"> </td>
327 <td class="src"><pre class="src"> </pre></td>
330 <td class="numLineCover"> 38</td>
331 <td class="nbHits"> </td>
332 <td class="src"><pre class="src"> m_tagName = tagName;</pre></td>
335 <td class="numLineCover"> 39</td>
336 <td class="nbHits"> </td>
337 <td class="src"><pre class="src"> m_internal = <span Class="keyword">new</span> HashSet<String>();</pre></td>
340 <td class="numLineCover"> 40</td>
341 <td class="nbHits"> </td>
342 <td class="src"><pre class="src"> m_external = <span Class="keyword">new</span> HashMap<String, Class<? <span Class="keyword">extends</span> ParseResult>>();</pre></td>
345 <td class="numLine"> 41</td>
346 <td class="nbHits"> </td>
347 <td class="src"><pre class="src"> </pre></td>
350 <td class="numLineCover"> 42</td>
351 <td class="nbHits"> </td>
352 <td class="src"><pre class="src"> <span Class="keyword">for</span> (String internalTag : internalMemberTags) {</pre></td>
355 <td class="numLineCover"> 43</td>
356 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
357 <td class="src"><pre class="src"> m_internal.add(internalTag);</span></pre></td>
360 <td class="numLine"> 44</td>
361 <td class="nbHits"> </td>
362 <td class="src"><pre class="src"> }</pre></td>
365 <td class="numLine"> 45</td>
366 <td class="nbHits"> </td>
367 <td class="src"><pre class="src"> </pre></td>
370 <td class="numLineCover"> 46</td>
371 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
372 <td class="src"><pre class="src"> <span Class="keyword">for</span> (<span Class="keyword">int</span> idx = 0; idx < externalParserTags.length; ++idx) {</span></pre></td>
375 <td class="numLineCover"> 47</td>
376 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
377 <td class="src"><pre class="src"> String externalTag = (String)externalParserTags[idx][0];</span></pre></td>
380 <td class="numLineCover"> 48</td>
381 <td class="nbHits"> </td>
382 <td class="src"><pre class="src"> Class<? <span Class="keyword">extends</span> ParseResult> parserClass = (Class<? <span Class="keyword">extends</span> ParseResult>)externalParserTags[idx][1];</pre></td>
385 <td class="numLineCover"> 49</td>
386 <td class="nbHits"> </td>
387 <td class="src"><pre class="src"> m_external.put(externalTag, parserClass);</pre></td>
390 <td class="numLine"> 50</td>
391 <td class="nbHits"> </td>
392 <td class="src"><pre class="src"> }</pre></td>
395 <td class="numLineCover"> 51</td>
396 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
397 <td class="src"><pre class="src"> }</span></pre></td>
400 <td class="numLine"> 52</td>
401 <td class="nbHits"> </td>
402 <td class="src"><pre class="src"> </pre></td>
405 <td class="numLine"> 53</td>
406 <td class="nbHits"> </td>
407 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">void</span> endContents(String uri, String localName, String qName, String chars) <span Class="keyword">throws</span> XmlParseException;</pre></td>
410 <td class="numLine"> 54</td>
411 <td class="nbHits"> </td>
412 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">abstract</span> <span Class="keyword">void</span> endExternal(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException;</pre></td>
415 <td class="numLine"> 55</td>
416 <td class="nbHits"> </td>
417 <td class="src"><pre class="src"> </pre></td>
420 <td class="numLineCover"> 56<a name="src_56"></a></td>
421 <td class="nbHitsCovered"> Block: 1/1 </td>
422 <td class="src"><pre class="src"> <span Class="keyword">public</span> String getTagName() { <span Class="keyword">return</span> m_tagName; }</span></pre></td>
425 <td class="numLineUnCover"> 57<a name="src_57"></a></td>
426 <td class="nbHitsUncovered"> Block: 0/1 </td>
427 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">boolean</span> haveSeenMyTag() { <span Class="keyword">return</span> m_haveSeenMyTag; }</span></pre></td>
430 <td class="numLine"> 58</td>
431 <td class="nbHits"> </td>
432 <td class="src"><pre class="src"> </pre></td>
435 <td class="numLine"> 59</td>
436 <td class="nbHits"> </td>
437 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> characters(<span Class="keyword">char</span>[] ch, <span Class="keyword">int</span> start, <span Class="keyword">int</span> length) <span Class="keyword">throws</span> XmlParseException</pre></td>
440 <td class="numLine"> 60</td>
441 <td class="nbHits"> </td>
442 <td class="src"><pre class="src"> {</pre></td>
445 <td class="numLineCover"> 61<a name="src_61"></a></td>
446 <td class="nbHitsCovered"> Block: 1/1 </td>
447 <td class="src"><pre class="src"> m_chars.append(ch, start, length);</span></pre></td>
450 <td class="numLineCover"> 62</td>
451 <td class="nbHits"> </td>
452 <td class="src"><pre class="src"> }</pre></td>
455 <td class="numLine"> 63</td>
456 <td class="nbHits"> </td>
457 <td class="src"><pre class="src"> </pre></td>
460 <td class="numLine"> 64</td>
461 <td class="nbHits"> </td>
462 <td class="src"><pre class="src"> <span Class="keyword">protected</span> ParseResult[] collectParsedChildren(Class<? <span Class="keyword">extends</span> ParseResult> cls) {</pre></td>
465 <td class="numLineCover"> 65<a name="src_65"></a></td>
466 <td class="nbHitsCovered"> Block: 1/1 </td>
467 <td class="src"><pre class="src"> ArrayList<ParseResult> collection = <span Class="keyword">new</span> ArrayList<ParseResult>();</span></pre></td>
470 <td class="numLineCover"> 66</td>
471 <td class="nbHits"> </td>
472 <td class="src"><pre class="src"> Iterator<ParseResult> iter = m_childParsers.iterator();</pre></td>
475 <td class="numLineCover"> 67</td>
476 <td class="nbHitsCovered"> Block: 1/1 </td>
477 <td class="src"><pre class="src"> <span Class="keyword">while</span> (iter.hasNext()) {</span></pre></td>
480 <td class="numLineCover"> 68</td>
481 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
482 <td class="src"><pre class="src"> ParseResult pr = iter.next();</span></pre></td>
485 <td class="numLineCover"> 69</td>
486 <td class="nbHits"> </td>
487 <td class="src"><pre class="src"> <span Class="keyword">if</span> (pr.getClass().isAssignableFrom(cls)) {</pre></td>
490 <td class="numLineCover"> 70</td>
491 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
492 <td class="src"><pre class="src"> collection.add(pr);</span></pre></td>
495 <td class="numLineCover"> 71</td>
496 <td class="nbHits"> </td>
497 <td class="src"><pre class="src"> iter.remove();</pre></td>
500 <td class="numLine"> 72</td>
501 <td class="nbHits"> </td>
502 <td class="src"><pre class="src"> }</pre></td>
505 <td class="numLineCover"> 73</td>
506 <td class="nbHitsUncovered"> Block: 1/1 Branch: 0/1 </td>
507 <td class="src"><pre class="src"> }</span></pre></td>
510 <td class="numLine"> 74</td>
511 <td class="nbHits"> </td>
512 <td class="src"><pre class="src"> </pre></td>
515 <td class="numLineCover"> 75</td>
516 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
517 <td class="src"><pre class="src"> ParseResult[] result = <span Class="keyword">new</span> ParseResult[collection.size()];</span></pre></td>
520 <td class="numLineCover"> 76</td>
521 <td class="nbHits"> </td>
522 <td class="src"><pre class="src"> <span Class="keyword">return</span> collection.toArray(result);</pre></td>
525 <td class="numLine"> 77</td>
526 <td class="nbHits"> </td>
527 <td class="src"><pre class="src"> }</pre></td>
530 <td class="numLine"> 78</td>
531 <td class="nbHits"> </td>
532 <td class="src"><pre class="src"> </pre></td>
535 <td class="numLine"> 79</td>
536 <td class="nbHits"> </td>
537 <td class="src"><pre class="src"> <span Class="comment">// returns true if this ParseResult's context has ended with this endElement() call</span></pre></td>
540 <td class="numLine"> 80</td>
541 <td class="nbHits"> </td>
542 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">boolean</span> endElement(String uri, String localName, String qName) <span Class="keyword">throws</span> XmlParseException</pre></td>
545 <td class="numLine"> 81</td>
546 <td class="nbHits"> </td>
547 <td class="src"><pre class="src"> {</pre></td>
550 <td class="numLineCover"> 82<a name="src_82"></a></td>
551 <td class="nbHitsCovered"> Block: 1/1 </td>
552 <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
555 <td class="numLine"> 83</td>
556 <td class="nbHits"> </td>
557 <td class="src"><pre class="src"> </pre></td>
560 <td class="numLineCover"> 84</td>
561 <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
562 <td class="src"><pre class="src"> <span Class="keyword">boolean</span> isInternal = m_internal.contains(localName);</span></pre></td>
565 <td class="numLine"> 85</td>
566 <td class="nbHits"> </td>
567 <td class="src"><pre class="src"> </pre></td>
570 <td class="numLineCover"> 86</td>
571 <td class="nbHits"> </td>
572 <td class="src"><pre class="src"> <span Class="keyword">if</span> (! m_haveSeenMyTag) {</pre></td>
575 <td class="numLine"> 87</td>
576 <td class="nbHits"> </td>
577 <td class="src"><pre class="src"> <span Class="comment">// We're in some unrecognised prologue. Ignore it and move on.</span></pre></td>
580 <td class="numLineCover"> 88</td>
581 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
582 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">false</span>;</span></pre></td>
585 <td class="numLine"> 89</td>
586 <td class="nbHits"> </td>
587 <td class="src"><pre class="src"> }</pre></td>
590 <td class="numLine"> 90</td>
591 <td class="nbHits"> </td>
592 <td class="src"><pre class="src"> </pre></td>
595 <td class="numLineCover"> 91</td>
596 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
597 <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_tagName.equals(localName)) {</span></pre></td>
600 <td class="numLineCover"> 92</td>
601 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
602 <td class="src"><pre class="src"> validate();</span></pre></td>
605 <td class="numLineCover"> 93</td>
606 <td class="nbHits"> </td>
607 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">true</span>;</pre></td>
610 <td class="numLine"> 94</td>
611 <td class="nbHits"> </td>
612 <td class="src"><pre class="src"> }</pre></td>
615 <td class="numLine"> 95</td>
616 <td class="nbHits"> </td>
617 <td class="src"><pre class="src"> </pre></td>
620 <td class="numLineCover"> 96</td>
621 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
622 <td class="src"><pre class="src"> <span Class="keyword">if</span> (!isInternal) {</span></pre></td>
625 <td class="numLine"> 97</td>
626 <td class="nbHits"> </td>
627 <td class="src"><pre class="src"> <span Class="comment">// Unrecognized tag. Ignore it.</span></pre></td>
630 <td class="numLineCover"> 98</td>
631 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
632 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">false</span>;</span></pre></td>
635 <td class="numLine"> 99</td>
636 <td class="nbHits"> </td>
637 <td class="src"><pre class="src"> }</pre></td>
640 <td class="numLine"> 100</td>
641 <td class="nbHits"> </td>
642 <td class="src"><pre class="src"> </pre></td>
645 <td class="numLineCover"> 101</td>
646 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
647 <td class="src"><pre class="src"> String tag = m_current.pop();</span></pre></td>
650 <td class="numLineCover"> 102</td>
651 <td class="nbHits"> </td>
652 <td class="src"><pre class="src"> <span Class="keyword">if</span> ( ! tag.equals(localName) ) {</pre></td>
655 <td class="numLineUnCover"> 103</td>
656 <td class="nbHitsUncovered"> Block: 0/1 Branch: 0/1 </td>
657 <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> MismatchedTagsException(tag, localName);</span></pre></td>
660 <td class="numLine"> 104</td>
661 <td class="nbHits"> </td>
662 <td class="src"><pre class="src"> }</pre></td>
665 <td class="numLine"> 105</td>
666 <td class="nbHits"> </td>
667 <td class="src"><pre class="src"> </pre></td>
670 <td class="numLineCover"> 106</td>
671 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
672 <td class="src"><pre class="src"> String chars = m_chars.toString();</span></pre></td>
675 <td class="numLineCover"> 107</td>
676 <td class="nbHits"> </td>
677 <td class="src"><pre class="src"> endContents(uri, localName, qName, chars);</pre></td>
680 <td class="numLine"> 108</td>
681 <td class="nbHits"> </td>
682 <td class="src"><pre class="src"> </pre></td>
685 <td class="numLineCover"> 109</td>
686 <td class="nbHits"> </td>
687 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">false</span>;</pre></td>
690 <td class="numLine"> 110</td>
691 <td class="nbHits"> </td>
692 <td class="src"><pre class="src"> }</pre></td>
695 <td class="numLine"> 111</td>
696 <td class="nbHits"> </td>
697 <td class="src"><pre class="src"> </pre></td>
700 <td class="numLine"> 112</td>
701 <td class="nbHits"> </td>
702 <td class="src"><pre class="src"> <span Class="comment">// returns either itself, or a new ParseResult-derived object, whichever should handle parsing the inside of this element</span></pre></td>
705 <td class="numLine"> 113</td>
706 <td class="nbHits"> </td>
707 <td class="src"><pre class="src"> <span Class="keyword">public</span> ParseResult startElement(String uri, String localName, String qName, Attributes attributes) </pre></td>
710 <td class="numLine"> 114</td>
711 <td class="nbHits"> </td>
712 <td class="src"><pre class="src"> <span Class="keyword">throws</span> XmlParseException</pre></td>
715 <td class="numLine"> 115</td>
716 <td class="nbHits"> </td>
717 <td class="src"><pre class="src"> {</pre></td>
720 <td class="numLineCover"> 116<a name="src_116"></a></td>
721 <td class="nbHitsCovered"> Block: 1/1 </td>
722 <td class="src"><pre class="src"> <span Class="keyword">assert</span> (<span Class="keyword">null</span> != localName);</span></pre></td>
725 <td class="numLine"> 117</td>
726 <td class="nbHits"> </td>
727 <td class="src"><pre class="src"> </pre></td>
730 <td class="numLineCover"> 118</td>
731 <td class="nbHitsUncovered"> Block: 1/1 Branch: 1/2 </td>
732 <td class="src"><pre class="src"> m_chars.setLength(0);</span></pre></td>
735 <td class="numLine"> 119</td>
736 <td class="nbHits"> </td>
737 <td class="src"><pre class="src"> </pre></td>
740 <td class="numLineCover"> 120</td>
741 <td class="nbHits"> </td>
742 <td class="src"><pre class="src"> <span Class="keyword">if</span> (! m_haveSeenMyTag) {</pre></td>
745 <td class="numLine"> 121</td>
746 <td class="nbHits"> </td>
747 <td class="src"><pre class="src"> <span Class="comment">// Have we opened our own (root) tag yet?</span></pre></td>
750 <td class="numLine"> 122</td>
751 <td class="nbHits"> </td>
752 <td class="src"><pre class="src"> </pre></td>
755 <td class="numLineCover"> 123</td>
756 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
757 <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_tagName.equals(localName)) {</span></pre></td>
760 <td class="numLineCover"> 124</td>
761 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
762 <td class="src"><pre class="src"> m_haveSeenMyTag = <span Class="keyword">true</span>;</span></pre></td>
765 <td class="numLineCover"> 125</td>
766 <td class="nbHits"> </td>
767 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</pre></td>
770 <td class="numLine"> 126</td>
771 <td class="nbHits"> </td>
772 <td class="src"><pre class="src"> }</pre></td>
775 <td class="numLine"> 127</td>
776 <td class="nbHits"> </td>
777 <td class="src"><pre class="src"> <span Class="keyword">else</span> {</pre></td>
780 <td class="numLine"> 128</td>
781 <td class="nbHits"> </td>
782 <td class="src"><pre class="src"> <span Class="comment">// One of two things has happened here.</span></pre></td>
785 <td class="numLine"> 129</td>
786 <td class="nbHits"> </td>
787 <td class="src"><pre class="src"> <span Class="comment">// Either (a) we've got some sort of wrapper here, and have not yet reach our own tag, </span></pre></td>
790 <td class="numLine"> 130</td>
791 <td class="nbHits"> </td>
792 <td class="src"><pre class="src"> <span Class="comment">// or (b) we're parsing XML that doesn't match expectations.</span></pre></td>
795 <td class="numLine"> 131</td>
796 <td class="nbHits"> </td>
797 <td class="src"><pre class="src"> <span Class="comment">// In either case, we're going to ignore this tag, and scan forward looking for our own root.</span></pre></td>
800 <td class="numLineCover"> 132</td>
801 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
802 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</span></pre></td>
805 <td class="numLine"> 133</td>
806 <td class="nbHits"> </td>
807 <td class="src"><pre class="src"> }</pre></td>
810 <td class="numLine"> 134</td>
811 <td class="nbHits"> </td>
812 <td class="src"><pre class="src"> }</pre></td>
815 <td class="numLine"> 135</td>
816 <td class="nbHits"> </td>
817 <td class="src"><pre class="src"> </pre></td>
820 <td class="numLineCover"> 136</td>
821 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
822 <td class="src"><pre class="src"> <span Class="keyword">if</span> (m_internal.contains(localName)) {</span></pre></td>
825 <td class="numLineCover"> 137</td>
826 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
827 <td class="src"><pre class="src"> m_current.push(localName);</span></pre></td>
830 <td class="numLineCover"> 138</td>
831 <td class="nbHits"> </td>
832 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</pre></td>
835 <td class="numLine"> 139</td>
836 <td class="nbHits"> </td>
837 <td class="src"><pre class="src"> }</pre></td>
840 <td class="numLine"> 140</td>
841 <td class="nbHits"> </td>
842 <td class="src"><pre class="src"> </pre></td>
845 <td class="numLineCover"> 141</td>
846 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
847 <td class="src"><pre class="src"> Class<? <span Class="keyword">extends</span> ParseResult> parserClass = m_external.get(localName);</span></pre></td>
850 <td class="numLineCover"> 142</td>
851 <td class="nbHits"> </td>
852 <td class="src"><pre class="src"> <span Class="keyword">if</span> (<span Class="keyword">null</span> != parserClass) {</pre></td>
855 <td class="numLine"> 143</td>
856 <td class="nbHits"> </td>
857 <td class="src"><pre class="src"> <span Class="keyword">try</span> {</pre></td>
860 <td class="numLineCover"> 144</td>
861 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
862 <td class="src"><pre class="src"> ParseResult childParser = (ParseResult) parserClass.newInstance();</span></pre></td>
865 <td class="numLineCover"> 145</td>
866 <td class="nbHits"> </td>
867 <td class="src"><pre class="src"> m_childParsers.add(childParser);</pre></td>
870 <td class="numLineCover"> 146</td>
871 <td class="nbHits"> </td>
872 <td class="src"><pre class="src"> <span Class="keyword">return</span> childParser.startElement(uri, localName, qName, attributes);</pre></td>
875 <td class="numLine"> 147</td>
876 <td class="nbHits"> </td>
877 <td class="src"><pre class="src"> }</pre></td>
880 <td class="numLineUnCover"> 148</td>
881 <td class="nbHitsUncovered"> Block: 0/1 </td>
882 <td class="src"><pre class="src"> <span Class="keyword">catch</span> (IllegalAccessException iae) {</span></pre></td>
885 <td class="numLineUnCover"> 149</td>
886 <td class="nbHits"> </td>
887 <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(iae);</pre></td>
890 <td class="numLine"> 150</td>
891 <td class="nbHits"> </td>
892 <td class="src"><pre class="src"> }</pre></td>
895 <td class="numLineUnCover"> 151</td>
896 <td class="nbHitsUncovered"> Block: 0/1 </td>
897 <td class="src"><pre class="src"> <span Class="keyword">catch</span> (InstantiationException ie) {</span></pre></td>
900 <td class="numLineUnCover"> 152</td>
901 <td class="nbHits"> </td>
902 <td class="src"><pre class="src"> <span Class="keyword">throw</span> <span Class="keyword">new</span> XmlParseException(ie);</pre></td>
905 <td class="numLine"> 153</td>
906 <td class="nbHits"> </td>
907 <td class="src"><pre class="src"> }</pre></td>
910 <td class="numLine"> 154</td>
911 <td class="nbHits"> </td>
912 <td class="src"><pre class="src"> }</pre></td>
915 <td class="numLine"> 155</td>
916 <td class="nbHits"> </td>
917 <td class="src"><pre class="src"> </pre></td>
920 <td class="numLine"> 156</td>
921 <td class="nbHits"> </td>
922 <td class="src"><pre class="src"> <span Class="comment">// Not a recognized tag. Ignore it, rather than complaining. </span></pre></td>
925 <td class="numLineCover"> 157</td>
926 <td class="nbHitsCovered"> Block: 1/1 Branch: 1/1 </td>
927 <td class="src"><pre class="src"> <span Class="keyword">return</span> <span Class="keyword">this</span>;</span></pre></td>
930 <td class="numLine"> 158</td>
931 <td class="nbHits"> </td>
932 <td class="src"><pre class="src"> }</pre></td>
935 <td class="numLine"> 159</td>
936 <td class="nbHits"> </td>
937 <td class="src"><pre class="src"> </pre></td>
940 <td class="numLine"> 160</td>
941 <td class="nbHits"> </td>
942 <td class="src"><pre class="src"> <span Class="keyword">public</span> <span Class="keyword">void</span> validate() <span Class="keyword">throws</span> XmlParseException</pre></td>
945 <td class="numLine"> 161</td>
946 <td class="nbHits"> </td>
947 <td class="src"><pre class="src"> {</pre></td>
950 <td class="numLine"> 162</td>
951 <td class="nbHits"> </td>
952 <td class="src"><pre class="src"> <span Class="comment">// Default implementation is a no-op.</span></pre></td>
955 <td class="numLine"> 163</td>
956 <td class="nbHits"> </td>
957 <td class="src"><pre class="src"> <span Class="comment">// Override if you want to validate on endElement()</span></pre></td>
960 <td class="numLineCover"> 164<a name="src_164"></a></td>
961 <td class="nbHitsCovered"> Block: 1/1 </td>
962 <td class="src"><pre class="src"> }</span></pre></td>
965 <td class="numLine"> 165</td>
966 <td class="nbHits"> </td>
967 <td class="src"><pre class="src"> }</pre></td>
970 <td class="numLine"> 166</td>
971 <td class="nbHits"> </td>
972 <td class="src"><pre class="src"> </pre></td>
976 <p><table cellpadding="0" cellspacing="0" class="report"> <tr class="report"> <td class="reportText"><span class="text"> Report generated 11/12/14 11:31 PM </span></td> </tr></table>