* Lower priority from Proxy mappings

* Fix codefactor

* extra tests

* #205

* Fix test for linux

* `c:\temp\x.json` fix

* Extra tests

* more tests

* more tests

* codefactor

* #200

* refactor

* refactor

* tests
This commit is contained in:
Stef Heyenrath
2018-09-22 08:41:24 +02:00
committed by GitHub
parent 0c25ab413d
commit f358f13c08
135 changed files with 11939 additions and 4506 deletions

View File

@@ -17,12 +17,12 @@
<tr><th>Class:</th><td>WireMock.Util.PortUtils</td></tr>
<tr><th>Assembly:</th><td>WireMock.Net</td></tr>
<tr><th>File(s):</th><td><a href="#CUsersazureuserDocumentsGithubWireMockNetsrcWireMockNetUtilPortUtilscs" data-ng-click="navigateToHash('#CUsersazureuserDocumentsGithubWireMockNetsrcWireMockNetUtilPortUtilscs')">C:\Users\azureuser\Documents\Github\WireMock.Net\src\WireMock.Net\Util\PortUtils.cs</a></td></tr>
<tr><th>Covered lines:</th><td>20</td></tr>
<tr><th>Uncovered lines:</th><td>1</td></tr>
<tr><th>Coverable lines:</th><td>21</td></tr>
<tr><th>Total lines:</th><td>53</td></tr>
<tr><th>Line coverage:</th><td>95.2%</td></tr>
<tr><th>Branch coverage:</th><td>75%</td></tr>
<tr><th>Covered lines:</th><td>23</td></tr>
<tr><th>Uncovered lines:</th><td>0</td></tr>
<tr><th>Coverable lines:</th><td>23</td></tr>
<tr><th>Total lines:</th><td>55</td></tr>
<tr><th>Line coverage:</th><td>100%</td></tr>
<tr><th>Branch coverage:</th><td>100%</td></tr>
</tbody>
</table>
<h1>Metrics</h1>
@@ -30,7 +30,7 @@
<thead><tr><th>Method</th><th>Cyclomatic complexity <a href="https://en.wikipedia.org/wiki/Cyclomatic_complexity"><i class="icon-info-circled"></i></a></th><th>NPath complexity <a href="https://modess.io/npath-complexity-cyclomatic-complexity-explained"><i class="icon-info-circled"></i></a></th><th>Sequence coverage <a href="https://en.wikipedia.org/wiki/Code_coverage"><i class="icon-info-circled"></i></a></th><th>Branch coverage <a href="https://en.wikipedia.org/wiki/Code_coverage"><i class="icon-info-circled"></i></a></th></tr></thead>
<tbody>
<tr><td title="System.Int32 WireMock.Util.PortUtils::FindFreeTcpPort()">FindFreeTcpPort()</td><td>0</td><td>0</td><td>1</td><td>1</td></tr>
<tr><td title="System.Boolean WireMock.Util.PortUtils::TryExtractProtocolAndPort(System.String,System.String&amp;,System.Int32&amp;)">TryExtractProtocolAndPort(...)</td><td>0</td><td>0</td><td>0.9</td><td>0.5</td></tr>
<tr><td title="System.Boolean WireMock.Util.PortUtils::TryExtract(System.String,System.String&amp;,System.String&amp;,System.Int32&amp;)">TryExtract(...)</td><td>0</td><td>0</td><td>1</td><td>1</td></tr>
<tr><td title="System.Void WireMock.Util.PortUtils::.cctor()">.cctor()</td><td>0</td><td>0</td><td>1</td><td>0</td></tr>
</tbody>
</table>
@@ -50,57 +50,59 @@
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line9"></a><code>9</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line10"></a><code>10</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;class&nbsp;PortUtils</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line11"></a><code>11</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '1', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">1</td><td class="rightmargin right"><a id="file0_line12"></a><code>12</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;UrlDetailsRegex&nbsp;=&nbsp;new&nbsp;Regex(@&quot;^(?&lt;proto&gt;\w+)://[^/]+?(?&lt;port&gt;\d+)/?&quot;,&nbsp;RegexOptions</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '1', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">1</td><td class="rightmargin right"><a id="file0_line12"></a><code>12</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;Regex&nbsp;UrlDetailsRegex&nbsp;=&nbsp;new&nbsp;Regex(@&quot;^((?&lt;proto&gt;\w+)://)(?&lt;host&gt;[^/]+?):(?&lt;port&gt;\d+)\/?$&quot;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line13"></a><code>13</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line14"></a><code>14</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line15"></a><code>15</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Finds&nbsp;a&nbsp;free&nbsp;TCP&nbsp;port.</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line16"></a><code>16</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line17"></a><code>17</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;remarks&gt;see&nbsp;http://stackoverflow.com/questions/138043/find-the-next-tcp-port-in-net.&lt;/remarks&gt;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line18"></a><code>18</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;int&nbsp;FindFreeTcpPort()</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line19"></a><code>19</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line20"></a><code>20</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcpListener&nbsp;tcpListener&nbsp;=&nbsp;null;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line19"></a><code>19</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line20"></a><code>20</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TcpListener&nbsp;tcpListener&nbsp;=&nbsp;null;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line21"></a><code>21</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line22"></a><code>22</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line23"></a><code>23</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpListener&nbsp;=&nbsp;new&nbsp;TcpListener(IPAddress.Loopback,&nbsp;0);</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line24"></a><code>24</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpListener.Start();</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line22"></a><code>22</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line23"></a><code>23</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpListener&nbsp;=&nbsp;new&nbsp;TcpListener(IPAddress.Loopback,&nbsp;0);</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line24"></a><code>24</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpListener.Start();</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line25"></a><code>25</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line26"></a><code>26</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((IPEndPoint)tcpListener.LocalEndpoint).Port;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line26"></a><code>26</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((IPEndPoint)tcpListener.LocalEndpoint).Port;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line27"></a><code>27</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line28"></a><code>28</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line29"></a><code>29</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr title="2 of 2 branches are covered" data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line30"></a><code>30</code></td><td class="percentagebar100"><i class="icon-fork"></i></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpListener?.Stop();</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line31"></a><code>31</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '47', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">47</td><td class="rightmargin right"><a id="file0_line32"></a><code>32</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line29"></a><code>29</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr title="2 of 2 branches are covered" data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line30"></a><code>30</code></td><td class="percentagebar100"><i class="icon-fork"></i></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tcpListener?.Stop();</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line31"></a><code>31</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '54', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">54</td><td class="rightmargin right"><a id="file0_line32"></a><code>32</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line33"></a><code>33</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line34"></a><code>34</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line35"></a><code>35</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Extract&nbsp;a&nbsp;proto&nbsp;and&nbsp;port&nbsp;from&nbsp;a&nbsp;URL.</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line35"></a><code>35</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Extract&nbsp;the&nbsp;protocol,&nbsp;host&nbsp;and&nbsp;port&nbsp;from&nbsp;a&nbsp;URL.</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line36"></a><code>36</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line37"></a><code>37</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;bool&nbsp;TryExtractProtocolAndPort(string&nbsp;url,&nbsp;out&nbsp;string&nbsp;proto,&nbsp;out&nbsp;int&nbsp;port)</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line38"></a><code>38</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line39"></a><code>39</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proto&nbsp;=&nbsp;null;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line40"></a><code>40</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port&nbsp;=&nbsp;0;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line41"></a><code>41</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line42"></a><code>42</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Match&nbsp;m&nbsp;=&nbsp;UrlDetailsRegex.Match(url);</code></td></tr>
<tr title="1 of 2 branches are covered" data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'orange'}}"><td class="orange">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line43"></a><code>43</code></td><td class="percentagebar50"><i class="icon-fork"></i></td><td class="lightorange"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m.Success)</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line44"></a><code>44</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line45"></a><code>45</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proto&nbsp;=&nbsp;m.Groups[&quot;proto&quot;].Value;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line46"></a><code>46</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line47"></a><code>47</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;int.TryParse(m.Groups[&quot;port&quot;].Value,&nbsp;out&nbsp;port);</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line48"></a><code>48</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line49"></a><code>49</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '0', 'LVS': 'red'}}"><td class="red">&nbsp;</td><td class="leftmargin rightmargin right">0</td><td class="rightmargin right"><a id="file0_line50"></a><code>50</code></td><td></td><td class="lightred"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '98', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">98</td><td class="rightmargin right"><a id="file0_line51"></a><code>51</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line52"></a><code>52</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line53"></a><code>53</code></td><td></td><td class="lightgray"><code>}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line37"></a><code>37</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;bool&nbsp;TryExtract(string&nbsp;url,&nbsp;out&nbsp;string&nbsp;protocol,&nbsp;out&nbsp;string&nbsp;host,&nbsp;out&nbsp;int&nbsp;port)</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line38"></a><code>38</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line39"></a><code>39</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protocol&nbsp;=&nbsp;null;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line40"></a><code>40</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host&nbsp;=&nbsp;null;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line41"></a><code>41</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port&nbsp;=&nbsp;default(int);</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line42"></a><code>42</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line43"></a><code>43</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Match&nbsp;m&nbsp;=&nbsp;UrlDetailsRegex.Match(url);</code></td></tr>
<tr title="2 of 2 branches are covered" data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line44"></a><code>44</code></td><td class="percentagebar100"><i class="icon-fork"></i></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m.Success)</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '112', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">112</td><td class="rightmargin right"><a id="file0_line45"></a><code>45</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '112', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">112</td><td class="rightmargin right"><a id="file0_line46"></a><code>46</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protocol&nbsp;=&nbsp;m.Groups[&quot;proto&quot;].Value;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '112', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">112</td><td class="rightmargin right"><a id="file0_line47"></a><code>47</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host&nbsp;=&nbsp;m.Groups[&quot;host&quot;].Value;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line48"></a><code>48</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '112', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">112</td><td class="rightmargin right"><a id="file0_line49"></a><code>49</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;int.TryParse(m.Groups[&quot;port&quot;].Value,&nbsp;out&nbsp;port);</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line50"></a><code>50</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line51"></a><code>51</code></td><td></td><td class="lightgray"><code></code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '2', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">2</td><td class="rightmargin right"><a id="file0_line52"></a><code>52</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '114', 'LVS': 'green'}}"><td class="green">&nbsp;</td><td class="leftmargin rightmargin right">114</td><td class="rightmargin right"><a id="file0_line53"></a><code>53</code></td><td></td><td class="lightgreen"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line54"></a><code>54</code></td><td></td><td class="lightgray"><code>&nbsp;&nbsp;&nbsp;&nbsp;}</code></td></tr>
<tr data-coverage="{'AllTestMethods': {'VC': '', 'LVS': 'gray'}}"><td class="gray">&nbsp;</td><td class="leftmargin rightmargin right"></td><td class="rightmargin right"><a id="file0_line55"></a><code>55</code></td><td></td><td class="lightgray"><code>}</code></td></tr>
</tbody>
</table>
<div class="footer">Generated by: ReportGenerator 3.1.2.0<br />2018-09-13 - 10:10:02<br /><a href="https://github.com/danielpalme/ReportGenerator">GitHub</a> | <a href="http://www.palmmedia.de">www.palmmedia.de</a></div></div>
<div class="footer">Generated by: ReportGenerator 3.1.2.0<br />2018-09-21 - 14:00:17<br /><a href="https://github.com/danielpalme/ReportGenerator">GitHub</a> | <a href="http://www.palmmedia.de">www.palmmedia.de</a></div></div>
<div class="containerright">
<div class="containerrightfixed">
<h1>Methods/Properties</h1>
<a href="#file0_line12" data-ng-click="navigateToHash('#file0_line12')" title=".cctor()"><i class="icon-cube"></i>.cctor()</a><br />
<a href="#file0_line19" data-ng-click="navigateToHash('#file0_line19')" title="FindFreeTcpPort()"><i class="icon-cube"></i>FindFreeTcpPort()</a><br />
<a href="#file0_line38" data-ng-click="navigateToHash('#file0_line38')" title="TryExtractProtocolAndPort(System.String,System.String&amp;,System.Int32&amp;)"><i class="icon-cube"></i>TryExtractProtocolAndPort(System.String,System.String&amp;,System.Int32&amp;)</a><br />
<a href="#file0_line38" data-ng-click="navigateToHash('#file0_line38')" title="TryExtract(System.String,System.String&amp;,System.String&amp;,System.Int32&amp;)"><i class="icon-cube"></i>TryExtract(System.String,System.String&amp;,System.String&amp;,System.Int32&amp;)</a><br />
<br/></div>
</div></div>
<script type="text/javascript" src="combined.js"></script>