summaryrefslogtreecommitdiff
path: root/tests/test-font-face.cc
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@gnome.org>2008-12-15 00:56:26 -0600
committerJonathon Jongsma <jjongsma@gnome.org>2008-12-15 00:56:26 -0600
commit0fc70d99be2e5377c14853cbe9a6ab7d39c4af63 (patch)
treeefe628e8e548b06ba051b08a960a92df456b3ace /tests/test-font-face.cc
parent3a2c321730e583b6256e43cc91ee71c55b416ee4 (diff)
Add tests and fix a bug in UserFontFace
* cairomm/fontface.cc: fixed a bug in UserFont where I was incorrectly using a function static variable and so it was not returning negative numbers for num_glyphs when I expected it to * tests/Makefile.am: * tests/test-font-face.cc: * tests/test-user-font.cc: Added tests for UserFontFace
Diffstat (limited to 'tests/test-font-face.cc')
-rw-r--r--tests/test-font-face.cc245
1 files changed, 0 insertions, 245 deletions
diff --git a/tests/test-font-face.cc b/tests/test-font-face.cc
index 85ccccf..466f408 100644
--- a/tests/test-font-face.cc
+++ b/tests/test-font-face.cc
@@ -46,243 +46,6 @@ void test_toy_getters ()
BOOST_CHECK_EQUAL (Cairo::FONT_TYPE_TOY, toy->get_type());
}
-#if 0
-void test_user_font_create()
-{
- Cairo::RefPtr<Cairo::UserFontFace> font = Cairo::UserFontFace::create();
- BOOST_CHECK_EQUAL (Cairo::FONT_TYPE_USER, font->get_type());
-}
-
-// create some dummy callbacks
-static unsigned int init_call_count = 0;
-Cairo::ErrorStatus my_init(const Cairo::RefPtr<Cairo::ScaledFont>&, const Cairo::RefPtr<Cairo::Context>&, Cairo::FontExtents&)
-{
- init_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-static unsigned int unicode_to_glyph_call_count = 0;
-Cairo::ErrorStatus my_unicode_to_glyph(const Cairo::RefPtr<Cairo::ScaledFont>&, unsigned long, unsigned long&)
-{
- unicode_to_glyph_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-static unsigned int render_glyph_call_count = 0;
-Cairo::ErrorStatus my_render_glyph(const Cairo::RefPtr<Cairo::ScaledFont>&, unsigned long, const Cairo::RefPtr<Cairo::Context>&, Cairo::TextExtents&)
-{
- render_glyph_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-static unsigned int text_to_glyphs_call_count = 0;
-Cairo::ErrorStatus my_text_to_glyphs(const Cairo::RefPtr<Cairo::ScaledFont>&, const std::string& utf8, std::vector<Cairo::Glyph>& glyphs, std::vector<Cairo::TextCluster>& /*clusters*/, Cairo::TextClusterFlags& /*cluster_flags*/)
-{
- text_to_glyphs_call_count++;
- if (glyphs.size())
- glyphs.clear();
- // just fill in some bogus glyph indexes
- std::string::const_iterator str_iter = utf8.begin();
- for (; str_iter != utf8.end(); ++str_iter)
- {
- Cairo::Glyph g;
- g.index = (unsigned long) *str_iter;
- glyphs.push_back(g);
- }
- return CAIRO_STATUS_SUCCESS;
-}
-
-void test_user_font_callbacks_ptr()
-{
- render_glyph_call_count = 0;
- unicode_to_glyph_call_count = 0;
- init_call_count = 0;
- Cairo::RefPtr<Cairo::UserFontFace> font = Cairo::UserFontFace::create();
- BOOST_CHECK(font);
- font->set_init_func(sigc::ptr_fun(my_init));
- font->set_unicode_to_glyph_func(sigc::ptr_fun(my_unicode_to_glyph));
- font->set_render_glyph_func(sigc::ptr_fun(my_render_glyph));
- Cairo::RefPtr<Cairo::ScaledFont> scaled_font =
- Cairo::ScaledFont::create(font, Cairo::scaled_matrix(10, 10), Cairo::identity_matrix(),
- Cairo::FontOptions());
- BOOST_CHECK (init_call_count > 0);
- Cairo::RefPtr<Cairo::ImageSurface> surface =
- Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 100, 100);
- Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface);
- cr->set_font_face(font);
- cr->show_text("Hello, world");
- BOOST_CHECK (unicode_to_glyph_call_count > 0);
- BOOST_CHECK (render_glyph_call_count > 0);
-}
-
-// since unicode_to_glyph_func and text_to_glyphs_func are mutually exclusive,
-// we must test them separately. This test tests the text_to_glyphs_func
-void test_user_font_callbacks_ptr_text()
-{
- render_glyph_call_count = 0;
- text_to_glyphs_call_count = 0;
- init_call_count = 0;
- Cairo::RefPtr<Cairo::UserFontFace> font = Cairo::UserFontFace::create();
- BOOST_CHECK(font);
- font->set_init_func(sigc::ptr_fun(my_init));
- font->set_render_glyph_func(sigc::ptr_fun(my_render_glyph));
- font->set_text_to_glyphs_func(sigc::ptr_fun(my_text_to_glyphs));
- Cairo::RefPtr<Cairo::ScaledFont> scaled_font =
- Cairo::ScaledFont::create(font, Cairo::scaled_matrix(10, 10), Cairo::identity_matrix(),
- Cairo::FontOptions());
- BOOST_CHECK (init_call_count > 0);
- Cairo::RefPtr<Cairo::ImageSurface> surface =
- Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 100, 100);
- Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface);
- cr->set_font_face(font);
- cr->show_text("Hello, world");
- BOOST_CHECK (render_glyph_call_count > 0);
- BOOST_CHECK (text_to_glyphs_call_count > 0);
-}
-
-struct UserFontCallbacks
-{
-Cairo::ErrorStatus init(const Cairo::RefPtr<Cairo::ScaledFont>&, const Cairo::RefPtr<Cairo::Context>&, Cairo::FontExtents&)
-{
- init_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-Cairo::ErrorStatus unicode_to_glyph(const Cairo::RefPtr<Cairo::ScaledFont>&, unsigned long, unsigned long&)
-{
- unicode_to_glyph_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-Cairo::ErrorStatus render_glyph(const Cairo::RefPtr<Cairo::ScaledFont>&, unsigned long, const Cairo::RefPtr<Cairo::Context>&, Cairo::TextExtents&)
-{
- render_glyph_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-static unsigned int init_call_count;
-static unsigned int unicode_to_glyph_call_count;
-static unsigned int render_glyph_call_count;
-};
-
-unsigned int UserFontCallbacks::init_call_count = 0;
-unsigned int UserFontCallbacks::unicode_to_glyph_call_count = 0;
-unsigned int UserFontCallbacks::render_glyph_call_count = 0;
-
-void test_user_font_callbacks_mem()
-{
- Cairo::RefPtr<Cairo::UserFontFace> font = Cairo::UserFontFace::create();
- BOOST_CHECK(font);
- UserFontCallbacks callbacks;
- font->set_init_func(sigc::mem_fun(&callbacks, &UserFontCallbacks::init));
- font->set_unicode_to_glyph_func(sigc::mem_fun(&callbacks,
- &UserFontCallbacks::unicode_to_glyph));
- font->set_render_glyph_func(sigc::mem_fun(&callbacks,
- &UserFontCallbacks::render_glyph));
- Cairo::RefPtr<Cairo::ScaledFont> scaled_font =
- Cairo::ScaledFont::create(font, Cairo::scaled_matrix(10, 10), Cairo::identity_matrix(),
- Cairo::FontOptions());
- BOOST_CHECK (UserFontCallbacks::init_call_count > 0);
- Cairo::RefPtr<Cairo::ImageSurface> surface =
- Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 100, 100);
- Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface);
- cr->set_font_face(font);
- cr->show_text("Hello, world");
- BOOST_CHECK (UserFontCallbacks::unicode_to_glyph_call_count > 0);
- BOOST_CHECK (UserFontCallbacks::render_glyph_call_count > 0);
-}
-
-static unsigned int init_exception_call_count = 0;
-Cairo::ErrorStatus my_init_exception(const Cairo::RefPtr<Cairo::ScaledFont>&, const Cairo::RefPtr<Cairo::Context>&, Cairo::FontExtents&)
-{
- init_exception_call_count++;
- throw std::logic_error("init exception");
-}
-
-static unsigned int unicode_to_glyph_exception_call_count = 0;
-Cairo::ErrorStatus my_unicode_to_glyph_exception(const Cairo::RefPtr<Cairo::ScaledFont>&, unsigned long, unsigned long&)
-{
- unicode_to_glyph_exception_call_count++;
- throw std::logic_error("unicode-to-glyph exception");
-}
-
-static unsigned int render_glyph_exception_call_count = 0;
-Cairo::ErrorStatus my_render_glyph_exception(const Cairo::RefPtr<Cairo::ScaledFont>&, unsigned long, const Cairo::RefPtr<Cairo::Context>&, Cairo::TextExtents&)
-{
- render_glyph_exception_call_count++;
- throw std::logic_error("render-glyph exception");
-}
-
-
-void test_user_font_callbacks_exception()
-{
- Cairo::RefPtr<Cairo::UserFontFace> font = Cairo::UserFontFace::create();
- BOOST_CHECK(font);
- font->set_init_func(sigc::ptr_fun(my_init_exception));
-
- // the init() callback will throw an exception, if this isn't handled in the
- // callback wrapper, the program will abort since an exception can't unwind
- // through C code. However, due to the exception being thrown, the create()
- // function will fail and throw a new exception. So if the executable doesn't
- // abort, we should get an exception here.
- Cairo::RefPtr<Cairo::ScaledFont> scaled_font;
- BOOST_CHECK_THROW (scaled_font = Cairo::ScaledFont::create(font,
- Cairo::scaled_matrix(10, 10),
- Cairo::identity_matrix(),
- Cairo::FontOptions()),
- Cairo::logic_error);
- BOOST_CHECK (init_exception_call_count > 0);
-
- // now initialize a scaled font properly so we can test the other callbacks
- font = Cairo::UserFontFace::create();
- font->set_init_func(sigc::ptr_fun(my_init));
- font->set_render_glyph_func(sigc::ptr_fun(my_render_glyph_exception));
- font->set_unicode_to_glyph_func(sigc::ptr_fun(my_unicode_to_glyph_exception));
- BOOST_CHECK_NO_THROW (scaled_font = Cairo::ScaledFont::create(font,
- Cairo::scaled_matrix(10, 10),
- Cairo::identity_matrix(),
- Cairo::FontOptions()))
- Cairo::RefPtr<Cairo::ImageSurface> surface =
- Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 100, 100);
- Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface);
- cr->set_font_face(font);
- // this call should throw an exception since the callback wrapper will return
- // an error status (that will be translated into an exception) but the test
- // shouldn't abort sindce the callback exceptions are handled by the callback
- // wrapper
- BOOST_REQUIRE_EQUAL (CAIRO_STATUS_SUCCESS, font->get_status());
- BOOST_CHECK_THROW(cr->show_text("Hello, world"), Cairo::logic_error);
- BOOST_CHECK (UserFontCallbacks::unicode_to_glyph_call_count > 0);
- BOOST_CHECK (UserFontCallbacks::render_glyph_call_count > 0);
-}
-
-// create some dummy callbacks
-static unsigned int init2_call_count = 0;
-Cairo::ErrorStatus my_init2(const Cairo::RefPtr<Cairo::ScaledFont>&, const Cairo::RefPtr<Cairo::Context>&, Cairo::FontExtents&)
-{
- init2_call_count++;
- return CAIRO_STATUS_SUCCESS;
-}
-
-void test_user_font_replace_callback()
-{
- // reset
- init_call_count = 0;
- Cairo::RefPtr<Cairo::UserFontFace> font = Cairo::UserFontFace::create();
- font->set_init_func(sigc::ptr_fun(my_init));
- // now replace the init function with my_init2 and make sure that the 2nd
- // function is called, not the first
- font->set_init_func(sigc::ptr_fun(my_init2));
- Cairo::RefPtr<Cairo::ScaledFont> scaled_font;
- BOOST_CHECK_NO_THROW (scaled_font = Cairo::ScaledFont::create(font,
- Cairo::scaled_matrix(10, 10),
- Cairo::identity_matrix(),
- Cairo::FontOptions()))
- BOOST_CHECK (init2_call_count > 0);
- BOOST_CHECK_EQUAL (init_call_count, 0);
-}
-#endif // UserFont disabled
-
#ifdef CAIRO_HAS_FT_FONT
void test_ft_font_face()
{
@@ -346,14 +109,6 @@ init_unit_test_suite(int argc, char* argv[])
test->add (BOOST_TEST_CASE (&test_create_toy));
test->add (BOOST_TEST_CASE (&test_toy_getters));
- /*
- test->add (BOOST_TEST_CASE (&test_user_font_create));
- test->add (BOOST_TEST_CASE (&test_user_font_callbacks_ptr));
- test->add (BOOST_TEST_CASE (&test_user_font_callbacks_ptr_text));
- test->add (BOOST_TEST_CASE (&test_user_font_callbacks_mem));
- test->add (BOOST_TEST_CASE (&test_user_font_callbacks_exception));
- test->add (BOOST_TEST_CASE (&test_user_font_replace_callback));
- */
#ifdef CAIRO_HAS_FT_FONT
test->add (BOOST_TEST_CASE (&test_ft_font_face));
#endif // CAIRO_HAS_FT_FONT