3  * SPDX-License-Identifier: GPL-2.0-only
 
   5  * This file is part of Nominatim. (https://nominatim.org)
 
   7  * Copyright (C) 2022 by the Nominatim developer community.
 
   8  * For a full list of authors see the git log.
 
  13 require_once(CONST_LibDir.'/DebugHtml.php');
 
  15 class DebugTest extends \PHPUnit\Framework\TestCase
 
  18     protected function setUp(): void
 
  20         $this->oWithDebuginfo = $this->getMockBuilder(\GeococdeMock::class)
 
  21                                     ->setMethods(array('debugInfo'))
 
  23         $this->oWithDebuginfo->method('debugInfo')
 
  24                   ->willReturn(array('key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3'));
 
  27         $this->oWithToString = $this->getMockBuilder(\SomeMock::class)
 
  28                                     ->setMethods(array('__toString'))
 
  30         $this->oWithToString->method('__toString')->willReturn('me as string');
 
  33     public function testPrintVar()
 
  35         $this->expectOutputString(<<<EOT
 
  36 <pre><b>Var0:</b>  </pre>
 
  37 <pre><b>Var1:</b>  <i>True</i></pre>
 
  38 <pre><b>Var2:</b>  <i>False</i></pre>
 
  39 <pre><b>Var3:</b>  0</pre>
 
  40 <pre><b>Var4:</b>  'String'</pre>
 
  41 <pre><b>Var5:</b>  0 => 'one'
 
  43        2 => 'three'</pre>
 
  44 <pre><b>Var6:</b>  'key' => 'value'
 
  45        'key2' => 'value2'</pre>
 
  46 <pre><b>Var7:</b>  me as string</pre>
 
  47 <pre><b>Var8:</b>  'value', 'value2'</pre>
 
  52         Debug::printVar('Var0', null);
 
  53         Debug::printVar('Var1', true);
 
  54         Debug::printVar('Var2', false);
 
  55         Debug::printVar('Var3', 0);
 
  56         Debug::printVar('Var4', 'String');
 
  57         Debug::printVar('Var5', array('one', 'two', 'three'));
 
  58         Debug::printVar('Var6', array('key' => 'value', 'key2' => 'value2'));
 
  59         Debug::printVar('Var7', $this->oWithToString);
 
  60         Debug::printVar('Var8', Debug::fmtArrayVals(array('key' => 'value', 'key2' => 'value2')));
 
  64     public function testDebugArray()
 
  66         $this->expectOutputString(<<<EOT
 
  67 <pre><b>Arr0:</b>  'null'</pre>
 
  68 <pre><b>Arr1:</b>  'key1' => 'val1'
 
  69        'key2' => 'val2'
 
  70        'key3' => 'val3'</pre>
 
  75         Debug::printDebugArray('Arr0', null);
 
  76         Debug::printDebugArray('Arr1', $this->oWithDebuginfo);
 
  80     public function testPrintDebugTable()
 
  82         $this->expectOutputString(<<<EOT
 
  92     <th><small>0</small></th>
 
  93     <th><small>1</small></th>
 
  96     <td><pre>'one'</pre></td>
 
  97     <td><pre>'two'</pre></td>
 
 100     <td><pre>'three'</pre></td>
 
 101     <td><pre>'four'</pre></td>
 
 107     <th><small>key1</small></th>
 
 108     <th><small>key2</small></th>
 
 109     <th><small>key3</small></th>
 
 112     <td><pre>'val1'</pre></td>
 
 113     <td><pre>'val2'</pre></td>
 
 114     <td><pre>'val3'</pre></td>
 
 121         Debug::printDebugTable('Table1', null);
 
 123         Debug::printDebugTable('Table2', array());
 
 126         Debug::printDebugTable('Table3', array(array('one', 'two'), array('three', 'four')));
 
 129         Debug::printDebugTable('Table4', array($this->oWithDebuginfo));
 
 132     public function testPrintGroupTable()
 
 134         $this->expectOutputString(<<<EOT
 
 144     <th><small>Group</small></th>
 
 145     <th><small>key1</small></th>
 
 146     <th><small>key2</small></th>
 
 149     <td><pre>group1</pre></td>
 
 150     <td><pre>'val1'</pre></td>
 
 151     <td><pre>'val2'</pre></td>
 
 154     <td><pre>group1</pre></td>
 
 155     <td><pre>'one'</pre></td>
 
 156     <td><pre>'two'</pre></td>
 
 159     <td><pre>group2</pre></td>
 
 160     <td><pre>'val1'</pre></td>
 
 161     <td><pre>'val2'</pre></td>
 
 167     <th><small>Group</small></th>
 
 168     <th><small>key1</small></th>
 
 169     <th><small>key2</small></th>
 
 170     <th><small>key3</small></th>
 
 173     <td><pre>group1</pre></td>
 
 174     <td><pre>'val1'</pre></td>
 
 175     <td><pre>'val2'</pre></td>
 
 176     <td><pre>'val3'</pre></td>
 
 179     <td><pre>group1</pre></td>
 
 180     <td><pre>'val1'</pre></td>
 
 181     <td><pre>'val2'</pre></td>
 
 182     <td><pre>'val3'</pre></td>
 
 189         Debug::printGroupTable('Table1', null);
 
 190         Debug::printGroupTable('Table2', array());
 
 192         // header are taken from first group item, thus no key3 gets printed
 
 195                                  array('key1' => 'val1', 'key2' => 'val2'),
 
 196                                  array('key1' => 'one', 'key2' => 'two', 'unknown' => 1),
 
 199                                  array('key1' => 'val1', 'key2' => 'val2', 'key3' => 'val3'),
 
 202         Debug::printGroupTable('Table3', $aGroups);
 
 205                     'group1' => array($this->oWithDebuginfo, $this->oWithDebuginfo),
 
 207         Debug::printGroupTable('Table4', $aGroups);