/** * Test to exclude low population filter */ function test_filter_Lowpop1() { $idcol = Piwik_DataTable_Row::COLUMNS; $table = new Piwik_DataTable(); $rows = array(array($idcol => array('label' => 'google', 'nb_visits' => 897)), array($idcol => array('label' => 'ask', 'nb_visits' => -152)), array($idcol => array('label' => 'piwik', 'nb_visits' => 1.5)), array($idcol => array('label' => 'piwik2', 'nb_visits' => 1.4)), array($idcol => array('label' => 'yahoo', 'nb_visits' => 154)), array($idcol => array('label' => 'amazon', 'nb_visits' => 30)), array($idcol => array('label' => '238949', 'nb_visits' => 0)), array($idcol => array('label' => 'Q*(%&*', 'nb_visits' => 1)), array($idcol => array('label' => 'Q*(%&*2', 'nb_visits' => -1.5))); $table->addRowsFromArray($rows); $expectedtable = new Piwik_DataTable(); $rows = array(array($idcol => array('label' => 'google', 'nb_visits' => 897)), array($idcol => array('label' => 'piwik', 'nb_visits' => 1.5)), array($idcol => array('label' => 'piwik2', 'nb_visits' => 1.4)), array($idcol => array('label' => 'yahoo', 'nb_visits' => 154)), array($idcol => array('label' => 'amazon', 'nb_visits' => 30))); $expectedtable->addRowsFromArray($rows); $filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'nb_visits', 1.4); $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtable)); }
/** * Test to sort by visit */ function test_filter_SortNumeric() { $idcol = Piwik_DataTable_Row::COLUMNS; $table = new Piwik_DataTable(); $rows = array(array($idcol => array('label' => 'google', 'nb_visits' => 897)), array($idcol => array('label' => 'ask', 'nb_visits' => -152)), array($idcol => array('label' => 'piwik', 'nb_visits' => 1.5)), array($idcol => array('label' => 'yahoo', 'nb_visits' => 154)), array($idcol => array('label' => 'amazon', 'nb_visits' => 30)), array($idcol => array('label' => '238949', 'nb_visits' => 0)), array($idcol => array('label' => 'Q*(%&*', 'nb_visits' => 1))); $table->addRowsFromArray($rows); $expectedtable = new Piwik_DataTable(); $rows = array(array($idcol => array('label' => 'ask', 'nb_visits' => -152)), array($idcol => array('label' => '238949', 'nb_visits' => 0)), array($idcol => array('label' => 'Q*(%&*', 'nb_visits' => 1)), array($idcol => array('label' => 'piwik', 'nb_visits' => 1.5)), array($idcol => array('label' => 'amazon', 'nb_visits' => 30)), array($idcol => array('label' => 'yahoo', 'nb_visits' => 154)), array($idcol => array('label' => 'google', 'nb_visits' => 897))); $expectedtable->addRowsFromArray($rows); $expectedtableReverse = new Piwik_DataTable(); $expectedtableReverse->addRowsFromArray(array_reverse($rows)); $filter = new Piwik_DataTable_Filter_Sort($table, 'nb_visits', 'asc'); $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtable)); $filter = new Piwik_DataTable_Filter_Sort($table, 'nb_visits', 'desc'); $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtableReverse)); }
public function test_addOneTableWithSummaryRow() { // row0, row1, row2, rowSummary1 $table1 = $this->getDataTableCount5(); $filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3); // row0, row1, row2, row3, row4 $table2 = $this->getDataTableCount5(); // we expect row0+row0, row1+row1, row2+row2, row3, row4, rowSummary1 $expectedTable = new Piwik_DataTable(); $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'amazon', 'nb' => 20000)))); $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'nb' => 2000)))); $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'piwik', 'nb' => 200)))); $expectedTable->addRow($this->getRow3()); $expectedTable->addRow($this->getRow4()); $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 11)))); $table1->addDataTable($table2); $this->assertTrue(Piwik_DataTable::isEqual($expectedTable, $table1)); }
/** * test add 2 different tables to the same table * * @group Core * @group DataTable */ public function testAddDataTable2times() { $idcol = Piwik_DataTable_Row::COLUMNS; $rows = array(array($idcol => array('label' => 'google', 'visits' => 1)), array($idcol => array('label' => 'ask', 'visits' => 0)), array($idcol => array('label' => '123', 'visits' => 2)), Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 1))); $table = new Piwik_DataTable(); $table->addRowsFromArray($rows); $rows2 = array(array($idcol => array('label' => 'google2', 'visits' => -1)), array($idcol => array('label' => 'ask', 'visits' => 100)), array($idcol => array('label' => '123456', 'visits' => 1.5))); $table2 = new Piwik_DataTable(); $table2->addRowsFromArray($rows2); $rows3 = array(array($idcol => array('label' => 'google2', 'visits' => -1)), array($idcol => array('label' => 'ask', 'visits' => -10)), array($idcol => array('label' => '123ab', 'visits' => 1.5)), Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 3))); $table3 = new Piwik_DataTable(); $table3->addRowsFromArray($rows3); // add the 2 tables $table->addDataTable($table2); $table->addDataTable($table3); $rowsExpected = array(array($idcol => array('label' => 'google', 'visits' => 1)), array($idcol => array('label' => 'ask', 'visits' => 90)), array($idcol => array('label' => '123', 'visits' => 2)), array($idcol => array('label' => 'google2', 'visits' => -2)), array($idcol => array('label' => '123456', 'visits' => 1.5)), array($idcol => array('label' => '123ab', 'visits' => 1.5)), Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))); $tableExpected = new Piwik_DataTable(); $tableExpected->addRowsFromArray($rowsExpected); $this->assertTrue(Piwik_DataTable::isEqual($table, $tableExpected)); }
/** * Helper function to test if two rows are equal. * * Two rows are equal * - if they have exactly the same columns / metadata * - if they have a subDataTable associated, then we check that both of them are the same. * * @param Piwik_DataTable_Row row1 to compare * @param Piwik_DataTable_Row row2 to compare * * @return bool */ public static function isEqual(Piwik_DataTable_Row $row1, Piwik_DataTable_Row $row2) { //same columns $cols1 = $row1->getColumns(); $cols2 = $row2->getColumns(); $diff1 = array_udiff($cols1, $cols2, array(__CLASS__, 'compareElements')); $diff2 = array_udiff($cols2, $cols1, array(__CLASS__, 'compareElements')); if ($diff1 != $diff2) { return false; } $dets1 = $row1->getMetadata(); $dets2 = $row2->getMetadata(); ksort($dets1); ksort($dets2); if ($dets1 != $dets2) { return false; } // either both are null // or both have a value if (!(is_null($row1->getIdSubDataTable()) && is_null($row2->getIdSubDataTable()))) { $subtable1 = Piwik_DataTable_Manager::getInstance()->getTable($row1->getIdSubDataTable()); $subtable2 = Piwik_DataTable_Manager::getInstance()->getTable($row2->getIdSubDataTable()); if (!Piwik_DataTable::isEqual($subtable1, $subtable2)) { return false; } } return true; }
/** * Helper function to test if two rows are equal. * * Two rows are equal * - if they have exactly the same columns / details * - if they have a subDataTable associated, then we check that both of them are the same. * * @param Piwik_DataTable_Row row1 to compare * @param Piwik_DataTable_Row row2 to compare * * @return bool */ public static function isEqual(Piwik_DataTable_Row $row1, Piwik_DataTable_Row $row2) { //same columns $cols1 = $row1->getColumns(); $cols2 = $row2->getColumns(); uksort($cols1, 'strnatcasecmp'); uksort($cols2, 'strnatcasecmp'); if ($cols1 != $cols2) { return false; } $dets1 = $row1->getDetails(); $dets2 = $row2->getDetails(); ksort($dets1); ksort($dets2); // same details if ($dets1 != $dets2) { return false; } // either both are null // or both have a value if (!(is_null($row1->getIdSubDataTable()) && is_null($row2->getIdSubDataTable()))) { $subtable1 = Piwik_DataTable_Manager::getInstance()->getTable($row1->getIdSubDataTable()); $subtable2 = Piwik_DataTable_Manager::getInstance()->getTable($row2->getIdSubDataTable()); if (!Piwik_DataTable::isEqual($subtable1, $subtable2)) { return false; } } return true; }
function test_generateDataTable_1row4level() { $table = new Piwik_DataTable(); $rowpagecat3 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => '123123', 'visits' => 3, 'actions' => 5))); $rowcat3 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => '789.654', 'visits' => 3, 'actions' => 5))); $rowcat2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'cat2', 'visits' => 3, 'actions' => 5))); $rowcat1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => '&*()', 'visits' => 3, 'actions' => 5))); $subtablerowpagecat3 = new Piwik_DataTable(); $subtablerowpagecat3->addRow($rowpagecat3); $rowcat3->addSubtable($subtablerowpagecat3); $subtablecat2 = new Piwik_DataTable(); $subtablecat2->addRow($rowcat3); $rowcat2->addSubtable($subtablecat2); $subtablecat1 = new Piwik_DataTable(); $subtablecat1->addRow($rowcat2); $rowcat1->addSubtable($subtablecat1); //-- add $table->addRow($rowcat1); // WHAT WE TEST $input = array('&*()' => array('cat2' => array('789.654' => array('123123' => $rowpagecat3)))); $tableGenerated = Piwik_ArchiveProcessing_Day::generateDataTable($input); $r1 = new Piwik_DataTable_Renderer_Console(); $r1->setTable($table); $r2 = new Piwik_DataTable_Renderer_Console(); $r2->setTable($tableGenerated); $this->assertTrue(Piwik_DataTable::isEqual($table, $tableGenerated)); }