| #!/usr/bin/env python | |
| # | |
| # Copyright (C) 2024 The Android Open Source Project | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # | |
| import functools | |
| import sys | |
| import unittest | |
| import commandline | |
| class CommandlineTest(unittest.TestCase): | |
| def fileread(filemap, path): | |
| return filemap[path] | |
| def test_commandline(self): | |
| filemap = {} | |
| filemap["aliases.json"] = ( | |
| """[{"name": "sans-serif-thin", "to": "sans-serif", "weight": 100}]""" | |
| ) | |
| filemap["fallbacks.json"] = ( | |
| """[{"lang": "und-Arab"},{"lang": "und-Ethi"}]""" | |
| ) | |
| filemap["family.json"] = """[{ | |
| "name": "sans-serif", | |
| "fonts": [{ | |
| "file": "Roboto-Regular.ttf", | |
| "supportedAxes": "wght,ital", | |
| "axes": { "wdth": "100" } | |
| }] | |
| }, { | |
| "name": "sans-serif-condensed", | |
| "fonts": [{ | |
| "file": "Roboto-Regular.ttf", | |
| "supportedAxes": "wght,ital", | |
| "axes": { "wdth": "75" } | |
| }] | |
| }]""" | |
| filemap["family2.json"] = """[{ | |
| "name": "roboto-flex", | |
| "fonts": [{ | |
| "file": "RobotoFlex-Regular.ttf", | |
| "supportedAxes": "wght", | |
| "axes": { "wdth": "100" } | |
| }] | |
| }]""" | |
| args = commandline.parse_commandline( | |
| [ | |
| "-o", | |
| "output.xml", | |
| "--alias", | |
| "aliases.json", | |
| "--fallback", | |
| "fallbacks.json", | |
| "family.json", | |
| "family2.json", | |
| ], | |
| functools.partial(CommandlineTest.fileread, filemap), | |
| ) | |
| self.assertEqual("output.xml", args.outfile) | |
| self.assertEqual(1, len(args.aliases)) | |
| self.assertEqual("sans-serif-thin", args.aliases[0].name) | |
| self.assertEqual("sans-serif", args.aliases[0].to) | |
| self.assertEqual(100, args.aliases[0].weight) | |
| self.assertEqual(2, len(args.fallback)) | |
| # Order is not a part of expectation. Check the expected lang is included. | |
| langs = set(["und-Arab", "und-Ethi"]) | |
| self.assertTrue(args.fallback[0].lang in langs) | |
| self.assertTrue(args.fallback[1].lang in langs) | |
| self.assertEqual(3, len(args.families)) | |
| # Order is not a part of expectation. Check the expected name is included. | |
| names = set(["sans-serif", "sans-serif-condensed", "roboto-flex"]) | |
| self.assertTrue(args.families[0].name in names) | |
| self.assertTrue(args.families[1].name in names) | |
| self.assertTrue(args.families[2].name in names) | |
| if __name__ == "__main__": | |
| unittest.main(verbosity=2) |