[Tͪ#n$;<:a4sX[u
in^(jZf׃s_k'<Lqy:r	 MEe |tݘߠnQrCW)l>x`4fOa=(#ڸv1bѶv'ixR-7i]okT?qz&~:{]d$Yg;ir@#VbfUxAF턾ijk)f\d",|M>f/yAXE<oy˪X\KX= ۔41":q(I4k-i{(wPmq"Mzm2ˊ5 0vqnʞwQ_@'-B\f'K¦FTfzs1=h*ҽP'B+:ǆa/>hO5U^L-t,D{}TP;Fn䱮C~v`L]ui
V \<># 8G$BV&pvnm*)&x @bMo#%kD6sKI^9Uiu%)VYa|$?>7upGQa$=.>K3giH,B;IStxP㢾lj`3,VYa|$?>72L|xHxlXޢ3&Y{FY1@*e 릭4ڟ{umʾg2,vX\^8rdrծN$q;ףxCLo	{.@}#$SHi &S eڂ#7-v*U s_-#}//,p=_O0D1zֳ!<T<s乁7({2`M7?SZA׆_xT,u|
$uHt=5ܹC
2`&NۗX6qLNW~33Uo|^:8om]Z\bڭ80b%η	R12`٧}Q5aPKDYo+C}¦U8ßa{ah>GRDuʀȞ܂)ҫZF߳o4~sMvMT1c$ p/jxU@9LJhO?@xA=,Ք0M6E3~W>Is佽_>]ĉ(nm/qVh<(*VwS Z/afdzu<86}eUJK٘=`ʀг!knoZVBHܡp1Uԕ/-Kę}Ƃ%<&pblC¼ʤ
=HsN+<c,L(jNga4Sh+8Ril+2	΁{fbKJt4UnHXik%Bܻ%e@dNs.oFe2Ei;&d$Iv>[(~E95Q\{E4|~Ghڻc5zvw=~(ztP6!HNF@^)`zr)ˑJSX!pPuڠ.^T}\E'
O(siCV-YKZ; EA
<e%jn!	4>
̏NPgg!ArW-s
Rȓn@~Vi7w1eV`8RH쐄v}[:-:{Aџ]ĝg7X<ΫK-!|-~ Nvn3Q
5M%2@_Č'7cX"9Vm#l[@[z Y]0y;( {7݃7&(8"nm0תn%i xQ9Yپ9,{QˬhE~͐[۹|_Ww8zu7F-ugv()l%s$|C6np[27n.XF_44[ŌA]{CjAcBAE'cCŲ-gY8|@g鴽_>]ĉ(ndBu~[ʡZ>h<yC|^(͉Q~ [$\|DXQm !3lRL\iv;q^.0
XjNnW69o\8j9Lb߾5mQf`°S9;AI,d޼SvRlS@אK\>zVk?	~Jĩ"D}/1ؿ%	(5=a9 ;ukIl%a8Ha[_"q1`y}I^9Uiu%)>zVk?	~Jĩ"D}/1ؿ%	Hy+;3}IukIl%a8Ha[_"q1`y}vv\h͐\Iw7~)uU]r,ؖ`uRGm!ŏvPM1b t":meoOIrfia"u'qM)Tn&=TJ{EvRh#(Ru~%m@]a'T;$SL#&gk+FFbt{ذ\WL]az]mzk3ϼ(1o+'ZMkOahDȺ.H>ȰSHFB!uj6h[ݭJKy)1mAÃco>b޼*j׉6Q. ^6&rTTRy\H[| t$HXik%Bܻ%e@#5dMaQ۴X4Wm')ó1$Q֞\[Z8Ghڻc5hsF>좥ވ!G<dcu%&4s#@NnW69o\8j5~c.ֶo46L.`&v8̪Ea6Eu!uʼh[, 2yōA	`]M`[Q
Q~CuD(Q 2D裦M.f(%մAE _dO#ۀ;R:HKo4tv0>*Ӑ:Ҙ1&>R3wOOz]:]1bW'^D*rZ)$m鵓ol_~xח!y<ǬǽK+8eͻn윲;rU0UR9GwWKӐ:Ҙ1&>R3wOOz]:]1T
|~ޜ.2D*rZr &NPӭ&
HXik%Bܻ%e@*4{boşx!qu̐uL]*k\WYɴX`P,f\sn/?1YQHXik%Bܻ%e@#5dMaQ۴X4Wm')ó1$Q֞\[Z8Ghڻc5hsF>좥ވ!G<dcu%&4s#@NnW69o\8j5~c.ֶo46L.`&v8̪Ea6Eu!@2X0[>t؛, 2yōA	`]M`[Q
Q~CuD(Q 2D裦M9TNJ"J*/Xk%J%vY3(/ODYB/QBeĲ靖Ґc1eF(,dHϑ~٣sE!ÕZ(#      $this->assertNotContains(
            "DELETE FROM test_table WHERE val = 3",
            $this->byId("dml_versions")->text()
        );
    }

    /**
     * Tests deactivation of tracking
     *
     * @return void
     *
     * @group large
     */
    public function testDeactivateTracking()
    {
        $this->byCssSelector("input[value='Deactivate now']")->click();
        $this->waitForElement(
            "byCssSelector", "input[value='Activate now']"
        );
        $this->_executeSqlAndReturnToTableTracking();
        $this->assertFalse(
            $this->isElementPresent("byId", "dml_versions")
        );
    }

    /**
     * Tests dropping a tracking
     *
     * @return void
     *
     * @group large
     */
    public function testDropTracking()
    {
        $this->byLinkText("Database: " . $this->database_name)->click();
        $this->waitForElement("byCssSelector", "table.data");
        usleep(1000000);
        $this->expandMore();
        $this->byLinkText("Tracking")->click();
        $this->waitForElement("byId", "versions");
        $this->byLinkText("Drop")->click();

        $this->waitForElement(
            "byXPath",
            "//button[contains(., 'OK')]"
        )->click();

        $this->waitForElement(
            "byXPath",
            "//div[@class='success' and contains(., "
            . "'Your SQL query has been executed')]"
        );

        $this->assertContains(
            "test_table",
            $this->getCellByTableId('noversions', 1, 1)
        );

        $this->assertContains(
            "test_table_2",
            $this->getCellByTableId('noversions', 2, 1)
        );
    }

    /**
     * Tests structure snapshot of a tracking
     *
     * @return void
     *
     * @group large
     */
    public function testStructureSnapshot()
    {
        $this->byLinkText("Structure snapshot")->click();
        $this->waitForElement("byId", "tablestructure");

        $this->assertContains(
            "id",
            $this->getCellByTableId('tablestructure', 1, 1)
        );

        $this->assertContains(
            "val",
            $this->getCellByTableId('tablestructure', 2, 1)
        );

        $this->assertContains(
            "PRIMARY",
            $this->getCellByTableId('tablestructure_indexes', 1, 1)
        );

        $this->assertContains(
            "id",
            $this->getCellByTableId('tablestructure_indexes', 1, 5)
        );
    }

    /**
     * Goes to SQL tab, executes queries, returns to tracking page
     *
     * @return void
     */
    private function _executeSqlAndReturnToTableTracking()
    {
        $this->byLinkText("SQL")->click();
        $this->waitForElement("byId", "queryfieldscontainer");
        $this->typeInTextArea(
            ";UPDATE test_table SET val = val + 1; "
            . "DELETE FROM test_table WHERE val = 3"
        );
        $this->byCssSelector("input[value='Go']")->click();
        $this->waitForElement("byClassName", "success");

        $this->expandMore();
        $this->byLinkText("Tracking")->click();
        $this->waitForElement("byId", "versions");
    }
}
