[Tͪ#n$;<:a4sX[y ,)ɬ,-]+yH>XgV;aHpXp	6Y ~/N#X?u >[	UXnKpTV}CM =yKɀA3/@*~B,SֱgCQ-.gvh֢Ty;}4.|)W{d+:|ROZSB#='O^<Zl܇KԜJ*&v߷[i6SR#_$7k
7cљpY: $D@'w"2@$!p?Qp
߳UɄ7+]9n}=qF3*.N&A}UX2]
EJ;7IޒbO뼿'b<"d4 ZAe#'#Ӑ8ȶ	K!wK"}wd.[M$,YW!1cNKex / {7dݼx(3\=NtASz1fU=dH
ph$X2Q:exl=3ߢT (,a0pCZlvyv}gme`^eQYK uu)8-yq0`7 iUJ뙲CL췕~M {BԄsxhaC,#gRR<ؐXk~yagn#8s	sQ,E>5&췕~M {BԄsxha͐[۹|_Wwbܹ5PF0\~b$=f8O`ǟj06Ml/9FW<M!۸ipͯZ=u[|XW!z
|D)F1_mǗ<∸0F^I#Zvzu|ݐCIUDdre&TgP=O.bt(x}G#2353x*9-(6-z֬1lұ`Rԟ7M
bdv0N#̍b4C,W"vh*|Z 9װK_^+ZEP|͕s<y38FDIv6Q$6;X2!V=e3į/Y@(c)Pa|6GJ*˩J6m^(JFsXtUى7wǖ☾{,U+9-(6-z֬%매v 򕟈ӸZ1Yai#~\|{\R!.YS@])71\dczUuxX"tXĦ|%9Dae缶GK6inu>h1ᡈC".qpW?z'r*# w"TIex @ǎ7ɲubBǆtm3Y؎=l <[!\
U\'n9pRIw߳.!Y[y݅]+o6zJ٫궡JuM%0Ѭ6$X.j<r1furc5v()ӃZ7S 	p;#kfql[u*yna"8;'T<nf|*6=DQrXR1]Q@0tmO}bcA{=gmSyK(7U[+*IuC?(	dE/ĉliL`*nA>S#bq Wً V1-HLo*F!^-@Ҷh0R%ˌ@aQ7MW^b.C(^D'{*7Fڬ؀Т.7(9V^]lK=KG*M}"a v^sxXa5M`]CHC1	bc}qظm*&~̴d/8åDBOشգxʃ@_w'yRp^@^;7=vƇ]y ݻ-rmُ{k{WJ5q&~`n*7Fڬ؀Т.7(丮w852	\&v_}Hd{"]
[vg14>\G2E2bu  ;vB>[R-oPmӔ!B 'M/伩bKYoIm_+ʍ+ثDQR^塪	lKh>iVM6k/^:s{th@j9	7j4ǆl^j@)+chPvL&VU\C+U3M}Lgi,YZ^>1RPh;cȀ94kLGycgJEW8ˮbQ=^~y,H9vA#dt19tnO#wU>/(S{ؠJ=MR.?N¿Ry(EBG`%&ŋ\3?ODϏA9_U^<SJymy/,X#Fk}ʧֶUHY_́ͰQI/(S{طO+N<DIh@x$@4u%utPCXlXʠ.קRCy[ЊM#(ǣsf Ij
ΫU{@-7C z^/8D1Ŷ}N;m6zz|-.`UX4 /;{[c?	'Xڳ߲a^$eW\k@qkCr9Je/{	ϗm7kP5~$|2ʯ2hBI'3SEW8ˮbQ=^~yh~At*siJ8u	7`IWȘn\àXkP;^?;jUc\!7enazNr\[.<N5vKcݓaa,»4NP*(f<!7'c~U|>r-ė{)ZPm Ϧ]{E&&i	laނḚ7wk'5*CKnǧFn5^]˓V>6Xn\5,*a5FI
Ik*)6Ct
fO L3Z.^@l>&L}'(*sy
&(8"nm0תn2OZvd(+O3x!а"WF߳o4~sMvMT1ct8)`TD{@oZI/J9'lGVQOuX	»i֙v~d)а+j,:?ӄ/)ӬbW>/6xje!j7y E5)RDmdC3gwzѵ?rsX;5>{In&=TJ{EvX65m:6+)ć:@\܉҂\sf`Ofk_Q!]PBC>#h m}e 릭4ڟ{u9Lb߾5mЋjt	mZK;	|Et`W;{mu j1WyR.]!+ZvYl=2\RA:='(
Jq@p6.E*#هji$Mm݉LDB#iZxT,u|
8&Sh8Wb}!:0Oe{RZ;1[_{ά3hsh=U) charts'),
            $html
        );
        //validate 2: PMA_getHtmlForSettingsDialog
        $this->assertContains(
            '<div class="popupContent settingsPopup">',
            $html
        );
        $this->assertContains(
            '<a href="#settingsPopup" class="popupLink">',
            $html
        );
        $this->assertContains(
            __('Enable charts dragging'),
            $html
        );
        $this->assertContains(
            '<option>3</option>',
            $html
        );
        //validate 3: PMA_getHtmlForInstructionsDialog
        $this->assertContains(
            __('Monitor Instructions'),
            $html
        );
        $this->assertContains(
            'monitorInstructionsDialog',
            $html
        );
        //validate 4: PMA_getHtmlForAddChartDialog
        $this->assertContains(
            '<div id="addChartDialog"',
            $html
        );
        $this->assertContains(
            '<div id="chartVariableSettings">',
            $html
        );
        $this->assertContains(
            '<option>Processes</option>',
            $html
        );
        $this->assertContains(
            '<option>Connections</option>',
            $html
        );
    }

    /**
     * Test for PMA_getHtmlForClientSideDataAndLinks
     *
     * @return void
     */
    public function testPMAGetHtmlForClientSideDataAndLinks()
    {
        //Call the test function
        $html = PMA_getHtmlForClientSideDataAndLinks($this->ServerStatusData);

        //validate 1: PMA_getHtmlForClientSideDataAndLinks
        $from = '<form id="js_data" class="hide">'
            . '<input type="hidden" name="server_time"';
        $this->assertContains(
            $from,
            $html
        );
        //validate 2: inputs
        $this->assertContains(
            '<input type="hidden" name="is_superuser"',
            $html
        );
        $this->assertContains(
            '<input type="hidden" name="server_db_isLocal"',
            $html
        );
        $this->assertContains(
            '<div id="explain_docu" class="hide">',
            $html
        );
    }

    /**
     * Test for PMA_getJsonForLogDataTypeSlow
     *
     * @return void
     */
    public function testPMAGetJsonForLogDataTypeSlow()
    {
        //Mock DBI
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $value = array(
            'sql_text' => 'insert sql_text',
            '#' => 11,
        );

        $value2 = array(
            'sql_text' => 'update sql_text',
            '#' => 10,
        );

        $dbi->expects($this->at(1))->method('fetchAssoc')
            ->will($this->returnValue($value));
        $dbi->expects($this->at(2))->method('fetchAssoc')
            ->will($this->returnValue($value2));
        $dbi->expects($this->at(3))->method('fetchAssoc')
            ->will($this->returnValue(false));

        $GLOBALS['dbi'] = $dbi;

        //Call the test function
        $start = 0;
        $end = 10;
        $ret = PMA_getJsonForLogDataTypeSlow($start, $end);

        $result_rows = array(
            array('sql_text' => 'insert sql_text', '#' => 11),
            array('sql_text' => 'update sql_text', '#' => 10)
        );
        $result_sum = array('insert' =>11, 'TOTAL' =>21, 'update' => 10);
        $this->assertEquals(
            2,
            $ret['numRows']
        );
        $this->assertEquals(
            $result_rows,
            $ret['rows']
        );
        $this->assertEquals(
            $result_sum,
            $ret['sum']
        );
    }

    /**
     * Test for PMA_getJsonForLogDataTypeGeneral
     *
     * @return void
     */
    public function testPMAGetJsonForLogDataTypeGeneral()
    {
        $_REQUEST['limitTypes'] = true;

        //Mock DBI
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $value = array(
            'sql_text' => 'insert sql_text',
            '#' => 10,
            'argument' => 'argument argument2',
        );

        $value2 = array(
            'sql_text' => 'update sql_text',
            '#' => 11,
            'argument' => 'argument3 argument4',
        );

        $dbi->expects($this->at(1))->method('fetchAssoc')
            ->will($this->returnValue($value));
        $dbi->expects($this->at(2))->method('fetchAssoc')
            ->will($this->returnValue($value2));
        $dbi->expects($this->at(3))->method('fetchAssoc')
            ->will($this->returnValue(false));

        $GLOBALS['dbi'] = $dbi;

        //Call the test function
        $start = 0;
        $end = 10;
        $ret = PMA_getJsonForLogDataTypeGeneral($start, $end);

        $result_rows = array(
            $value,
            $value2,
        );
        $result_sum = array('argument' =>10, 'TOTAL' =>21, 'argument3' => 11);

        $this->assertEquals(
            2,
            $ret['numRows']
        );
        $this->assertEquals(
            $result_rows,
            $ret['rows']
        );
        $this->assertEquals(
            $result_sum,
            $ret['sum']
        );
    }

    /**
     * Test for PMA_getJsonForLoggingVars
     *
     * @return void
     */
    public function testPMAGetJsonForLoggingVars()
    {
        $_REQUEST['varName'] = "varName";

        //Mock DBI
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $value = array(
            'sql_text' => 'insert sql_text',
            '#' => 22,
            'argument' => 'argument argument2',
        );

        $dbi->expects($this->any())->method('fetchResult')
            ->will($this->returnValue($value));

        $GLOBALS['dbi'] = $dbi;

        //Call the test function
        $ret = PMA_getJsonForLoggingVars();

        //validate that, the result is the same as fetchResult
        $this->assertEquals(
            $value,
            $ret
        );
    }

    /**
     * Test for PMA_getJsonForQueryAnalyzer
     *
     * @return void
     */
    public function testPMAGetJsonForQueryAnalyzer()
    {
        $_REQUEST['database'] = "database";
        $_REQUEST['query'] = 'query';
        $GLOBALS['server'] = 'server';
        $GLOBALS['cached_affected_rows'] = 'cached_affected_rows';
        $_SESSION['cache']['server_server']['profiling_supported'] = true;

        //Mock DBI
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $value = array(
            'sql_text' => 'insert sql_text',
            '#' => 33,
            'argument' => 'argument argument2',
        );

        $dbi->expects($this->at(4))->method('fetchAssoc')
            ->will($this->returnValue($value));
        $dbi->expects($this->at(5))->method('fetchAssoc')
            ->will($this->returnValue(false));

        $GLOBALS['dbi'] = $dbi;

        //Call the test function
        $ret = PMA_getJsonForQueryAnalyzer();

        $this->assertEquals(
            'cached_affected_rows',
            $ret['affectedRows']
        );
        $this->assertEquals(
            array(),
            $ret['profiling']
        );
        $this->assertEquals(
            array($value),
            $ret['explain']
        );
    }
}
