[cairo-commit] rcairo/test test_font_face.rb,1.1,1.2
Kouhei Sutou
commit at pdx.freedesktop.org
Sat Aug 16 05:52:19 PDT 2008
Committed by: kou
Update of /cvs/cairo/rcairo/test
In directory kemper:/tmp/cvs-serv9707/test
Modified Files:
test_font_face.rb
Log Message:
* src/lib/cairo.rb (Cairo.exit_application): add.
* src/rb_cairo_surface.c: use rb_cairo__invoke_callback().
* src/rb_cairo_private.c, src/rb_cairo_private.h
(rb_cairo__invoke_callback): use rb_protect() and exit if an
exception is raised in callback.
* src/rb_cairo_font_face.c: support Cairo::UserFontFace.
* src/rb_cairo_exception.c, src/rb_cairo_private.h
(rb_cairo__exception_to_status): add.
* src/rb_cairo_context.c (cr_show_text_glyphs): initialize variables.
* src/cairo.def, src/rb_cairo.h: add
rb_cCairo_UserFontFace_TextToGlyphsData.
* test/test_font_face.rb: add tests for user font.
Index: test_font_face.rb
===================================================================
RCS file: /cvs/cairo/rcairo/test/test_font_face.rb,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- test_font_face.rb 14 Aug 2008 08:11:15 -0000 1.1
+++ test_font_face.rb 16 Aug 2008 12:52:17 -0000 1.2
@@ -22,4 +22,198 @@
assert_equal(["sans", Cairo::FONT_SLANT_ITALIC, Cairo::FONT_WEIGHT_BOLD],
[face.family, face.slant, face.weight])
end
+
+ def test_user_font_face_empty
+ only_cairo_version(1, 7, 2)
+
+ face = Cairo::UserFontFace.new
+ scaled_font = Cairo::ScaledFont.new(face,
+ Cairo::Matrix.identity,
+ Cairo::Matrix.identity,
+ Cairo::FontOptions.new)
+ assert_equal([[], [], false],
+ scaled_font.text_to_glyphs(0, 0, "text"))
+ end
+
+ def test_user_font_face_callback
+ only_cairo_version(1, 7, 2)
+
+ face = Cairo::UserFontFace.new
+
+ init_args = []
+ face.on_init do |*args|
+ init_args << args
+ end
+
+ render_glyph_args = []
+ face.on_render_glyph do |*args|
+ render_glyph_args << args
+ end
+
+ text_to_glyphs_args = []
+ face.on_text_to_glyphs do |*args|
+ text_to_glyphs_args << args
+ scaled_font, utf8, data = args
+ data.backward = true
+ end
+
+ unicode_to_glyph_args = []
+ face.on_unicode_to_glyph do |*args|
+ unicode_to_glyph_args << args
+ scaled_font, unicode = args
+ unicode
+ end
+
+ scaled_font = Cairo::ScaledFont.new(face,
+ Cairo::Matrix.identity,
+ Cairo::Matrix.identity,
+ Cairo::FontOptions.new)
+ result = scaled_font.text_to_glyphs(0, 0, "text")
+ assert_equal([[[Cairo::ScaledFont, Cairo::Context, Cairo::FontExtents]],
+ [[Cairo::ScaledFont, ?t, Cairo::Context, Cairo::TextExtents],
+ [Cairo::ScaledFont, ?e, Cairo::Context, Cairo::TextExtents],
+ [Cairo::ScaledFont, ?x, Cairo::Context, Cairo::TextExtents]],
+ [[Cairo::ScaledFont, "text",
+ Cairo::UserFontFace::TextToGlyphsData]],
+ [[Cairo::ScaledFont, ?t],
+ [Cairo::ScaledFont, ?e],
+ [Cairo::ScaledFont, ?x],
+ [Cairo::ScaledFont, ?t]],
+ [[], [], true]],
+ [classify_cairo_object(init_args),
+ classify_cairo_object(render_glyph_args),
+ classify_cairo_object(text_to_glyphs_args),
+ classify_cairo_object(unicode_to_glyph_args),
+ result])
+ end
+
+ class CustomUserFontFace < Cairo::UserFontFace
+ attr_reader :init_args, :render_glyph_args
+ attr_reader :text_to_glyphs_args, :unicode_to_glyph_args
+ def initialize
+ super
+ @init_args = []
+ @render_glyph_args = []
+ @text_to_glyphs_args = []
+ @unicode_to_glyph_args = []
+ end
+
+ def init(*args)
+ @init_args << args
+ end
+
+ def render_glyph(*args)
+ @render_glyph_args << args
+ end
+
+ def text_to_glyphs(*args)
+ @text_to_glyphs_args << args
+ scaled_font, utf8, data = args
+ data.backward = true
+ end
+
+ def unicode_to_glyph(*args)
+ @unicode_to_glyph_args << args
+ scaled_font, unicode = args
+ unicode
+ end
+ end
+
+ def test_user_font_face_class
+ only_cairo_version(1, 7, 2)
+
+ face = CustomUserFontFace.new
+
+ scaled_font = Cairo::ScaledFont.new(face,
+ Cairo::Matrix.identity,
+ Cairo::Matrix.identity,
+ Cairo::FontOptions.new)
+ result = scaled_font.text_to_glyphs(0, 0, "text")
+ assert_equal([[[Cairo::ScaledFont, Cairo::Context, Cairo::FontExtents]],
+ [[Cairo::ScaledFont, ?t, Cairo::Context, Cairo::TextExtents],
+ [Cairo::ScaledFont, ?e, Cairo::Context, Cairo::TextExtents],
+ [Cairo::ScaledFont, ?x, Cairo::Context, Cairo::TextExtents]],
+ [[Cairo::ScaledFont, "text",
+ Cairo::UserFontFace::TextToGlyphsData]],
+ [[Cairo::ScaledFont, ?t],
+ [Cairo::ScaledFont, ?e],
+ [Cairo::ScaledFont, ?x],
+ [Cairo::ScaledFont, ?t]],
+ [[], [], true]],
+ [classify_cairo_object(face.init_args),
+ classify_cairo_object(face.render_glyph_args),
+ classify_cairo_object(face.text_to_glyphs_args),
+ classify_cairo_object(face.unicode_to_glyph_args),
+ result])
+ end
+
+ def test_user_font_face_class_and_callback
+ only_cairo_version(1, 7, 2)
+
+ face = CustomUserFontFace.new
+
+ init_args = []
+ face.on_init do |*args|
+ init_args << args
+ end
+
+ render_glyph_args = []
+ face.on_render_glyph do |*args|
+ render_glyph_args << args
+ end
+
+ text_to_glyphs_args = []
+ face.on_text_to_glyphs do |*args|
+ text_to_glyphs_args << args
+ scaled_font, utf8, data = args
+ data.backward = true
+ end
+
+ unicode_to_glyph_args = []
+ face.on_unicode_to_glyph do |*args|
+ unicode_to_glyph_args << args
+ scaled_font, unicode = args
+ unicode
+ end
+
+ scaled_font = Cairo::ScaledFont.new(face,
+ Cairo::Matrix.identity,
+ Cairo::Matrix.identity,
+ Cairo::FontOptions.new)
+ result = scaled_font.text_to_glyphs(0, 0, "text")
+ assert_equal([[[Cairo::ScaledFont, Cairo::Context, Cairo::FontExtents]],
+ [[Cairo::ScaledFont, ?t, Cairo::Context, Cairo::TextExtents],
+ [Cairo::ScaledFont, ?e, Cairo::Context, Cairo::TextExtents],
+ [Cairo::ScaledFont, ?x, Cairo::Context, Cairo::TextExtents]],
+ [[Cairo::ScaledFont, "text",
+ Cairo::UserFontFace::TextToGlyphsData]],
+ [[Cairo::ScaledFont, ?t],
+ [Cairo::ScaledFont, ?e],
+ [Cairo::ScaledFont, ?x],
+ [Cairo::ScaledFont, ?t]],
+ [],
+ [],
+ [],
+ [],
+ [[], [], true]],
+ [classify_cairo_object(init_args),
+ classify_cairo_object(render_glyph_args),
+ classify_cairo_object(text_to_glyphs_args),
+ classify_cairo_object(unicode_to_glyph_args),
+ classify_cairo_object(face.init_args),
+ classify_cairo_object(face.render_glyph_args),
+ classify_cairo_object(face.text_to_glyphs_args),
+ classify_cairo_object(face.unicode_to_glyph_args),
+ result])
+ end
+
+ def classify_cairo_object(object)
+ if object.is_a?(Array)
+ object.collect {|obj| classify_cairo_object(obj)}
+ elsif /\ACairo::/ =~ object.class.name
+ object.class
+ else
+ object
+ end
+ end
end
More information about the cairo-commit
mailing list