#include #include #include #include #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);