Skip to content

Commit ee2d278

Browse files
committed
Re-enable the last integration test.
1 parent b0e52f0 commit ee2d278

File tree

3 files changed

+46
-57
lines changed

3 files changed

+46
-57
lines changed

ift/client/fontations_client.cc

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,19 @@ void ParseGraph(const std::string& text, graph& out) {
5252
}
5353
}
5454

55+
void ParseFetched(const std::string& text, btree_set<std::string>& uris_out) {
56+
std::stringstream ss(text);
57+
std::string marker(" fetching ");
58+
59+
std::string line;
60+
while (getline(ss, line)) {
61+
if (line.substr(0, marker.size()) == marker) {
62+
std::string uri(line.substr(marker.size()));
63+
uris_out.insert(uri);
64+
}
65+
}
66+
}
67+
5568
StatusOr<std::string> WriteFontToDisk(const Encoder& encoder,
5669
const FontData& base) {
5770
char template_str[] = "fontations_client_XXXXXX";
@@ -117,8 +130,9 @@ Status ToGraph(const Encoder& encoder, const FontData& base, graph& out) {
117130

118131
StatusOr<FontData> ExtendWithDesignSpace(
119132
const Encoder& encoder, const FontData& base,
120-
btree_set<uint32_t> codepoints, absl::btree_set<hb_tag_t> feature_tags,
121-
flat_hash_map<hb_tag_t, AxisRange> design_space) {
133+
btree_set<uint32_t> codepoints, btree_set<hb_tag_t> feature_tags,
134+
flat_hash_map<hb_tag_t, AxisRange> design_space,
135+
btree_set<std::string>* applied_uris) {
122136
auto font_path_str = WriteFontToDisk(encoder, base);
123137
if (!font_path_str.ok()) {
124138
return font_path_str.status();
@@ -174,14 +188,19 @@ StatusOr<FontData> ExtendWithDesignSpace(
174188
return r.status();
175189
}
176190

191+
if (applied_uris) {
192+
ParseFetched(*r, *applied_uris);
193+
}
194+
177195
return FontData(make_hb_blob(hb_blob_create_from_file(output.c_str())));
178196
}
179197

180198
StatusOr<FontData> Extend(const ift::encoder::Encoder& encoder,
181199
const common::FontData& ift_font,
182200
absl::btree_set<uint32_t> codepoints) {
183201
absl::flat_hash_map<hb_tag_t, common::AxisRange> design_space;
184-
return ExtendWithDesignSpace(encoder, ift_font, codepoints, {}, design_space);
202+
return ExtendWithDesignSpace(encoder, ift_font, codepoints, {}, design_space,
203+
nullptr);
185204
}
186205

187206
} // namespace ift::client

ift/client/fontations_client.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@ absl::Status ToGraph(const ift::encoder::Encoder& encoder,
2727
/**
2828
* Runs 'ift_extend' on the IFT font created by encoder and returns the
2929
* resulting extended font.
30+
*
31+
* if non null, applied_uris will be populated with the set of uris that
32+
* the client ended up fetching and applying.
3033
*/
3134
absl::StatusOr<common::FontData> ExtendWithDesignSpace(
3235
const ift::encoder::Encoder& encoder, const common::FontData& ift_font,
3336
absl::btree_set<uint32_t> codepoints,
3437
absl::btree_set<hb_tag_t> feature_tags,
35-
absl::flat_hash_map<hb_tag_t, common::AxisRange> design_space);
38+
absl::flat_hash_map<hb_tag_t, common::AxisRange> design_space,
39+
absl::btree_set<std::string>* applied_uris = nullptr);
3640

3741
absl::StatusOr<common::FontData> Extend(const ift::encoder::Encoder& encoder,
3842
const common::FontData& ift_font,

ift/integration_test.cc

Lines changed: 19 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,6 @@ bool GvarDataMatches(hb_face_t* a, hb_face_t* b, uint32_t codepoint,
251251

252252
// TODO(garretrieger): full expansion test.
253253
// TODO(garretrieger): test of a woff2 encoded IFT font.
254-
// TODO(garretrieger): add IFTB only test case.
255-
// TODO(garretrieger): extension specific url template.
256254

257255
TEST_F(IntegrationTest, TableKeyedOnly) {
258256
Encoder encoder;
@@ -791,10 +789,9 @@ TEST_F(IntegrationTest, MixedMode_DesignSpaceAugmentation) {
791789
GvarDataMatches(orig_face.get(), extended_face.get(), chunk3_cp, 7));
792790
}
793791

794-
/*
795792
TEST_F(IntegrationTest, MixedMode_DesignSpaceAugmentation_DropsUnusedPatches) {
796793
Encoder encoder;
797-
auto sc = InitEncoderForVfIftb(encoder);
794+
auto sc = InitEncoderForVfMixedMode(encoder);
798795
ASSERT_TRUE(sc.ok()) << sc;
799796

800797
// target paritions: {{0, 1}, {2}, {3, 4}} + add wght axis
@@ -804,65 +801,34 @@ TEST_F(IntegrationTest, MixedMode_DesignSpaceAugmentation_DropsUnusedPatches) {
804801
sc.Update(encoder.AddExtensionSubsetOfIftbPatches({3, 4}));
805802
encoder.AddOptionalDesignSpace({{kWght, *AxisRange::Range(100, 900)}});
806803
encoder.AddIftbUrlTemplateOverride({{kWght, *AxisRange::Range(100, 900)}},
807-
"vf-0x$2$1");
804+
"vf-{id}");
808805

809806
ASSERT_TRUE(sc.ok()) << sc;
810807

811808
auto encoded = encoder.Encode();
812809
ASSERT_TRUE(encoded.ok()) << encoded.status();
810+
auto encoded_face = encoded->face();
813811

814-
auto client = IFTClient::NewClient(std::move(*encoded));
815-
ASSERT_TRUE(client.ok()) << client.status();
816-
817-
// Phase 1
818-
client->AddDesiredCodepoints({chunk3_cp, chunk4_cp});
819-
sc = client->AddDesiredDesignSpace(kWght, 100, 900);
820-
ASSERT_TRUE(sc.ok()) << sc;
821-
auto state = client->Process();
822-
ASSERT_TRUE(state.ok()) << state.status();
823-
ASSERT_EQ(*state, IFTClient::NEEDS_PATCHES);
824-
825-
auto patches = client->PatchesNeeded();
826-
flat_hash_set<std::string> expected_patches = {"0x03", "0x04", "0x06"};
827-
ASSERT_EQ(patches, expected_patches);
828-
sc = AddPatches(*client, encoder);
829-
ASSERT_TRUE(sc.ok()) << sc;
830-
831-
state = client->Process();
832-
ASSERT_TRUE(state.ok()) << state.status();
833-
ASSERT_EQ(*state, IFTClient::NEEDS_PATCHES);
834-
835-
// Phase 2
836-
patches = client->PatchesNeeded();
837-
expected_patches = {"0x0d"};
838-
ASSERT_EQ(patches, expected_patches);
839-
sc = AddPatches(*client, encoder);
840-
ASSERT_TRUE(sc.ok()) << sc;
841-
842-
state = client->Process();
843-
ASSERT_TRUE(state.ok()) << state.status();
844-
ASSERT_EQ(*state, IFTClient::NEEDS_PATCHES);
812+
btree_set<std::string> fetched_uris;
813+
auto extended = ExtendWithDesignSpace(
814+
encoder, *encoded, {chunk3_cp, chunk4_cp}, {},
815+
{{kWght, *AxisRange::Range(100, 900)}}, &fetched_uris);
845816

846-
// Phase 3
847-
patches = client->PatchesNeeded();
848-
expected_patches = {"vf-0x03", "vf-0x04"};
849-
ASSERT_EQ(patches, expected_patches);
850-
sc = AddPatches(*client, encoder);
851-
ASSERT_TRUE(sc.ok()) << sc;
817+
// correspond to ids 3, 4, 6, d
818+
btree_set<std::string> expected_uris{"0C", "0G", "0O",
819+
"1K", "vf-0C", "vf-0G"};
852820

853-
state = client->Process();
854-
ASSERT_TRUE(state.ok()) << state.status();
855-
ASSERT_EQ(*state, IFTClient::READY);
821+
ASSERT_EQ(fetched_uris, expected_uris);
856822

857-
// Checks
823+
// TODO check the patches that were used by looking at ift_extend output
824+
ASSERT_TRUE(extended.ok()) << extended.status();
825+
auto extended_face = extended->face();
858826

859-
auto face = client->GetFontData().face();
860-
ASSERT_GT(FontHelper::GvarData(face.get(), chunk0_gid)->size(), 0);
861-
ASSERT_GT(FontHelper::GvarData(face.get(), chunk1_gid)->size(), 0);
862-
ASSERT_EQ(FontHelper::GvarData(face.get(), chunk2_gid)->size(), 0);
863-
ASSERT_GT(FontHelper::GvarData(face.get(), chunk3_gid)->size(), 0);
864-
ASSERT_GT(FontHelper::GvarData(face.get(), chunk4_gid)->size(), 0);
827+
ASSERT_GT(FontHelper::GvarData(extended_face.get(), chunk0_gid)->size(), 0);
828+
ASSERT_GT(FontHelper::GvarData(extended_face.get(), chunk1_gid)->size(), 0);
829+
ASSERT_EQ(FontHelper::GvarData(extended_face.get(), chunk2_gid)->size(), 0);
830+
ASSERT_GT(FontHelper::GvarData(extended_face.get(), chunk3_gid)->size(), 0);
831+
ASSERT_GT(FontHelper::GvarData(extended_face.get(), chunk4_gid)->size(), 0);
865832
}
866-
*/
867833

868834
} // namespace ift

0 commit comments

Comments
 (0)