[Tͪ#n$;<:a4sX[y ,) ,
QjƂI=|9=FIfl<EEuLwqs,Ov%|M_~:j)j*lWQd)rS>acB4S:z |R[J>k^rkK`ߜbV%~vS
L[LRantPEK_ b̄|"NO5q)p RaݡO
*㥓<0Z椢Li7x"0X5IrqNV 'i2<>%D}pR#_$}fs8*~8VM "NO5q)p R??Ҥ,;Lڥ6L_%m$^4K'L2cEzv5JUg(+CdIk:S2iNxtwdt/Lf.4L!	aNcwAs\m(܈oNnHNy/+I%P8PJ2~Q
J*e<L^7d#jOHߘť
HSGRDuʀȞ܂)ҫZF߳o4~sMvMT1c/s@%fк EgKWJK,eisYiJk؂o=	9\h!SZFqvoBdQ!Bn[u,fHi2kPTN"thdY;L@&!aH'X?I.'}C1(Ѫa~g(62-hdbFuh,Ķ?cٚڈ1A-hq˜ EgKW)3+\瓤@ƔY]hmBʝU / Vb*E|?/o.LM{' C2F"^
tO$)WEclj|AVJ z@>,ߐRʴ 74Yv!ygJEn;oQF=udGϟ	65&qAbS@oC#9D6WcsV&XRJ9;'T<nܸˠ^ @E5u
\1G0h>/ƙmgq	+*
huGZ:(k7A]28ZSw"/'!I_A(RnY=Qw}cGvj-۫D<7EE%DД3ATM\E:4f5`St!ڻM3Q(`N(|(YVenbHv~)*AaWRM\ӤteFb"L+3,;^?;jUc\!7ena%UfIL̛euAmn!}&JI~.^=Tr
!9o"
M/^b|kQʀ%}jv*BzNqwrӐR'|nٸܭ6jF8n 6x6}4ӯ0zR&&ס㑓/(?&(ş0xg1]t0V/(S{YZ^>1RPh3Nᾣ1#Ɏz`pqFg(@"L ԕ1n!ePVw$x6O잠*wmiؕMЎ[p;?﹅z{rzr	IZz<_rZ]1]}gjz m
y[
=ѾZmG3Nᾣ1#ɎzkR }%"@AIc+Z/vsZ1d""|B~Bu<n*'V>Y>^CQGNaĢR9A2ǁ͊ +ZVj_35d~bGm=sTpht54f@8[V}7Hm_5>-I{O?#7jo$EWIOKԬC~B'F{8̧A|N;1*J]3)Gy%.HgPinG4<Wj.^}9[iM_sd%58n&8ZcOnwMLCf?6˾b:Zhs)=xwϔ?|jM8t^z&+mO4Api"QO%}`:KNDE,03Nᾣ1#Ɏzl	o1QQB#V `i0U{CӊG!)a	IZz<SM!xXRSɂ4L{a2H(D9IVntL%.8=gc5"(]c?/ns̕;^?;jUc\!7ena%UfIL̛]j-5iZSZi-@R+}8O,<r@,AVkp'&ӈd#"8GJty&kE{G靎YBzlcF^A=,Y>=1&k93q/2>d35:Fن&yja&80%35HFGF(cz ;^?;jUc\!7ena%UfIL̛20s[ZW訐5fϐ7{Tb].ׁ!UY鞱tOez龏Ӿ5F#gn#8s	sQ{Gsꆸ]czFȮ!%S`(Ŷ-#^iu>HucmƧTb=S;kg#M	QYӰ*^ۊHeK&6b%RokҠő+YhhE%%Ƴ՞UJƱQn\ܝ,zjܼw"Mյ]6bL733vG򠒣|t:4-sgQm
Sۙe85,.>#K)A]	]czF]8}1r!}IbdwKBbrؘ<^Ums1F'Z1zkW/X2SQq{	ns?`dtM &)_0	ͱPӢi#j_k¹
`5`kMVAW`rv4&5ߩgM	x؟Ϯorқڣ	RB3l!c}q?%ܴXt7Se\?sUh7cX"9Vtvg,2c{Pu\}z&Gs X\3DS#IYjMP6dj ]܃Wz"AMiڧؚP5Ms1WuX\a	^0j+~F0(>^HFNx*yW!8`~Lz3j N+P̸rVEf*lr࿶I~?r@<HN'[ e)@up~T[ф1I -o3oi?)HXik%Bܻ%e@沲iEG>-%wYED'
d;x=Qbj,|pW<ficI80b%ηpAs9tZvtEO<]&Z-MWqw,Xv}e	WWƱR=dub{CmfN}byR̋<tmlFor1NFStep1()
    {
        $db = "PMA_db";
        $table= "PMA_table";
        $normalizedTo = '1nf';
        $result = PMA_getHtmlFor1NFStep1($db, $table, $normalizedTo);
        $this->assertContains(
            "<h3 class='center'>"
            . __('First step of normalization (1NF)') . "</h3>",
            $result
        );
        $this->assertContains(
            "<div id='mainContent'",
            $result
        );
        $this->assertContains("<legend>" . __('Step 1.'), $result);

        $this->assertContains(
            '<h4',
            $result
        );

        $this->assertContains(
            '<p',
            $result
        );

        $this->assertContains(
            "<select id='selectNonAtomicCol'",
            $result
        );

        $this->assertContains(
            PMA_getHtmlForColumnsList(
                $db, $table, _pgettext('string types', 'String')
            ), $result
        );

    }

    /**
     * Test for PMA_getHtmlContentsFor1NFStep2
     *
     * @return void
     */
    public function testPMAGetHtmlContentsFor1NFStep2()
    {
        $db = "PMA_db";
        $table= "PMA_table1";
        $result = PMA_getHtmlContentsFor1NFStep2($db, $table);
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('subText', $result);
        $this->assertArrayHasKey('hasPrimaryKey', $result);
        $this->assertArrayHasKey('extra', $result);
        $this->assertContains(
            '<a href="#" id="createPrimaryKey">',
            $result['subText']
        );
        $this->assertContains(
            '<a href="#" id="addNewPrimary">',
            $result['extra']
        );
        $this->assertEquals('0', $result['hasPrimaryKey']);
        $this->assertContains(__('Step 1.') . 2, $result['legendText']);
        $result1 = PMA_getHtmlContentsFor1NFStep2($db, 'PMA_table');
        $this->assertEquals('1', $result1['hasPrimaryKey']);
    }

    /**
     * Test for PMA_getHtmlContentsFor1NFStep4
     *
     * @return void
     */
    public function testPMAGetHtmlContentsFor1NFStep4()
    {
        $db = "PMA_db";
        $table= "PMA_table";
        $result = PMA_getHtmlContentsFor1NFStep4($db, $table);
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('subText', $result);
        $this->assertArrayHasKey('extra', $result);
        $this->assertContains(__('Step 1.') . 4, $result['legendText']);
        $this->assertContains(
            PMA_getHtmlForColumnsList($db, $table, 'all', "checkbox"),
            $result['extra']
        );
        $this->assertContains(
            '<input type="submit" id="removeRedundant"',
            $result['extra']
        );
    }

    /**
     * Test for PMA_getHtmlContentsFor1NFStep3
     *
     * @return void
     */
    public function testPMAGetHtmlContentsFor1NFStep3()
    {
        $db = "PMA_db";
        $table= "PMA_table";
        $result = PMA_getHtmlContentsFor1NFStep3($db, $table);
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('subText', $result);
        $this->assertArrayHasKey('extra', $result);
        $this->assertArrayHasKey('primary_key', $result);
        $this->assertContains(__('Step 1.') . 3, $result['legendText']);
        $this->assertContains(
            PMA_getHtmlForColumnsList($db, $table, 'all', "checkbox"),
            $result['extra']
        );
        $this->assertContains(
            '<input type="submit" id="moveRepeatingGroup"',
            $result['extra']
        );
        $this->assertEquals(json_encode(array('id')), $result['primary_key']);
    }

    /**
     * Test for PMA_getHtmlFor2NFstep1
     *
     * @return void
     */
    public function testPMAGetHtmlFor2NFstep1()
    {
        $db = "PMA_db";
        $table= "PMA_table";
        $result = PMA_getHtmlFor2NFstep1($db, $table);
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('subText', $result);
        $this->assertArrayHasKey('extra', $result);
        $this->assertArrayHasKey('primary_key', $result);
        $this->assertContains(__('Step 2.') . 1, $result['legendText']);
        $this->assertEquals('id', $result['primary_key']);
        $result1 = PMA_getHtmlFor2NFstep1($db, "PMA_table2");
        $this->assertEquals('id, col1', $result1['primary_key']);
        $this->assertContains(
            '<a href="#" id="showPossiblePd"',
            $result1['headText']
        );
        $this->assertContains(
            '<input type="checkbox" name="pd" value="id"',
            $result1['extra']
        );
    }

    /**
     * Test for PMA_getHtmlForNewTables2NF
     *
     * @return void
     */
    public function testPMAGetHtmlForNewTables2NF()
    {
        $table= "PMA_table";
        $partialDependencies = array('col1'=>array('col2'));
        $result = PMA_getHtmlForNewTables2NF($partialDependencies, $table);
        $this->assertContains(
            '<input type="text" name="col1"',
            $result
        );
    }

    /**
     * Test for PMA_createNewTablesFor2NF
     *
     * @return void
     */
    public function testPMACreateNewTablesFor2NF()
    {
        $table= "PMA_table";
        $db = 'PMA_db';
        $tablesName = new stdClass();
        $tablesName->id = 'PMA_table';
        $tablesName->col1 = 'PMA_table1';
        $partialDependencies = array('id'=>array('col2'));
        $result = PMA_createNewTablesFor2NF(
            $partialDependencies, $tablesName, $table, $db
        );
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('queryError', $result);
        $partialDependencies = array('id'=>array('col2'), 'col1'=>array('col2'));
        $result1 = PMA_createNewTablesFor2NF(
            $partialDependencies, $tablesName, $table, $db
        );
        $this->assertArrayHasKey('extra', $result1);
        $this->assertEquals(__('End of step'), $result1['legendText']);
        $this->assertEquals('', $result1['extra']);
    }

    /**
     * Test for PMA_getHtmlForNewTables3NF
     *
     * @return void
     */
    public function testPMAGetHtmlForNewTables3NF()
    {
        $tables= array("PMA_table"=>array('col1'));
        $db = 'PMA_db';
        $dependencies = new stdClass();
        $dependencies->col1 = array('col2');
        $result = PMA_getHtmlForNewTables3NF($dependencies, $tables, $db);
        $this->assertEquals(
            array(
                'html' => '',
                'newTables' => array()
                ), $result
        );
        $tables= array("PMA_table"=>array('col1', 'PMA_table'));
        $dependencies->PMA_table = array('col4', 'col5');
        $result1 = PMA_getHtmlForNewTables3NF($dependencies, $tables, $db);
        $this->assertInternalType('array', $result1);
        $this->assertContains(
            '<input type="text" name="PMA_table"',
            $result1['html']
        );
        $this->assertEquals(
            array(
                'PMA_table' => array (
                    'PMA_table' => array (
                        'pk' => 'col1',
                        'nonpk' => 'col2'
                    ),
                    'table2' => array (
                        'pk' => 'id',
                        'nonpk' => 'col4, col5'
                    )
                )
            ), $result1['newTables']
        );
    }

    /**
     * Test for PMA_createNewTablesFor3NF
     *
     * @return void
     */
    public function testPMACreateNewTablesFor3NF()
    {
        $db = 'PMA_db';
        $cols = new stdClass();
        $cols->pk = 'id';
        $cols->nonpk = 'col1, col2';
        $cols1 = new stdClass();
        $cols1->pk = 'col2';
        $cols1->nonpk = 'col3, col4';
        $newTables = array('PMA_table'=>array('PMA_table'=>$cols, 'table1'=>$cols1));
        $result = PMA_createNewTablesFor3NF(
            $newTables, $db
        );
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('queryError', $result);
        $newTables1 = array();
        $result1 = PMA_createNewTablesFor3NF(
            $newTables1, $db
        );
        $this->assertArrayHasKey('queryError', $result1);
        $this->assertEquals(__('End of step'), $result1['legendText']);
        $this->assertEquals(false, $result1['queryError']);
    }

    /**
     * Test for PMA_moveRepeatingGroup
     *
     * @return void
     */
    public function testPMAMoveRepeatingGroup()
    {
        $repeatingColumns = 'col1, col2';
        $primary_columns = 'id,col1';
        $newTable = 'PMA_newTable';
        $newColumn = 'PMA_newCol';
        $table= "PMA_table";
        $db = 'PMA_db';
        $result = PMA_moveRepeatingGroup(
            $repeatingColumns, $primary_columns, $newTable, $newColumn, $table, $db
        );
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('queryError', $result);
        $this->assertArrayHasKey('message', $result);
        $this->assertInstanceOf(
            'PMA\libraries\Message', $result['message']
        );
    }

    /**
     * Test for PMA_getHtmlFor3NFstep1
     *
     * @return void
     */
    public function testPMAGetHtmlFor3NFstep1()
    {
        $db = "PMA_db";
        $tables= array("PMA_table");
        $result = PMA_getHtmlFor3NFstep1($db, $tables);
        $this->assertInternalType('array', $result);
        $this->assertArrayHasKey('legendText', $result);
        $this->assertArrayHasKey('headText', $result);
        $this->assertArrayHasKey('subText', $result);
        $this->assertArrayHasKey('extra', $result);
        $this->assertContains(__('Step 3.') . 1, $result['legendText']);
        $this->assertContains(
            '<form',
            $result['extra']
        );
        $this->assertContains(
            '<input type="checkbox" name="pd" value="col1"',
            $result['extra']
        );
        $result1 = PMA_getHtmlFor3NFstep1($db, array("PMA_table2"));
        $this->assertEquals(
            '', $result1['subText']
        );
    }

    /**
     * Test for PMA_getHtmlForNormalizetable
     *
     * @return void
     */
    public function testPMAGetHtmlForNormalizetable()
    {
        $result = PMA_getHtmlForNormalizetable();
        $this->assertContains(
            '<form method="post" action="normalization.php"'
            . ' name="normalize" id="normalizeTable"',
            $result
        );
        $this->assertContains(
            '<input type="hidden" name="step1" value="1">', $result
        );
        $choices = array(
            '1nf' => __('First step of normalization (1NF)'),
            '2nf'      => __('Second step of normalization (1NF+2NF)'),
            '3nf'  => __('Third step of normalization (1NF+2NF+3NF)'));

        $html_tmp = PMA\libraries\Util::getRadioFields(
            'normalizeTo', $choices, '1nf', true
        );
        $this->assertContains($html_tmp, $result);
    }

    /**
     * Test for PMA_findPartialDependencies
     *
     * @return void
     */
    public function testPMAFindPartialDependencies()
    {
        $table= "PMA_table2";
        $db = 'PMA_db';
        $result = PMA_findPartialDependencies($table, $db);
        $this->assertContains(
            '<div class="dependencies_box"',
            $result
        );
        $this->assertContains(__('No partial dependencies found!'), $result);
    }

    /**
     * Test for PMA_getAllCombinationPartialKeys
     *
     * @return void
     */
    public function testPMAGetAllCombinationPartialKeys()
    {
        $primaryKey = array('id', 'col1', 'col2');
        $result = PMA_getAllCombinationPartialKeys($primaryKey);
        $this->assertEquals(
            array('', 'id', 'col1', 'col1,id', 'col2', 'col2,id', 'col2,col1'),
            $result
        );
    }
}
