[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