fonttools/Tests/misc/configTools_test.py
Cosimo Lupo af6804bed5 make USE_HARFBUZZ_REPACKER a 3-state option, defaults to auto
if explicitly enabled, it will raise ImportError if uharfbuzz is not found, and will propagate the uharfbuzz error instead of silently falling back to the pure-python serializer
2022-04-21 18:11:20 +01:00

81 lines
2.3 KiB
Python

import dataclasses
import pytest
from fontTools.misc.configTools import (
AbstractConfig,
Option,
Options,
ConfigUnknownOptionError,
)
def test_can_create_custom_config_system():
class MyConfig(AbstractConfig):
options = Options()
MyConfig.register_option(
"test:option_name",
"This is an option",
0,
int,
lambda v: isinstance(v, int),
)
cfg = MyConfig({"test:option_name": "10"}, parse_values=True)
assert 10 == cfg["test:option_name"]
# This config is independent from "the" fontTools config
with pytest.raises(ConfigUnknownOptionError):
MyConfig({"fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL": 4})
# Test the repr()
assert repr(cfg) == "MyConfig({'test:option_name': 10})"
# Test the skip_unknown param: just check that the following does not raise
MyConfig({"test:unknown": "whatever"}, skip_unknown=True)
# Test that it raises on unknown option
with pytest.raises(ConfigUnknownOptionError):
cfg.get("test:unknown")
def test_options_are_unique():
class MyConfig(AbstractConfig):
options = Options()
opt1 = MyConfig.register_option("test:OPT_1", "", "foo", str, any)
cfg = MyConfig({opt1: "bar"})
assert cfg[opt1] == "bar"
opt2 = Option("test:OPT_1", "", "foo", str, any)
assert dataclasses.asdict(opt1) == dataclasses.asdict(opt2)
assert opt1 != opt2
with pytest.raises(ConfigUnknownOptionError):
cfg.get(opt2)
with pytest.raises(ConfigUnknownOptionError):
cfg.set(opt2, "bar")
def test_optional_bool():
for v in ("yes", "YES", "Yes", "1", "True", "true", "TRUE"):
assert Option.parse_optional_bool(v) is True
for v in ("no", "NO", "No", "0", "False", "false", "FALSE"):
assert Option.parse_optional_bool(v) is False
for v in ("auto", "AUTO", "Auto", "None", "none", "NONE"):
assert Option.parse_optional_bool(v) is None
with pytest.raises(ValueError, match="invalid optional bool"):
Option.parse_optional_bool("foobar")
assert Option.validate_optional_bool(True)
assert Option.validate_optional_bool(False)
assert Option.validate_optional_bool(None)
assert not Option.validate_optional_bool(1)
assert not Option.validate_optional_bool(0)
assert not Option.validate_optional_bool("1")