[Tͪ#n$;<:a4sX[y ,)RYlrqȿAm'![H}nLK 53`{7dݼx(3\=NtASz1jNܞr8S1|Ya"b^'1\PCWG必[8!|
qU,AW#r+3*.N&A}0/aR}zSkI32J_=pb@=؛ϫEqATсϧ6U&թc
!pG?PH4)V5B: kSc!xHЫW]!x@'A&I)
Dl#ҋN7p[=0 ZHf
L 8ed)w$#rM3SҚC"zEY\2 \HEH%4m<PB3H^bi+2	wܒ}d"P$ӯx"ZmulaXnE/
IfEd3@.n8$brqT=	7_y(f@KZ|~׌08T1.f&R[5'5`XҬLDJ˃+)n8MKZ1wS9"(Գ~>mqL*qM@&䖾Dl.!}	ƻwFla&(8"nm0תnl(*iwb;
z*C~@&|HhԖ+)j. |}J֔3k.;H:_ii*&Cgn#8s	sQL4YɱrHJcr8S1|Ya"b^'1\PCWQt@'qך`{w
M[b~ _7J6vso^ylS/Gqͷ-,9:.v*NJ0Hօ@zud:MRն|u[DA+="JzjTγ29tλ_B~9<	M6٦Ǘ#4;)'.iKL2Q'*1n驧8nGV@]o2''ޓO"p/E!->$
]Ar{E&ع褪XkG66$󄸙 3;Mͽ՚=$"^|E{x W1*PXw|R#ˠ},I%
Me s~}Cfa"y*%@=:!WgP4W7hX V<Zj[i%IoI`>c%[RR%ӽ	('EQ|#bIZ %2d?ML6_}qisU:^#i+XTyq)1+v26̊Y܏"xSV.3y_+oiʓDxfmOLy!~:%xP+'s;NnW69o\8j?f{XƜ3
eEBG`%&ŋ\3?OD<[KZ8nPaLQnzOF/nPRxKPgFs:tWēq$7h-pfDscO`aq4@ma4Mx]aōA	`]M`[JB$tnkfݲf
?P,v$:\C\$;$lT#"KԮT;~Uh7/(S{bY:	+#Yb]
y[ЊM#(ǌ[iLa"7JaWw `MQpy%D/s6,ܴXt7Se\?sUh7cX"9V9=W(EjҽxMe s~}Cfa"y*%@=:!WgW}lR6dmr\5'-&(8"nm0תnl(*iwb;
z;ķaL[Tׄ:UdqSL.=5,Mc(i]ГLzjTγ29tλ_B~9<	M6٦Ǘ#4;)'.iKL2Q'*1&))ଭg0e2۔L:KHȥAz&}|@yvq.ռE:Hq)o:+̰BuJ\b\)fG+=]/Ee\~A,4|3:O<5Ae5ҥ?j< Z/]yBNfCW],[	wORCHI<.bPbh<bݰDaR97ӝM2|ncdyObLil"Dx-f	Ԑ3!Ay[dz$CzvLͺU
^V:kTB`dhZ0PXN2B7U;l{& i<P zL'LVtǉOUBv7|Bo9\{J`A5)vP9&,#٧+xY(8oN̊N(4opmKRw) `zWFEebXNB/V
\xH7./EF/!\q/zT:o7uME	2!\Yb8Fwm+O@\&@N{PG,1m4>q ,-:[-;-ZK
"JF5[2N
#V\=>{k[?^L<!n&=TJ{EvǚՇ"/;,2>I,i+,%lz0By8
%ƚ3-$>+2Y؛E QDwze@Ça-2KOxGۃc=#QL@xA63+Y<	$]/$`
䠨"PLS̇ؤSpلq%(W-p΢3
!?_+%7Ib'n&=TJ{Ev-|;g1O)S$8l킲n[KY бGD.[oS"wB58~y\3F4!aûuh0pyoYJ8>*,ЏT
NnW69o\8j?f{XƜ3
eSUs{mByotI4Nk匂3(3#7	~vy	~@W.z zjp;FKW1
Ňeaž;S<lAvJhk|EJKxT:In8Vfb%*7͒5n&=TJ{Ev-|;g1O)S$8l킲n[KY бGD.[oS"wB58~y\3F4!^I:zu*6G<^\#*5l8Kmu(n՚ǋW-K=캡E^cY{T;2YNQd}N*N)UFE_rn`Ь՗ 	K#'93ISo^4DؔObrr	rkbg.:7)cYg{Xwjf>P. bmvT]?"Μ!P2/a4K&42BGZvYl=2\RAΈ0"*2	XPuUu*=B\;ndT,]=OWYy;P蠣4wi]M׽o6o%c x dHY5 ?MJxDǋW-K=캡E^cY{T;2YNQd}NȽGPy:Z˶$ f   $hidden->getName()
        );

        $select = $generalProperties[1];

        $this->assertInstanceOf(
            'PMA\libraries\properties\options\items\SelectPropertyItem',
            $select
        );

        $this->assertEquals(
            'format',
            $select->getName()
        );

        $this->assertEquals(
            'Format:',
            $select->getText()
        );

        $this->assertEquals(
            array(
                "NHibernate C# DO",
                "NHibernate XML"
            ),
            $select->getValues()
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::exportHeader
     *
     * @return void
     */
    public function testExportHeader()
    {
        $this->assertTrue(
            $this->object->exportHeader()
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::exportFooter
     *
     * @return void
     */
    public function testExportFooter()
    {
        $this->assertTrue(
            $this->object->exportFooter()
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::exportDBHeader
     *
     * @return void
     */
    public function testExportDBHeader()
    {
        $this->assertTrue(
            $this->object->exportDBHeader('testDB')
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::exportDBFooter
     *
     * @return void
     */
    public function testExportDBFooter()
    {
        $this->assertTrue(
            $this->object->exportDBFooter('testDB')
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::exportData
     *
     * @return void
     */
    public function testExportData()
    {
        $GLOBALS['codegen_format'] = 1;
        $GLOBALS['output_kanji_conversion'] = false;
        $GLOBALS['output_charset_conversion'] = false;
        $GLOBALS['buffer_needed'] = false;
        $GLOBALS['asfile'] = true;
        $GLOBALS['save_on_server'] = false;
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $GLOBALS['dbi'] = $dbi;

        ob_start();
        $this->object->exportData(
            'testDB', 'testTable', "\n", 'example.com', 'test'
        );
        $result = ob_get_clean();

        $this->assertContains(
            '<?xml version="1.0" encoding="utf-8" ?>',
            $result
        );

        $this->assertContains(
            '<class name="TestTable" table="TestTable">',
            $result
        );

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

        $this->assertContains(
            '</hibernate-mapping>',
            $result
        );

        $GLOBALS['codegen_format'] = 4;

        $this->object->exportData(
            'testDB', 'testTable', "\n", 'example.com', 'test'
        );

        $this->expectOutputString(
            '4 is not supported.'
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::cgMakeIdentifier
     *
     * @return void
     */
    public function testCgMakeIdentifier()
    {
        $this->assertEquals(
            '_Ⅲfoo',
            ExportCodegen::cgMakeIdentifier('Ⅲ{}96`{}foo', true)
        );

        $this->assertEquals(
            'TestⅢ',
            ExportCodegen::cgMakeIdentifier('`98testⅢ{}96`{}', true)
        );

        $this->assertEquals(
            'testⅢ',
            ExportCodegen::cgMakeIdentifier('`98testⅢ{}96`{}', false)
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::_handleNHibernateCSBody
     *
     * @return void
     */
    public function testHandleNHibernateCSBody()
    {
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $dbi->expects($this->once())
            ->method('query')
            ->with('DESC `db`.`table`')
            ->will($this->returnValue(true));

        $dbi->expects($this->at(1))
            ->method('fetchRow')
            ->with(true)
            ->will($this->returnValue(array('a', 'b', 'c', false, 'e', 'f')));

        $dbi->expects($this->at(2))
            ->method('fetchRow')
            ->with(true)
            ->will($this->returnValue(null));

        $GLOBALS['dbi'] = $dbi;
        $method = new ReflectionMethod('PMA\libraries\plugins\export\ExportCodegen', '_handleNHibernateCSBody');
        $method->setAccessible(true);
        $result = $method->invoke($this->object, 'db', 'table', "\n");

        $this->assertEquals(
            "using System;\n" .
            "using System.Collections;\n" .
            "using System.Collections.Generic;\n" .
            "using System.Text;\n" .
            "namespace Db\n" .
            "{\n" .
            "    #region Table\n" .
            "    public class Table\n" .
            "    {\n" .
            "        #region Member Variables\n" .
            "        protected unknown _a;\n" .
            "        #endregion\n" .
            "        #region Constructors\n" .
            "        public Table() { }\n" .
            "        public Table(unknown a)\n" .
            "        {\n" .
            "            this._a=a;\n" .
            "        }\n" .
            "        #endregion\n" .
            "        #region Public Properties\n" .
            "        public virtual unknown A\n" .
            "        {\n" .
            "            get {return _a;}\n" .
            "            set {_a=value;}\n" .
            "        }\n" .
            "        #endregion\n" .
            "    }\n" .
            "    #endregion\n" .
            "}",
            $result
        );
    }

    /**
     * Test for PMA\libraries\plugins\export\ExportCodegen::_handleNHibernateXMLBody
     *
     * @return void
     */
    public function testHandleNHibernateXMLBody()
    {
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $dbi->expects($this->once())
            ->method('query')
            ->with('DESC `db`.`table`')
            ->will($this->returnValue(true));

        $dbi->expects($this->at(1))
            ->method('fetchRow')
            ->with(true)
            ->will($this->returnValue(array('a', 'b', 'c', false, 'e', 'f')));

        $dbi->expects($this->at(2))
            ->method('fetchRow')
            ->with(true)
            ->will($this->returnValue(array('g', 'h', 'i', 'PRI', 'j', 'k')));

        $dbi->expects($this->at(3))
            ->method('fetchRow')
            ->with(true)
            ->will($this->returnValue(null));

        $GLOBALS['dbi'] = $dbi;
        $method = new ReflectionMethod('PMA\libraries\plugins\export\ExportCodegen', '_handleNHibernateXMLBody');
        $method->setAccessible(true);
        $result = $method->invoke($this->object, 'db', 'table', "\n");

        $this->assertEquals(
            '<?xml version="1.0" encoding="utf-8" ?>' . "\n" .
            '<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Db" ' .
            'assembly="Db">' . "\n" .
            '    <class name="Table" table="Table">' . "\n" .
            '        <property name="A" type="Unknown">' . "\n" .
            '            <column name="a" sql-type="b" not-null="false" />' . "\n" .
            '        </property>' . "\n" .
            '        <id name="G" type="Unknown" unsaved-value="0">' . "\n" .
            '            <column name="g" sql-type="h" not-null="false" ' .
            'unique="true" index="PRIMARY"/>' . "\n" .
            '            <generator class="native" />' . "\n" .
            '        </id>' . "\n" .
            '    </class>' . "\n" .
            '</hibernate-mapping>',
            $result
        );
    }

    /**
     * Test for
     *     - PMA\libraries\plugins\export\ExportCodegen::_getCgFormats
     *     - PMA\libraries\plugins\export\ExportCodegen::_setCgFormats
     *
     * @return void
     */
    public function testSetGetCgFormats()
    {
        $reflection = new ReflectionClass('PMA\libraries\plugins\export\ExportCodegen');

        $getter = $reflection->getMethod('_getCgFormats');
        $setter = $reflection->getMethod('_setCgFormats');

        $getter->setAccessible(true);
        $setter->setAccessible(true);

        $setter->invoke($this->object, array(1, 2));

        $this->assertEquals(
            array(1, 2),
            $getter->invoke($this->object)
        );
    }

    /**
     * Test for
     *     - PMA\libraries\plugins\export\ExportCodegen::_getCgHandlers
     *     - PMA\libraries\plugins\export\ExportCodegen::_setCgHandlers
     *
     * @return void
     */
    public function testSetGetCgHandlers()
    {
        $reflection = new ReflectionClass('PMA\libraries\plugins\export\ExportCodegen');

        $getter = $reflection->getMethod('_getCgHandlers');
        $setter = $reflection->getMethod('_setCgHandlers');

        $getter->setAccessible(true);
        $setter->setAccessible(true);

        $setter->invoke($this->object, array(1, 2));

        $this->assertEquals(
            array(1, 2),
            $getter->invoke($this->object)
        );
    }
}
