PageRenderTime 32ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/core/DataTable.test.php

https://github.com/quarkness/piwik
PHP | 655 lines | 461 code | 101 blank | 93 comment | 1 complexity | 4a9fe41f4e0f9c12087c2faebd553d66 MD5 | raw file
  1. <?php
  2. if(!defined('PIWIK_CONFIG_TEST_INCLUDED'))
  3. {
  4. require_once dirname(__FILE__)."/../../tests/config_test.php";
  5. }
  6. require_once 'DataTable.php';
  7. class Test_Piwik_DataTable extends UnitTestCase
  8. {
  9. public function test_applyFilter()
  10. {
  11. $table = $this->getDataTable1ForTest();
  12. $this->assertEqual($table->getRowsCount(), 4);
  13. $table->filter('Limit', array(2,2));
  14. $this->assertEqual($table->getRowsCount(), 2);
  15. $table->filter('Piwik_DataTable_Filter_Limit', array(0,1));
  16. $this->assertEqual($table->getRowsCount(), 1);
  17. }
  18. protected function getSimpleTestDataTable()
  19. {
  20. $table = new Piwik_DataTable;
  21. $table->addRowsFromArray(
  22. array(
  23. array(Piwik_DataTable_Row::COLUMNS => array('label'=>'ten', 'count' => 10)),
  24. array(Piwik_DataTable_Row::COLUMNS => array('label'=>'ninety', 'count' => 90)),
  25. array(Piwik_DataTable_Row::COLUMNS => array('label'=>'hundred', 'count' => 100)),
  26. Piwik_DataTable::ID_SUMMARY_ROW => array( Piwik_DataTable_Row::COLUMNS => array('label'=> 'summary', 'count' => 200))
  27. )
  28. );
  29. return $table;
  30. }
  31. public function test_renameColumn()
  32. {
  33. $table = $this->getSimpleTestDataTable();
  34. $this->assertEqual($table->getColumn('count'), array(10,90,100,200));
  35. $table->renameColumn('count', 'renamed');
  36. $this->assertEqual($table->getColumn('count'), array(false, false, false, false));
  37. $this->assertEqual($table->getColumn('renamed'), array(10,90,100,200));
  38. }
  39. public function test_deleteColumn()
  40. {
  41. $table = $this->getSimpleTestDataTable();
  42. $this->assertEqual($table->getColumn('count'), array(10,90,100,200));
  43. $table->deleteColumn('count');
  44. $this->assertEqual($table->getColumn('count'), array(false, false, false, false));
  45. }
  46. public function test_deleteRow()
  47. {
  48. $table = $this->getSimpleTestDataTable();
  49. // normal row
  50. $idToDelete = 1;
  51. $this->assertEqual(count($table->getRowFromId($idToDelete)->getColumns()), 2);
  52. $table->deleteRow($idToDelete);
  53. $this->assertEqual($table->getRowFromId($idToDelete), false);
  54. // summary row special case
  55. $idToDelete = Piwik_DataTable::ID_SUMMARY_ROW;
  56. $this->assertEqual(count($table->getRowFromId($idToDelete)->getColumns()), 2);
  57. $table->deleteRow($idToDelete);
  58. $this->assertEqual($table->getRowFromId($idToDelete), false);
  59. }
  60. public function test_getLastRow()
  61. {
  62. $table = $this->getSimpleTestDataTable();
  63. $rowsCount = $table->getRowsCount();
  64. $this->assertEqual($table->getLastRow(), $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW));
  65. $table->deleteRow(Piwik_DataTable::ID_SUMMARY_ROW);
  66. $this->assertEqual($table->getLastRow(), $table->getRowFromId($rowsCount-2));
  67. }
  68. public function test_getRowFromIdSubDataTable()
  69. {
  70. $table1 = $this->getDataTable1ForTest();
  71. $idTable1 = $table1->getId();
  72. $table2 = $this->getDataTable2ForTest();
  73. $this->assertEqual($table2->getRowFromIdSubDataTable($idTable1), false);
  74. $table2->getFirstRow()->addSubtable($table1);
  75. $this->assertEqual($table2->getRowFromIdSubDataTable($idTable1), $table2->getFirstRow());
  76. $table3 = $this->getDataTable1ForTest();
  77. $idTable3 = $table3->getId();
  78. $table2->getLastRow()->addSubtable($table3);
  79. $this->assertEqual($table2->getRowFromIdSubDataTable($idTable3), $table2->getLastRow());
  80. }
  81. /**
  82. * we test the count rows and the count rows recursive version
  83. * on a Simple array (1 level only)
  84. */
  85. function test_countRowsSimple()
  86. {
  87. $table = new Piwik_DataTable;
  88. $idcol = Piwik_DataTable_Row::COLUMNS;
  89. $rows = array(
  90. array( $idcol => array('label'=>'google')),
  91. array( $idcol => array('label'=>'ask')),
  92. array( $idcol => array('label'=>'piwik')),
  93. array( $idcol => array('label'=>'yahoo')),
  94. array( $idcol => array('label'=>'amazon')),
  95. array( $idcol => array('label'=>'238975247578949')),
  96. array( $idcol => array('label'=>'Q*(%&*("$&%*(&"$*")"))')));
  97. $table->addRowsFromArray( $rows );
  98. $this->assertEqual( $table->getRowsCount(), count($rows));
  99. $this->assertEqual( $table->getRowsCountRecursive(), count($rows));
  100. }
  101. /**
  102. * we test the count rows and the count rows recursive version
  103. * on a Complex array (rows with 2 and 3 levels only)
  104. *
  105. * the recursive count returns
  106. * the sum of the number of rows of all the subtables
  107. * + the number of rows in the parent table
  108. */
  109. function test_countRowsComplex()
  110. {
  111. $idcol = Piwik_DataTable_Row::COLUMNS;
  112. $idsubtable = Piwik_DataTable_Row::DATATABLE_ASSOCIATED;
  113. // table to go in the SUB table of RoW1
  114. $tableSubOfSubOfRow1 = new Piwik_DataTable;
  115. $rows1sub = array(
  116. array( $idcol => array('label'=>'google')),
  117. array( $idcol => array('label'=>'google78')),
  118. array( $idcol => array('label'=>'googlaegge')),
  119. array( $idcol => array('label'=>'gogeoggle')),
  120. array( $idcol => array('label'=>'goaegaegaogle')),
  121. array( $idcol => array('label'=>'ask')),
  122. array( $idcol => array('label'=>'238975247578949')),
  123. );
  124. $tableSubOfSubOfRow1->addRowsFromArray( $rows1sub );
  125. // table to go in row1
  126. $tableSubOfRow1 = new Piwik_DataTable;
  127. $rows1 = array(
  128. array( $idcol => array('label'=>'google'), $idsubtable =>$tableSubOfSubOfRow1),
  129. array( $idcol => array('label'=>'ask')),
  130. array( $idcol => array('label'=>'238975247578949')),
  131. );
  132. $tableSubOfRow1->addRowsFromArray( $rows1 );
  133. // table to go in row2
  134. $tableSubOfRow2 = new Piwik_DataTable;
  135. $rows2 = array(
  136. array( $idcol => array('label'=>'google')),
  137. array( $idcol => array('label'=>'ask')),
  138. array( $idcol => array('label'=>'238975247578949')),
  139. array( $idcol => array('label'=>'agaegaesk')),
  140. array( $idcol => array('label'=>'23g 8975247578949')),
  141. );
  142. $tableSubOfRow2->addRowsFromArray( $rows2 );
  143. // main parent table
  144. $table = new Piwik_DataTable;
  145. $rows = array(
  146. array( $idcol => array('label'=>'row1')),
  147. array( $idcol => array('label'=>'row2'),
  148. $idsubtable => $tableSubOfRow1),
  149. array( $idcol => array('label'=>'row3'),
  150. $idsubtable => $tableSubOfRow2),
  151. );
  152. $table->addRowsFromArray( $rows );
  153. $this->assertEqual( $table->getRowsCount(), count($rows));
  154. $countAllRows = count($rows)+count($rows1)+count($rows2) + count($rows1sub);
  155. $this->assertEqual( $table->getRowsCountRecursive(),$countAllRows);
  156. }
  157. /**
  158. * Simple test of the DataTable_Row
  159. */
  160. function test_Row()
  161. {
  162. $columns = array('test_column'=> 145,
  163. 092582495 => new Piwik_Timer,
  164. 'super'=>array('this column has an array value, amazing'));
  165. $metadata = array('logo'=> 'piwik.png',
  166. 'super'=>array('this column has an array value, amazing'));
  167. $arrayRow = array(
  168. Piwik_DataTable_Row::COLUMNS => $columns,
  169. Piwik_DataTable_Row::METADATA => $metadata,
  170. 'fake useless key'=>38959,
  171. 43905724897=>'value');
  172. $row = new Piwik_DataTable_Row($arrayRow);
  173. $this->assertEqual($row->getColumns(), $columns);
  174. $this->assertEqual($row->getMetadata(), $metadata);
  175. $this->assertEqual($row->getIdSubDataTable(), null);
  176. }
  177. /**
  178. * Simple test of the DataTable_Row
  179. */
  180. function test_sumRow()
  181. {
  182. $columns = array('test_int'=> 145,
  183. 'test_float'=> 145.5,
  184. 'test_float3'=> 1.5,
  185. 'test_stringint'=> "145",
  186. "test" => 'string fake',
  187. 'super'=>array('this column has an array string that will be 0 when algorithm sums the value'),
  188. 'integerArrayToSum'=>array( 1 => 1, 2 => 10.0, 3 => array(1 => 2, 2 => 3)),
  189. );
  190. $metadata = array('logo'=> 'piwik.png',
  191. 'super'=>array('this column has an array value, amazing'));
  192. $arrayRow = array(
  193. Piwik_DataTable_Row::COLUMNS => $columns,
  194. Piwik_DataTable_Row::METADATA => $metadata,
  195. 'fake useless key'=>38959,
  196. 43905724897=>'value');
  197. $row1 = new Piwik_DataTable_Row($arrayRow);
  198. $columns2 = array('test_int'=> 5,
  199. 'test_float'=> 4.5,
  200. 'test_float2'=> 14.5,
  201. 'test_stringint'=> "5",
  202. 0925824 => 'toto',
  203. 'super'=>array('this column has geagaean array value, amazing'),
  204. 'integerArrayToSum'=>array( 1 => 5, 2 => 5.5, 3 => array(2 => 4)),
  205. );
  206. $finalRow = new Piwik_DataTable_Row( array(Piwik_DataTable_Row::COLUMNS => $columns2));
  207. $finalRow->sumRow($row1);
  208. $columnsWanted = array('test_int'=> 150,
  209. 'test_float'=> 150.0,
  210. 'test_float2'=> 14.5,
  211. 'test_float3'=> 1.5,
  212. 'test_stringint'=> 150, //add also strings!!
  213. 'super'=>array(0),
  214. 'test' => 0,
  215. 'integerArrayToSum' => array( 1 => 6, 2 => 15.5, 3 => array(1 => 2, 2 => 7)),
  216. 0925824 => 'toto',
  217. );
  218. $rowWanted = new Piwik_DataTable_Row( array(Piwik_DataTable_Row::COLUMNS => $columnsWanted));
  219. $this->assertTrue( Piwik_DataTable_Row::isEqual($rowWanted, $finalRow));
  220. }
  221. /**
  222. * Test serialize with an infinite recursion (a row linked to a table in the parent hierarchy)
  223. * After 100 recursion must throw an exception
  224. */
  225. function test_serializeWithInfiniteRecursion()
  226. {
  227. $table = new Piwik_DataTable;
  228. $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array( 'visits'=>245,'visitors'=>245),
  229. Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $table,));
  230. try {
  231. $table->getSerialized();
  232. $this->fail("Exception not raised.");
  233. }
  234. catch (Exception $expected) {
  235. $this->pass();
  236. return;
  237. }
  238. }
  239. /**
  240. * Test queing filters
  241. */
  242. function test_filter_Queue_SortString()
  243. {
  244. $idcol = Piwik_DataTable_Row::COLUMNS;
  245. $table = new Piwik_DataTable;
  246. $rows = array(
  247. array( $idcol => array('label'=>'google')),//0
  248. array( $idcol => array('label'=>'tsk')),//1
  249. array( $idcol => array('label'=>'Q*(%&*("$&%*(&"$*")"))')),//2
  250. );
  251. $table->addRowsFromArray( $rows );
  252. $expectedtable = new Piwik_DataTable;
  253. $rows = array(
  254. array( $idcol => array('label'=>'google')),//0
  255. array( $idcol => array('label'=>'Q*(%&*("$&%*(&"$*")"))')),//2
  256. array( $idcol => array('label'=>'tsk')),//1
  257. );
  258. $expectedtable->addRowsFromArray( $rows );
  259. $expectedtableReverse = new Piwik_DataTable;
  260. $expectedtableReverse->addRowsFromArray(array_reverse($rows));
  261. $tableCopy = clone $table;
  262. $this->assertTrue(Piwik_DataTable::isEqual($tableCopy, $table));
  263. // queue the filter and check the table didnt change
  264. $table->queueFilter("Sort", array('label', 'asc'));
  265. $this->assertTrue(Piwik_DataTable::isEqual($tableCopy, $table));
  266. // apply filter and check the table is sorted
  267. $table->applyQueuedFilters();
  268. $this->assertTrue(Piwik_DataTable::isEqual($expectedtable, $table));
  269. // apply one more filter check it hasnt changed
  270. $table->queueFilter("Sort", array('label', 'desc'));
  271. $this->assertTrue(Piwik_DataTable::isEqual($expectedtable, $table));
  272. // now apply the second sort and check it is correctly sorted
  273. $table->applyQueuedFilters();
  274. $this->assertTrue(Piwik_DataTable::isEqual($expectedtableReverse, $table));
  275. // do one more time to make sure it doesnt change
  276. $table->applyQueuedFilters();
  277. $this->assertTrue(Piwik_DataTable::isEqual($expectedtableReverse, $table));
  278. }
  279. /**
  280. * General tests that tries to test the normal behaviour of DataTable
  281. *
  282. * We create some tables, add rows, some of the rows link to sub tables
  283. *
  284. * Then we serialize everything, and we check that the unserialize give the same object back
  285. */
  286. function test_general()
  287. {
  288. /*
  289. * create some fake tables to make sure that the serialized array of the first TABLE
  290. * does not take in consideration those tables
  291. */
  292. $useless1 = new Piwik_DataTable;
  293. $useless1->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array( 13,),));
  294. /*
  295. * end fake tables
  296. */
  297. /*
  298. * MAIN TABLE
  299. */
  300. $table = new Piwik_DataTable;
  301. $subtable = new Piwik_DataTable;
  302. $idtable = $table->getId();
  303. $idsubtable = $subtable->getId();
  304. /*
  305. * create some fake tables to make sure that the serialized array of the first TABLE
  306. * does not take in consideration those tables
  307. * -> we check that the DataTable_Manager is not impacting DataTable
  308. */
  309. $useless2 = new Piwik_DataTable;
  310. $useless1->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array( 8487,),));
  311. $useless3 = new Piwik_DataTable;
  312. $useless3->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array( 8487,),));
  313. /*
  314. * end fake tables
  315. */
  316. $row = array(Piwik_DataTable_Row::COLUMNS => array( 0 => 1554, 1 => 42, 2 => 657,3 => 155744,),
  317. Piwik_DataTable_Row::METADATA => array('logo' => 'test.png'));
  318. $row = new Piwik_DataTable_Row($row);
  319. $table->addRow($row);
  320. $table->addRowFromArray(array( Piwik_DataTable_Row::COLUMNS => array( 0 => 1554,1 => 42,),
  321. Piwik_DataTable_Row::METADATA => array('url' => 'piwik.org')));
  322. $table->addRowFromArray(array( Piwik_DataTable_Row::COLUMNS => array( 0 => 787877888787,),
  323. Piwik_DataTable_Row::METADATA => array('url' => 'OUPLA ADDED'),
  324. Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subtable));
  325. /*
  326. * SUB TABLE
  327. */
  328. $row = array( Piwik_DataTable_Row::COLUMNS => array( 0 => 1554,),
  329. Piwik_DataTable_Row::METADATA => array('searchengine' => 'google'),
  330. );
  331. $subtable->addRowFromArray($row);
  332. $row = array( Piwik_DataTable_Row::COLUMNS => array( 0 => 84894,),
  333. Piwik_DataTable_Row::METADATA => array('searchengine' => 'yahoo'),
  334. );
  335. $subtable->addRowFromArray($row);
  336. $row = array( Piwik_DataTable_Row::COLUMNS => array( 0 => 4898978989,),
  337. Piwik_DataTable_Row::METADATA => array('searchengine' => 'ask'),
  338. );
  339. $subtable->addRowFromArray($row);
  340. /*
  341. * SUB SUB TABLE
  342. */
  343. $subsubtable = new Piwik_DataTable;
  344. $subsubtable->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array( 245),
  345. Piwik_DataTable_Row::METADATA => array('yes' => 'subsubmetadata1'),)
  346. );
  347. $subsubtable->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array( 13,),
  348. Piwik_DataTable_Row::METADATA => array('yes' => 'subsubmetadata2'),)
  349. );
  350. $row = array( Piwik_DataTable_Row::COLUMNS => array( 0 => 666666666666666,),
  351. Piwik_DataTable_Row::METADATA => array('url' => 'NEW ROW ADDED'),
  352. Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subsubtable);
  353. $subtable->addRowFromArray($row);
  354. $idsubsubtable = $subsubtable->getId();
  355. $serialized = ($table->getSerialized());
  356. $this->assertEqual(array_keys($serialized), array($idsubsubtable,$idsubtable,0));
  357. $tableAfter = new Piwik_DataTable;
  358. $tableAfter->addRowsFromSerializedArray($serialized[0]);
  359. $this->assertEqual($table->getRows(),$tableAfter->getRows());
  360. $subsubtableAfter = new Piwik_DataTable;
  361. $subsubtableAfter->addRowsFromSerializedArray($serialized[$idsubsubtable]);
  362. $this->assertEqual($subsubtable->getRows(),$subsubtableAfter->getRows());
  363. $this->assertEqual($table, Piwik_DataTable_Manager::getInstance()->getTable($idtable));
  364. $this->assertEqual($subsubtable, Piwik_DataTable_Manager::getInstance()->getTable($idsubsubtable));
  365. }
  366. /**
  367. * for all datatable->addDatatable tests we check that
  368. * - row uniqueness is based on the label + presence of the SUBTABLE id
  369. * => the label is the criteria used to match 2 rows in 2 datatable
  370. * - no metadata are lost in the first datatable rows that have been changed
  371. * - when a subtable
  372. */
  373. /**
  374. * add an empty datatable to a normal datatable
  375. */
  376. public function test_addSimpleNoRowTable2()
  377. {
  378. $table = $this->getDataTable1ForTest();
  379. $tableEmpty = new Piwik_DataTable;
  380. $tableAfter = clone $table;
  381. $tableAfter->addDataTable($tableEmpty);
  382. $this->assertTrue( Piwik_DataTable::isEqual($table, $tableAfter) );
  383. }
  384. /**
  385. * add a normal datatable to an empty datatable
  386. */
  387. public function test_addSimpleNoRowTable1()
  388. {
  389. $table = $this->getDataTable1ForTest();
  390. $tableEmpty = new Piwik_DataTable;
  391. $tableAfter = clone $tableEmpty;
  392. $tableEmpty->addDataTable($table);
  393. $this->assertTrue( Piwik_DataTable::isEqual($tableEmpty, $table) );
  394. }
  395. /**
  396. * add to the datatable another datatable// they don't have any row in common
  397. */
  398. public function test_addSimpleNoCommonRow()
  399. {
  400. $table1 = $this->getDataTable1ForTest();
  401. $table2 = $this->getDataTable2ForTest();
  402. $table1->addDataTable($table2);
  403. $rowsExpected = array_merge($this->getRowsDataTable1ForTest(),$this->getRowsDataTable2ForTest());
  404. $tableExpected = new Piwik_DataTable;
  405. $tableExpected->addRowsFromArray( $rowsExpected );
  406. $this->assertTrue( Piwik_DataTable::isEqual($table1, $tableExpected) );
  407. }
  408. /**
  409. * add 2 datatable with some common rows
  410. */
  411. public function test_addSimpleSomeCommonRow()
  412. {
  413. $idcol = Piwik_DataTable_Row::COLUMNS;
  414. $rows = array(
  415. array( $idcol => array('label'=>'google', 'visits' => 1)),
  416. array( $idcol => array('label'=>'ask', 'visits' => 2)),
  417. array( $idcol => array('label'=>'123', 'visits' => 2)),
  418. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
  419. );
  420. $table = new Piwik_DataTable;
  421. $table->addRowsFromArray( $rows );
  422. $rows2 = array(
  423. array( $idcol => array('label'=>'test', 'visits' => 1)),
  424. array( $idcol => array('label'=>'ask', 'visits' => 111)),
  425. array( $idcol => array('label'=>' google ', 'visits' => 5)),
  426. array( $idcol => array('label'=>'123', 'visits' => 2)),
  427. );
  428. $table2 = new Piwik_DataTable;
  429. $table2->addRowsFromArray( $rows2 );
  430. $table->addDataTable($table2);
  431. $rowsExpected = array(
  432. array( $idcol => array('label'=>'google', 'visits' => 1)),
  433. array( $idcol => array('label'=>'ask', 'visits' => 113)),
  434. array( $idcol => array('label'=>'123', 'visits' => 4)),
  435. array( $idcol => array('label'=>'test', 'visits' => 1)),
  436. array( $idcol => array('label'=>' google ', 'visits' => 5)),
  437. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
  438. );
  439. $tableExpected = new Piwik_DataTable;
  440. $tableExpected->addRowsFromArray( $rowsExpected );
  441. $this->assertTrue( Piwik_DataTable::isEqual($table, $tableExpected) );
  442. }
  443. /**
  444. * add 2 datatable with only common rows
  445. */
  446. public function test_addSimpleAllCommonRow()
  447. {
  448. $idcol = Piwik_DataTable_Row::COLUMNS;
  449. $rows = array(
  450. array( $idcol => array('label'=>'google', 'visits' => 1)),
  451. array( $idcol => array('label'=>'ask', 'visits' => 2)),
  452. array( $idcol => array('label'=>'123', 'visits' => 2)),
  453. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
  454. );
  455. $table = new Piwik_DataTable;
  456. $table->addRowsFromArray( $rows );
  457. $rows2 = array(
  458. array( $idcol => array('label'=>'google', 'visits' => -1)),
  459. array( $idcol => array('label'=>'ask', 'visits' => 0)),
  460. array( $idcol => array('label'=>'123', 'visits' => 1.5)),
  461. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 8))
  462. );
  463. $table2 = new Piwik_DataTable;
  464. $table2->addRowsFromArray( $rows2 );
  465. $table->addDataTable($table2);
  466. $rowsExpected = array(
  467. array( $idcol => array('label'=>'google', 'visits' => 0)),
  468. array( $idcol => array('label'=>'ask', 'visits' => 2)),
  469. array( $idcol => array('label'=>'123', 'visits' => 3.5)),
  470. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 15))
  471. );
  472. $tableExpected = new Piwik_DataTable;
  473. $tableExpected->addRowsFromArray( $rowsExpected );
  474. $this->assertTrue( Piwik_DataTable::isEqual($table, $tableExpected) );
  475. }
  476. /**
  477. * test add 2 different tables to the same table
  478. */
  479. public function test_addDataTable2times()
  480. {
  481. $idcol = Piwik_DataTable_Row::COLUMNS;
  482. $rows = array(
  483. array( $idcol => array('label'=>'google', 'visits' => 1)),
  484. array( $idcol => array('label'=>'ask', 'visits' => 0)),
  485. array( $idcol => array('label'=>'123', 'visits' => 2)),
  486. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 1))
  487. );
  488. $table = new Piwik_DataTable;
  489. $table->addRowsFromArray( $rows );
  490. $rows2 = array(
  491. array( $idcol => array('label'=>'google2', 'visits' => -1)),
  492. array( $idcol => array('label'=>'ask', 'visits' => 100)),
  493. array( $idcol => array('label'=>'123456', 'visits' => 1.5)),
  494. );
  495. $table2 = new Piwik_DataTable;
  496. $table2->addRowsFromArray( $rows2 );
  497. $rows3 = array(
  498. array( $idcol => array('label'=>'google2', 'visits' => -1)),
  499. array( $idcol => array('label'=>'ask', 'visits' => -10)),
  500. array( $idcol => array('label'=>'123ab', 'visits' => 1.5)),
  501. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 3))
  502. );
  503. $table3 = new Piwik_DataTable;
  504. $table3->addRowsFromArray( $rows3 );
  505. // add the 2 tables
  506. $table->addDataTable($table2);
  507. $table->addDataTable($table3);
  508. $rowsExpected = array(
  509. array( $idcol => array('label'=>'google', 'visits' => 1)),
  510. array( $idcol => array('label'=>'ask', 'visits' => 90)),
  511. array( $idcol => array('label'=>'123', 'visits' => 2)),
  512. array( $idcol => array('label'=>'google2', 'visits' => -2)),
  513. array( $idcol => array('label'=>'123456', 'visits' => 1.5)),
  514. array( $idcol => array('label'=>'123ab', 'visits' => 1.5)),
  515. Piwik_DataTable::ID_SUMMARY_ROW => array( $idcol => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))
  516. );
  517. $tableExpected = new Piwik_DataTable;
  518. $tableExpected->addRowsFromArray( $rowsExpected );
  519. $this->assertTrue( Piwik_DataTable::isEqual($table, $tableExpected) );
  520. }
  521. protected function getDataTable1ForTest()
  522. {
  523. $rows = $this->getRowsDataTable1ForTest();
  524. $table = new Piwik_DataTable;
  525. $table->addRowsFromArray( $rows );
  526. return $table;
  527. }
  528. protected function getDataTable2ForTest()
  529. {
  530. $rows = $this->getRowsDataTable2ForTest();
  531. $table = new Piwik_DataTable;
  532. $table->addRowsFromArray( $rows );
  533. return $table;
  534. }
  535. protected function getRowsDataTable1ForTest()
  536. {
  537. $rows = array(
  538. array( Piwik_DataTable_Row::COLUMNS => array('label'=>'google', 'visits' => 1)),
  539. array( Piwik_DataTable_Row::COLUMNS => array('label'=>'ask', 'visits' => 2)),
  540. array( Piwik_DataTable_Row::COLUMNS => array('label'=>'123', 'visits' => 2)),
  541. Piwik_DataTable::ID_SUMMARY_ROW => array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))
  542. );
  543. return $rows;
  544. }
  545. protected function getRowsDataTable2ForTest()
  546. {
  547. $rows = array(
  548. array( Piwik_DataTable_Row::COLUMNS => array('label'=>'test', 'visits' => 1)),
  549. array( Piwik_DataTable_Row::COLUMNS => array('label'=>' google ', 'visits' => 3)),
  550. array( Piwik_DataTable_Row::COLUMNS => array('label'=>'123a', 'visits' => 2)),
  551. );
  552. return $rows;
  553. }
  554. }