blob: 9ad293ed22c1a36a24b7cf372e074b1213a1a937 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>LoggerOptionConverter.php</title>
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="container.css">
<script type="text/javascript" src="yahoo-dom-event.js"></script>
<script type="text/javascript" src="container-min.js"></script>
</head>
<body class="yui-skin-sam">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td class="title">LoggerOptionConverter.php</td></tr>
<tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
<tr>
<td width="100%">
<table cellpadding="1" border="0" width="100%">
<tr>
<td class="headerItem" width="20%">Current file:</td>
<td class="headerValue" width="80%"><a href="index.html">/home/ihabunek/apache/log4php/src/main/php</a>/<a href="helpers.html">helpers</a>/<a href="helpers_LoggerOptionConverter.php.html">LoggerOptionConverter.php</a></td>
</tr>
<tr>
<td class="legendItem" width="20%">Legend:</td>
<td class="legendValue" width="80%">
<span class="legendCov">executed</span>
<span class="legendNoCov">not executed</span>
<span class="legendDeadCode">dead code</span>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td>
</tr>
</table>
<br />
<center>
<table width="90%" cellpadding="2" cellspacing="1" border="0">
<tr>
<td class="tableHead" width="30%">&nbsp;</td>
<td class="tableHead" colspan="10">Coverage</td>
</tr>
<tr>
<td class="tableHead">&nbsp;</td>
<td class="tableHead" colspan="3">Classes</td>
<td class="tableHead" colspan="4">Functions / Methods</td>
<td class="tableHead" colspan="3">Lines</td>
</tr>
<tr>
<td class="coverDirectory">Total</td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="coverBar">
<div class="coverBarOutline" title="38.46%">
<div class="size butter" style="width:38.461538461538%" title="38.46%"></div>
</div>
</td>
<td class="coverPerMed">38.46%</td>
<td class="coverNumMed">5 / 13</td>
<td class="crap"><acronym title="Change Risk Anti-Patterns (CRAP) Index">CRAP</acronym></td>
<td class="coverBar">
<div class="coverBarOutline" title="61.59%">
<div class="size butter" style="width:61.594202898551%" title="61.59%"></div>
</div>
</td>
<td class="coverPerMed">61.59%</td>
<td class="coverNumMed">85 / 138</td>
</tr>
<tr>
<td class="coverDirectory">LoggerOptionConverter</td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="coverBar">
<div class="coverBarOutline" title="38.46%">
<div class="size butter" style="width:38.461538461538%" title="38.46%"></div>
</div>
</td>
<td class="coverPerMed">38.46%</td>
<td class="coverNumMed">5 / 13</td>
<td class="crap">374.88</td>
<td class="coverBar">
<div class="coverBarOutline" title="61.59%">
<div class="size butter" style="width:61.594202898551%" title="61.59%"></div>
</div>
</td>
<td class="coverPerMed">61.59%</td>
<td class="coverNumMed">85 / 138</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#61">getSystemProperty($key, $def)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">4.37</td>
<td class="coverBar">
<div class="coverBarOutline" title="71.43%">
<div class="size chameleon" style="width:71.428571428571%" title="71.43%"></div>
</div>
</td>
<td class="coverPerHi">71.43%</td>
<td class="coverNumHi">5 / 7</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#85">toBoolean($value, $default=true)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">1 / 1</td>
<td class="crap">14</td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">13 / 13</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#105">toBooleanEx($value)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">1 / 1</td>
<td class="crap">5</td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#127">toInt($value, $default)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">1 / 1</td>
<td class="crap">2</td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">4 / 4</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#141">toIntegerEx($value)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">1 / 1</td>
<td class="crap">4</td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">5 / 5</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#156">toPositiveIntegerEx($value)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">13.78</td>
<td class="coverBar">
<div class="coverBarOutline" title="40.00%">
<div class="size butter" style="width:40%" title="40.00%"></div>
</div>
</td>
<td class="coverPerMed">40.00%</td>
<td class="coverNumMed">2 / 5</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#193">toLevel($value, $defaultValue)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">56</td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 20</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#230">toLevelEx($value)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">3.04</td>
<td class="coverBar">
<div class="coverBarOutline" title="83.33%">
<div class="size chameleon" style="width:83.333333333333%" title="83.33%"></div>
</div>
</td>
<td class="coverPerHi">83.33%</td>
<td class="coverNumHi">5 / 6</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#246">toFileSize($value, $default)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">42</td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 17</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#286">toFileSizeEx($value)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">8.42</td>
<td class="coverBar">
<div class="coverBarOutline" title="81.25%">
<div class="size chameleon" style="width:81.25%" title="81.25%"></div>
</div>
</td>
<td class="coverPerHi">81.25%</td>
<td class="coverNumHi">13 / 16</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#326">toStringEx($value)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">14.11</td>
<td class="coverBar">
<div class="coverBarOutline" title="28.57%">
<div class="size scarlet_red" style="width:28.571428571429%" title="28.57%"></div>
</div>
</td>
<td class="coverPerLo">28.57%</td>
<td class="coverNumLo">2 / 7</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#350">findAndSubst($key, $props)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">1 / 1</td>
<td class="crap">1</td>
<td class="coverBar">
<div class="coverBarOutline" title="100.00%">
<div class="size chameleon" style="width:100%" title="100.00%"></div>
</div>
</td>
<td class="coverPerHi">100.00%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile" colspan="4">&nbsp;<a href="#406">substVars($val, $props = null)</a></td>
<td class="coverBar">
<div class="coverBarOutline" title="0.00%">
<div class="size scarlet_red" style="width:0%" title="0.00%"></div>
</div>
</td>
<td class="coverPerLo">0.00%</td>
<td class="coverNumLo">0 / 1</td>
<td class="crap">8.03</td>
<td class="coverBar">
<div class="coverBarOutline" title="92.31%">
<div class="size chameleon" style="width:92.307692307692%" title="92.31%"></div>
</div>
</td>
<td class="coverPerHi">92.31%</td>
<td class="coverNumHi">24 / 26</td>
</tr>
</table>
</center>
<br />
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td><br /></td>
</tr>
<tr>
<td>
<pre class="source">
<span class="lineNum" id="container1"><a name="1"></a><a href="#1" id="line1"> 1</a> </span> : &lt;?php
<span class="lineNum" id="container2"><a name="2"></a><a href="#2" id="line2"> 2</a> </span> : /**
<span class="lineNum" id="container3"><a name="3"></a><a href="#3" id="line3"> 3</a> </span> : * Licensed to the Apache Software Foundation (ASF) under one or more
<span class="lineNum" id="container4"><a name="4"></a><a href="#4" id="line4"> 4</a> </span> : * contributor license agreements. See the NOTICE file distributed with
<span class="lineNum" id="container5"><a name="5"></a><a href="#5" id="line5"> 5</a> </span> : * this work for additional information regarding copyright ownership.
<span class="lineNum" id="container6"><a name="6"></a><a href="#6" id="line6"> 6</a> </span> : * The ASF licenses this file to You under the Apache License, Version 2.0
<span class="lineNum" id="container7"><a name="7"></a><a href="#7" id="line7"> 7</a> </span> : * (the &quot;License&quot;); you may not use this file except in compliance with
<span class="lineNum" id="container8"><a name="8"></a><a href="#8" id="line8"> 8</a> </span> : * the License. You may obtain a copy of the License at
<span class="lineNum" id="container9"><a name="9"></a><a href="#9" id="line9"> 9</a> </span> : *
<span class="lineNum" id="container10"><a name="10"></a><a href="#10" id="line10"> 10</a> </span> : * http://www.apache.org/licenses/LICENSE-2.0
<span class="lineNum" id="container11"><a name="11"></a><a href="#11" id="line11"> 11</a> </span> : *
<span class="lineNum" id="container12"><a name="12"></a><a href="#12" id="line12"> 12</a> </span> : * Unless required by applicable law or agreed to in writing, software
<span class="lineNum" id="container13"><a name="13"></a><a href="#13" id="line13"> 13</a> </span> : * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
<span class="lineNum" id="container14"><a name="14"></a><a href="#14" id="line14"> 14</a> </span> : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<span class="lineNum" id="container15"><a name="15"></a><a href="#15" id="line15"> 15</a> </span> : * See the License for the specific language governing permissions and
<span class="lineNum" id="container16"><a name="16"></a><a href="#16" id="line16"> 16</a> </span> : * limitations under the License.
<span class="lineNum" id="container17"><a name="17"></a><a href="#17" id="line17"> 17</a> </span> : *
<span class="lineNum" id="container18"><a name="18"></a><a href="#18" id="line18"> 18</a> </span> : * @package log4php
<span class="lineNum" id="container19"><a name="19"></a><a href="#19" id="line19"> 19</a> </span> : */
<span class="lineNum" id="container20"><a name="20"></a><a href="#20" id="line20"> 20</a> </span> :
<span class="lineNum" id="container21"><a name="21"></a><a href="#21" id="line21"> 21</a> </span> : /**
<span class="lineNum" id="container22"><a name="22"></a><a href="#22" id="line22"> 22</a> </span> : * A convenience class to convert property values to specific types.
<span class="lineNum" id="container23"><a name="23"></a><a href="#23" id="line23"> 23</a> </span> : *
<span class="lineNum" id="container24"><a name="24"></a><a href="#24" id="line24"> 24</a> </span> : * @version $Revision: 1237446 $
<span class="lineNum" id="container25"><a name="25"></a><a href="#25" id="line25"> 25</a> </span> : * @package log4php
<span class="lineNum" id="container26"><a name="26"></a><a href="#26" id="line26"> 26</a> </span> : * @subpackage helpers
<span class="lineNum" id="container27"><a name="27"></a><a href="#27" id="line27"> 27</a> </span> : * @since 0.5
<span class="lineNum" id="container28"><a name="28"></a><a href="#28" id="line28"> 28</a> </span> : */
<span class="lineNum" id="container29"><a name="29"></a><a href="#29" id="line29"> 29</a> </span> : class LoggerOptionConverter {
<span class="lineNum" id="container30"><a name="30"></a><a href="#30" id="line30"> 30</a> </span> :
<span class="lineNum" id="container31"><a name="31"></a><a href="#31" id="line31"> 31</a> </span> : const DELIM_START = '${';
<span class="lineNum" id="container32"><a name="32"></a><a href="#32" id="line32"> 32</a> </span> : const DELIM_STOP = '}';
<span class="lineNum" id="container33"><a name="33"></a><a href="#33" id="line33"> 33</a> </span> : const DELIM_START_LEN = 2;
<span class="lineNum" id="container34"><a name="34"></a><a href="#34" id="line34"> 34</a> </span> : const DELIM_STOP_LEN = 1;
<span class="lineNum" id="container35"><a name="35"></a><a href="#35" id="line35"> 35</a> </span> :
<span class="lineNum" id="container36"><a name="36"></a><a href="#36" id="line36"> 36</a> </span> : /** String values which are converted to boolean TRUE. */
<span class="lineNum" id="container37"><a name="37"></a><a href="#37" id="line37"> 37</a> </span> : private static $trueValues = array('1', 'true', 'yes', 'on');
<span class="lineNum" id="container38"><a name="38"></a><a href="#38" id="line38"> 38</a> </span> :
<span class="lineNum" id="container39"><a name="39"></a><a href="#39" id="line39"> 39</a> </span> : /**
<span class="lineNum" id="container40"><a name="40"></a><a href="#40" id="line40"> 40</a> </span> : * String values which are converted to boolean FALSE.
<span class="lineNum" id="container41"><a name="41"></a><a href="#41" id="line41"> 41</a> </span> : *
<span class="lineNum" id="container42"><a name="42"></a><a href="#42" id="line42"> 42</a> </span> : * Note that an empty string must convert to false, because
<span class="lineNum" id="container43"><a name="43"></a><a href="#43" id="line43"> 43</a> </span> : * parse_ini_file() which is used for parsing configuration
<span class="lineNum" id="container44"><a name="44"></a><a href="#44" id="line44"> 44</a> </span> : * converts the value _false_ to an empty string.
<span class="lineNum" id="container45"><a name="45"></a><a href="#45" id="line45"> 45</a> </span> : */
<span class="lineNum" id="container46"><a name="46"></a><a href="#46" id="line46"> 46</a> </span> : private static $falseValues = array('0', 'false', 'no', 'off', '');
<span class="lineNum" id="container47"><a name="47"></a><a href="#47" id="line47"> 47</a> </span> :
<span class="lineNum" id="container48"><a name="48"></a><a href="#48" id="line48"> 48</a> </span> : /**
<span class="lineNum" id="container49"><a name="49"></a><a href="#49" id="line49"> 49</a> </span> : * Read a predefined var.
<span class="lineNum" id="container50"><a name="50"></a><a href="#50" id="line50"> 50</a> </span> : *
<span class="lineNum" id="container51"><a name="51"></a><a href="#51" id="line51"> 51</a> </span> : * It returns a value referenced by &lt;var&gt;$key&lt;/var&gt; using this search criteria:
<span class="lineNum" id="container52"><a name="52"></a><a href="#52" id="line52"> 52</a> </span> : * - if &lt;var&gt;$key&lt;/var&gt; is a constant then return it. Else
<span class="lineNum" id="container53"><a name="53"></a><a href="#53" id="line53"> 53</a> </span> : * - if &lt;var&gt;$key&lt;/var&gt; is set in &lt;var&gt;$_ENV&lt;/var&gt; then return it. Else
<span class="lineNum" id="container54"><a name="54"></a><a href="#54" id="line54"> 54</a> </span> : * - return &lt;var&gt;$def&lt;/var&gt;.
<span class="lineNum" id="container55"><a name="55"></a><a href="#55" id="line55"> 55</a> </span> : *
<span class="lineNum" id="container56"><a name="56"></a><a href="#56" id="line56"> 56</a> </span> : * @param string $key The key to search for.
<span class="lineNum" id="container57"><a name="57"></a><a href="#57" id="line57"> 57</a> </span> : * @param string $def The default value to return.
<span class="lineNum" id="container58"><a name="58"></a><a href="#58" id="line58"> 58</a> </span> : * @return string the string value of the system property, or the default
<span class="lineNum" id="container59"><a name="59"></a><a href="#59" id="line59"> 59</a> </span> : * value if there is no property with that key.
<span class="lineNum" id="container60"><a name="60"></a><a href="#60" id="line60"> 60</a> </span> : */
<span class="lineNum" id="container61"><a name="61"></a><a href="#61" id="line61"> 61</a> </span> : public static function getSystemProperty($key, $def) {
<span class="lineNum" id="container62"><a name="62"></a><a href="#62" id="line62"> 62</a> </span><span class="lineCov"> 1 : if(defined($key)) { </span>
<span class="lineNum" id="container63"><a name="63"></a><a href="#63" id="line63"> 63</a> </span><span class="lineCov"> 1 : return (string)constant($key); </span>
<span class="lineNum" id="container64"><a name="64"></a><a href="#64" id="line64"> 64</a> </span><span class="lineCov"> 1 : } else if(isset($_SERVER[$key])) { </span>
<span class="lineNum" id="container65"><a name="65"></a><a href="#65" id="line65"> 65</a> </span><span class="lineNoCov"> 0 : return (string)$_SERVER[$key]; </span>
<span class="lineNum" id="container66"><a name="66"></a><a href="#66" id="line66"> 66</a> </span><span class="lineCov"> 1 : } else if(isset($_ENV[$key])) { </span>
<span class="lineNum" id="container67"><a name="67"></a><a href="#67" id="line67"> 67</a> </span><span class="lineNoCov"> 0 : return (string)$_ENV[$key]; </span>
<span class="lineNum" id="container68"><a name="68"></a><a href="#68" id="line68"> 68</a> </span> : } else {
<span class="lineNum" id="container69"><a name="69"></a><a href="#69" id="line69"> 69</a> </span><span class="lineCov"> 1 : return $def; </span>
<span class="lineNum" id="container70"><a name="70"></a><a href="#70" id="line70"> 70</a> </span> : }
<span class="lineNum" id="container71"><a name="71"></a><a href="#71" id="line71"> 71</a> </span> : }
<span class="lineNum" id="container72"><a name="72"></a><a href="#72" id="line72"> 72</a> </span> :
<span class="lineNum" id="container73"><a name="73"></a><a href="#73" id="line73"> 73</a> </span> : /**
<span class="lineNum" id="container74"><a name="74"></a><a href="#74" id="line74"> 74</a> </span> : * If &lt;var&gt;$value&lt;/var&gt; is &lt;i&gt;true&lt;/i&gt;, then &lt;i&gt;true&lt;/i&gt; is
<span class="lineNum" id="container75"><a name="75"></a><a href="#75" id="line75"> 75</a> </span> : * returned. If &lt;var&gt;$value&lt;/var&gt; is &lt;i&gt;false&lt;/i&gt;, then
<span class="lineNum" id="container76"><a name="76"></a><a href="#76" id="line76"> 76</a> </span> : * &lt;i&gt;true&lt;/i&gt; is returned. Otherwise, &lt;var&gt;$default&lt;/var&gt; is
<span class="lineNum" id="container77"><a name="77"></a><a href="#77" id="line77"> 77</a> </span> : * returned.
<span class="lineNum" id="container78"><a name="78"></a><a href="#78" id="line78"> 78</a> </span> : *
<span class="lineNum" id="container79"><a name="79"></a><a href="#79" id="line79"> 79</a> </span> : * &lt;p&gt;Case of value is unimportant.&lt;/p&gt;
<span class="lineNum" id="container80"><a name="80"></a><a href="#80" id="line80"> 80</a> </span> : *
<span class="lineNum" id="container81"><a name="81"></a><a href="#81" id="line81"> 81</a> </span> : * @param string $value
<span class="lineNum" id="container82"><a name="82"></a><a href="#82" id="line82"> 82</a> </span> : * @param boolean $default
<span class="lineNum" id="container83"><a name="83"></a><a href="#83" id="line83"> 83</a> </span> : * @return boolean
<span class="lineNum" id="container84"><a name="84"></a><a href="#84" id="line84"> 84</a> </span> : */
<span class="lineNum" id="container85"><a name="85"></a><a href="#85" id="line85"> 85</a> </span> : public static function toBoolean($value, $default=true) {
<span class="lineNum" id="container86"><a name="86"></a><a href="#86" id="line86"> 86</a> </span><span class="lineCov"> 6 : if (is_null($value)) { </span>
<span class="lineNum" id="container87"><a name="87"></a><a href="#87" id="line87"> 87</a> </span><span class="lineCov"> 1 : return $default; </span>
<span class="lineNum" id="container88"><a name="88"></a><a href="#88" id="line88"> 88</a> </span><span class="lineCov"> 6 : } elseif (is_string($value)) { </span>
<span class="lineNum" id="container89"><a name="89"></a><a href="#89" id="line89"> 89</a> </span><span class="lineCov"> 5 : $trimmedVal = strtolower(trim($value)); </span>
<span class="lineNum" id="container90"><a name="90"></a><a href="#90" id="line90"> 90</a> </span><span class="lineCov"> 5 : if(&quot;1&quot; == $trimmedVal or &quot;true&quot; == $trimmedVal or &quot;yes&quot; == $trimmedVal or &quot;on&quot; == $trimmedVal) { </span>
<span class="lineNum" id="container91"><a name="91"></a><a href="#91" id="line91"> 91</a> </span><span class="lineCov"> 1 : return true; </span>
<span class="lineNum" id="container92"><a name="92"></a><a href="#92" id="line92"> 92</a> </span><span class="lineCov"> 5 : } else if (&quot;&quot; == $trimmedVal or &quot;0&quot; == $trimmedVal or &quot;false&quot; == $trimmedVal or &quot;no&quot; == $trimmedVal or &quot;off&quot; == $trimmedVal) {</span>
<span class="lineNum" id="container93"><a name="93"></a><a href="#93" id="line93"> 93</a> </span><span class="lineCov"> 4 : return false; </span>
<span class="lineNum" id="container94"><a name="94"></a><a href="#94" id="line94"> 94</a> </span> : }
<span class="lineNum" id="container95"><a name="95"></a><a href="#95" id="line95"> 95</a> </span><span class="lineCov"> 3 : } elseif (is_bool($value)) { </span>
<span class="lineNum" id="container96"><a name="96"></a><a href="#96" id="line96"> 96</a> </span><span class="lineCov"> 2 : return $value; </span>
<span class="lineNum" id="container97"><a name="97"></a><a href="#97" id="line97"> 97</a> </span><span class="lineCov"> 1 : } elseif (is_int($value)) { </span>
<span class="lineNum" id="container98"><a name="98"></a><a href="#98" id="line98"> 98</a> </span><span class="lineCov"> 1 : return !($value == 0); // true is everything but 0 like in C </span>
<span class="lineNum" id="container99"><a name="99"></a><a href="#99" id="line99"> 99</a> </span> : }
<span class="lineNum" id="container100"><a name="100"></a><a href="#100" id="line100"> 100</a> </span> :
<span class="lineNum" id="container101"><a name="101"></a><a href="#101" id="line101"> 101</a> </span><span class="lineCov"> 2 : return $default; </span>
<span class="lineNum" id="container102"><a name="102"></a><a href="#102" id="line102"> 102</a> </span> : }
<span class="lineNum" id="container103"><a name="103"></a><a href="#103" id="line103"> 103</a> </span> :
<span class="lineNum" id="container104"><a name="104"></a><a href="#104" id="line104"> 104</a> </span> : /** Converts $value to boolean, or throws an exception if not possible. */
<span class="lineNum" id="container105"><a name="105"></a><a href="#105" id="line105"> 105</a> </span> : public static function toBooleanEx($value) {
<span class="lineNum" id="container106"><a name="106"></a><a href="#106" id="line106"> 106</a> </span><span class="lineCov"> 27 : if (isset($value)) { </span>
<span class="lineNum" id="container107"><a name="107"></a><a href="#107" id="line107"> 107</a> </span><span class="lineCov"> 26 : if (is_bool($value)) { </span>
<span class="lineNum" id="container108"><a name="108"></a><a href="#108" id="line108"> 108</a> </span><span class="lineCov"> 15 : return $value; </span>
<span class="lineNum" id="container109"><a name="109"></a><a href="#109" id="line109"> 109</a> </span> : }
<span class="lineNum" id="container110"><a name="110"></a><a href="#110" id="line110"> 110</a> </span><span class="lineCov"> 12 : $value = strtolower(trim($value)); </span>
<span class="lineNum" id="container111"><a name="111"></a><a href="#111" id="line111"> 111</a> </span><span class="lineCov"> 12 : if (in_array($value, self::$trueValues)) { </span>
<span class="lineNum" id="container112"><a name="112"></a><a href="#112" id="line112"> 112</a> </span><span class="lineCov"> 5 : return true; </span>
<span class="lineNum" id="container113"><a name="113"></a><a href="#113" id="line113"> 113</a> </span> : }
<span class="lineNum" id="container114"><a name="114"></a><a href="#114" id="line114"> 114</a> </span><span class="lineCov"> 9 : if (in_array($value, self::$falseValues)) { </span>
<span class="lineNum" id="container115"><a name="115"></a><a href="#115" id="line115"> 115</a> </span><span class="lineCov"> 7 : return false; </span>
<span class="lineNum" id="container116"><a name="116"></a><a href="#116" id="line116"> 116</a> </span> : }
<span class="lineNum" id="container117"><a name="117"></a><a href="#117" id="line117"> 117</a> </span><span class="lineCov"> 2 : } </span>
<span class="lineNum" id="container118"><a name="118"></a><a href="#118" id="line118"> 118</a> </span> :
<span class="lineNum" id="container119"><a name="119"></a><a href="#119" id="line119"> 119</a> </span><span class="lineCov"> 3 : throw new LoggerException(&quot;Given value [&quot; . var_export($value, true) . &quot;] cannot be converted to boolean.&quot;); </span>
<span class="lineNum" id="container120"><a name="120"></a><a href="#120" id="line120"> 120</a> </span> : }
<span class="lineNum" id="container121"><a name="121"></a><a href="#121" id="line121"> 121</a> </span> :
<span class="lineNum" id="container122"><a name="122"></a><a href="#122" id="line122"> 122</a> </span> : /**
<span class="lineNum" id="container123"><a name="123"></a><a href="#123" id="line123"> 123</a> </span> : * @param string $value
<span class="lineNum" id="container124"><a name="124"></a><a href="#124" id="line124"> 124</a> </span> : * @param integer $default
<span class="lineNum" id="container125"><a name="125"></a><a href="#125" id="line125"> 125</a> </span> : * @return integer
<span class="lineNum" id="container126"><a name="126"></a><a href="#126" id="line126"> 126</a> </span> : */
<span class="lineNum" id="container127"><a name="127"></a><a href="#127" id="line127"> 127</a> </span> : public static function toInt($value, $default) {
<span class="lineNum" id="container128"><a name="128"></a><a href="#128" id="line128"> 128</a> </span><span class="lineCov"> 1 : $value = trim($value); </span>
<span class="lineNum" id="container129"><a name="129"></a><a href="#129" id="line129"> 129</a> </span><span class="lineCov"> 1 : if(is_numeric($value)) { </span>
<span class="lineNum" id="container130"><a name="130"></a><a href="#130" id="line130"> 130</a> </span><span class="lineCov"> 1 : return (int)$value; </span>
<span class="lineNum" id="container131"><a name="131"></a><a href="#131" id="line131"> 131</a> </span> : } else {
<span class="lineNum" id="container132"><a name="132"></a><a href="#132" id="line132"> 132</a> </span><span class="lineCov"> 1 : return $default; </span>
<span class="lineNum" id="container133"><a name="133"></a><a href="#133" id="line133"> 133</a> </span> : }
<span class="lineNum" id="container134"><a name="134"></a><a href="#134" id="line134"> 134</a> </span> : }
<span class="lineNum" id="container135"><a name="135"></a><a href="#135" id="line135"> 135</a> </span> :
<span class="lineNum" id="container136"><a name="136"></a><a href="#136" id="line136"> 136</a> </span> :
<span class="lineNum" id="container137"><a name="137"></a><a href="#137" id="line137"> 137</a> </span> : /**
<span class="lineNum" id="container138"><a name="138"></a><a href="#138" id="line138"> 138</a> </span> : * Converts $value to integer, or throws an exception if not possible.
<span class="lineNum" id="container139"><a name="139"></a><a href="#139" id="line139"> 139</a> </span> : * Floats cannot be converted to integer.
<span class="lineNum" id="container140"><a name="140"></a><a href="#140" id="line140"> 140</a> </span> : */
<span class="lineNum" id="container141"><a name="141"></a><a href="#141" id="line141"> 141</a> </span> : public static function toIntegerEx($value) {
<span class="lineNum" id="container142"><a name="142"></a><a href="#142" id="line142"> 142</a> </span><span class="lineCov"> 6 : if (is_integer($value)) { </span>
<span class="lineNum" id="container143"><a name="143"></a><a href="#143" id="line143"> 143</a> </span><span class="lineCov"> 1 : return $value; </span>
<span class="lineNum" id="container144"><a name="144"></a><a href="#144" id="line144"> 144</a> </span> : }
<span class="lineNum" id="container145"><a name="145"></a><a href="#145" id="line145"> 145</a> </span><span class="lineCov"> 6 : if (is_numeric($value) &amp;&amp; ($value == (integer) $value)) { </span>
<span class="lineNum" id="container146"><a name="146"></a><a href="#146" id="line146"> 146</a> </span><span class="lineCov"> 1 : return (integer) $value; </span>
<span class="lineNum" id="container147"><a name="147"></a><a href="#147" id="line147"> 147</a> </span> : }
<span class="lineNum" id="container148"><a name="148"></a><a href="#148" id="line148"> 148</a> </span> :
<span class="lineNum" id="container149"><a name="149"></a><a href="#149" id="line149"> 149</a> </span><span class="lineCov"> 5 : throw new LoggerException(&quot;Given value [&quot; . var_export($value, true) . &quot;] cannot be converted to integer.&quot;); </span>
<span class="lineNum" id="container150"><a name="150"></a><a href="#150" id="line150"> 150</a> </span> : }
<span class="lineNum" id="container151"><a name="151"></a><a href="#151" id="line151"> 151</a> </span> :
<span class="lineNum" id="container152"><a name="152"></a><a href="#152" id="line152"> 152</a> </span> : /**
<span class="lineNum" id="container153"><a name="153"></a><a href="#153" id="line153"> 153</a> </span> : * Converts $value to integer, or throws an exception if not possible.
<span class="lineNum" id="container154"><a name="154"></a><a href="#154" id="line154"> 154</a> </span> : * Floats cannot be converted to integer.
<span class="lineNum" id="container155"><a name="155"></a><a href="#155" id="line155"> 155</a> </span> : */
<span class="lineNum" id="container156"><a name="156"></a><a href="#156" id="line156"> 156</a> </span> : public static function toPositiveIntegerEx($value) {
<span class="lineNum" id="container157"><a name="157"></a><a href="#157" id="line157"> 157</a> </span><span class="lineCov"> 4 : if (is_integer($value) &amp;&amp; $value &gt; 0) { </span>
<span class="lineNum" id="container158"><a name="158"></a><a href="#158" id="line158"> 158</a> </span><span class="lineCov"> 4 : return $value; </span>
<span class="lineNum" id="container159"><a name="159"></a><a href="#159" id="line159"> 159</a> </span> : }
<span class="lineNum" id="container160"><a name="160"></a><a href="#160" id="line160"> 160</a> </span><span class="lineNoCov"> 0 : if (is_numeric($value) &amp;&amp; ($value == (integer) $value) &amp;&amp; $value &gt; 0) { </span>
<span class="lineNum" id="container161"><a name="161"></a><a href="#161" id="line161"> 161</a> </span><span class="lineNoCov"> 0 : return (integer) $value; </span>
<span class="lineNum" id="container162"><a name="162"></a><a href="#162" id="line162"> 162</a> </span> : }
<span class="lineNum" id="container163"><a name="163"></a><a href="#163" id="line163"> 163</a> </span> :
<span class="lineNum" id="container164"><a name="164"></a><a href="#164" id="line164"> 164</a> </span><span class="lineNoCov"> 0 : throw new LoggerException(&quot;Given value [&quot; . var_export($value, true) . &quot;] cannot be converted to a positive integer.&quot;); </span>
<span class="lineNum" id="container165"><a name="165"></a><a href="#165" id="line165"> 165</a> </span> : }
<span class="lineNum" id="container166"><a name="166"></a><a href="#166" id="line166"> 166</a> </span> :
<span class="lineNum" id="container167"><a name="167"></a><a href="#167" id="line167"> 167</a> </span> : /**
<span class="lineNum" id="container168"><a name="168"></a><a href="#168" id="line168"> 168</a> </span> : * Converts a standard or custom priority level to a Level
<span class="lineNum" id="container169"><a name="169"></a><a href="#169" id="line169"> 169</a> </span> : * object.
<span class="lineNum" id="container170"><a name="170"></a><a href="#170" id="line170"> 170</a> </span> : *
<span class="lineNum" id="container171"><a name="171"></a><a href="#171" id="line171"> 171</a> </span> : * &lt;p&gt; If &lt;var&gt;$value&lt;/var&gt; is of form &quot;&lt;b&gt;level#full_file_classname&lt;/b&gt;&quot;,
<span class="lineNum" id="container172"><a name="172"></a><a href="#172" id="line172"> 172</a> </span> : * where &lt;i&gt;full_file_classname&lt;/i&gt; means the class filename with path
<span class="lineNum" id="container173"><a name="173"></a><a href="#173" id="line173"> 173</a> </span> : * but without php extension, then the specified class' &lt;i&gt;toLevel()&lt;/i&gt; method
<span class="lineNum" id="container174"><a name="174"></a><a href="#174" id="line174"> 174</a> </span> : * is called to process the specified level string; if no '#'
<span class="lineNum" id="container175"><a name="175"></a><a href="#175" id="line175"> 175</a> </span> : * character is present, then the default {@link LoggerLevel}
<span class="lineNum" id="container176"><a name="176"></a><a href="#176" id="line176"> 176</a> </span> : * class is used to process the level value.&lt;/p&gt;
<span class="lineNum" id="container177"><a name="177"></a><a href="#177" id="line177"> 177</a> </span> : *
<span class="lineNum" id="container178"><a name="178"></a><a href="#178" id="line178"> 178</a> </span> : * &lt;p&gt;As a special case, if the &lt;var&gt;$value&lt;/var&gt; parameter is
<span class="lineNum" id="container179"><a name="179"></a><a href="#179" id="line179"> 179</a> </span> : * equal to the string &quot;NULL&quot;, then the value &lt;i&gt;null&lt;/i&gt; will
<span class="lineNum" id="container180"><a name="180"></a><a href="#180" id="line180"> 180</a> </span> : * be returned.&lt;/p&gt;
<span class="lineNum" id="container181"><a name="181"></a><a href="#181" id="line181"> 181</a> </span> : *
<span class="lineNum" id="container182"><a name="182"></a><a href="#182" id="line182"> 182</a> </span> : * &lt;p&gt;If any error occurs while converting the value to a level,
<span class="lineNum" id="container183"><a name="183"></a><a href="#183" id="line183"> 183</a> </span> : * the &lt;var&gt;$defaultValue&lt;/var&gt; parameter, which may be
<span class="lineNum" id="container184"><a name="184"></a><a href="#184" id="line184"> 184</a> </span> : * &lt;i&gt;null&lt;/i&gt;, is returned.&lt;/p&gt;
<span class="lineNum" id="container185"><a name="185"></a><a href="#185" id="line185"> 185</a> </span> : *
<span class="lineNum" id="container186"><a name="186"></a><a href="#186" id="line186"> 186</a> </span> : * &lt;p&gt;Case of &lt;var&gt;$value&lt;/var&gt; is insignificant for the level level, but is
<span class="lineNum" id="container187"><a name="187"></a><a href="#187" id="line187"> 187</a> </span> : * significant for the class name part, if present.&lt;/p&gt;
<span class="lineNum" id="container188"><a name="188"></a><a href="#188" id="line188"> 188</a> </span> : *
<span class="lineNum" id="container189"><a name="189"></a><a href="#189" id="line189"> 189</a> </span> : * @param string $value
<span class="lineNum" id="container190"><a name="190"></a><a href="#190" id="line190"> 190</a> </span> : * @param LoggerLevel $defaultValue
<span class="lineNum" id="container191"><a name="191"></a><a href="#191" id="line191"> 191</a> </span> : * @return LoggerLevel a {@link LoggerLevel} or null
<span class="lineNum" id="container192"><a name="192"></a><a href="#192" id="line192"> 192</a> </span> : */
<span class="lineNum" id="container193"><a name="193"></a><a href="#193" id="line193"> 193</a> </span> : public static function toLevel($value, $defaultValue) {
<span class="lineNum" id="container194"><a name="194"></a><a href="#194" id="line194"> 194</a> </span><span class="lineNoCov"> 0 : if($value === null) { </span>
<span class="lineNum" id="container195"><a name="195"></a><a href="#195" id="line195"> 195</a> </span><span class="lineNoCov"> 0 : return $defaultValue; </span>
<span class="lineNum" id="container196"><a name="196"></a><a href="#196" id="line196"> 196</a> </span> : }
<span class="lineNum" id="container197"><a name="197"></a><a href="#197" id="line197"> 197</a> </span><span class="lineNoCov"> 0 : $hashIndex = strpos($value, '#'); </span>
<span class="lineNum" id="container198"><a name="198"></a><a href="#198" id="line198"> 198</a> </span><span class="lineNoCov"> 0 : if($hashIndex === false) { </span>
<span class="lineNum" id="container199"><a name="199"></a><a href="#199" id="line199"> 199</a> </span><span class="lineNoCov"> 0 : if(&quot;NULL&quot; == strtoupper($value)) { </span>
<span class="lineNum" id="container200"><a name="200"></a><a href="#200" id="line200"> 200</a> </span><span class="lineNoCov"> 0 : return null; </span>
<span class="lineNum" id="container201"><a name="201"></a><a href="#201" id="line201"> 201</a> </span> : } else {
<span class="lineNum" id="container202"><a name="202"></a><a href="#202" id="line202"> 202</a> </span> : // no class name specified : use standard Level class
<span class="lineNum" id="container203"><a name="203"></a><a href="#203" id="line203"> 203</a> </span><span class="lineNoCov"> 0 : return LoggerLevel::toLevel($value, $defaultValue); </span>
<span class="lineNum" id="container204"><a name="204"></a><a href="#204" id="line204"> 204</a> </span> : }
<span class="lineNum" id="container205"><a name="205"></a><a href="#205" id="line205"> 205</a> </span> : }
<span class="lineNum" id="container206"><a name="206"></a><a href="#206" id="line206"> 206</a> </span> :
<span class="lineNum" id="container207"><a name="207"></a><a href="#207" id="line207"> 207</a> </span><span class="lineNoCov"> 0 : $result = $defaultValue; </span>
<span class="lineNum" id="container208"><a name="208"></a><a href="#208" id="line208"> 208</a> </span> :
<span class="lineNum" id="container209"><a name="209"></a><a href="#209" id="line209"> 209</a> </span><span class="lineNoCov"> 0 : $clazz = substr($value, ($hashIndex + 1)); </span>
<span class="lineNum" id="container210"><a name="210"></a><a href="#210" id="line210"> 210</a> </span><span class="lineNoCov"> 0 : $levelName = substr($value, 0, $hashIndex); </span>
<span class="lineNum" id="container211"><a name="211"></a><a href="#211" id="line211"> 211</a> </span> :
<span class="lineNum" id="container212"><a name="212"></a><a href="#212" id="line212"> 212</a> </span> : // This is degenerate case but you never know.
<span class="lineNum" id="container213"><a name="213"></a><a href="#213" id="line213"> 213</a> </span><span class="lineNoCov"> 0 : if(&quot;NULL&quot; == strtoupper($levelName)) { </span>
<span class="lineNum" id="container214"><a name="214"></a><a href="#214" id="line214"> 214</a> </span><span class="lineNoCov"> 0 : return null; </span>
<span class="lineNum" id="container215"><a name="215"></a><a href="#215" id="line215"> 215</a> </span> : }
<span class="lineNum" id="container216"><a name="216"></a><a href="#216" id="line216"> 216</a> </span> :
<span class="lineNum" id="container217"><a name="217"></a><a href="#217" id="line217"> 217</a> </span><span class="lineNoCov"> 0 : $clazz = basename($clazz); </span>
<span class="lineNum" id="container218"><a name="218"></a><a href="#218" id="line218"> 218</a> </span> :
<span class="lineNum" id="container219"><a name="219"></a><a href="#219" id="line219"> 219</a> </span><span class="lineNoCov"> 0 : if(class_exists($clazz)) { </span>
<span class="lineNum" id="container220"><a name="220"></a><a href="#220" id="line220"> 220</a> </span><span class="lineNoCov"> 0 : $result = @call_user_func(array($clazz, 'toLevel'), $levelName, $defaultValue); </span>
<span class="lineNum" id="container221"><a name="221"></a><a href="#221" id="line221"> 221</a> </span><span class="lineNoCov"> 0 : if(!$result instanceof LoggerLevel) { </span>
<span class="lineNum" id="container222"><a name="222"></a><a href="#222" id="line222"> 222</a> </span><span class="lineNoCov"> 0 : $result = $defaultValue; </span>
<span class="lineNum" id="container223"><a name="223"></a><a href="#223" id="line223"> 223</a> </span><span class="lineNoCov"> 0 : } </span>
<span class="lineNum" id="container224"><a name="224"></a><a href="#224" id="line224"> 224</a> </span><span class="lineNoCov"> 0 : } </span>
<span class="lineNum" id="container225"><a name="225"></a><a href="#225" id="line225"> 225</a> </span><span class="lineNoCov"> 0 : return $result; </span>
<span class="lineNum" id="container226"><a name="226"></a><a href="#226" id="line226"> 226</a> </span> : }
<span class="lineNum" id="container227"><a name="227"></a><a href="#227" id="line227"> 227</a> </span> :
<span class="lineNum" id="container228"><a name="228"></a><a href="#228" id="line228"> 228</a> </span> :
<span class="lineNum" id="container229"><a name="229"></a><a href="#229" id="line229"> 229</a> </span> : /** Converts the value to a level. Throws an exception if not possible. */
<span class="lineNum" id="container230"><a name="230"></a><a href="#230" id="line230"> 230</a> </span> : public static function toLevelEx($value) {
<span class="lineNum" id="container231"><a name="231"></a><a href="#231" id="line231"> 231</a> </span><span class="lineCov"> 15 : if ($value instanceof LoggerLevel) { </span>
<span class="lineNum" id="container232"><a name="232"></a><a href="#232" id="line232"> 232</a> </span><span class="lineCov"> 12 : return $value; </span>
<span class="lineNum" id="container233"><a name="233"></a><a href="#233" id="line233"> 233</a> </span> : }
<span class="lineNum" id="container234"><a name="234"></a><a href="#234" id="line234"> 234</a> </span><span class="lineCov"> 3 : $level = LoggerLevel::toLevel($value); </span>
<span class="lineNum" id="container235"><a name="235"></a><a href="#235" id="line235"> 235</a> </span><span class="lineCov"> 3 : if ($level === null) { </span>
<span class="lineNum" id="container236"><a name="236"></a><a href="#236" id="line236"> 236</a> </span><span class="lineNoCov"> 0 : throw new LoggerException(&quot;Given value [&quot; . var_export($value, true) . &quot;] cannot be converted to a logger level.&quot;); </span>
<span class="lineNum" id="container237"><a name="237"></a><a href="#237" id="line237"> 237</a> </span> : }
<span class="lineNum" id="container238"><a name="238"></a><a href="#238" id="line238"> 238</a> </span><span class="lineCov"> 3 : return $level; </span>
<span class="lineNum" id="container239"><a name="239"></a><a href="#239" id="line239"> 239</a> </span> : }
<span class="lineNum" id="container240"><a name="240"></a><a href="#240" id="line240"> 240</a> </span> :
<span class="lineNum" id="container241"><a name="241"></a><a href="#241" id="line241"> 241</a> </span> : /**
<span class="lineNum" id="container242"><a name="242"></a><a href="#242" id="line242"> 242</a> </span> : * @param string $value
<span class="lineNum" id="container243"><a name="243"></a><a href="#243" id="line243"> 243</a> </span> : * @param float $default
<span class="lineNum" id="container244"><a name="244"></a><a href="#244" id="line244"> 244</a> </span> : * @return float
<span class="lineNum" id="container245"><a name="245"></a><a href="#245" id="line245"> 245</a> </span> : */
<span class="lineNum" id="container246"><a name="246"></a><a href="#246" id="line246"> 246</a> </span> : public static function toFileSize($value, $default) {
<span class="lineNum" id="container247"><a name="247"></a><a href="#247" id="line247"> 247</a> </span><span class="lineNoCov"> 0 : if($value === null) { </span>
<span class="lineNum" id="container248"><a name="248"></a><a href="#248" id="line248"> 248</a> </span><span class="lineNoCov"> 0 : return $default; </span>
<span class="lineNum" id="container249"><a name="249"></a><a href="#249" id="line249"> 249</a> </span> : }
<span class="lineNum" id="container250"><a name="250"></a><a href="#250" id="line250"> 250</a> </span> :
<span class="lineNum" id="container251"><a name="251"></a><a href="#251" id="line251"> 251</a> </span><span class="lineNoCov"> 0 : $s = strtoupper(trim($value)); </span>
<span class="lineNum" id="container252"><a name="252"></a><a href="#252" id="line252"> 252</a> </span><span class="lineNoCov"> 0 : $multiplier = (float)1; </span>
<span class="lineNum" id="container253"><a name="253"></a><a href="#253" id="line253"> 253</a> </span><span class="lineNoCov"> 0 : if(($index = strpos($s, 'KB')) !== false) { </span>
<span class="lineNum" id="container254"><a name="254"></a><a href="#254" id="line254"> 254</a> </span><span class="lineNoCov"> 0 : $multiplier = 1024; </span>
<span class="lineNum" id="container255"><a name="255"></a><a href="#255" id="line255"> 255</a> </span><span class="lineNoCov"> 0 : $s = substr($s, 0, $index); </span>
<span class="lineNum" id="container256"><a name="256"></a><a href="#256" id="line256"> 256</a> </span><span class="lineNoCov"> 0 : } else if(($index = strpos($s, 'MB')) !== false) { </span>
<span class="lineNum" id="container257"><a name="257"></a><a href="#257" id="line257"> 257</a> </span><span class="lineNoCov"> 0 : $multiplier = 1024 * 1024; </span>
<span class="lineNum" id="container258"><a name="258"></a><a href="#258" id="line258"> 258</a> </span><span class="lineNoCov"> 0 : $s = substr($s, 0, $index); </span>
<span class="lineNum" id="container259"><a name="259"></a><a href="#259" id="line259"> 259</a> </span><span class="lineNoCov"> 0 : } else if(($index = strpos($s, 'GB')) !== false) { </span>
<span class="lineNum" id="container260"><a name="260"></a><a href="#260" id="line260"> 260</a> </span><span class="lineNoCov"> 0 : $multiplier = 1024 * 1024 * 1024; </span>
<span class="lineNum" id="container261"><a name="261"></a><a href="#261" id="line261"> 261</a> </span><span class="lineNoCov"> 0 : $s = substr($s, 0, $index); </span>
<span class="lineNum" id="container262"><a name="262"></a><a href="#262" id="line262"> 262</a> </span><span class="lineNoCov"> 0 : } </span>
<span class="lineNum" id="container263"><a name="263"></a><a href="#263" id="line263"> 263</a> </span><span class="lineNoCov"> 0 : if(is_numeric($s)) { </span>
<span class="lineNum" id="container264"><a name="264"></a><a href="#264" id="line264"> 264</a> </span><span class="lineNoCov"> 0 : return (float)$s * $multiplier; </span>
<span class="lineNum" id="container265"><a name="265"></a><a href="#265" id="line265"> 265</a> </span> : }
<span class="lineNum" id="container266"><a name="266"></a><a href="#266" id="line266"> 266</a> </span><span class="lineNoCov"> 0 : return $default; </span>
<span class="lineNum" id="container267"><a name="267"></a><a href="#267" id="line267"> 267</a> </span> : }
<span class="lineNum" id="container268"><a name="268"></a><a href="#268" id="line268"> 268</a> </span> :
<span class="lineNum" id="container269"><a name="269"></a><a href="#269" id="line269"> 269</a> </span> :
<span class="lineNum" id="container270"><a name="270"></a><a href="#270" id="line270"> 270</a> </span> : /**
<span class="lineNum" id="container271"><a name="271"></a><a href="#271" id="line271"> 271</a> </span> : * Converts a value to a valid file size (integer).
<span class="lineNum" id="container272"><a name="272"></a><a href="#272" id="line272"> 272</a> </span> : *
<span class="lineNum" id="container273"><a name="273"></a><a href="#273" id="line273"> 273</a> </span> : * Supports 'KB', 'MB' and 'GB' suffixes, where KB = 1024 B etc.
<span class="lineNum" id="container274"><a name="274"></a><a href="#274" id="line274"> 274</a> </span> : *
<span class="lineNum" id="container275"><a name="275"></a><a href="#275" id="line275"> 275</a> </span> : * The final value will be rounded to the nearest integer.
<span class="lineNum" id="container276"><a name="276"></a><a href="#276" id="line276"> 276</a> </span> : *
<span class="lineNum" id="container277"><a name="277"></a><a href="#277" id="line277"> 277</a> </span> : * Examples:
<span class="lineNum" id="container278"><a name="278"></a><a href="#278" id="line278"> 278</a> </span> : * - '100' =&gt; 100
<span class="lineNum" id="container279"><a name="279"></a><a href="#279" id="line279"> 279</a> </span> : * - '100.12' =&gt; 100
<span class="lineNum" id="container280"><a name="280"></a><a href="#280" id="line280"> 280</a> </span> : * - '100KB' =&gt; 102400
<span class="lineNum" id="container281"><a name="281"></a><a href="#281" id="line281"> 281</a> </span> : * - '1.5MB' =&gt; 1572864
<span class="lineNum" id="container282"><a name="282"></a><a href="#282" id="line282"> 282</a> </span> : *
<span class="lineNum" id="container283"><a name="283"></a><a href="#283" id="line283"> 283</a> </span> : * @param mixed $value File size (optionally with suffix).
<span class="lineNum" id="container284"><a name="284"></a><a href="#284" id="line284"> 284</a> </span> : * @return integer Parsed file size.
<span class="lineNum" id="container285"><a name="285"></a><a href="#285" id="line285"> 285</a> </span> : */
<span class="lineNum" id="container286"><a name="286"></a><a href="#286" id="line286"> 286</a> </span> : public static function toFileSizeEx($value) {
<span class="lineNum" id="container287"><a name="287"></a><a href="#287" id="line287"> 287</a> </span> :
<span class="lineNum" id="container288"><a name="288"></a><a href="#288" id="line288"> 288</a> </span><span class="lineCov"> 3 : if (empty($value)) { </span>
<span class="lineNum" id="container289"><a name="289"></a><a href="#289" id="line289"> 289</a> </span><span class="lineNoCov"> 0 : throw new LoggerException(&quot;Empty value cannot be converted to a file size.&quot;); </span>
<span class="lineNum" id="container290"><a name="290"></a><a href="#290" id="line290"> 290</a> </span> : }
<span class="lineNum" id="container291"><a name="291"></a><a href="#291" id="line291"> 291</a> </span> :
<span class="lineNum" id="container292"><a name="292"></a><a href="#292" id="line292"> 292</a> </span><span class="lineCov"> 3 : if (is_numeric($value)) { </span>
<span class="lineNum" id="container293"><a name="293"></a><a href="#293" id="line293"> 293</a> </span><span class="lineCov"> 1 : return (integer) $value; </span>
<span class="lineNum" id="container294"><a name="294"></a><a href="#294" id="line294"> 294</a> </span> : }
<span class="lineNum" id="container295"><a name="295"></a><a href="#295" id="line295"> 295</a> </span> :
<span class="lineNum" id="container296"><a name="296"></a><a href="#296" id="line296"> 296</a> </span><span class="lineCov"> 3 : if (!is_string($value)) { </span>
<span class="lineNum" id="container297"><a name="297"></a><a href="#297" id="line297"> 297</a> </span><span class="lineNoCov"> 0 : throw new LoggerException(&quot;Given value [&quot; . var_export($value, true) . &quot;] cannot be converted to a file size.&quot;); </span>
<span class="lineNum" id="container298"><a name="298"></a><a href="#298" id="line298"> 298</a> </span> : }
<span class="lineNum" id="container299"><a name="299"></a><a href="#299" id="line299"> 299</a> </span> :
<span class="lineNum" id="container300"><a name="300"></a><a href="#300" id="line300"> 300</a> </span><span class="lineCov"> 3 : $str = strtoupper(trim($value)); </span>
<span class="lineNum" id="container301"><a name="301"></a><a href="#301" id="line301"> 301</a> </span><span class="lineCov"> 3 : $count = preg_match('/^([0-9.]+)(KB|MB|GB)?$/', $str, $matches); </span>
<span class="lineNum" id="container302"><a name="302"></a><a href="#302" id="line302"> 302</a> </span> :
<span class="lineNum" id="container303"><a name="303"></a><a href="#303" id="line303"> 303</a> </span><span class="lineCov"> 3 : if ($count &gt; 0) { </span>
<span class="lineNum" id="container304"><a name="304"></a><a href="#304" id="line304"> 304</a> </span><span class="lineCov"> 3 : $size = $matches[1]; </span>
<span class="lineNum" id="container305"><a name="305"></a><a href="#305" id="line305"> 305</a> </span><span class="lineCov"> 3 : $unit = $matches[2]; </span>
<span class="lineNum" id="container306"><a name="306"></a><a href="#306" id="line306"> 306</a> </span> :
<span class="lineNum" id="container307"><a name="307"></a><a href="#307" id="line307"> 307</a> </span> : switch($unit) {
<span class="lineNum" id="container308"><a name="308"></a><a href="#308" id="line308"> 308</a> </span><span class="lineCov"> 3 : case 'KB': $size *= pow(1024, 1); break; </span>
<span class="lineNum" id="container309"><a name="309"></a><a href="#309" id="line309"> 309</a> </span><span class="lineCov"> 1 : case 'MB': $size *= pow(1024, 2); break; </span>
<span class="lineNum" id="container310"><a name="310"></a><a href="#310" id="line310"> 310</a> </span><span class="lineCov"> 1 : case 'GB': $size *= pow(1024, 3); break; </span>
<span class="lineNum" id="container311"><a name="311"></a><a href="#311" id="line311"> 311</a> </span> : }
<span class="lineNum" id="container312"><a name="312"></a><a href="#312" id="line312"> 312</a> </span> :
<span class="lineNum" id="container313"><a name="313"></a><a href="#313" id="line313"> 313</a> </span><span class="lineCov"> 3 : return (integer) $size; </span>
<span class="lineNum" id="container314"><a name="314"></a><a href="#314" id="line314"> 314</a> </span> : }
<span class="lineNum" id="container315"><a name="315"></a><a href="#315" id="line315"> 315</a> </span> :
<span class="lineNum" id="container316"><a name="316"></a><a href="#316" id="line316"> 316</a> </span><span class="lineNoCov"> 0 : throw new LoggerException(&quot;Given value [$value] cannot be converted to a file size.&quot;); </span>
<span class="lineNum" id="container317"><a name="317"></a><a href="#317" id="line317"> 317</a> </span> : }
<span class="lineNum" id="container318"><a name="318"></a><a href="#318" id="line318"> 318</a> </span> :
<span class="lineNum" id="container319"><a name="319"></a><a href="#319" id="line319"> 319</a> </span> : /**
<span class="lineNum" id="container320"><a name="320"></a><a href="#320" id="line320"> 320</a> </span> : * Converts a value to string, or throws an exception if not possible.
<span class="lineNum" id="container321"><a name="321"></a><a href="#321" id="line321"> 321</a> </span> : *
<span class="lineNum" id="container322"><a name="322"></a><a href="#322" id="line322"> 322</a> </span> : * Objects can be converted to string if they implement the magic
<span class="lineNum" id="container323"><a name="323"></a><a href="#323" id="line323"> 323</a> </span> : * __toString() method.
<span class="lineNum" id="container324"><a name="324"></a><a href="#324" id="line324"> 324</a> </span> : *
<span class="lineNum" id="container325"><a name="325"></a><a href="#325" id="line325"> 325</a> </span> : */
<span class="lineNum" id="container326"><a name="326"></a><a href="#326" id="line326"> 326</a> </span> : public static function toStringEx($value) {
<span class="lineNum" id="container327"><a name="327"></a><a href="#327" id="line327"> 327</a> </span><span class="lineCov"> 24 : if (is_string($value)) { </span>
<span class="lineNum" id="container328"><a name="328"></a><a href="#328" id="line328"> 328</a> </span><span class="lineCov"> 24 : return $value; </span>
<span class="lineNum" id="container329"><a name="329"></a><a href="#329" id="line329"> 329</a> </span> : }
<span class="lineNum" id="container330"><a name="330"></a><a href="#330" id="line330"> 330</a> </span><span class="lineNoCov"> 0 : if (is_numeric($value)) { </span>
<span class="lineNum" id="container331"><a name="331"></a><a href="#331" id="line331"> 331</a> </span><span class="lineNoCov"> 0 : return (string) $value; </span>
<span class="lineNum" id="container332"><a name="332"></a><a href="#332" id="line332"> 332</a> </span> : }
<span class="lineNum" id="container333"><a name="333"></a><a href="#333" id="line333"> 333</a> </span><span class="lineNoCov"> 0 : if (is_object($value) &amp;&amp; method_exists($value, '__toString')) { </span>
<span class="lineNum" id="container334"><a name="334"></a><a href="#334" id="line334"> 334</a> </span><span class="lineNoCov"> 0 : return (string) $value; </span>
<span class="lineNum" id="container335"><a name="335"></a><a href="#335" id="line335"> 335</a> </span> : }
<span class="lineNum" id="container336"><a name="336"></a><a href="#336" id="line336"> 336</a> </span> :
<span class="lineNum" id="container337"><a name="337"></a><a href="#337" id="line337"> 337</a> </span><span class="lineNoCov"> 0 : throw new LoggerException(&quot;Given value [&quot; . var_export($value, true) . &quot;] cannot be converted to string.&quot;); </span>
<span class="lineNum" id="container338"><a name="338"></a><a href="#338" id="line338"> 338</a> </span> : }
<span class="lineNum" id="container339"><a name="339"></a><a href="#339" id="line339"> 339</a> </span> :
<span class="lineNum" id="container340"><a name="340"></a><a href="#340" id="line340"> 340</a> </span> :
<span class="lineNum" id="container341"><a name="341"></a><a href="#341" id="line341"> 341</a> </span> : /**
<span class="lineNum" id="container342"><a name="342"></a><a href="#342" id="line342"> 342</a> </span> : * Find the value corresponding to &lt;var&gt;$key&lt;/var&gt; in
<span class="lineNum" id="container343"><a name="343"></a><a href="#343" id="line343"> 343</a> </span> : * &lt;var&gt;$props&lt;/var&gt;. Then perform variable substitution on the
<span class="lineNum" id="container344"><a name="344"></a><a href="#344" id="line344"> 344</a> </span> : * found value.
<span class="lineNum" id="container345"><a name="345"></a><a href="#345" id="line345"> 345</a> </span> : *
<span class="lineNum" id="container346"><a name="346"></a><a href="#346" id="line346"> 346</a> </span> : * @param string $key
<span class="lineNum" id="container347"><a name="347"></a><a href="#347" id="line347"> 347</a> </span> : * @param array $props
<span class="lineNum" id="container348"><a name="348"></a><a href="#348" id="line348"> 348</a> </span> : * @return string
<span class="lineNum" id="container349"><a name="349"></a><a href="#349" id="line349"> 349</a> </span> : */
<span class="lineNum" id="container350"><a name="350"></a><a href="#350" id="line350"> 350</a> </span> : public static function findAndSubst($key, $props) {
<span class="lineNum" id="container351"><a name="351"></a><a href="#351" id="line351"> 351</a> </span><span class="lineCov"> 2 : $value = @$props[$key]; </span>
<span class="lineNum" id="container352"><a name="352"></a><a href="#352" id="line352"> 352</a> </span> :
<span class="lineNum" id="container353"><a name="353"></a><a href="#353" id="line353"> 353</a> </span> : // If coming from the LoggerConfiguratorIni, some options were
<span class="lineNum" id="container354"><a name="354"></a><a href="#354" id="line354"> 354</a> </span> : // already mangled by parse_ini_file:
<span class="lineNum" id="container355"><a name="355"></a><a href="#355" id="line355"> 355</a> </span> : //
<span class="lineNum" id="container356"><a name="356"></a><a href="#356" id="line356"> 356</a> </span> : // not specified =&gt; never reaches this code
<span class="lineNum" id="container357"><a name="357"></a><a href="#357" id="line357"> 357</a> </span> : // &quot;&quot;|off|false|null =&gt; string(0) &quot;&quot;
<span class="lineNum" id="container358"><a name="358"></a><a href="#358" id="line358"> 358</a> </span> : // &quot;1&quot;|on|true =&gt; string(1) &quot;1&quot;
<span class="lineNum" id="container359"><a name="359"></a><a href="#359" id="line359"> 359</a> </span> : // &quot;true&quot; =&gt; string(4) &quot;true&quot;
<span class="lineNum" id="container360"><a name="360"></a><a href="#360" id="line360"> 360</a> </span> : // &quot;false&quot; =&gt; string(5) &quot;false&quot;
<span class="lineNum" id="container361"><a name="361"></a><a href="#361" id="line361"> 361</a> </span> : //
<span class="lineNum" id="container362"><a name="362"></a><a href="#362" id="line362"> 362</a> </span> : // As the integer 1 and the boolean true are therefore indistinguable
<span class="lineNum" id="container363"><a name="363"></a><a href="#363" id="line363"> 363</a> </span> : // it's up to the setter how to deal with it, they can not be cast
<span class="lineNum" id="container364"><a name="364"></a><a href="#364" id="line364"> 364</a> </span> : // into a boolean here. {@see toBoolean}
<span class="lineNum" id="container365"><a name="365"></a><a href="#365" id="line365"> 365</a> </span> : // Even an empty value has to be given to the setter as it has been
<span class="lineNum" id="container366"><a name="366"></a><a href="#366" id="line366"> 366</a> </span> : // explicitly set by the user and is different from an option which
<span class="lineNum" id="container367"><a name="367"></a><a href="#367" id="line367"> 367</a> </span> : // has not been specified and therefore keeps its default value.
<span class="lineNum" id="container368"><a name="368"></a><a href="#368" id="line368"> 368</a> </span> : //
<span class="lineNum" id="container369"><a name="369"></a><a href="#369" id="line369"> 369</a> </span> : // if(!empty($value)) {
<span class="lineNum" id="container370"><a name="370"></a><a href="#370" id="line370"> 370</a> </span><span class="lineCov"> 2 : return LoggerOptionConverter::substVars($value, $props); </span>
<span class="lineNum" id="container371"><a name="371"></a><a href="#371" id="line371"> 371</a> </span> : // }
<span class="lineNum" id="container372"><a name="372"></a><a href="#372" id="line372"> 372</a> </span> : }
<span class="lineNum" id="container373"><a name="373"></a><a href="#373" id="line373"> 373</a> </span> :
<span class="lineNum" id="container374"><a name="374"></a><a href="#374" id="line374"> 374</a> </span> : /**
<span class="lineNum" id="container375"><a name="375"></a><a href="#375" id="line375"> 375</a> </span> : * Perform variable substitution in string &lt;var&gt;$val&lt;/var&gt; from the
<span class="lineNum" id="container376"><a name="376"></a><a href="#376" id="line376"> 376</a> </span> : * values of keys found with the {@link getSystemProperty()} method.
<span class="lineNum" id="container377"><a name="377"></a><a href="#377" id="line377"> 377</a> </span> : *
<span class="lineNum" id="container378"><a name="378"></a><a href="#378" id="line378"> 378</a> </span> : * &lt;p&gt;The variable substitution delimeters are &lt;b&gt;${&lt;/b&gt; and &lt;b&gt;}&lt;/b&gt;.
<span class="lineNum" id="container379"><a name="379"></a><a href="#379" id="line379"> 379</a> </span> : *
<span class="lineNum" id="container380"><a name="380"></a><a href="#380" id="line380"> 380</a> </span> : * &lt;p&gt;For example, if the &quot;MY_CONSTANT&quot; contains &quot;value&quot;, then
<span class="lineNum" id="container381"><a name="381"></a><a href="#381" id="line381"> 381</a> </span> : * the call
<span class="lineNum" id="container382"><a name="382"></a><a href="#382" id="line382"> 382</a> </span> : * &lt;code&gt;
<span class="lineNum" id="container383"><a name="383"></a><a href="#383" id="line383"> 383</a> </span> : * $s = LoggerOptionConverter::substVars(&quot;Value of key is ${MY_CONSTANT}.&quot;);
<span class="lineNum" id="container384"><a name="384"></a><a href="#384" id="line384"> 384</a> </span> : * &lt;/code&gt;
<span class="lineNum" id="container385"><a name="385"></a><a href="#385" id="line385"> 385</a> </span> : * will set the variable &lt;i&gt;$s&lt;/i&gt; to &quot;Value of key is value.&quot;.&lt;/p&gt;
<span class="lineNum" id="container386"><a name="386"></a><a href="#386" id="line386"> 386</a> </span> : *
<span class="lineNum" id="container387"><a name="387"></a><a href="#387" id="line387"> 387</a> </span> : * &lt;p&gt;If no value could be found for the specified key, then the
<span class="lineNum" id="container388"><a name="388"></a><a href="#388" id="line388"> 388</a> </span> : * &lt;var&gt;$props&lt;/var&gt; parameter is searched, if the value could not
<span class="lineNum" id="container389"><a name="389"></a><a href="#389" id="line389"> 389</a> </span> : * be found there, then substitution defaults to the empty string.&lt;/p&gt;
<span class="lineNum" id="container390"><a name="390"></a><a href="#390" id="line390"> 390</a> </span> : *
<span class="lineNum" id="container391"><a name="391"></a><a href="#391" id="line391"> 391</a> </span> : * &lt;p&gt;For example, if {@link getSystemProperty()} cannot find any value for the key
<span class="lineNum" id="container392"><a name="392"></a><a href="#392" id="line392"> 392</a> </span> : * &quot;inexistentKey&quot;, then the call
<span class="lineNum" id="container393"><a name="393"></a><a href="#393" id="line393"> 393</a> </span> : * &lt;code&gt;
<span class="lineNum" id="container394"><a name="394"></a><a href="#394" id="line394"> 394</a> </span> : * $s = LoggerOptionConverter::substVars(&quot;Value of inexistentKey is [${inexistentKey}]&quot;);
<span class="lineNum" id="container395"><a name="395"></a><a href="#395" id="line395"> 395</a> </span> : * &lt;/code&gt;
<span class="lineNum" id="container396"><a name="396"></a><a href="#396" id="line396"> 396</a> </span> : * will set &lt;var&gt;$s&lt;/var&gt; to &quot;Value of inexistentKey is []&quot;.&lt;/p&gt;
<span class="lineNum" id="container397"><a name="397"></a><a href="#397" id="line397"> 397</a> </span> : *
<span class="lineNum" id="container398"><a name="398"></a><a href="#398" id="line398"> 398</a> </span> : * &lt;p&gt;A warn is thrown if &lt;var&gt;$val&lt;/var&gt; contains a start delimeter &quot;${&quot;
<span class="lineNum" id="container399"><a name="399"></a><a href="#399" id="line399"> 399</a> </span> : * which is not balanced by a stop delimeter &quot;}&quot; and an empty string is returned.&lt;/p&gt;
<span class="lineNum" id="container400"><a name="400"></a><a href="#400" id="line400"> 400</a> </span> : *
<span class="lineNum" id="container401"><a name="401"></a><a href="#401" id="line401"> 401</a> </span> : * @param string $val The string on which variable substitution is performed.
<span class="lineNum" id="container402"><a name="402"></a><a href="#402" id="line402"> 402</a> </span> : * @param array $props
<span class="lineNum" id="container403"><a name="403"></a><a href="#403" id="line403"> 403</a> </span> : * @return string
<span class="lineNum" id="container404"><a name="404"></a><a href="#404" id="line404"> 404</a> </span> : */
<span class="lineNum" id="container405"><a name="405"></a><a href="#405" id="line405"> 405</a> </span> : // TODO: this method doesn't work correctly with key = true, it needs key = &quot;true&quot; which is odd
<span class="lineNum" id="container406"><a name="406"></a><a href="#406" id="line406"> 406</a> </span> : public static function substVars($val, $props = null) {
<span class="lineNum" id="container407"><a name="407"></a><a href="#407" id="line407"> 407</a> </span><span class="lineCov"> 3 : $sbuf = ''; </span>
<span class="lineNum" id="container408"><a name="408"></a><a href="#408" id="line408"> 408</a> </span><span class="lineCov"> 3 : $i = 0; </span>
<span class="lineNum" id="container409"><a name="409"></a><a href="#409" id="line409"> 409</a> </span><span class="lineCov"> 3 : while(true) { </span>
<span class="lineNum" id="container410"><a name="410"></a><a href="#410" id="line410"> 410</a> </span><span class="lineCov"> 3 : $j = strpos($val, self::DELIM_START, $i); </span>
<span class="lineNum" id="container411"><a name="411"></a><a href="#411" id="line411"> 411</a> </span><span class="lineCov"> 3 : if($j === false) { </span>
<span class="lineNum" id="container412"><a name="412"></a><a href="#412" id="line412"> 412</a> </span> : // no more variables
<span class="lineNum" id="container413"><a name="413"></a><a href="#413" id="line413"> 413</a> </span><span class="lineCov"> 3 : if($i == 0) { // this is a simple string </span>
<span class="lineNum" id="container414"><a name="414"></a><a href="#414" id="line414"> 414</a> </span><span class="lineCov"> 3 : return $val; </span>
<span class="lineNum" id="container415"><a name="415"></a><a href="#415" id="line415"> 415</a> </span> : } else { // add the tail string which contails no variables and return the result.
<span class="lineNum" id="container416"><a name="416"></a><a href="#416" id="line416"> 416</a> </span><span class="lineCov"> 1 : $sbuf .= substr($val, $i); </span>
<span class="lineNum" id="container417"><a name="417"></a><a href="#417" id="line417"> 417</a> </span><span class="lineCov"> 1 : return $sbuf; </span>
<span class="lineNum" id="container418"><a name="418"></a><a href="#418" id="line418"> 418</a> </span> : }
<span class="lineNum" id="container419"><a name="419"></a><a href="#419" id="line419"> 419</a> </span> : } else {
<span class="lineNum" id="container420"><a name="420"></a><a href="#420" id="line420"> 420</a> </span> :
<span class="lineNum" id="container421"><a name="421"></a><a href="#421" id="line421"> 421</a> </span><span class="lineCov"> 1 : $sbuf .= substr($val, $i, $j-$i); </span>
<span class="lineNum" id="container422"><a name="422"></a><a href="#422" id="line422"> 422</a> </span><span class="lineCov"> 1 : $k = strpos($val, self::DELIM_STOP, $j); </span>
<span class="lineNum" id="container423"><a name="423"></a><a href="#423" id="line423"> 423</a> </span><span class="lineCov"> 1 : if($k === false) { </span>
<span class="lineNum" id="container424"><a name="424"></a><a href="#424" id="line424"> 424</a> </span> : // LoggerOptionConverter::substVars() has no closing brace. Opening brace
<span class="lineNum" id="container425"><a name="425"></a><a href="#425" id="line425"> 425</a> </span><span class="lineNoCov"> 0 : return ''; </span>
<span class="lineNum" id="container426"><a name="426"></a><a href="#426" id="line426"> 426</a> </span> : } else {
<span class="lineNum" id="container427"><a name="427"></a><a href="#427" id="line427"> 427</a> </span><span class="lineCov"> 1 : $j += self::DELIM_START_LEN; </span>
<span class="lineNum" id="container428"><a name="428"></a><a href="#428" id="line428"> 428</a> </span><span class="lineCov"> 1 : $key = substr($val, $j, $k - $j); </span>
<span class="lineNum" id="container429"><a name="429"></a><a href="#429" id="line429"> 429</a> </span> : // first try in System properties
<span class="lineNum" id="container430"><a name="430"></a><a href="#430" id="line430"> 430</a> </span><span class="lineCov"> 1 : $replacement = LoggerOptionConverter::getSystemProperty($key, null); </span>
<span class="lineNum" id="container431"><a name="431"></a><a href="#431" id="line431"> 431</a> </span> : // then try props parameter
<span class="lineNum" id="container432"><a name="432"></a><a href="#432" id="line432"> 432</a> </span><span class="lineCov"> 1 : if($replacement == null and $props !== null) { </span>
<span class="lineNum" id="container433"><a name="433"></a><a href="#433" id="line433"> 433</a> </span><span class="lineCov"> 1 : $replacement = @$props[$key]; </span>
<span class="lineNum" id="container434"><a name="434"></a><a href="#434" id="line434"> 434</a> </span><span class="lineCov"> 1 : } </span>
<span class="lineNum" id="container435"><a name="435"></a><a href="#435" id="line435"> 435</a> </span> :
<span class="lineNum" id="container436"><a name="436"></a><a href="#436" id="line436"> 436</a> </span><span class="lineCov"> 1 : if(!empty($replacement)) { </span>
<span class="lineNum" id="container437"><a name="437"></a><a href="#437" id="line437"> 437</a> </span> : // Do variable substitution on the replacement string
<span class="lineNum" id="container438"><a name="438"></a><a href="#438" id="line438"> 438</a> </span> : // such that we can solve &quot;Hello ${x2}&quot; as &quot;Hello p1&quot;
<span class="lineNum" id="container439"><a name="439"></a><a href="#439" id="line439"> 439</a> </span> : // the where the properties are
<span class="lineNum" id="container440"><a name="440"></a><a href="#440" id="line440"> 440</a> </span> : // x1=p1
<span class="lineNum" id="container441"><a name="441"></a><a href="#441" id="line441"> 441</a> </span> : // x2=${x1}
<span class="lineNum" id="container442"><a name="442"></a><a href="#442" id="line442"> 442</a> </span><span class="lineCov"> 1 : $recursiveReplacement = LoggerOptionConverter::substVars($replacement, $props); </span>
<span class="lineNum" id="container443"><a name="443"></a><a href="#443" id="line443"> 443</a> </span><span class="lineCov"> 1 : $sbuf .= $recursiveReplacement; </span>
<span class="lineNum" id="container444"><a name="444"></a><a href="#444" id="line444"> 444</a> </span><span class="lineCov"> 1 : } </span>
<span class="lineNum" id="container445"><a name="445"></a><a href="#445" id="line445"> 445</a> </span><span class="lineCov"> 1 : $i = $k + self::DELIM_STOP_LEN; </span>
<span class="lineNum" id="container446"><a name="446"></a><a href="#446" id="line446"> 446</a> </span> : }
<span class="lineNum" id="container447"><a name="447"></a><a href="#447" id="line447"> 447</a> </span> : }
<span class="lineNum" id="container448"><a name="448"></a><a href="#448" id="line448"> 448</a> </span><span class="lineCov"> 1 : } </span>
<span class="lineNum" id="container449"><a name="449"></a><a href="#449" id="line449"> 449</a> </span><span class="lineNoCov"> 0 : } </span>
<span class="lineNum" id="container450"><a name="450"></a><a href="#450" id="line450"> 450</a> </span> :
<span class="lineNum" id="container451"><a name="451"></a><a href="#451" id="line451"> 451</a> </span> : }
</pre>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td class="ruler"><img src="glass.png" width="3" height="3" alt=""></td></tr>
<tr><td class="versionInfo">Generated by <a href="http://github.com/sebastianbergmann/php-code-coverage" target="_top">PHP_CodeCoverage 1.1.1</a> using <a href="http://www.php.net/" target="_top">PHP 5.3.3-7+squeeze3</a> and PHPUnit 3.6.3 at Sat Feb 18 22:32:39 GMT 2012.</td></tr>
</table>
<br />
<script type="text/javascript">
//<![CDATA[
$E = YAHOO.util.Event;
YAHOO.namespace("phpunit.container");
YAHOO.phpunit.container.panelsData = {
"panel62": {
"header": "1 test covers line 62",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel63": {
"header": "1 test covers line 63",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel64": {
"header": "1 test covers line 64",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel66": {
"header": "1 test covers line 66",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel69": {
"header": "1 test covers line 69",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel86": {
"header": "6 tests cover line 86",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerTest::testCanLogToAllLevels</li><li class=\"testPassed\">LoggerTest::testIsEnabledFor</li><li class=\"testPassed\">LoggerTest::testGetCurrentLoggers</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel87": {
"header": "1 test covers line 87",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel88": {
"header": "6 tests cover line 88",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerTest::testCanLogToAllLevels</li><li class=\"testPassed\">LoggerTest::testIsEnabledFor</li><li class=\"testPassed\">LoggerTest::testGetCurrentLoggers</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel89": {
"header": "5 tests cover line 89",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerTest::testCanLogToAllLevels</li><li class=\"testPassed\">LoggerTest::testIsEnabledFor</li><li class=\"testPassed\">LoggerTest::testGetCurrentLoggers</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel90": {
"header": "5 tests cover line 90",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerTest::testCanLogToAllLevels</li><li class=\"testPassed\">LoggerTest::testIsEnabledFor</li><li class=\"testPassed\">LoggerTest::testGetCurrentLoggers</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel91": {
"header": "1 test covers line 91",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel92": {
"header": "5 tests cover line 92",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerTest::testCanLogToAllLevels</li><li class=\"testPassed\">LoggerTest::testIsEnabledFor</li><li class=\"testPassed\">LoggerTest::testGetCurrentLoggers</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel93": {
"header": "4 tests cover line 93",
"body": "<ul><li class=\"testPassed\">LoggerTest::testCanLogToAllLevels</li><li class=\"testPassed\">LoggerTest::testIsEnabledFor</li><li class=\"testPassed\">LoggerTest::testGetCurrentLoggers</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel95": {
"header": "3 tests cover line 95",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel96": {
"header": "2 tests cover line 96",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel97": {
"header": "1 test covers line 97",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel98": {
"header": "1 test covers line 98",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel101": {
"header": "2 tests cover line 101",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testInvalidLoggerAddivity</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel106": {
"header": "27 tests cover line 106",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerAppenderEchoTest::testHtmlLineBreaks</li><li class=\"testPassed\">LoggerAppenderEchoTest::testEchoHtml</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagTrue</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagFalse</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testMail</li><li class=\"testPassed\">LoggerAppenderMailTest::testMail</li><li class=\"testPassed\">LoggerAppenderPDOTest::testOldStyle</li><li class=\"testPassed\">LoggerAppenderPDOTest::testException</li><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMatch</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure1</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfo</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLayoutWithLocationInfo</li><li class=\"testPassed\">LoggerLayoutXmlTest::testLog4JNamespaceErrorLayout</li></ul>",
"footer": ""
},
"panel107": {
"header": "26 tests cover line 107",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerAppenderEchoTest::testHtmlLineBreaks</li><li class=\"testPassed\">LoggerAppenderEchoTest::testEchoHtml</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagTrue</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagFalse</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testMail</li><li class=\"testPassed\">LoggerAppenderMailTest::testMail</li><li class=\"testPassed\">LoggerAppenderPDOTest::testOldStyle</li><li class=\"testPassed\">LoggerAppenderPDOTest::testException</li><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMatch</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfo</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLayoutWithLocationInfo</li><li class=\"testPassed\">LoggerLayoutXmlTest::testLog4JNamespaceErrorLayout</li></ul>",
"footer": ""
},
"panel108": {
"header": "15 tests cover line 108",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerAppenderEchoTest::testHtmlLineBreaks</li><li class=\"testPassed\">LoggerAppenderEchoTest::testEchoHtml</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagTrue</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagFalse</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testMail</li><li class=\"testPassed\">LoggerAppenderMailTest::testMail</li><li class=\"testPassed\">LoggerAppenderPDOTest::testOldStyle</li><li class=\"testPassed\">LoggerAppenderPDOTest::testException</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfo</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLayoutWithLocationInfo</li><li class=\"testPassed\">LoggerLayoutXmlTest::testLog4JNamespaceErrorLayout</li></ul>",
"footer": ""
},
"panel110": {
"header": "12 tests cover line 110",
"body": "<ul><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMatch</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li></ul>",
"footer": ""
},
"panel111": {
"header": "12 tests cover line 111",
"body": "<ul><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMatch</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li></ul>",
"footer": ""
},
"panel112": {
"header": "5 tests cover line 112",
"body": "<ul><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel114": {
"header": "9 tests cover line 114",
"body": "<ul><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMatch</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li></ul>",
"footer": ""
},
"panel115": {
"header": "7 tests cover line 115",
"body": "<ul><li class=\"testPassed\">LoggerConfigurationAdapterINITest::testBooleanValues</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMatch</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBoolean</li></ul>",
"footer": ""
},
"panel117": {
"header": "2 tests cover line 117",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li></ul>",
"footer": ""
},
"panel119": {
"header": "3 tests cover line 119",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure1</li><li class=\"testPassed\">LoggerOptionConverterTest::testToBooleanFailure2</li><li class=\"testPassed\">LoggerLayoutSerializedTest::testLocationInfoFail</li></ul>",
"footer": ""
},
"panel128": {
"header": "1 test covers line 128",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li></ul>",
"footer": ""
},
"panel129": {
"header": "1 test covers line 129",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li></ul>",
"footer": ""
},
"panel130": {
"header": "1 test covers line 130",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li></ul>",
"footer": ""
},
"panel132": {
"header": "1 test covers line 132",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li></ul>",
"footer": ""
},
"panel142": {
"header": "6 tests cover line 142",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure1</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure2</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure3</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure4</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure5</li></ul>",
"footer": ""
},
"panel143": {
"header": "1 test covers line 143",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li></ul>",
"footer": ""
},
"panel145": {
"header": "6 tests cover line 145",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure1</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure2</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure3</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure4</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure5</li></ul>",
"footer": ""
},
"panel146": {
"header": "1 test covers line 146",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToInteger</li></ul>",
"footer": ""
},
"panel149": {
"header": "5 tests cover line 149",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure1</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure2</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure3</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure4</li><li class=\"testPassed\">LoggerOptionConverterTest::testToIntegerFailure5</li></ul>",
"footer": ""
},
"panel157": {
"header": "4 tests cover line 157",
"body": "<ul><li class=\"testPassed\">LoggerAppenderMongoDBTest::testPort</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li><li class=\"testPassed\">LoggerAppenderSocketTest::testLogging</li></ul>",
"footer": ""
},
"panel158": {
"header": "4 tests cover line 158",
"body": "<ul><li class=\"testPassed\">LoggerAppenderMongoDBTest::testPort</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li><li class=\"testPassed\">LoggerAppenderSocketTest::testLogging</li></ul>",
"footer": ""
},
"panel231": {
"header": "15 tests cover line 231",
"body": "<ul><li class=\"testPassed\">LoggerAppenderTest::testThreshold</li><li class=\"testPassed\">LoggerAppenderTest::testGetThreshold</li><li class=\"testPassed\">LoggerAppenderTest::testSetStringThreshold</li><li class=\"testPassed\">LoggerConfiguratorTest::testAppenderThreshold</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerRendererMapTest::testFindAndRender</li><li class=\"testPassed\">LoggerRendererMapTest::testFindAndRenderDescendants</li><li class=\"testPassed\">LoggerRendererMapTest::testGetByObject</li><li class=\"testPassed\">LoggerRendererMapTest::testGetByClassName</li><li class=\"testPassed\">LoggerRendererMapTest::testUsage</li></ul>",
"footer": ""
},
"panel232": {
"header": "12 tests cover line 232",
"body": "<ul><li class=\"testPassed\">LoggerAppenderTest::testThreshold</li><li class=\"testPassed\">LoggerAppenderTest::testGetThreshold</li><li class=\"testPassed\">LoggerConfiguratorTest::testAppenderThreshold</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecide</li><li class=\"testPassed\">LoggerFilterLevelRangeTest::testDecideAcceptFalse</li><li class=\"testPassed\">LoggerRendererMapTest::testFindAndRender</li><li class=\"testPassed\">LoggerRendererMapTest::testFindAndRenderDescendants</li><li class=\"testPassed\">LoggerRendererMapTest::testGetByObject</li><li class=\"testPassed\">LoggerRendererMapTest::testGetByClassName</li><li class=\"testPassed\">LoggerRendererMapTest::testUsage</li></ul>",
"footer": ""
},
"panel234": {
"header": "3 tests cover line 234",
"body": "<ul><li class=\"testPassed\">LoggerAppenderTest::testSetStringThreshold</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li></ul>",
"footer": ""
},
"panel235": {
"header": "3 tests cover line 235",
"body": "<ul><li class=\"testPassed\">LoggerAppenderTest::testSetStringThreshold</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li></ul>",
"footer": ""
},
"panel238": {
"header": "3 tests cover line 238",
"body": "<ul><li class=\"testPassed\">LoggerAppenderTest::testSetStringThreshold</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testAcceptConfig</li><li class=\"testPassed\">LoggerFilterLevelMatchTest::testDenyConfig</li></ul>",
"footer": ""
},
"panel288": {
"header": "3 tests cover line 288",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel292": {
"header": "3 tests cover line 292",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel293": {
"header": "1 test covers line 293",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li></ul>",
"footer": ""
},
"panel296": {
"header": "3 tests cover line 296",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel300": {
"header": "3 tests cover line 300",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel301": {
"header": "3 tests cover line 301",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel303": {
"header": "3 tests cover line 303",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel304": {
"header": "3 tests cover line 304",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel305": {
"header": "3 tests cover line 305",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel308": {
"header": "3 tests cover line 308",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel309": {
"header": "1 test covers line 309",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li></ul>",
"footer": ""
},
"panel310": {
"header": "1 test covers line 310",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li></ul>",
"footer": ""
},
"panel313": {
"header": "3 tests cover line 313",
"body": "<ul><li class=\"testPassed\">LoggerAppenderRollingFileTest::testMaxFileSize</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderRollingFileTest::testLoggingViaLogger</li></ul>",
"footer": ""
},
"panel327": {
"header": "24 tests cover line 327",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerAppenderDailyFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderDailyFileTest::testChangedDateFormat</li><li class=\"testPassed\">LoggerAppenderFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagTrue</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagFalse</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testMail</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testEmptyTo</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testEmptyFrom</li><li class=\"testPassed\">LoggerAppenderMailTest::testMail</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testDatabaseName</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testCollectionName</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testUserName</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testPassword</li><li class=\"testPassed\">LoggerAppenderPDOTest::testSimpleWithDefaults</li><li class=\"testPassed\">LoggerAppenderPDOTest::testCustomizedSql</li><li class=\"testPassed\">LoggerAppenderPDOTest::testOldStyle</li><li class=\"testPassed\">LoggerAppenderPDOTest::testException</li><li class=\"testPassed\">LoggerAppenderPDOTest::testClose</li><li class=\"testPassed\">LoggerAppenderSocketTest::testLogging</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerLayoutHtmlTest::testTitle</li></ul>",
"footer": ""
},
"panel328": {
"header": "24 tests cover line 328",
"body": "<ul><li class=\"testPassed\">LoggerConfiguratorTest::testAppendersWithLayout</li><li class=\"testPassed\">LoggerAppenderDailyFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderDailyFileTest::testChangedDateFormat</li><li class=\"testPassed\">LoggerAppenderFileTest::testSimpleLogging</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagTrue</li><li class=\"testPassed\">LoggerAppenderFileTest::testAppendFlagFalse</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testMail</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testEmptyTo</li><li class=\"testPassed\">LoggerAppenderMailEventTest::testEmptyFrom</li><li class=\"testPassed\">LoggerAppenderMailTest::testMail</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testDatabaseName</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testCollectionName</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testUserName</li><li class=\"testPassed\">LoggerAppenderMongoDBTest::testPassword</li><li class=\"testPassed\">LoggerAppenderPDOTest::testSimpleWithDefaults</li><li class=\"testPassed\">LoggerAppenderPDOTest::testCustomizedSql</li><li class=\"testPassed\">LoggerAppenderPDOTest::testOldStyle</li><li class=\"testPassed\">LoggerAppenderPDOTest::testException</li><li class=\"testPassed\">LoggerAppenderPDOTest::testClose</li><li class=\"testPassed\">LoggerAppenderSocketTest::testLogging</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideAccept</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideDeny</li><li class=\"testPassed\">LoggerFilterStringMatchTest::testDecideNullMessage</li><li class=\"testPassed\">LoggerLayoutHtmlTest::testTitle</li></ul>",
"footer": ""
},
"panel351": {
"header": "2 tests cover line 351",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li></ul>",
"footer": ""
},
"panel370": {
"header": "2 tests cover line 370",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li></ul>",
"footer": ""
},
"panel407": {
"header": "3 tests cover line 407",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel408": {
"header": "3 tests cover line 408",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel409": {
"header": "3 tests cover line 409",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel410": {
"header": "3 tests cover line 410",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel411": {
"header": "3 tests cover line 411",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel413": {
"header": "3 tests cover line 413",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel414": {
"header": "3 tests cover line 414",
"body": "<ul><li class=\"testPassed\">LoggerReflectionUtilsTest::testSimpleArraySet</li><li class=\"testPassed\">LoggerReflectionUtilsTest::testStaticArraySet</li><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel416": {
"header": "1 test covers line 416",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel417": {
"header": "1 test covers line 417",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel421": {
"header": "1 test covers line 421",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel422": {
"header": "1 test covers line 422",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel423": {
"header": "1 test covers line 423",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel427": {
"header": "1 test covers line 427",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel428": {
"header": "1 test covers line 428",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel430": {
"header": "1 test covers line 430",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel432": {
"header": "1 test covers line 432",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel433": {
"header": "1 test covers line 433",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel434": {
"header": "1 test covers line 434",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel436": {
"header": "1 test covers line 436",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel442": {
"header": "1 test covers line 442",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel443": {
"header": "1 test covers line 443",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel444": {
"header": "1 test covers line 444",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel445": {
"header": "1 test covers line 445",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"panel448": {
"header": "1 test covers line 448",
"body": "<ul><li class=\"testPassed\">LoggerOptionConverterTest::testSubstituteVars</li></ul>",
"footer": ""
},
"dummy": ""
};
YAHOO.phpunit.container.prepare = function (e) {
var elemId = $E.getTarget(e).id;
var line = elemId.substr(4);
var panelId = "panel" + line;
var containerId = "container" + line;
var panelData = YAHOO.phpunit.container.panelsData[panelId];
var panel = new YAHOO.widget.Panel(panelId, { visible:false, draggable:false, close:true } );
panel.setHeader(panelData["header"]);
panel.setBody(panelData["body"]);
panel.setFooter(panelData["footer"]);
panel.render(containerId);
$E.addListener(elemId, "click", panel.show, panel, true);
$E.removeListener(elemId, "mouseover");
};
function init() {
var ypc = YAHOO.phpunit.container;
for (var panelId in ypc.panelsData) {
var elemId = "line" + panelId.substr(5);
$E.addListener(elemId, "mouseover", ypc.prepare);
}
}
$E.addListener(window, "load", init);
//]]>
</script>
</body>
</html>