Mercurial > hg
view tests/test-propertycache.py @ 35230:feecfefeba25
tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages
Automatic replacement seems better than trying to figure out a check-code rule.
I didn't bother looking to see why the error message and file name is reversed
in the annotate and histedit tests, based on Windows or not.
I originally had this as a list of tuples, conditional on the platform. But
there are a couple of 'No such file or directory' messages emitted by Mercurial
itself, so unconditional is required for stability. There are also several
variants of what I assume is 'connection refused' and 'unknown host' in
test-clone.t and test-clonebundles.t for Docker, FreeBSD jails, etc. Yes, these
are handled by (re) tags, but maybe it would be better to capture those strings
in order to avoid whack-a-mole in future tests. All of this points to using a
dictionary containing one or more strings-to-be-replaced values.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 02 Dec 2017 19:33:34 -0500 |
parents | d83ca854fa21 |
children | d33611280add |
line wrap: on
line source
"""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'))