From 1d1b86895826953768d047438cfb68344ddf4289 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 1 Jul 2023 13:51:31 -0700 Subject: [PATCH] font: do not use Noto on macOS for tests, it doesn't work --- src/font/Group.zig | 12 +++++++++--- src/font/face/coretext.zig | 1 + src/font/shaper/harfbuzz.zig | 5 ++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/font/Group.zig b/src/font/Group.zig index f32395608..91c3978ab 100644 --- a/src/font/Group.zig +++ b/src/font/Group.zig @@ -411,9 +411,13 @@ test { defer group.deinit(); try group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testFont, .{ .points = 12 }))); - try group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testEmoji, .{ .points = 12 }))); try group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testEmojiText, .{ .points = 12 }))); + if (font.options.backend != .coretext) { + // Coretext doesn't support Noto's format + try group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testEmoji, .{ .points = 12 }))); + } + // Should find all visible ASCII var i: u32 = 32; while (i < 127) : (i += 1) { @@ -437,14 +441,16 @@ test { { const idx = group.indexForCodepoint('🥸', .regular, null).?; try testing.expectEqual(Style.regular, idx.style); - try testing.expectEqual(@as(FontIndex.IndexInt, 1), idx.idx); + + const expected: FontIndex.IndexInt = if (font.options.backend == .coretext) 1 else 2; + try testing.expectEqual(expected, idx.idx); } // Try text emoji { const idx = group.indexForCodepoint(0x270C, .regular, .text).?; try testing.expectEqual(Style.regular, idx.style); - try testing.expectEqual(@as(FontIndex.IndexInt, 2), idx.idx); + try testing.expectEqual(@as(FontIndex.IndexInt, 1), idx.idx); } { const idx = group.indexForCodepoint(0x270C, .regular, .emoji).?; diff --git a/src/font/face/coretext.zig b/src/font/face/coretext.zig index cdc4bd17d..3ed30cc2a 100644 --- a/src/font/face/coretext.zig +++ b/src/font/face/coretext.zig @@ -30,6 +30,7 @@ pub const Face = struct { const arr = macos.text.createFontDescriptorsFromData(data) orelse return error.FontInitFailure; defer arr.release(); + if (arr.getCount() == 0) return error.FontInitFailure; const desc = arr.getValueAtIndex(macos.text.FontDescriptor, 0); const ct_font = try macos.text.Font.createWithFontDescriptor(desc, 12); diff --git a/src/font/shaper/harfbuzz.zig b/src/font/shaper/harfbuzz.zig index 335ef6ad7..8c16344df 100644 --- a/src/font/shaper/harfbuzz.zig +++ b/src/font/shaper/harfbuzz.zig @@ -648,8 +648,11 @@ fn testShaper(alloc: Allocator) !TestShaper { // Setup group try cache_ptr.group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testFont, .{ .points = 12 }))); - try cache_ptr.group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testEmoji, .{ .points = 12 }))); try cache_ptr.group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testEmojiText, .{ .points = 12 }))); + if (font.options.backend != .coretext) { + // Coretext doesn't support Noto's format + try cache_ptr.group.addFace(alloc, .regular, DeferredFace.initLoaded(try Face.init(lib, testEmoji, .{ .points = 12 }))); + } var cell_buf = try alloc.alloc(font.shape.Cell, 80); errdefer alloc.free(cell_buf);