sapling/tests/test-propertycache.py
Jun Wu 584656dff3 codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).

Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.

Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.

An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.

As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.

Reviewed By: wez, phillco, simpkins, pkaush, singhsrb

Differential Revision: D8173629

fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-25 22:17:29 -07:00

232 lines
6.5 KiB
Python

"""test behavior of propertycache and unfiltered propertycache
The repoview overlay is quite complex. We test the behavior of
property cache of both localrepo and repoview to prevent
regression."""
from __future__ import absolute_import, print_function
import os
import subprocess
from mercurial import hg, localrepo, ui as uimod, util
# create some special property cache that trace they call
calllog = []
@util.propertycache
def testcachedfoobar(repo):
name = repo.filtername
if name is None:
name = ""
val = len(name)
calllog.append(val)
return val
unficalllog = []
@localrepo.unfilteredpropertycache
def testcachedunfifoobar(repo):
name = repo.filtername
if name is None:
name = ""
val = 100 + len(name)
unficalllog.append(val)
return val
# plug them on repo
localrepo.localrepository.testcachedfoobar = testcachedfoobar
localrepo.localrepository.testcachedunfifoobar = testcachedunfifoobar
# Create an empty repo and instantiate it. It is important to run
# these tests on the real object to detect regression.
repopath = os.path.join(os.environ["TESTTMP"], "repo")
assert subprocess.call(["hg", "init", repopath]) == 0
ui = uimod.ui.load()
repo = hg.repository(ui, path=repopath).unfiltered()
print("")
print("=== property cache ===")
print("")
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
print("")
print("= first access on unfiltered, should do a call")
print("access:", repo.testcachedfoobar)
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
print("")
print("= second access on unfiltered, should not do call")
print("access", repo.testcachedfoobar)
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
print("")
print('= first access on "visible" view, should do a call')
visibleview = repo.filtered("visible")
print(
'cached value ("visible" view):',
vars(visibleview).get("testcachedfoobar", "NOCACHE"),
)
print("access:", visibleview.testcachedfoobar)
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
print(
'cached value ("visible" view):',
vars(visibleview).get("testcachedfoobar", "NOCACHE"),
)
print("")
print('= second access on "visible view", should not do call')
print("access:", visibleview.testcachedfoobar)
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
print(
'cached value ("visible" view):',
vars(visibleview).get("testcachedfoobar", "NOCACHE"),
)
print("")
print("= no effect on other view")
immutableview = repo.filtered("immutable")
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedfoobar", "NOCACHE"),
)
print("access:", immutableview.testcachedfoobar)
print("calllog:", calllog)
print("cached value (unfiltered):", vars(repo).get("testcachedfoobar", "NOCACHE"))
print(
'cached value ("visible" view):',
vars(visibleview).get("testcachedfoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedfoobar", "NOCACHE"),
)
# unfiltered property cache test
print("")
print("")
print("=== unfiltered property cache ===")
print("")
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("visible" view): ',
vars(visibleview).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedunfifoobar", "NOCACHE"),
)
print("")
print("= first access on unfiltered, should do a call")
print("access (unfiltered):", repo.testcachedunfifoobar)
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print("")
print("= second access on unfiltered, should not do call")
print("access (unfiltered):", repo.testcachedunfifoobar)
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print("")
print("= access on view should use the unfiltered cache")
print("access (unfiltered): ", repo.testcachedunfifoobar)
print('access ("visible" view): ', visibleview.testcachedunfifoobar)
print('access ("immutable" view):', immutableview.testcachedunfifoobar)
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("visible" view): ',
vars(visibleview).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedunfifoobar", "NOCACHE"),
)
print("")
print("= even if we clear the unfiltered cache")
del repo.__dict__["testcachedunfifoobar"]
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("visible" view): ',
vars(visibleview).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedunfifoobar", "NOCACHE"),
)
print("unficalllog:", unficalllog)
print('access ("visible" view): ', visibleview.testcachedunfifoobar)
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("visible" view): ',
vars(visibleview).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedunfifoobar", "NOCACHE"),
)
print('access ("immutable" view):', immutableview.testcachedunfifoobar)
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("visible" view): ',
vars(visibleview).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedunfifoobar", "NOCACHE"),
)
print("access (unfiltered): ", repo.testcachedunfifoobar)
print("unficalllog:", unficalllog)
print(
"cached value (unfiltered): ",
vars(repo).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("visible" view): ',
vars(visibleview).get("testcachedunfifoobar", "NOCACHE"),
)
print(
'cached value ("immutable" view):',
vars(immutableview).get("testcachedunfifoobar", "NOCACHE"),
)