[Tͪ#n$;<:a4sX[ 6F1f=Vmg*]YGO^"w/şѲrބ!2<-i L.\s·P>2M{Z_ۍo*5Np8ZU8Z/筟 u?*w-hLU*kQ1$vhIzTcpF#*ݟ@+O@}z0%/!8FOU*PBk0k۳dCcؚƣ	OFvh֢Ty;}4.|)W{d+vOP\B+(L{V-jo5Q5Y^ohe2"<ŖEl<jN˶Y{JΧCo5IjJ1<0濶0z}:/XqqKYvtG}6Cς߭k<LZOE/`_ͬtS;Fp Qw^ED-WLm*|N\ś*NR۠@?t%_J fBG|h➊MR(Ej';X;4=엶/s@%fкj.K"w ,Q\fJR)6X.,H"gkDYi`Nx`#<5(XCHI+K3sW7{{mD<hf_A9?Pڵ.	4FȫAG$)WE0Lv-^{$)WEMBN&	i=ʿgQW74Yv!ygJEn N+P̸rVEfIw߳.!Y[y݅]+o6zJ٫궡Ju9ѲC8qBQ?zK_^+ZEP|͕[! r	1(	^hB1=W#Zvzu|oeKӥ'0K7^MoN[:@Pk'0bC	=I:'"Ba~awLM=f`	ra<xym3LZiHTv\ɏ%꺁2x$AĦe"qC]65oGC9nA͐M~|_,4'l_H#ǥ39<`^^} *joC%][N{43#gbgӪٖNt!RGIDi}<3cKb?
 5$9v.O;#~JҀ202}nD1X!PZh̸aV(QLmzme3į/Y@A6K{h^@ ϬZ8\(Èbg8'!I_A(RnY=Qw}cGvj-۫D<7EE%DД3ATM\E:4f5`St!ڻM3Q(`N(|(YVeN
ԉ.x%yXJ{C)V}b{IM0MKl/DQ*c'MUB~Bu<n*'V>Y>^naq0SxL_<r@,AVkp'&ӈ:L^2@8Iqz*P GHe:1-IL2UTdpɡR!</|:u0̬x%
2LA^?o9k⛢@8Iqz*P GHe:1-IL2UT}m(aEM!ހj-WJJG??y  b-r-ė{)ZPm Ϧ]{E&&+ÀW
:2s&(bsoGq(xM2q=*i>hO5U^L-t,D9D88ˌJ叠ub{Cm%2LgTJ1>oQk]YRMCFቕCD]BtCO?#75Ih+zꅈŲTN 1:D=gGhȗ
ƹrl,cAL0#NiKC<LU'Q$̅GFd]q>4S$V6 Iqz@%w{gFs:tWēq$F)w]p3okKD @]t<AX) LmyK&&oԚMaZ;ex@0}[0QNoXR;KIJމV|>vK$UY==G[qNda  7OJADQoBP+''/Nb=ND>T@U˄rlUx:E.*%2B7#L?ӂ^4\cui߲ZRhUHˢUd79mA nNo3=	8敨.sǯ",am6MLHm3֋aY x2QUUzi8#]Wdn8Fwm+O@\&@N{PG,1m4>q ,-:[-;#WD48 %)Ț^Wgiir"#ɴX'wힴjfU;l{& LP]B:KjJ=`1oQߑ% `"Ӟp}Zt\P!2ܗ\WXGw#mvPS4K5ڡybO2͋CR}9ǋnS2HAXRvuE9	2 RTp@._Ɖ_goŖ>hO5U^L-t,D9D88ˌJ叠ub{CmfN}byR̋<GxiF_kk3˺ :LKqIzFSP_ߑe7D3qݖ9+Q"UT^6b}1o9d([z~nCV]
"WCL%TA񸇶TM<qD fhߘ{mO#e:搷l0}n"iQkz^gKbJBwhaWcX98f= E8=r`Xz/|J5~	lkE QDwze8&Sh8Wb}!:0Oe{RZ;錺NS 2C dQh H|JD)Ț^Wgii_iN$vHXik%Bܻ%e@沲iEG>-gNہuyn]E[)@ӗ^-좒~c	bbōA	`]M`[Q
Q~CuD(Q 2D裦Mx1-P/D

wP-&s8gJiB#iZukIl%WTPl 9nDjt	mZK38ˋ~|gV!$D`6jI埜EZЊA/,J:Vbo5^2e"Hէ% a%݀}/d]p4	jѴfC8~?7q,LѰ<S:4:-I7oItxFs%Z'mWw.`FƳY=6s#g9Kx=P󮤲(o;8>#h m}:;#} C7TdLHB/Y/pSh0h/oTV㨞'true"'
        . ' checked="checked" /> DELETE<br/>';
        $this->assertContains(
            $item,
            $html
        );

        $this->assertContains(
            __('Create version'),
            $html
        );
    }

    /**
     * Tests for PMA_getHtmlForActivateDeactivateTracking() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForActivateDeactivateTracking()
    {
        $url_query = "url_query";
        $last_version = "10";
        $html = PMA_getHtmlForActivateDeactivateTracking(
            'activate', $url_query, $last_version
        );

        $this->assertContains(
            $url_query,
            $html
        );

        $item = sprintf(
            __('Activate tracking for %s'),
            htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
        );
        $this->assertContains(
            $item,
            $html
        );

        $this->assertContains(
            $last_version,
            $html
        );

        $this->assertContains(
            __('Activate now'),
            $html
        );

        $html = PMA_getHtmlForActivateDeactivateTracking(
            'deactivate', $url_query, $last_version
        );

        $this->assertContains(
            $url_query,
            $html
        );

        $item = sprintf(
            __('Deactivate tracking for %s'),
            htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
        );
        $this->assertContains(
            $item,
            $html
        );

        $this->assertContains(
            $last_version,
            $html
        );

        $this->assertContains(
            __('Deactivate now'),
            $html
        );
    }

    /**
     * Tests for PMA_getTableLastVersionNumber() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetTableLastVersionNumber()
    {
        $sql_result = "sql_result";
        $last_version = PMA_getTableLastVersionNumber($sql_result);

        $this->assertEquals(
            "10",
            $last_version
        );
    }

    /**
     * Tests for PMA_getSQLResultForSelectableTables() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetSQLResultForSelectableTables()
    {
        $ret = PMA_getSQLResultForSelectableTables();

        $this->assertEquals(
            true,
            $ret
        );
    }

    /**
     * Tests for PMA_getHtmlForColumns() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForColumns()
    {
        $columns = array(
            array(
                'Field'=>'Field1',
                'Type'=>'Type1',
                'Collation'=>'Collation1',
                "Null"=>'YES',
                'Extra'=>'Extra1',
                'Key'=>'PRI',
                'Comment'=>'Comment1'
            ),
            array(
                'Field'=>'Field2',
                'Type'=>'Type2',
                'Collation'=>'Collation2',
                "Null"=>'No',
                'Extra'=>'Extra2',
                'Key'=>'Key2',
                'Comment'=>'Comment2'
            ),
        );

        $html = PMA_getHtmlForColumns($columns);

        $this->assertContains(
            __('Column'),
            $html
        );
        $this->assertContains(
            __('Type'),
            $html
        );
        $this->assertContains(
            __('Collation'),
            $html
        );
        $this->assertContains(
            __('Default'),
            $html
        );
        $this->assertContains(
            __('Comment'),
            $html
        );

        //column1
        $item1= $columns[0];
        $this->assertContains(
            htmlspecialchars($item1['Field']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($item1['Type']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($item1['Collation']),
            $html
        );
        $this->assertContains(
            '<i>NULL</i>',
            $html
        );
        $this->assertContains(
            htmlspecialchars($item1['Comment']),
            $html
        );

        //column2
        $item1= $columns[1];
        $this->assertContains(
            htmlspecialchars($item1['Field']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($item1['Type']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($item1['Collation']),
            $html
        );
        $this->assertContains(
            _pgettext('None for default', 'None'),
            $html
        );
        $this->assertContains(
            htmlspecialchars($item1['Comment']),
            $html
        );
    }

    /**
     * Tests for PMA_getListOfVersionsOfTable() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetListOfVersionsOfTable()
    {
        $ret = PMA_getListOfVersionsOfTable();

        $this->assertEquals(
            true,
            $ret
        );
    }

    /**
     * Tests for PMA_getHtmlForTableVersionDetails() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForTableVersionDetails()
    {
        $sql_result = true;
        $last_version = "10";
        $url_params = array();
        $url_query = "select * from PMA";
        $pmaThemeImage = "themePath/img";
        $text_dir = "ltr";

        $dbi_old = $GLOBALS['dbi'];
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $fetchArray = array(
                'tracking_active' => 1,
                'version' => "10",
                'db_name' => 'db_name',
                'table_name' => 'table_name',
                'date_created' => 'date_created',
                'date_updated' => 'date_updated'
        );
        $dbi->expects($this->at(0))
            ->method('fetchArray')
            ->will($this->returnValue($fetchArray));
        $dbi->expects($this->at(1))
            ->method('fetchArray')
            ->will($this->returnValue($fetchArray));
        $dbi->expects($this->at(2))
            ->method('fetchArray')
            ->will($this->returnValue(false));

        $GLOBALS['dbi'] = $dbi;

        $ret = PMA_getHtmlForTableVersionDetails(
            $sql_result, $last_version, $url_params, $url_query,
            $pmaThemeImage, $text_dir
        );

        $this->assertContains(
            __('Version'),
            $ret
        );
        $this->assertContains(
            __('Created'),
            $ret
        );
        $this->assertContains(
            __('Updated'),
            $ret
        );
        $this->assertContains(
            __('Status'),
            $ret
        );
        $this->assertContains(
            __('Action'),
            $ret
        );
        $this->assertContains(
            __('Show'),
            $ret
        );
        $this->assertContains(
            $fetchArray['version'],
            $ret
        );
        $this->assertContains(
            $fetchArray['date_created'],
            $ret
        );
        $this->assertContains(
            $fetchArray['date_updated'],
            $ret
        );
        $this->assertContains(
            __('Tracking report'),
            $ret
        );
        $this->assertContains(
            __('Structure snapshot'),
            $ret
        );
        $html = sprintf(
            __('Deactivate tracking for %s'),
            htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
        );
        $this->assertContains(
            $html,
            $ret
        );

        //restore DBI
        $GLOBALS['dbi'] = $dbi_old;
    }

    /**
     * Tests for PMA_getHtmlForSelectableTables() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForSelectableTables()
    {
        $selectable_tables_sql_result = true;
        $url_query = "select * from PMA";

        $dbi_old = $GLOBALS['dbi'];
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $fetchArray = array(
                'tracking_active' => 1,
                'version' => "10",
                'db_name' => 'db_name',
                'table_name' => 'table_name',
                'date_created' => 'date_created',
                'date_updated' => 'date_updated'
        );
        $dbi->expects($this->at(0))
            ->method('fetchArray')
            ->will($this->returnValue($fetchArray));
        $dbi->expects($this->at(1))
            ->method('fetchArray')
            ->will($this->returnValue($fetchArray));
        $dbi->expects($this->at(2))
            ->method('fetchArray')
            ->will($this->returnValue(false));

        $GLOBALS['dbi'] = $dbi;

        $ret = PMA_getHtmlForSelectableTables(
            $selectable_tables_sql_result, $url_query
        );

        $this->assertContains(
            htmlspecialchars($fetchArray['table_name']),
            $ret
        );
        $this->assertContains(
            htmlspecialchars($fetchArray['db_name']),
            $ret
        );

        //restore DBI
        $GLOBALS['dbi'] = $dbi_old;
    }

    /**
     * Tests for PMA_getHtmlForTrackingReport() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForTrackingReportr()
    {
        $_REQUEST['version'] = 10;
        $_REQUEST['date_from'] = "date_from";
        $_REQUEST['date_to'] = "date_to";
        $_REQUEST['users'] = "users";
        $_REQUEST['logtype'] = 'logtype';
        $url_query = "select * from PMA";
        $data = array(
            'tracking'=>'tracking',
            'ddlog' => array('ddlog'),
            'dmlog' => array('dmlog')
        );
        $url_params = array();
        $selection_schema = array();
        $selection_data = array();
        $selection_both = array();
        $filter_ts_to = array();
        $filter_ts_from = array();
        $filter_users = array();

        $html = PMA_getHtmlForTrackingReport(
            $url_query, $data, $url_params,
            $selection_schema, $selection_data,
            $selection_both, $filter_ts_to,
            $filter_ts_from, $filter_users
        );

        $this->assertContains(
            __('Tracking report'),
            $html
        );

        $this->assertContains(
            $url_query,
            $html
        );

        $this->assertContains(
            __('Tracking statements'),
            $html
        );

        $this->assertContains(
            $data['tracking'],
            $html
        );

        $version = '<form method="post" action="tbl_tracking.php'
            . PMA_URL_getCommon(
                $url_params + array(
                    'report' => 'true', 'version' => $_REQUEST['version']
                )
            );

        $this->assertContains(
            $version,
            $html
        );

        $this->assertContains(
            $version,
            $html
        );

        $this->assertContains(
            __('Structure only'),
            $html
        );

        $this->assertContains(
            __('Data only'),
            $html
        );

        $this->assertContains(
            __('Structure and data'),
            $html
        );

        $this->assertContains(
            htmlspecialchars($_REQUEST['date_from']),
            $html
        );

        $this->assertContains(
            htmlspecialchars($_REQUEST['date_to']),
            $html
        );

        $this->assertContains(
            htmlspecialchars($_REQUEST['users']),
            $html
        );
    }

    /**
     * Tests for PMA_getHtmlForDataManipulationStatements() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForDataManipulationStatements()
    {
        $_REQUEST['version'] = "10";
        $data = array(
            'tracking'=>'tracking',
            'dmlog' => array(
                array(
                    'statement' => 'statement',
                    'date' => 'date',
                    'username' => 'username',
                )
            ),
            'ddlog' => array('ddlog')
        );
        $url_params = array();
        $ddlog_count = 10;
        $drop_image_or_text = "text";
        $filter_ts_to = 9999999999;
        $filter_ts_from = 0;
        $filter_users = array("*");

        $html = PMA_getHtmlForDataManipulationStatements(
            $data, $filter_users,
            $filter_ts_from, $filter_ts_to, $url_params,
            $ddlog_count, $drop_image_or_text
        );

        $this->assertContains(
            __('Date'),
            $html
        );

        $this->assertContains(
            __('Username'),
            $html
        );

        $this->assertContains(
            __('Data manipulation statement'),
            $html
        );

        $this->assertContains(
            $data['dmlog'][0]['date'],
            $html
        );

        $this->assertContains(
            $data['dmlog'][0]['username'],
            $html
        );
    }

    /**
     * Tests for PMA_getHtmlForDataDefinitionStatements() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForDataDefinitionStatements()
    {
        $_REQUEST['version'] = "10";

        $data = array(
            'tracking'=>'tracking',
            'ddlog' => array(
                array(
                    'statement' => 'statement',
                    'date' => 'date',
                    'username' => 'username',
                )
            ),
            'dmlog' => array('dmlog')
        );
        $filter_users = array("*");
        $filter_ts_to = 9999999999;
        $filter_ts_from = 0;
        $url_params = array();
        $drop_image_or_text = "text";

        list($html, $count) = PMA_getHtmlForDataDefinitionStatements(
            $data, $filter_users,
            $filter_ts_from, $filter_ts_to, $url_params, $drop_image_or_text
        );

        $this->assertContains(
            __('Date'),
            $html
        );

        $this->assertContains(
            __('Username'),
            $html
        );

        $this->assertContains(
            __('Data definition statement'),
            $html
        );

        $this->assertContains(
            __('Action'),
            $html
        );

        //PMA_getHtmlForDataDefinitionStatement
        $this->assertContains(
            htmlspecialchars($data['ddlog'][0]['username']),
            $html
        );

        $this->assertEquals(
            2,
            $count
        );

    }

    /**
     * Tests for PMA_getHtmlForIndexes() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetHtmlForIndexes()
    {
        $indexs = array(
            array(
                'Non_unique' => 0,
                'Packed' => '',
                'Key_name' => 'Key_name1',
                'Index_type' => 'BTREE',
                'Column_name' => 'Column_name',
                'Cardinality' => 'Cardinality',
                'Collation' => 'Collation',
                'Null' => 'Null',
                'Comment' => 'Comment',
            ),
        );

        $html = PMA_getHtmlForIndexes($indexs);

        $this->assertContains(
            __('Indexes'),
            $html
        );
        $this->assertContains(
            __('Keyname'),
            $html
        );
        $this->assertContains(
            __('Type'),
            $html
        );
        $this->assertContains(
            __('Unique'),
            $html
        );
        $this->assertContains(
            __('Packed'),
            $html
        );
        $this->assertContains(
            __('Column'),
            $html
        );
        $this->assertContains(
            __('Cardinality'),
            $html
        );
        // items
        $this->assertContains(
            htmlspecialchars($indexs[0]['Key_name']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($indexs[0]['Index_type']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($indexs[0]['Column_name']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($indexs[0]['Cardinality']),
            $html
        );
        $this->assertContains(
            htmlspecialchars($indexs[0]['Collation']),
            $html
        );
    }

    /**
     * Tests for PMA_getTrackingSet() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetTrackingSet()
    {
        $_REQUEST['alter_table'] = false;
        $_REQUEST['rename_table'] = true;
        $_REQUEST['create_table'] = true;
        $_REQUEST['drop_table'] = true;
        $_REQUEST['create_index'] = false;
        $_REQUEST['drop_index'] = true;
        $_REQUEST['insert'] = true;
        $_REQUEST['update'] = false;
        $_REQUEST['delete'] = true;
        $_REQUEST['truncate'] = true;

        $tracking_set = PMA_getTrackingSet();
        $this->assertEquals(
            'RENAME TABLE,CREATE TABLE,DROP TABLE,DROP INDEX,INSERT,DELETE,TRUNCATE',
            $tracking_set
        );

        //other set to true
        $_REQUEST['alter_table'] = true;
        $_REQUEST['rename_table'] = false;
        $_REQUEST['create_table'] = false;
        $_REQUEST['drop_table'] = false;
        $_REQUEST['create_index'] = true;
        $_REQUEST['drop_index'] = false;
        $_REQUEST['insert'] = false;
        $_REQUEST['update'] = true;
        $_REQUEST['delete'] = false;
        $_REQUEST['truncate'] = false;

        $tracking_set = PMA_getTrackingSet();
        $this->assertEquals(
            'ALTER TABLE,CREATE INDEX,UPDATE',
            $tracking_set
        );
    }


    /**
     * Tests for PMA_getEntries() method.
     *
     * @return void
     * @test
     */
    public function testPMAGetEntries()
    {
        $_REQUEST['logtype'] = 'schema';
        $data = array(
            'tracking'=>'tracking',
            'ddlog' => array(
                array(
                    'statement' => 'statement1',
                    'date' => 'date2',
                    'username' => 'username3',
                )
            ),
            'dmlog' =>  array(
                array(
                    'statement' => 'statement1',
                    'date' => 'date2',
                    'username' => 'username3',
                )
            ),
        );
        $filter_users = array("*");
        $filter_ts_to = 9999999999;
        $filter_ts_from = 0;

        $entries = PMA_getEntries(
            $data, $filter_ts_from, $filter_ts_to, $filter_users
        );
        $this->assertEquals(
            'username3',
            $entries[0]['username']
        );
        $this->assertEquals(
            'statement1',
            $entries[0]['statement']
        );
    }
}

