diff --git a/fixtures/league-spartan-v11-latin/league-spartan-v11-latin-700.ttf b/fixtures/league-spartan-v11-latin/league-spartan-v11-latin-700.ttf new file mode 100644 index 0000000..4d9f425 Binary files /dev/null and b/fixtures/league-spartan-v11-latin/league-spartan-v11-latin-700.ttf differ diff --git a/subsetter_tool.py b/subsetter_tool.py index e708c38..8f42fb4 100644 --- a/subsetter_tool.py +++ b/subsetter_tool.py @@ -48,8 +48,15 @@ def write_subset_font( fonttools_subsetter = subset.Subsetter(options) fonttools_subsetter.populate(text=text) fonttools_subsetter.subset(font) - subset.save_font(font, output_path, options) + try: + subset.save_font(font, output_path, options) + except PermissionError: + message = f"\n[ Error ] Unable to write font file `{output_path}`. Check the " + "path exists with write permissions." + eprint(message) + raise PermissionError(message) print("Wrote {} subset to {}".format(format, str(output_path))) + return str(output_path) @@ -63,6 +70,8 @@ def write_subset_font_file_for_format(font_file_path_str: str, text: str, hash: ) except FileNotFoundError: sys.exit(1) + except PermissionError: + sys.exit(1) return subset_file_path diff --git a/tests/test_subsetter_tool.py b/tests/test_subsetter_tool.py index 424bc7d..cf29054 100644 --- a/tests/test_subsetter_tool.py +++ b/tests/test_subsetter_tool.py @@ -1,4 +1,6 @@ from pathlib import Path +import os +import stat import unittest from subsetter_tool import get_subset_font_path, write_subset_font @@ -20,7 +22,7 @@ def test_get_subset_font_path_returns_expected_output_for_valid_input(self): expected = Path("league-spartan-v11-latin-600__subset_5fba6996.ttf") self.assertEqual(result, expected) - def test_write_subset_font_returns_expected_result(self): + def test_write_subset_font_returns_expected_result_for_woff2(self): # arrange input_path = Path( "./fixtures/league-spartan-v11-latin/league-spartan-v11-latin-600.woff2" @@ -36,17 +38,51 @@ def test_write_subset_font_returns_expected_result(self): expected = "league-spartan-v11-latin-600__subset_9e5cab01.woff2" self.assertEqual(result, expected) + def test_write_subset_font_returns_expected_result_for_ttf(self): + # arrange + input_path = Path( + "./fixtures/league-spartan-v11-latin/league-spartan-v11-latin-600.ttf" + ) + text = "Lorem ipsum dolor sit amet" + hash = "9e5cab01" + format = "ttf" + + # act + result = write_subset_font(input_path, text, hash, format) + + # assert + expected = "league-spartan-v11-latin-600__subset_9e5cab01.ttf" + self.assertEqual(result, expected) + def test_write_subset_font_returns_exception_when_input_path_does_not_exist(self): # arrange input_path = Path("./fixtures/does-not-exist.ttf") text = "Lorem ipsum dolor sit amet" hash = "9e5cab01" - format = "woff2" + format = "ttf" # act/assert with self.assertRaises(FileNotFoundError): write_subset_font(input_path, text, hash, format) + def test_write_subset_font_returns_exception_when_output_is_not_writable(self): + # arrange + input_path = Path( + "./fixtures/league-spartan-v11-latin/league-spartan-v11-latin-700.ttf" + ) + text = "Lorem ipsum dolor sit amet" + hash = "9e5cab01" + format = "ttf" + + output_path = Path("./league-spartan-v11-latin-700__subset_9e5cab01.ttf") + output_path.touch() + os.chmod(output_path, stat.S_IRUSR) + + # act/assert + with self.assertRaises(PermissionError): + write_subset_font(input_path, text, hash, format) + os.chmod(output_path, stat.S_IWUSR) + if __name__ == "__main__": unittest.main()