Edit

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

Branch :

  • Show log

    Commit

  • Author : henry
    Date : 2004-10-17 00:40:24
    Hash : 55888982
    Message : Changed advance to be an FTPoint rather than a float.

  • test/FTGlyph-Test.cpp
  • #include <cppunit/extensions/HelperMacros.h>
    #include <cppunit/TestCaller.h>
    #include <cppunit/TestCase.h>
    #include <cppunit/TestSuite.h>
    
    #include "Fontdefs.h"
    #include "FTGlyph.h"
    
    class TestGlyph : public FTGlyph
    {
        public:
            TestGlyph( FT_GlyphSlot glyph)
            :   FTGlyph(glyph)
            {}
            
            const FTPoint& Render( const FTPoint& pen) { return advance;};
    };
    
    
    class FTGlyphTest : public CppUnit::TestCase
    {
        CPPUNIT_TEST_SUITE( FTGlyphTest);
            CPPUNIT_TEST( testBadConstructor);
            CPPUNIT_TEST( testGoodConstructor);
        CPPUNIT_TEST_SUITE_END();
            
        public:
            FTGlyphTest() : CppUnit::TestCase( "FTGlyph Test")
            {}
            
            FTGlyphTest( const std::string& name) : CppUnit::TestCase(name) {}
    
            void testBadConstructor()
            {            
                TestGlyph testGlyph(0);
                
                FTPoint testPoint;
    
                CPPUNIT_ASSERT( testPoint == testGlyph.Advance());
    
                CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, testGlyph.BBox().upperY, 0.01);
            
                CPPUNIT_ASSERT( testGlyph.Error() == 0);
            }
            
                    
            void testGoodConstructor()
            {            
                setUpFreetype( CHARACTER_CODE_A);
                TestGlyph testGlyph(face->glyph);
                
                FTPoint testPoint(47.0f, 0.0f, 0.0f);
                
                CPPUNIT_ASSERT( testPoint == testGlyph.Advance());
    
                CPPUNIT_ASSERT_DOUBLES_EQUAL( 51.39, testGlyph.BBox().upperY, 0.01);
            
                CPPUNIT_ASSERT( testGlyph.Error() == 0);
                
                tearDownFreetype();
            }
            
                    
            void setUp() 
            {}
            
            
            void tearDown() 
            {}
            
        private:
            FT_Library   library;
            FT_Face      face;
    
            void setUpFreetype( unsigned int characterIndex)
            {
                FT_Error error = FT_Init_FreeType( &library);
                assert(!error);
                error = FT_New_Face( library, ARIAL_FONT_FILE, 0, &face);
                assert(!error);
                
                loadGlyph( characterIndex);
            }
            
            void loadGlyph( unsigned int characterIndex)
            {
                long glyphIndex = FT_Get_Char_Index( face, characterIndex);
                
                FT_Set_Char_Size( face, 0L, FONT_POINT_SIZE * 64, RESOLUTION, RESOLUTION);
                
                FT_Error error = FT_Load_Glyph( face, glyphIndex, FT_LOAD_DEFAULT);
                assert(!error);
            }
            
            void tearDownFreetype()
            {
                FT_Done_Face( face);
                FT_Done_FreeType( library);
            }
            
    };
    
    CPPUNIT_TEST_SUITE_REGISTRATION( FTGlyphTest);