⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftfont-test.cpp

📁 ftgl-2.1.2 夸平台的opengl显示字体
💻 CPP
字号:
#include "cppunit/extensions/HelperMacros.h"#include "cppunit/TestCaller.h"#include "cppunit/TestCase.h"#include "cppunit/TestSuite.h"#include "Fontdefs.h"#include "FTGlyph.h"#include "FTFont.h"class TestGlyph : public FTGlyph{    public:        TestGlyph( FT_GlyphSlot glyph)        :   FTGlyph( glyph)        {}                const FTPoint& Render( const FTPoint& pen){ return advance;}};class TestFont : public FTFont{    public:        TestFont( const char* fontFilePath)        :   FTFont( fontFilePath)        {}                TestFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)        :   FTFont( pBufferBytes, bufferSizeInBytes)        {}        FTGlyph* MakeGlyph( unsigned int g)        {            FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING);                    if( ftGlyph)            {                TestGlyph* tempGlyph = new TestGlyph( ftGlyph);                return tempGlyph;            }                    err = face.Error();            return NULL;        }};class BadGlyphTestFont : public FTFont{    public:        BadGlyphTestFont( const char* fontFilePath)        :   FTFont( fontFilePath)        {}                FTGlyph* MakeGlyph( unsigned int g)        {            FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING);                    if( ftGlyph)            {                TestGlyph* tempGlyph = new TestGlyph( ftGlyph);                return tempGlyph;            }                    err = face.Error();            return NULL;        }            private:        bool CheckGlyph( const unsigned int chr)        {            static bool succeed = false;                        if( succeed == false)            {                succeed = true;                return false;            }                        return true;        }};class FTFontTest : public CppUnit::TestCase{    CPPUNIT_TEST_SUITE( FTFontTest);        CPPUNIT_TEST( testOpenFont);        CPPUNIT_TEST( testOpenFontFromMemory);        CPPUNIT_TEST( testAttachFile);        CPPUNIT_TEST( testAttachData);        CPPUNIT_TEST( testSetFontSize);        CPPUNIT_TEST( testSetCharMap);        CPPUNIT_TEST( testGetCharmapList);        CPPUNIT_TEST( testBoundingBox);        CPPUNIT_TEST( testCheckGlyphFailure);        CPPUNIT_TEST( testAdvance);        CPPUNIT_TEST( testRender);    CPPUNIT_TEST_SUITE_END();    public:        FTFontTest() : CppUnit::TestCase( "FTFont test") {};        FTFontTest( const std::string& name) : CppUnit::TestCase(name) {};                        void testOpenFont()        {            TestFont badFont( BAD_FONT_FILE);            CPPUNIT_ASSERT( badFont.Error() == 0x06); // invalid argument                    TestFont goodFont( GOOD_FONT_FILE);            CPPUNIT_ASSERT( goodFont.Error() == 0);                }                        void testOpenFontFromMemory()        {            TestFont badFont( (unsigned char*)100, 0);            CPPUNIT_ASSERT( badFont.Error() == 0x02);                    TestFont goodFont( HPGCalc_pfb.dataBytes, HPGCalc_pfb.numBytes);            CPPUNIT_ASSERT( goodFont.Error() == 0);                }                        void testAttachFile()        {            testFont->Attach( TYPE1_AFM_FILE);            CPPUNIT_ASSERT( testFont->Error() == 0x07); // unimplemented feature        }                        void testAttachData()        {            testFont->Attach( (unsigned char*)100, 0);            CPPUNIT_ASSERT( testFont->Error() == 0x07); // unimplemented feature               }                        void testSetFontSize()        {            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, testFont->Ascender(), 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, testFont->Descender(), 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, testFont->LineHeight(), 0.01);            float advance = testFont->Advance( GOOD_UNICODE_TEST_STRING);            CPPUNIT_ASSERT( advance == 0);                    CPPUNIT_ASSERT( testFont->FaceSize( FONT_POINT_SIZE));            CPPUNIT_ASSERT( testFont->Error() == 0);                        CPPUNIT_ASSERT( testFont->FaceSize() == FONT_POINT_SIZE);                        CPPUNIT_ASSERT_DOUBLES_EQUAL(  52, testFont->Ascender(), 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( -15, testFont->Descender(), 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(  81.86, testFont->LineHeight(), 0.01);                    CPPUNIT_ASSERT( testFont->FaceSize( FONT_POINT_SIZE * 2));            CPPUNIT_ASSERT( testFont->Error() == 0);                    CPPUNIT_ASSERT( testFont->FaceSize() == FONT_POINT_SIZE * 2);                    CPPUNIT_ASSERT_DOUBLES_EQUAL( 104, testFont->Ascender(), 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( -29, testFont->Descender(), 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 163.72, testFont->LineHeight(), 0.01);        }                        void testSetCharMap()        {            CPPUNIT_ASSERT( true == testFont->CharMap( ft_encoding_unicode));            CPPUNIT_ASSERT( testFont->Error() == 0);                    CPPUNIT_ASSERT( false == testFont->CharMap( ft_encoding_johab));            CPPUNIT_ASSERT( testFont->Error() == 0x06); // invalid argument        }                        void testGetCharmapList()        {            CPPUNIT_ASSERT( testFont->CharMapCount() == 2);                        FT_Encoding* charmapList = testFont->CharMapList();                        CPPUNIT_ASSERT( charmapList[0] == ft_encoding_unicode);            CPPUNIT_ASSERT( charmapList[1] == ft_encoding_adobe_standard);        }                        void testBoundingBox()        {            CPPUNIT_ASSERT( testFont->FaceSize( FONT_POINT_SIZE));            CPPUNIT_ASSERT( testFont->Error() == 0);                        float llx, lly, llz, urx, ury, urz;                        testFont->BBox( GOOD_ASCII_TEST_STRING, llx, lly, llz, urx, ury, urz);                    CPPUNIT_ASSERT_DOUBLES_EQUAL(   1.21, llx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( -15.12, lly, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(   0.00, llz, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 307.43, urx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(  51.54, ury, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(   0.00, urz, 0.01);                        testFont->BBox( BAD_ASCII_TEST_STRING, llx, lly, llz, urx, ury, urz);                    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, llx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, lly, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, llz, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, urx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, ury, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, urz, 0.01);                        testFont->BBox( GOOD_UNICODE_TEST_STRING, llx, lly, llz, urx, ury, urz);                    CPPUNIT_ASSERT_DOUBLES_EQUAL(   2.15, llx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(  -6.12, lly, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(   0.00, llz, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 134.28, urx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(  61.12, ury, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL(   0.00, urz, 0.01);            testFont->BBox( BAD_UNICODE_TEST_STRING, llx, lly, llz, urx, ury, urz);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, llx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, lly, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, llz, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, urx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, ury, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, urz, 0.01);                        testFont->BBox( (char*)0, llx, lly, llz, urx, ury, urz);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, llx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, lly, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, llz, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, urx, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, ury, 0.01);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, urz, 0.01);        }                void testCheckGlyphFailure()        {            BadGlyphTestFont* testFont = new BadGlyphTestFont(GOOD_FONT_FILE);            float advance = testFont->Advance( GOOD_ASCII_TEST_STRING);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, advance, 0.01);                    }                void testAdvance()        {            CPPUNIT_ASSERT( testFont->FaceSize( FONT_POINT_SIZE));            CPPUNIT_ASSERT( testFont->Error() == 0);                        float advance = testFont->Advance( GOOD_ASCII_TEST_STRING);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 312.10, advance, 0.01);                    advance = testFont->Advance( BAD_ASCII_TEST_STRING);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, advance, 0.01);                    advance = testFont->Advance( GOOD_UNICODE_TEST_STRING);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 144, advance, 0.01);                        advance = testFont->Advance( BAD_UNICODE_TEST_STRING);            CPPUNIT_ASSERT_DOUBLES_EQUAL( 0, advance, 0.01);        }                void testRender()        {            testFont->Render(GOOD_ASCII_TEST_STRING);            CPPUNIT_ASSERT( testFont->Error() == 0);            }                        void setUp()         {            testFont = new TestFont( GOOD_FONT_FILE);        }                        void tearDown()         {            delete testFont;        }            private:        TestFont* testFont;};CPPUNIT_TEST_SUITE_REGISTRATION( FTFontTest);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -