Modified:
websites/production/commons/content/proper/commons-validator/cobertura/org.apache.commons.validator.routines.DomainValidator.html
==============================================================================
---
websites/production/commons/content/proper/commons-validator/cobertura/org.apache.commons.validator.routines.DomainValidator.html
(original)
+++
websites/production/commons/content/proper/commons-validator/cobertura/org.apache.commons.validator.routines.DomainValidator.html
Tue Jan 13 20:07:34 2015
@@ -12,7 +12,8 @@
<div class="separator"> </div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td
class="heading"><a class="dfn" href="help.html"
onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td
class="heading"><a class="dfn" href="help.html"
onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td
class="heading"><a class="dfn" href="help.html"
onclick="popupwindow('help.html'); return
false;">Complexity</a></td></tr></thead>
- <tr><td><a
href="org.apache.commons.validator.routines.DomainValidator.html">DomainValidator</a></td><td><table
cellpadding="0px" cellspacing="0px" class="percentgraph"><tr
class="percentgraph"><td align="right" class="percentgraph"
width="40">100%</td><td class="percentgraph"><div class="percentgraph"><div
class="greenbar" style="width:100px"><span
class="text">36/36</span></div></div></td></tr></table></td><td><table
cellpadding="0px" cellspacing="0px" class="percentgraph"><tr
class="percentgraph"><td align="right" class="percentgraph"
width="40">93%</td><td class="percentgraph"><div class="percentgraph"><div
class="greenbar" style="width:93px"><span
class="text">28/30</span></div></div></td></tr></table></td><td
class="value"><span class="hidden">2.3;</span>2,3</td></tr>
+ <tr><td><a
href="org.apache.commons.validator.routines.DomainValidator.html">DomainValidator</a></td><td><table
cellpadding="0px" cellspacing="0px" class="percentgraph"><tr
class="percentgraph"><td align="right" class="percentgraph"
width="40">90%</td><td class="percentgraph"><div class="percentgraph"><div
class="greenbar" style="width:90px"><span
class="text">65/72</span></div></div></td></tr></table></td><td><table
cellpadding="0px" cellspacing="0px" class="percentgraph"><tr
class="percentgraph"><td align="right" class="percentgraph"
width="40">85%</td><td class="percentgraph"><div class="percentgraph"><div
class="greenbar" style="width:85px"><span
class="text">48/56</span></div></div></td></tr></table></td><td
class="value"><span class="hidden">3.8666666666666667;</span>3,867</td></tr>
+ <tr><td><a
href="org.apache.commons.validator.routines.DomainValidator.html">DomainValidator$IDNHolder</a></td><td><table
cellpadding="0px" cellspacing="0px" class="percentgraph"><tr
class="percentgraph"><td align="right" class="percentgraph"
width="40">66%</td><td class="percentgraph"><div class="percentgraph"><div
class="greenbar" style="width:66px"><span
class="text">4/6</span></div></div></td></tr></table></td><td><table
cellpadding="0px" cellspacing="0px" class="percentgraph"><tr
class="percentgraph"><td align="right" class="percentgraph"
width="40">50%</td><td class="percentgraph"><div class="percentgraph"><div
class="greenbar" style="width:50px"><span
class="text">2/4</span></div></div></td></tr></table></td><td
class="value"><span class="hidden">3.8666666666666667;</span>3,867</td></tr>
</table>
<div class="separator"> </div>
@@ -56,1733 +57,2202 @@
<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">import</span>
java.io.Serializable;</pre></td></tr>
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">import</span>
java.util.Arrays;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span>
java.lang.reflect.InvocationTargetException;</pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span>
java.lang.reflect.Method;</pre></td></tr>
<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span>
java.util.Arrays;</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<p><b>Domain name</b> validation
routines.</p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">import</span>
java.util.Locale;</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * This
validator provides methods for validating Internet domain
names</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<p><b>Domain name</b> validation
routines.</p></span></pre></td></tr>
<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * and
top-level domains.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<p></span></pre></td></tr>
<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * This
validator provides methods for validating Internet domain
names</span></pre></td></tr>
<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<p>Domain names are evaluated according</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * and
top-level domains.</span></pre></td></tr>
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * to the
standards <a
href="http://www.ietf.org/rfc/rfc1034.txt">RFC1034</a>,</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * section 3,
and <a
href="http://www.ietf.org/rfc/rfc1123.txt">RFC1123</a>,</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * section 2.1.
No accomodation is provided for the specialized needs of</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<p>Domain names are evaluated according</span></pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * other
applications; if the domain name has been URL-encoded, for
example,</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * to the
standards <a
href="http://www.ietf.org/rfc/rfc1034.txt">RFC1034</a>,</span></pre></td></tr>
<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * validation
will fail even though the equivalent plaintext version of
the</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * section 3,
and <a
href="http://www.ietf.org/rfc/rfc1123.txt">RFC1123</a>,</span></pre></td></tr>
<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * same name
would have passed.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * section 2.1.
No accommodation is provided for the specialized needs of</span></pre></td></tr>
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * other
applications; if the domain name has been URL-encoded, for
example,</span></pre></td></tr>
<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * validation
will fail even though the equivalent plaintext version of
the</span></pre></td></tr>
<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * same name
would have passed.</span></pre></td></tr>
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Validation
is also provided for top-level domains (TLDs) as defined
and</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * maintained
by the Internet Assigned Numbers Authority (IANA):</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<p></span></pre></td></tr>
<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Validation
is also provided for top-level domains (TLDs) as defined
and</span></pre></td></tr>
<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<ul></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * maintained
by the Internet Assigned Numbers Authority (IANA):</span></pre></td></tr>
<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<li>{@link #isValidInfrastructureTld} - validates infrastructure
TLDs</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
(<code>.arpa</code>, etc.)</li></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<li>{@link #isValidGenericTld} - validates generic
TLDs</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<ul></span></pre></td></tr>
<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
(<code>.com, .org</code>, etc.)</li></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<li>{@link #isValidInfrastructureTld} - validates infrastructure
TLDs</span></pre></td></tr>
<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<li>{@link #isValidCountryCodeTld} - validates country code
TLDs</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
(<code>.arpa</code>, etc.)</li></span></pre></td></tr>
<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
(<code>.us, .uk, .cn</code>, etc.)</li></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<li>{@link #isValidGenericTld} - validates generic
TLDs</span></pre></td></tr>
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
</ul></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
(<code>.com, .org</code>, etc.)</li></span></pre></td></tr>
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<li>{@link #isValidCountryCodeTld} - validates country code
TLDs</span></pre></td></tr>
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
<p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
(<code>.us, .uk, .cn</code>, etc.)</li></span></pre></td></tr>
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
(<b>NOTE</b>: This class does not provide IP address lookup for
domain names or</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
</ul></span></pre></td></tr>
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * methods to
ensure that a given domain name matches a specific IP;
see</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@link
java.net.InetAddress} for that functionality.)</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
<p></span></pre></td></tr>
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
(<b>NOTE</b>: This class does not provide IP address lookup for
domain names or</span></pre></td></tr>
<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * methods to
ensure that a given domain name matches a specific IP;
see</span></pre></td></tr>
<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @version
$Revision: 1647964 $ $Date: 2014-12-26 13:33:35 +0100 (Fr, 26 Dez 2014)
$</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * {@link
java.net.InetAddress} for that functionality.)</span></pre></td></tr>
<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @since
Validator 1.4</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
</p></span></pre></td></tr>
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*</span></pre></td></tr>
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span>
<span class="keyword">class</span> DomainValidator <span
class="keyword">implements</span> Serializable {</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @version
$Revision: 1650777 $</span></pre></td></tr>
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @since
Validator 1.4</span></pre></td></tr>
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> <span class="keyword">long</span> serialVersionUID
= -4407125112880174009L;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="keyword">public</span>
<span class="keyword">class</span> DomainValidator <span
class="keyword">implements</span> Serializable {</pre></td></tr>
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Regular
expression strings for hostnames (derived from RFC2396 and RFC
1123)</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String DOMAIN_LABEL_REGEX = <span
class="string">"\\p{Alnum}(?>[\\p{Alnum}-]*\\p{Alnum})*"</span>;</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> <span class="keyword">long</span> serialVersionUID
= -4407125112880174009L;</pre></td></tr>
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String TOP_LABEL_REGEX = <span
class="string">"\\p{Alpha}{2,}"</span>;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String DOMAIN_NAME_REGEX =</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Regular
expression strings for hostnames (derived from RFC2396 and RFC
1123)</span></pre></td></tr>
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"^(?:"</span> + DOMAIN_LABEL_REGEX + <span
class="string">"\\.)+"</span> + <span class="string">"("</span> +
TOP_LABEL_REGEX + <span class="string">")$"</span>;</pre></td></tr>
-<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// RFC2396:
domainlabel = alphanum | alphanum *( alphanum | "-" )
alphanum</span></pre></td></tr>
<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">final</span> <span
class="keyword">boolean</span> allowLocal;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Max 63
characters</span></pre></td></tr>
<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String DOMAIN_LABEL_REGEX = <span
class="string">"\\p{Alnum}(?>[\\p{Alnum}-]{0,61}\\p{Alnum})?"</span>;</pre></td></tr>
<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
Singleton instance of this validator, which</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// RFC2396
toplabel = alpha | alpha *( alphanum | "-" ) alphanum</span></pre></td></tr>
<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * doesn't
consider local addresses as valid.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Max 63
characters</span></pre></td></tr>
<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
-<tr> <td class="numLineCover"> 78</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> DomainValidator DOMAIN_VALIDATOR = <span
class="keyword">new</span> DomainValidator(<span
class="keyword">false</span>);</pre></td></tr>
-<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String TOP_LABEL_REGEX = <span
class="string">"\\p{Alpha}(?>[\\p{Alnum}-]{0,61}\\p{Alnum})?"</span>;</pre></td></tr>
+<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// RFC2396
hostname = *( domainlabel "." ) toplabel [ "." ]</span></pre></td></tr>
<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Note
that the regex currently requires both a domain label and a top level label,
whereas</span></pre></td></tr>
<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
Singleton instance of this validator, which does</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// the RFC
does not. This is because the regex is used to detect if a TLD is
present.</span></pre></td></tr>
<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
consider local addresses valid.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// If the
match fails, input is checked against DOMAIN_LABEL_REGEX
(hostnameRegex)</span></pre></td></tr>
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
-<tr> <td class="numLineCover"> 84</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> DomainValidator DOMAIN_VALIDATOR_WITH_LOCAL =
<span class="keyword">new</span> DomainValidator(<span
class="keyword">true</span>);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// RFC1123
sec 2.1 allows hostnames to start with a digit</span></pre></td></tr>
+<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String DOMAIN_NAME_REGEX =</pre></td></tr>
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="string">"^(?:"</span> + DOMAIN_LABEL_REGEX + <span
class="string">"\\.)+"</span> + <span class="string">"("</span> +
TOP_LABEL_REGEX + <span class="string">")\\.?$"</span>;</pre></td></tr>
<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
RegexValidator for matching domains.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">private</span> <span class="keyword">final</span> <span
class="keyword">boolean</span> allowLocal;</pre></td></tr>
<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
-<tr> <td class="numLineCover"> 89</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">final</span>
RegexValidator domainRegex =</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">new</span> RegexValidator(DOMAIN_NAME_REGEX);</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
Singleton instance of this validator, which</span></pre></td></tr>
<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * doesn't
consider local addresses as valid.</span></pre></td></tr>
<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
RegexValidator for matching the a local hostname</span></pre></td></tr>
-<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
-<tr> <td class="numLineCover"> 94</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">final</span>
RegexValidator hostnameRegex =</pre></td></tr>
+<tr> <td class="numLineCover"> 93</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> DomainValidator DOMAIN_VALIDATOR = <span
class="keyword">new</span> DomainValidator(<span
class="keyword">false</span>);</pre></td></tr>
+<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">new</span> RegexValidator(DOMAIN_LABEL_REGEX);</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
Singleton instance of this validator, which does</span></pre></td></tr>
<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
consider local addresses valid.</span></pre></td></tr>
<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
the singleton instance of this validator. It</span></pre></td></tr>
-<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * will
not consider local addresses as valid.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+<tr> <td class="numLineCover"> 99</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> DomainValidator DOMAIN_VALIDATOR_WITH_LOCAL =
<span class="keyword">new</span> DomainValidator(<span
class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
the singleton instance of this validator</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">static</span>
DomainValidator getInstance() {</pre></td></tr>
-<tr> <td class="numLineCover"> 103</td> <td
class="nbHitsCovered"> 5</td> <td class="src"><pre class="src">
<span class="keyword">return</span> DOMAIN_VALIDATOR;</pre></td></tr>
-<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
RegexValidator for matching domains.</span></pre></td></tr>
+<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+<tr> <td class="numLineCover"> 104</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">final</span>
RegexValidator domainRegex =</pre></td></tr>
<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">new</span> RegexValidator(DOMAIN_NAME_REGEX);</pre></td></tr>
<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
the singleton instance of this validator,</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
RegexValidator for matching a local hostname</span></pre></td></tr>
<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * with
local validation as required.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
allowLocal Should local addresses be considered valid?</span></pre></td></tr>
-<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
the singleton instance of this validator</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// RFC1123
sec 2.1 allows hostnames to start with a digit</span></pre></td></tr>
+<tr> <td class="numLineCover"> 110</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">final</span>
RegexValidator hostnameRegex =</pre></td></tr>
<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">new</span> RegexValidator(DOMAIN_LABEL_REGEX);</pre></td></tr>
<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">static</span>
DomainValidator getInstance(<span class="keyword">boolean</span> allowLocal)
{</pre></td></tr>
-<tr> <td class="numLineCover"> 113</td> <td class="nbHitsCovered"><a
title="Line 113: Conditional coverage 100% (2/2)."> 30131</a></td> <td
class="src"><pre class="src"> <a title="Line 113: Conditional coverage
100% (2/2)."> <span class="keyword">if</span>(allowLocal)
{</a></pre></td></tr>
-<tr> <td class="numLineCover"> 114</td> <td
class="nbHitsCovered"> 17</td> <td class="src"><pre class="src">
<span class="keyword">return</span>
DOMAIN_VALIDATOR_WITH_LOCAL;</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
the singleton instance of this validator. It</span></pre></td></tr>
<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 116</td> <td
class="nbHitsCovered"> 30114</td> <td class="src"><pre class="src">
<span class="keyword">return</span> DOMAIN_VALIDATOR;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * will
not consider local addresses as valid.</span></pre></td></tr>
+<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
the singleton instance of this validator</span></pre></td></tr>
<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">static</span>
DomainValidator getInstance() {</pre></td></tr>
+<tr> <td class="numLineCover"> 119</td> <td
class="nbHitsCovered"> 15</td> <td class="src"><pre class="src">
<span class="keyword">return</span> DOMAIN_VALIDATOR;</pre></td></tr>
+<tr> <td class="numLine"> 120</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/** Private
constructor. */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 120</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">private</span> DomainValidator(<span
class="keyword">boolean</span> allowLocal) {</pre></td></tr>
-<tr> <td class="numLineCover"> 121</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">this</span>.allowLocal = allowLocal;</pre></td></tr>
-<tr> <td class="numLineCover"> 122</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
}</pre></td></tr>
+<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
the singleton instance of this validator,</span></pre></td></tr>
<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * with
local validation as required.</span></pre></td></tr>
<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code>
parses</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
allowLocal Should local addresses be considered valid?</span></pre></td></tr>
<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * as a
valid domain name with a recognized top-level domain.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
the singleton instance of this validator</span></pre></td></tr>
<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The
parsing is case-sensitive.</span></pre></td></tr>
-<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
domain the parameter to check for domain name syntax</span></pre></td></tr>
-<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a valid domain name</span></pre></td></tr>
-<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">static</span>
DomainValidator getInstance(<span class="keyword">boolean</span> allowLocal)
{</pre></td></tr>
+<tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"><a
title="Line 129: Conditional coverage 100% (2/2)."> 30194</a></td> <td
class="src"><pre class="src"> <a title="Line 129: Conditional coverage
100% (2/2)."> <span class="keyword">if</span>(allowLocal)
{</a></pre></td></tr>
+<tr> <td class="numLineCover"> 130</td> <td
class="nbHitsCovered"> 17</td> <td class="src"><pre class="src">
<span class="keyword">return</span>
DOMAIN_VALIDATOR_WITH_LOCAL;</pre></td></tr>
<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValid(String domain) {</pre></td></tr>
-<tr> <td class="numLineCover"> 132</td> <td
class="nbHitsCovered"> 30161</td> <td class="src"><pre class="src">
String[] groups = domainRegex.match(domain);</pre></td></tr>
-<tr> <td class="numLineCover"> 133</td> <td class="nbHitsUncovered"><a
title="Line 133: Conditional coverage 75% (3/4) [each condition: 100%,
50%]."> 30161</a></td> <td class="src"><pre class="src"><span
class="srcUncovered"> <a title="Line 133: Conditional coverage 75% (3/4)
[each condition: 100%, 50%]."> <span class="keyword">if</span> (groups
!= <span class="keyword">null</span> && groups.length > 0)
{</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 134</td> <td
class="nbHitsCovered"> 7979</td> <td class="src"><pre class="src">
<span class="keyword">return</span>
isValidTld(groups[0]);</pre></td></tr>
-<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span
class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 136</td> <td class="nbHitsCovered"><a
title="Line 136: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> 22182</a></td> <td class="src"><pre class="src"> <a
title="Line 136: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> <span class="keyword">return</span> allowLocal &&
hostnameRegex.isValid(domain);</a></pre></td></tr>
-<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 132</td> <td
class="nbHitsCovered"> 30177</td> <td class="src"><pre class="src">
<span class="keyword">return</span> DOMAIN_VALIDATOR;</pre></td></tr>
+<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/** Private
constructor. */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 136</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">private</span> DomainValidator(<span
class="keyword">boolean</span> allowLocal) {</pre></td></tr>
+<tr> <td class="numLineCover"> 137</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">this</span>.allowLocal = allowLocal;</pre></td></tr>
+<tr> <td class="numLineCover"> 138</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
}</pre></td></tr>
<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code>
parses</span></pre></td></tr>
<tr> <td class="numLine"> 142</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined top-level domain. Leading dots are ignored if
present.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * as a
valid domain name with a recognized top-level domain.</span></pre></td></tr>
<tr> <td class="numLine"> 143</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * The
search is case-sensitive.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * The
parsing is case-insensitive.</span></pre></td></tr>
<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
tld the parameter to check for TLD status</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
domain the parameter to check for domain name syntax</span></pre></td></tr>
<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a TLD</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a valid domain name</span></pre></td></tr>
<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidTld(String tld) {</pre></td></tr>
-<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"><a
title="Line 148: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> 8014</a></td> <td class="src"><pre class="src"> <a
title="Line 148: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> <span class="keyword">if</span>(allowLocal &&
isValidLocalTld(tld)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 149</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">return</span> <span
class="keyword">true</span>;</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValid(String domain) {</pre></td></tr>
+<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"><a
title="Line 148: Conditional coverage 100% (2/2)."> 30236</a></td> <td
class="src"><pre class="src"> <a title="Line 148: Conditional coverage
100% (2/2)."> <span class="keyword">if</span> (domain == <span
class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 149</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">return</span> <span
class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 150</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 151</td> <td class="nbHitsUncovered"><a
title="Line 151: Conditional coverage 50% (1/2)."> 8012</a></td> <td
class="src"><pre class="src"><span class="srcUncovered"> <a title="Line
151: Conditional coverage 50% (1/2)."> <span
class="keyword">return</span>
isValidInfrastructureTld(tld)</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"><a
title="Line 152: Conditional coverage 100% (2/2)."> 8012</a></td> <td
class="src"><pre class="src"> <a title="Line 152: Conditional coverage
100% (2/2)."> || isValidGenericTld(tld)</a></pre></td></tr>
-<tr> <td class="numLineCover"> 153</td> <td class="nbHitsCovered"><a
title="Line 153: Conditional coverage 100% (2/2)."> 3190</a></td> <td
class="src"><pre class="src"> <a title="Line 153: Conditional coverage
100% (2/2)."> || isValidCountryCodeTld(tld);</a></pre></td></tr>
+<tr> <td class="numLineCover"> 151</td> <td
class="nbHitsCovered"> 30234</td> <td class="src"><pre class="src">
domain = unicodeToASCII(domain);</pre></td></tr>
+<tr> <td class="numLine"> 152</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//
hosts must be equally reachable via punycode and Unicode;</span></pre></td></tr>
+<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">//
Unicode is never shorter than punycode, so check punycode</span></pre></td></tr>
<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// if
domain did not convert, then it will be caught by ASCII</span></pre></td></tr>
<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">//
checks in the regexes below</span></pre></td></tr>
+<tr> <td class="numLineCover"> 156</td> <td class="nbHitsUncovered"><a
title="Line 156: Conditional coverage 50% (1/2)."> 30234</a></td> <td
class="src"><pre class="src"><span class="srcUncovered"> <a title="Line
156: Conditional coverage 50% (1/2)."> <span class="keyword">if</span>
(domain.length() > 253) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 157</td> <td
class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span
class="srcUncovered"> <span class="keyword">return</span>
<span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined infrastructure top-level domain. Leading dots
are</span></pre></td></tr>
-<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * ignored
if present. The search is case-sensitive.</span></pre></td></tr>
-<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
iTld the parameter to check for infrastructure TLD status</span></pre></td></tr>
-<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is an infrastructure TLD</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 159</td> <td
class="nbHitsCovered"> 30234</td> <td class="src"><pre class="src">
String[] groups = domainRegex.match(domain);</pre></td></tr>
+<tr> <td class="numLineCover"> 160</td> <td class="nbHitsUncovered"><a
title="Line 160: Conditional coverage 75% (3/4) [each condition: 100%,
50%]."> 30234</a></td> <td class="src"><pre class="src"><span
class="srcUncovered"> <a title="Line 160: Conditional coverage 75% (3/4)
[each condition: 100%, 50%]."> <span class="keyword">if</span> (groups
!= <span class="keyword">null</span> && groups.length > 0)
{</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 161</td> <td
class="nbHitsCovered"> 11201</td> <td class="src"><pre class="src">
<span class="keyword">return</span>
isValidTld(groups[0]);</pre></td></tr>
<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
-<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidInfrastructureTld(String iTld) {</pre></td></tr>
-<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"><a
title="Line 164: Conditional coverage 100% (2/2)."> 8014</a></td> <td
class="src"><pre class="src"> <a title="Line 164: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(INFRASTRUCTURE_TLDS, (chompLeadingDot(iTld.toLowerCase())))
>= 0;</a></pre></td></tr>
-<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"><a
title="Line 163: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> 19033</a></td> <td class="src"><pre class="src"> <a
title="Line 163: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> <span class="keyword">return</span> allowLocal &&
hostnameRegex.isValid(domain);</a></pre></td></tr>
+<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// package
protected for unit test access</span></pre></td></tr>
<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// must
agree with isValid() above</span></pre></td></tr>
<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
-<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined generic top-level domain. Leading dots are
ignored</span></pre></td></tr>
-<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * if
present. The search is case-sensitive.</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">final</span> <span class="keyword">boolean</span>
isValidDomainSyntax(String domain) {</pre></td></tr>
+<tr> <td class="numLineCover"> 169</td> <td class="nbHitsUncovered"><a
title="Line 169: Conditional coverage 50% (1/2)."> 21</a></td> <td
class="src"><pre class="src"><span class="srcUncovered"> <a title="Line
169: Conditional coverage 50% (1/2)."> <span class="keyword">if</span>
(domain == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 170</td> <td
class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span
class="srcUncovered"> <span class="keyword">return</span>
<span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
gTld the parameter to check for generic TLD status</span></pre></td></tr>
-<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a generic TLD</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 172</td> <td
class="nbHitsCovered"> 21</td> <td class="src"><pre class="src">
domain = unicodeToASCII(domain);</pre></td></tr>
<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">//
hosts must be equally reachable via punycode and Unicode;</span></pre></td></tr>
<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidGenericTld(String gTld) {</pre></td></tr>
-<tr> <td class="numLineCover"> 175</td> <td class="nbHitsCovered"><a
title="Line 175: Conditional coverage 100% (2/2)."> 8014</a></td> <td
class="src"><pre class="src"> <a title="Line 175: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(GENERIC_TLDS, chompLeadingDot(gTld.toLowerCase())) >=
0;</a></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">//
Unicode is never shorter than punycode, so check punycode</span></pre></td></tr>
+<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// if
domain did not convert, then it will be caught by ASCII</span></pre></td></tr>
<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">//
checks in the regexes below</span></pre></td></tr>
+<tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"><a
title="Line 177: Conditional coverage 100% (2/2)."> 21</a></td> <td
class="src"><pre class="src"> <a title="Line 177: Conditional coverage
100% (2/2)."> <span class="keyword">if</span> (domain.length() > 253)
{</a></pre></td></tr>
+<tr> <td class="numLineCover"> 178</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">return</span> <span
class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
-<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined country code top-level domain. Leading dots
are</span></pre></td></tr>
-<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * ignored
if present. The search is case-sensitive.</span></pre></td></tr>
-<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
ccTld the parameter to check for country code TLD status</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 180</td> <td
class="nbHitsCovered"> 20</td> <td class="src"><pre class="src">
String[] groups = domainRegex.match(domain);</pre></td></tr>
+<tr> <td class="numLineCover"> 181</td> <td class="nbHitsUncovered"><a
title="Line 181: Conditional coverage 75% (3/4) [each condition: 100%,
50%]."> 20</a></td> <td class="src"><pre class="src"><span
class="srcUncovered"> <a title="Line 181: Conditional coverage 75% (3/4)
[each condition: 100%, 50%]."> <span class="keyword">return</span>
(groups != <span class="keyword">null</span> && groups.length >
0)</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 182</td> <td class="nbHitsCovered"><a
title="Line 182: Conditional coverage 100% (2/2)."> 12</a></td> <td
class="src"><pre class="src"> <a title="Line 182: Conditional coverage
100% (2/2)."> ||
hostnameRegex.isValid(domain);</a></pre></td></tr>
<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a country code TLD</span></pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidCountryCodeTld(String ccTld) {</pre></td></tr>
-<tr> <td class="numLineCover"> 186</td> <td class="nbHitsCovered"><a
title="Line 186: Conditional coverage 100% (2/2)."> 3192</a></td> <td
class="src"><pre class="src"> <a title="Line 186: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(COUNTRY_CODE_TLDS, chompLeadingDot(ccTld.toLowerCase()))
>= 0;</a></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined top-level domain. Leading dots are ignored if
present.</span></pre></td></tr>
<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * The
search is case-insensitive.</span></pre></td></tr>
<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
tld the parameter to check for TLD status, not null</span></pre></td></tr>
<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a TLD</span></pre></td></tr>
<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * widely
used "local" domains (localhost or localdomain). Leading dots
are</span></pre></td></tr>
-<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * ignored
if present. The search is case-sensitive.</span></pre></td></tr>
-<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @param
iTld the parameter to check for local TLD status</span></pre></td></tr>
-<tr> <td class="numLine"> 194</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is an local TLD</span></pre></td></tr>
-<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
+<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidTld(String tld) {</pre></td></tr>
+<tr> <td class="numLineCover"> 193</td> <td
class="nbHitsCovered"> 11243</td> <td class="src"><pre class="src">
tld = unicodeToASCII(tld);</pre></td></tr>
+<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"><a
title="Line 194: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> 11243</a></td> <td class="src"><pre class="src"> <a
title="Line 194: Conditional coverage 100% (4/4) [each condition: 100%,
100%]."> <span class="keyword">if</span>(allowLocal &&
isValidLocalTld(tld)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 195</td> <td
class="nbHitsCovered"> 2</td> <td class="src"><pre class="src">
<span class="keyword">return</span> <span
class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidLocalTld(String iTld) {</pre></td></tr>
-<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"><a
title="Line 197: Conditional coverage 100% (2/2)."> 7</a></td> <td
class="src"><pre class="src"> <a title="Line 197: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(LOCAL_TLDS, chompLeadingDot(iTld.toLowerCase())) >=
0;</a></pre></td></tr>
-<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 197</td> <td class="nbHitsUncovered"><a
title="Line 197: Conditional coverage 50% (1/2)."> 11241</a></td> <td
class="src"><pre class="src"><span class="srcUncovered"> <a title="Line
197: Conditional coverage 50% (1/2)."> <span
class="keyword">return</span>
isValidInfrastructureTld(tld)</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"><a
title="Line 198: Conditional coverage 100% (2/2)."> 11241</a></td> <td
class="src"><pre class="src"> <a title="Line 198: Conditional coverage
100% (2/2)."> || isValidGenericTld(tld)</a></pre></td></tr>
+<tr> <td class="numLineCover"> 199</td> <td class="nbHitsCovered"><a
title="Line 199: Conditional coverage 100% (2/2)."> 6407</a></td> <td
class="src"><pre class="src"> <a title="Line 199: Conditional coverage
100% (2/2)."> || isValidCountryCodeTld(tld);</a></pre></td></tr>
+<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 200</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="keyword">private</span> String chompLeadingDot(String str)
{</pre></td></tr>
-<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"><a
title="Line 201: Conditional coverage 100% (2/2)."> 19227</a></td> <td
class="src"><pre class="src"> <a title="Line 201: Conditional coverage
100% (2/2)."> <span class="keyword">if</span> (str.startsWith(<span
class="string">"."</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 202</td> <td
class="nbHitsCovered"> 10</td> <td class="src"><pre class="src">
<span class="keyword">return</span> str.substring(1);</pre></td></tr>
+<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span
class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 204</td> <td
class="nbHitsCovered"> 19217</td> <td class="src"><pre class="src">
<span class="keyword">return</span> str;</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
+<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined infrastructure top-level domain. Leading dots
are</span></pre></td></tr>
<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * ignored
if present. The search is case-insensitive.</span></pre></td></tr>
<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
iTld the parameter to check for infrastructure TLD status, not
null</span></pre></td></tr>
<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is an infrastructure TLD</span></pre></td></tr>
<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">//
---------------------------------------------</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// -----
TLDs defined by IANA</span></pre></td></tr>
-<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// -----
Authoritative and comprehensive list at:</span></pre></td></tr>
-<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// -----
http://data.iana.org/TLD/tlds-alpha-by-domain.txt</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidInfrastructureTld(String iTld) {</pre></td></tr>
+<tr> <td class="numLineCover"> 210</td> <td
class="nbHitsCovered"> 11243</td> <td class="src"><pre class="src">
iTld = unicodeToASCII(iTld);</pre></td></tr>
+<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"><a
title="Line 211: Conditional coverage 100% (2/2)."> 11243</a></td> <td
class="src"><pre class="src"> <a title="Line 211: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(INFRASTRUCTURE_TLDS,
(chompLeadingDot(iTld.toLowerCase(Locale.ENGLISH)))) >=
0;</a></pre></td></tr>
<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 213</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String[] INFRASTRUCTURE_TLDS = <span
class="keyword">new</span> String[] {</pre></td></tr>
<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"arpa"</span>, <span class="comment">// internet
infrastructure</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"root"</span> <span class="comment">// diagnostic
marker for non-truncated root zone</span></pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> };</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined generic top-level domain. Leading dots are
ignored</span></pre></td></tr>
<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 218</td> <td
class="nbHitsCovered"> 1</td> <td class="src"><pre class="src">
<span class="keyword">private</span> <span class="keyword">static</span> <span
class="keyword">final</span> String[] GENERIC_TLDS = <span
class="keyword">new</span> String[] {</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * if
present. The search is case-insensitive.</span></pre></td></tr>
+<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
gTld the parameter to check for generic TLD status, not
null</span></pre></td></tr>
<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"abogado"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a generic TLD</span></pre></td></tr>
<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"academy"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"accountants"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"active"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"actor"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidGenericTld(String gTld) {</pre></td></tr>
+<tr> <td class="numLineCover"> 222</td> <td
class="nbHitsCovered"> 11243</td> <td class="src"><pre class="src">
gTld = unicodeToASCII(gTld);</pre></td></tr>
+<tr> <td class="numLineCover"> 223</td> <td class="nbHitsCovered"><a
title="Line 223: Conditional coverage 100% (2/2)."> 11243</a></td> <td
class="src"><pre class="src"> <a title="Line 223: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(GENERIC_TLDS,
chompLeadingDot(gTld.toLowerCase(Locale.ENGLISH))) >= 0;</a></pre></td></tr>
<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"aero"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"agency"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"airforce"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"allfinanz"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"alsace"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> *
IANA-defined country code top-level domain. Leading dots
are</span></pre></td></tr>
<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"archi"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * ignored
if present. The search is case-insensitive.</span></pre></td></tr>
<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"army"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
ccTld the parameter to check for country code TLD status, not
null</span></pre></td></tr>
<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"arpa"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is a country code TLD</span></pre></td></tr>
<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"asia"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"associates"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"attorney"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"auction"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidCountryCodeTld(String ccTld) {</pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td
class="nbHitsCovered"> 6409</td> <td class="src"><pre class="src">
ccTld = unicodeToASCII(ccTld);</pre></td></tr>
+<tr> <td class="numLineCover"> 235</td> <td class="nbHitsCovered"><a
title="Line 235: Conditional coverage 100% (2/2)."> 6409</a></td> <td
class="src"><pre class="src"> <a title="Line 235: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(COUNTRY_CODE_TLDS,
chompLeadingDot(ccTld.toLowerCase(Locale.ENGLISH))) >= 0;</a></pre></td></tr>
<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"audio"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"autos"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"axa"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"band"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * Returns
true if the specified <code>String</code> matches
any</span></pre></td></tr>
<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bar"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * widely
used "local" domains (localhost or localdomain). Leading dots
are</span></pre></td></tr>
<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bargains"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * ignored
if present. The search is case-insensitive.</span></pre></td></tr>
<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bayern"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @param
lTld the parameter to check for local TLD status, not
null</span></pre></td></tr>
<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"beer"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment"> * @return
true if the parameter is an local TLD</span></pre></td></tr>
<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"berlin"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">
*/</span></pre></td></tr>
<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"best"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bid"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bike"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">public</span> <span class="keyword">boolean</span>
isValidLocalTld(String lTld) {</pre></td></tr>
+<tr> <td class="numLineCover"> 246</td> <td
class="nbHitsCovered"> 8</td> <td class="src"><pre class="src">
lTld = unicodeToASCII(lTld);</pre></td></tr>
+<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"><a
title="Line 247: Conditional coverage 100% (2/2)."> 8</a></td> <td
class="src"><pre class="src"> <a title="Line 247: Conditional coverage
100% (2/2)."> <span class="keyword">return</span>
Arrays.binarySearch(LOCAL_TLDS,
chompLeadingDot(lTld.toLowerCase(Locale.ENGLISH))) >= 0;</a></pre></td></tr>
<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bio"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"biz"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> </pre></td></tr>
<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"black"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"blackfriday"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"blue"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> <span
class="keyword">private</span> String chompLeadingDot(String str)
{</pre></td></tr>
+<tr> <td class="numLineCover"> 251</td> <td class="nbHitsCovered"><a
title="Line 251: Conditional coverage 100% (2/2)."> 28903</a></td> <td
class="src"><pre class="src"> <a title="Line 251: Conditional coverage
100% (2/2)."> <span class="keyword">if</span> (str.startsWith(<span
class="string">"."</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 252</td> <td
class="nbHitsCovered"> 10</td> <td class="src"><pre class="src">
<span class="keyword">return</span> str.substring(1);</pre></td></tr>
<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bmw"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"bnpparibas"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 254</td> <td
class="nbHitsCovered"> 28893</td> <td class="src"><pre class="src">
<span class="keyword">return</span> str;</pre></td></tr>
<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"boo"</span>,</pre></td></tr>
+ <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span
class="string">"boutique"</span>,</pre></td></tr>
[... 2428 lines stripped ...]