Edit

kc3-lang/ftgl/test/FTGlyphContainer-Test.cpp

Branch :

  • Show log

    Commit

  • Author : sammy
    Date : 2008-03-03 16:41:35
    Hash : ee107630
    Message : * Remove svn:executable property from source files.

  • test/FTGlyphContainer-Test.cpp
  • #include <cppunit/extensions/HelperMacros.h>
    #include <cppunit/TestCaller.h>
    #include <cppunit/TestCase.h>
    #include <cppunit/TestSuite.h>
    
    
    #include "Fontdefs.h"
    #include "FTFace.h"
    #include "FTGlyph.h"
    #include "FTGlyphContainer.h"
    
    
    class TestGlyph : public FTGlyph
    {
        public:
            TestGlyph()
            :   FTGlyph(0)
            {
                advance = FTPoint(50.0f, 0.0f, 0.0f);
            }
            
            virtual const FTPoint& Render( const FTPoint& pen){ return advance;}
    };
    
    
    class FTGlyphContainerTest : public CppUnit::TestCase
    {
        CPPUNIT_TEST_SUITE( FTGlyphContainerTest);
            CPPUNIT_TEST( testAdd);
            CPPUNIT_TEST( testSetCharMap);
            CPPUNIT_TEST( testGlyphIndex);
            CPPUNIT_TEST( testAdvance);
            CPPUNIT_TEST( testRender);
        CPPUNIT_TEST_SUITE_END();
            
        public:
            FTGlyphContainerTest() : CppUnit::TestCase( "FTGlyphContainer Test")
            {
                face = new FTFace( GOOD_FONT_FILE);
                face->Size( 72, 72);
            }
            
            FTGlyphContainerTest( const std::string& name) : CppUnit::TestCase(name)
            {
                delete face;
            }
    
            void testAdd()
            {
                TestGlyph* glyph = new TestGlyph();
                CPPUNIT_ASSERT( glyphContainer->Glyph( CHARACTER_CODE_A) == NULL);
    
                glyphContainer->Add( glyph, CHARACTER_CODE_A);
                glyphContainer->Add( NULL, 0);
    
                CPPUNIT_ASSERT( glyphContainer->Glyph( 0) == NULL);
                CPPUNIT_ASSERT( glyphContainer->Glyph( 999) == NULL);
                CPPUNIT_ASSERT( glyphContainer->Glyph( CHARACTER_CODE_A) == glyph);
            }
    
        
            void testSetCharMap()
            {
                CPPUNIT_ASSERT( glyphContainer->CharMap( ft_encoding_unicode));
                CPPUNIT_ASSERT( glyphContainer->Error() == 0);
        
                CPPUNIT_ASSERT( !glyphContainer->CharMap( ft_encoding_johab));
                CPPUNIT_ASSERT( glyphContainer->Error() == 0x06); // invalid argument
            }
    
    
            void testGlyphIndex()
            {
                CPPUNIT_ASSERT( glyphContainer->FontIndex( CHARACTER_CODE_A) == FONT_INDEX_OF_A);
                CPPUNIT_ASSERT( glyphContainer->FontIndex( BIG_CHARACTER_CODE) == BIG_FONT_INDEX);
            }
    
    
            void testAdvance()
            {
                TestGlyph* glyph = new TestGlyph();
    
                glyphContainer->Add( glyph, CHARACTER_CODE_A);
                float advance = glyphContainer->Advance( CHARACTER_CODE_A, 0);
                
                CPPUNIT_ASSERT_DOUBLES_EQUAL( 50, advance, 0.01);
            }
            
            
            void testRender()
            {
                TestGlyph* glyph = new TestGlyph();
                
                glyphContainer->Add( glyph, 'A');
                
                FTPoint pen;
                
                float advance = glyphContainer->Render( 'A', 0, pen).X();
                
                CPPUNIT_ASSERT_DOUBLES_EQUAL( 50, advance, 0.01);
            }
            
            
            void setUp() 
            {
                glyphContainer = new FTGlyphContainer( face);
            }
            
            
            void tearDown() 
            {
                delete glyphContainer;
            }
            
        private:
            FTFace*           face;
            FTGlyphContainer* glyphContainer;
    
    };
    
    CPPUNIT_TEST_SUITE_REGISTRATION( FTGlyphContainerTest);