1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
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")
|