diff --git a/Lib/fontTools/designspaceLib/__init__.py b/Lib/fontTools/designspaceLib/__init__.py index 4af6882f3..400e960e4 100644 --- a/Lib/fontTools/designspaceLib/__init__.py +++ b/Lib/fontTools/designspaceLib/__init__.py @@ -2940,7 +2940,7 @@ class DesignSpaceDocument(LogMixin, AsDictMixin): source.font = None res = copy.deepcopy(self) for source, font in zip(res.sources, fonts): - res.font = font + source.font = font return res finally: for source, font in zip(self.sources, fonts): diff --git a/Tests/designspaceLib/designspace_test.py b/Tests/designspaceLib/designspace_test.py index 694bba1e5..bdf1ef137 100644 --- a/Tests/designspaceLib/designspace_test.py +++ b/Tests/designspaceLib/designspace_test.py @@ -1043,3 +1043,15 @@ def test_addRuleDescriptor(tmp_path): # Test it doesn't crash. ds.write(tmp_path / "test.designspace") + + +def test_deepcopyExceptFonts(): + ds = DesignSpaceDocument() + ds.addSourceDescriptor(font=object()) + ds.addSourceDescriptor(font=object()) + + ds_copy = ds.deepcopyExceptFonts() + + assert ds.tostring() == ds_copy.tostring() + assert ds.sources[0].font is ds_copy.sources[0].font + assert ds.sources[1].font is ds_copy.sources[1].font