diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_3_diff.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_3_diff.ttx
new file mode 100644
index 000000000..b640f10fd
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_3_diff.ttx
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_3_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_3_same.ttx
new file mode 100644
index 000000000..b7c8a2586
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_3_same.ttx
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_4_diff.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_4_diff.ttx
new file mode 100644
index 000000000..a6e02272e
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_4_diff.ttx
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_4_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_4_same.ttx
new file mode 100644
index 000000000..9b41519b1
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_4_same.ttx
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_5_diff.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_5_diff.ttx
new file mode 100644
index 000000000..28480e758
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_5_diff.ttx
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_5_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_5_same.ttx
new file mode 100644
index 000000000..4830f9a31
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_5_same.ttx
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_6_diff.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_6_diff.ttx
new file mode 100644
index 000000000..e639bce79
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_6_diff.ttx
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_6_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_6_same.ttx
new file mode 100644
index 000000000..05e4b5148
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_6_same.ttx
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_diff.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_diff.ttx
new file mode 100644
index 000000000..d14f3b09d
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_diff.ttx
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_same.ttx
new file mode 100644
index 000000000..b7e86ba2d
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_8_same.ttx
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/data/test_results/InterpolateLayoutGPOS_size_feat_same.ttx b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_size_feat_same.ttx
new file mode 100644
index 000000000..b0f8074bc
--- /dev/null
+++ b/Tests/varLib/data/test_results/InterpolateLayoutGPOS_size_feat_same.ttx
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/interpolate_layout_test.py b/Tests/varLib/interpolate_layout_test.py
index 34c53871d..80251f543 100644
--- a/Tests/varLib/interpolate_layout_test.py
+++ b/Tests/varLib/interpolate_layout_test.py
@@ -176,6 +176,35 @@ class InterpolateLayoutTest(unittest.TestCase):
self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+ def test_varlib_interpolate_layout_GPOS_only_size_feat_same_val_ttf(self):
+ """Only GPOS; 'size' feature; same values in all masters.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str = """
+ feature size {
+ parameters 10.0 0;
+ } size;
+ """
+ features = [fea_str] * 2
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_size_feat_same.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
def test_varlib_interpolate_layout_GPOS_only_LookupType_1_same_val_ttf(self):
"""Only GPOS; LookupType 1; same values in all masters.
"""
@@ -372,6 +401,360 @@ class InterpolateLayoutTest(unittest.TestCase):
self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_3_same_val_ttf(self):
+ """Only GPOS; LookupType 3; same values in all masters.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str = """
+ feature xxxx {
+ pos cursive a ;
+ } xxxx;
+ """
+ features = [fea_str] * 2
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_3_same.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_3_diff_val_ttf(self):
+ """Only GPOS; LookupType 3; different values in each master.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str_0 = """
+ feature xxxx {
+ pos cursive a ;
+ } xxxx;
+ """
+ fea_str_1 = """
+ feature xxxx {
+ pos cursive a ;
+ } xxxx;
+ """
+ features = [fea_str_0, fea_str_1]
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_3_diff.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_4_same_val_ttf(self):
+ """Only GPOS; LookupType 4; same values in all masters.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str = """
+ markClass uni0303 @MARKS_ABOVE;
+ feature xxxx {
+ pos base a mark @MARKS_ABOVE;
+ } xxxx;
+ """
+ features = [fea_str] * 2
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_4_same.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_4_diff_val_ttf(self):
+ """Only GPOS; LookupType 4; different values in each master.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str_0 = """
+ markClass uni0303 @MARKS_ABOVE;
+ feature xxxx {
+ pos base a mark @MARKS_ABOVE;
+ } xxxx;
+ """
+ fea_str_1 = """
+ markClass uni0303 @MARKS_ABOVE;
+ feature xxxx {
+ pos base a mark @MARKS_ABOVE;
+ } xxxx;
+ """
+ features = [fea_str_0, fea_str_1]
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_4_diff.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_5_same_val_ttf(self):
+ """Only GPOS; LookupType 5; same values in all masters.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str = """
+ markClass uni0330 @MARKS_BELOW;
+ feature xxxx {
+ pos ligature f_t mark @MARKS_BELOW
+ ligComponent mark @MARKS_BELOW;
+ } xxxx;
+ """
+ features = [fea_str] * 2
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_5_same.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_5_diff_val_ttf(self):
+ """Only GPOS; LookupType 5; different values in each master.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str_0 = """
+ markClass uni0330 @MARKS_BELOW;
+ feature xxxx {
+ pos ligature f_t mark @MARKS_BELOW
+ ligComponent mark @MARKS_BELOW;
+ } xxxx;
+ """
+ fea_str_1 = """
+ markClass uni0330 @MARKS_BELOW;
+ feature xxxx {
+ pos ligature f_t mark @MARKS_BELOW
+ ligComponent mark @MARKS_BELOW;
+ } xxxx;
+ """
+ features = [fea_str_0, fea_str_1]
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_5_diff.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_6_same_val_ttf(self):
+ """Only GPOS; LookupType 6; same values in all masters.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str = """
+ markClass uni0303 @MARKS_ABOVE;
+ feature xxxx {
+ pos mark uni0308 mark @MARKS_ABOVE;
+ } xxxx;
+ """
+ features = [fea_str] * 2
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_6_same.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_6_diff_val_ttf(self):
+ """Only GPOS; LookupType 6; different values in each master.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str_0 = """
+ markClass uni0303 @MARKS_ABOVE;
+ feature xxxx {
+ pos mark uni0308 mark @MARKS_ABOVE;
+ } xxxx;
+ """
+ fea_str_1 = """
+ markClass uni0303 @MARKS_ABOVE;
+ feature xxxx {
+ pos mark uni0308 mark @MARKS_ABOVE;
+ } xxxx;
+ """
+ features = [fea_str_0, fea_str_1]
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_6_diff.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_8_same_val_ttf(self):
+ """Only GPOS; LookupType 8; same values in all masters.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str = """
+ markClass uni0303 @MARKS_ABOVE;
+ lookup CNTXT_PAIR_POS {
+ pos A a -23;
+ } CNTXT_PAIR_POS;
+
+ lookup CNTXT_MARK_TO_BASE {
+ pos base a mark @MARKS_ABOVE;
+ } CNTXT_MARK_TO_BASE;
+
+ feature xxxx {
+ pos A' lookup CNTXT_PAIR_POS a' @MARKS_ABOVE' lookup CNTXT_MARK_TO_BASE;
+ } xxxx;
+ """
+ features = [fea_str] * 2
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_8_same.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
+ def test_varlib_interpolate_layout_GPOS_only_LookupType_8_diff_val_ttf(self):
+ """Only GPOS; LookupType 8; different values in each master.
+ """
+ suffix = '.ttf'
+ ds_path = self.get_test_input('InterpolateLayout.designspace')
+ ufo_dir = self.get_test_input('master_ufo')
+ ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf')
+
+ fea_str_0 = """
+ markClass uni0303 @MARKS_ABOVE;
+ lookup CNTXT_PAIR_POS {
+ pos A a -23;
+ } CNTXT_PAIR_POS;
+
+ lookup CNTXT_MARK_TO_BASE {
+ pos base a mark @MARKS_ABOVE;
+ } CNTXT_MARK_TO_BASE;
+
+ feature xxxx {
+ pos A' lookup CNTXT_PAIR_POS a' @MARKS_ABOVE' lookup CNTXT_MARK_TO_BASE;
+ } xxxx;
+ """
+ fea_str_1 = """
+ markClass uni0303 @MARKS_ABOVE;
+ lookup CNTXT_PAIR_POS {
+ pos A a 57;
+ } CNTXT_PAIR_POS;
+
+ lookup CNTXT_MARK_TO_BASE {
+ pos base a mark @MARKS_ABOVE;
+ } CNTXT_MARK_TO_BASE;
+
+ feature xxxx {
+ pos A' lookup CNTXT_PAIR_POS a' @MARKS_ABOVE' lookup CNTXT_MARK_TO_BASE;
+ } xxxx;
+ """
+ features = [fea_str_0, fea_str_1]
+
+ self.temp_dir()
+ ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-')
+ for i, path in enumerate(ttx_paths):
+ self.compile_font(path, suffix, self.tempdir, features[i])
+
+ finder = lambda s: s.replace(ufo_dir, self.tempdir).replace('.ufo', suffix)
+ instfont = interpolate_layout(ds_path, {'weight': 500}, finder)
+
+ tables = ['GPOS']
+ expected_ttx_path = self.get_test_output('InterpolateLayoutGPOS_8_diff.ttx')
+ self.expect_ttx(instfont, expected_ttx_path, tables)
+ self.check_ttx_dump(instfont, expected_ttx_path, tables, suffix)
+
+
def test_varlib_interpolate_layout_main_ttf(self):
"""Mostly for testing varLib.interpolate_layout.main()
"""