def testWrite(self): writer = UFOWriter(self.dstDir, formatVersion=2) writer.setKerningGroupConversionRenameMaps(self.downConversionMapping) writer.writeKerning(self.kerning) writer.writeGroups(self.groups) # test groups path = os.path.join(self.dstDir, "groups.plist") with open(path, "rb") as f: writtenGroups = plistlib.load(f) self.assertEqual(writtenGroups, self.expectedWrittenGroups) # test kerning path = os.path.join(self.dstDir, "kerning.plist") with open(path, "rb") as f: writtenKerning = plistlib.load(f) self.assertEqual(writtenKerning, self.expectedWrittenKerning) self.tearDownUFO()
def test_io(tmpdir, parametrized_pl): pl, use_builtin_types = parametrized_pl testpath = tmpdir / "test.plist" with testpath.open("wb") as fp: plistlib.dump(pl, fp, use_builtin_types=use_builtin_types) with testpath.open("rb") as fp: pl2 = plistlib.load(fp, use_builtin_types=use_builtin_types) assert pl == pl2 with pytest.raises(AttributeError): plistlib.dump(pl, "filename") with pytest.raises(AttributeError): plistlib.load("filename")
def test_writePlist_to_file(tmpdir, pl_no_builtin_types): testpath = tmpdir / "test.plist" with testpath.open("wb") as fp: plistlib.writePlist(pl_no_builtin_types, fp) with testpath.open("rb") as fp: pl2 = plistlib.load(fp, use_builtin_types=False) assert pl2 == pl_no_builtin_types
def test_bytesio(parametrized_pl): pl, use_builtin_types = parametrized_pl b = BytesIO() plistlib.dump(pl, b, use_builtin_types=use_builtin_types) pl2 = plistlib.load(BytesIO(b.getvalue()), use_builtin_types=use_builtin_types) assert pl == pl2
def test_keysort_bytesio(sort_keys): pl = collections.OrderedDict() pl["b"] = 1 pl["a"] = 2 pl["c"] = 3 b = BytesIO() plistlib.dump(pl, b, sort_keys=sort_keys) pl2 = plistlib.load(BytesIO(b.getvalue()), dict_type=collections.OrderedDict) assert dict(pl) == dict(pl2) if sort_keys: assert list(pl2.keys()) == ["a", "b", "c"] else: assert list(pl2.keys()) == ["b", "a", "c"]
def readPlist(self): path = os.path.join(self.dstDir, "fontinfo.plist") with open(path, "rb") as f: plist = plistlib.load(f) return plist
def compareFileStructures(self, path1, path2, expectedInfoData, testFeatures): # result metainfoPath1 = os.path.join(path1, "metainfo.plist") fontinfoPath1 = os.path.join(path1, "fontinfo.plist") kerningPath1 = os.path.join(path1, "kerning.plist") groupsPath1 = os.path.join(path1, "groups.plist") libPath1 = os.path.join(path1, "lib.plist") featuresPath1 = os.path.join(path1, "features.plist") glyphsPath1 = os.path.join(path1, "glyphs") glyphsPath1_contents = os.path.join(glyphsPath1, "contents.plist") glyphsPath1_A = os.path.join(glyphsPath1, "A_.glif") glyphsPath1_B = os.path.join(glyphsPath1, "B_.glif") # expected result metainfoPath2 = os.path.join(path2, "metainfo.plist") fontinfoPath2 = os.path.join(path2, "fontinfo.plist") kerningPath2 = os.path.join(path2, "kerning.plist") groupsPath2 = os.path.join(path2, "groups.plist") libPath2 = os.path.join(path2, "lib.plist") featuresPath2 = os.path.join(path2, "features.plist") glyphsPath2 = os.path.join(path2, "glyphs") glyphsPath2_contents = os.path.join(glyphsPath2, "contents.plist") glyphsPath2_A = os.path.join(glyphsPath2, "A_.glif") glyphsPath2_B = os.path.join(glyphsPath2, "B_.glif") # look for existence self.assertEqual(os.path.exists(metainfoPath1), True) self.assertEqual(os.path.exists(fontinfoPath1), True) self.assertEqual(os.path.exists(kerningPath1), True) self.assertEqual(os.path.exists(groupsPath1), True) self.assertEqual(os.path.exists(libPath1), True) self.assertEqual(os.path.exists(glyphsPath1), True) self.assertEqual(os.path.exists(glyphsPath1_contents), True) self.assertEqual(os.path.exists(glyphsPath1_A), True) self.assertEqual(os.path.exists(glyphsPath1_B), True) if testFeatures: self.assertEqual(os.path.exists(featuresPath1), True) # look for aggrement with open(metainfoPath1, "rb") as f: data1 = plistlib.load(f) with open(metainfoPath2, "rb") as f: data2 = plistlib.load(f) self.assertEqual(data1, data2) with open(fontinfoPath1, "rb") as f: data1 = plistlib.load(f) self.assertEqual(sorted(data1.items()), sorted(expectedInfoData.items())) with open(kerningPath1, "rb") as f: data1 = plistlib.load(f) with open(kerningPath2, "rb") as f: data2 = plistlib.load(f) self.assertEqual(data1, data2) with open(groupsPath1, "rb") as f: data1 = plistlib.load(f) with open(groupsPath2, "rb") as f: data2 = plistlib.load(f) self.assertEqual(data1, data2) with open(libPath1, "rb") as f: data1 = plistlib.load(f) with open(libPath2, "rb") as f: data2 = plistlib.load(f) if "UFO1" in libPath1: for key in removeFromFormatVersion1Lib: if key in data1: del data1[key] if "UFO1" in libPath2: for key in removeFromFormatVersion1Lib: if key in data2: del data2[key] self.assertEqual(data1, data2) with open(glyphsPath1_contents, "rb") as f: data1 = plistlib.load(f) with open(glyphsPath2_contents, "rb") as f: data2 = plistlib.load(f) self.assertEqual(data1, data2) with open(glyphsPath1_A, "rb") as f: data1 = plistlib.load(f) with open(glyphsPath2_A, "rb") as f: data2 = plistlib.load(f) self.assertEqual(data1, data2) with open(glyphsPath1_B, "rb") as f: data1 = plistlib.load(f) with open(glyphsPath2_B, "rb") as f: data2 = plistlib.load(f) self.assertEqual(data1, data2)