tests/test-ui-config.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 26 Mar 2024 11:24:20 +0000
changeset 51548 1b17eeba9deb
parent 48875 6000f5b25c9b
permissions -rw-r--r--
stream-clone: stop getting the file size of all file in v3 The point of v3 is to do less work in the locked section. It was currently not the case. This significantly boost performance. The following number comes from a large private repository using perf::stream-locked-section: base-line: 35.03 seconds this-change: 24.50 seconds (-30%)

from mercurial import (
    dispatch,
    error,
    pycompat,
    ui as uimod,
)
from mercurial.utils import stringutil

testui = uimod.ui.load()

# disable the configuration registration warning
#
# the purpose of this test is to check the old behavior, not to validate the
# behavior from registered item. so we silent warning related to unregisted
# config.
testui.setconfig(b'devel', b'warn-config-unknown', False, b'test')
testui.setconfig(b'devel', b'all-warnings', False, b'test')

parsed = dispatch._parseconfig(
    testui,
    [
        b'values.string=string value',
        b'values.bool1=true',
        b'values.bool2=false',
        b'values.boolinvalid=foo',
        b'values.int1=42',
        b'values.int2=-42',
        b'values.intinvalid=foo',
        b'lists.list1=foo',
        b'lists.list2=foo bar baz',
        b'lists.list3=alice, bob',
        b'lists.list4=foo bar baz alice, bob',
        b'lists.list5=abc d"ef"g "hij def"',
        b'lists.list6="hello world", "how are you?"',
        b'lists.list7=Do"Not"Separate',
        b'lists.list8="Do"Separate',
        b'lists.list9="Do\\"NotSeparate"',
        b'lists.list10=string "with extraneous" quotation mark"',
        b'lists.list11=x, y',
        b'lists.list12="x", "y"',
        b'lists.list13=""" key = "x", "y" """',
        b'lists.list14=,,,,     ',
        b'lists.list15=" just with starting quotation',
        b'lists.list16="longer quotation" with "no ending quotation',
        b'lists.list17=this is \\" "not a quotation mark"',
        b'lists.list18=\n \n\nding\ndong',
        b'date.epoch=0 0',
        b'date.birth=2005-04-19T00:00:00',
        b'date.invalid=0',
    ],
)


def pprint(obj):
    return stringutil.pprint(obj).decode('ascii')


print(pprint(testui.configitems(b'values')))
print(pprint(testui.configitems(b'lists')))
print("---")
print(pprint(testui.config(b'values', b'string')))
print(pprint(testui.config(b'values', b'bool1')))
print(pprint(testui.config(b'values', b'bool2')))
print(pprint(testui.config(b'values', b'unknown')))
print("---")
try:
    print(pprint(testui.configbool(b'values', b'string')))
except error.ConfigError as inst:
    print(pprint(pycompat.bytestr(inst)))
print(pprint(testui.configbool(b'values', b'bool1')))
print(pprint(testui.configbool(b'values', b'bool2')))
print(pprint(testui.configbool(b'values', b'bool2', True)))
print(pprint(testui.configbool(b'values', b'unknown')))
print(pprint(testui.configbool(b'values', b'unknown', True)))
print("---")
print(pprint(testui.configint(b'values', b'int1')))
print(pprint(testui.configint(b'values', b'int2')))
print("---")
print(pprint(testui.configlist(b'lists', b'list1')))
print(pprint(testui.configlist(b'lists', b'list2')))
print(pprint(testui.configlist(b'lists', b'list3')))
print(pprint(testui.configlist(b'lists', b'list4')))
print(pprint(testui.configlist(b'lists', b'list4', [b'foo'])))
print(pprint(testui.configlist(b'lists', b'list5')))
print(pprint(testui.configlist(b'lists', b'list6')))
print(pprint(testui.configlist(b'lists', b'list7')))
print(pprint(testui.configlist(b'lists', b'list8')))
print(pprint(testui.configlist(b'lists', b'list9')))
print(pprint(testui.configlist(b'lists', b'list10')))
print(pprint(testui.configlist(b'lists', b'list11')))
print(pprint(testui.configlist(b'lists', b'list12')))
print(pprint(testui.configlist(b'lists', b'list13')))
print(pprint(testui.configlist(b'lists', b'list14')))
print(pprint(testui.configlist(b'lists', b'list15')))
print(pprint(testui.configlist(b'lists', b'list16')))
print(pprint(testui.configlist(b'lists', b'list17')))
print(pprint(testui.configlist(b'lists', b'list18')))
print(pprint(testui.configlist(b'lists', b'unknown')))
print(pprint(testui.configlist(b'lists', b'unknown', b'')))
print(pprint(testui.configlist(b'lists', b'unknown', b'foo')))
print(pprint(testui.configlist(b'lists', b'unknown', [b'foo'])))
print(pprint(testui.configlist(b'lists', b'unknown', b'foo bar')))
print(pprint(testui.configlist(b'lists', b'unknown', b'foo, bar')))
print(pprint(testui.configlist(b'lists', b'unknown', [b'foo bar'])))
print(pprint(testui.configlist(b'lists', b'unknown', [b'foo', b'bar'])))
print("---")
print(pprint(testui.configdate(b'date', b'epoch')))
print(pprint(testui.configdate(b'date', b'birth')))

print(pprint(testui.config(b'values', b'String')))


def function():
    pass


# values that aren't strings should work
testui.setconfig(b'hook', b'commit', function)
print(function == testui.config(b'hook', b'commit'))

# invalid values
try:
    testui.configbool(b'values', b'boolinvalid')
except error.ConfigError:
    print('boolinvalid')
try:
    testui.configint(b'values', b'intinvalid')
except error.ConfigError:
    print('intinvalid')
try:
    testui.configdate(b'date', b'invalid')
except error.ConfigError:
    print('dateinvalid')