Mercurial > hg-stable
view tests/test-propertycache.py @ 23933:769027075e21 stable
run-tests.py: execute hghave with same env vars as ones for actual tests
Before this patch, "run-tests.py" executes "hghave" process without
any modifications for environment variables, even though actual tests
are executed with LC_ALL, LANG and LANGUAGE explicitly assigned "C".
When "run-tests.py" is executed:
- with non-"C" locale environment variables on any platforms, or
- without any explicit locale environment setting on Windows
(only for "outer-repo" feature using "hg root")
external commands indirectly executed by "hghave" may show translated
messages.
This causes incorrect "hghave" result and skipping tests, because some
regexp matching of "hghave" expect external commands to show
un-translated messages.
To prevent external commands from showing translated messages, this
patch makes "run-tests.py" execute "hghave" with same environment
variables as ones for actual tests.
This patch doesn't make "hghave" execute external commands forcibly
with LC_ALL, LANG and LANGUAGE explicitly assigned "C", because
changing "run-tests.py" is cheaper than changing "hghave":
- "os.popen" should be replaced by "subprocess.Popen" or so, and
- setting up environment variables should be newly added
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Thu, 22 Jan 2015 00:03:58 +0900 |
parents | 7731a2281cf0 |
children | 84673a7c54af |
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.""" import os, subprocess import mercurial.localrepo import mercurial.repoview import mercurial.util import mercurial.hg import mercurial.ui as uimod # create some special property cache that trace they call calllog = [] @mercurial.util.propertycache def testcachedfoobar(repo): name = repo.filtername if name is None: name = '' val = len(name) calllog.append(val) return val unficalllog = [] @mercurial.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 mercurial.localrepo.localrepository.testcachedfoobar = testcachedfoobar mercurial.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() repo = mercurial.hg.repository(ui, path=repopath).unfiltered() print '' print '=== property cache ===' print '' print 'calllog:', calllog print 'cached value (unfiltered):', print 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):', print 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):', print 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):', print vars(visibleview).get('testcachedfoobar', 'NOCACHE') print 'access:', visibleview.testcachedfoobar print 'calllog:', calllog print 'cached value (unfiltered):', print vars(repo).get('testcachedfoobar', 'NOCACHE') print 'cached value ("visible" view):', print 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):', print vars(repo).get('testcachedfoobar', 'NOCACHE') print 'cached value ("visible" view):', print vars(visibleview).get('testcachedfoobar', 'NOCACHE') print '' print '= no effect on other view' immutableview = repo.filtered('immutable') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedfoobar', 'NOCACHE') print 'access:', immutableview.testcachedfoobar print 'calllog:', calllog print 'cached value (unfiltered):', print vars(repo).get('testcachedfoobar', 'NOCACHE') print 'cached value ("visible" view):', print vars(visibleview).get('testcachedfoobar', 'NOCACHE') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedfoobar', 'NOCACHE') # unfiltered property cache test print '' print '' print '=== unfiltered property cache ===' print '' print 'unficalllog:', unficalllog print 'cached value (unfiltered): ', print vars(repo).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("visible" view): ', print vars(visibleview).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("immutable" view):', print 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): ', print 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): ', print 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): ', print vars(repo).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("visible" view): ', print vars(visibleview).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedunfifoobar', 'NOCACHE') print '' print '= even if we clear the unfiltered cache' del repo.__dict__['testcachedunfifoobar'] print 'cached value (unfiltered): ', print vars(repo).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("visible" view): ', print vars(visibleview).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedunfifoobar', 'NOCACHE') print 'unficalllog:', unficalllog print 'access ("visible" view): ', visibleview.testcachedunfifoobar print 'unficalllog:', unficalllog print 'cached value (unfiltered): ', print vars(repo).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("visible" view): ', print vars(visibleview).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedunfifoobar', 'NOCACHE') print 'access ("immutable" view):', immutableview.testcachedunfifoobar print 'unficalllog:', unficalllog print 'cached value (unfiltered): ', print vars(repo).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("visible" view): ', print vars(visibleview).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedunfifoobar', 'NOCACHE') print 'access (unfiltered): ', repo.testcachedunfifoobar print 'unficalllog:', unficalllog print 'cached value (unfiltered): ', print vars(repo).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("visible" view): ', print vars(visibleview).get('testcachedunfifoobar', 'NOCACHE') print 'cached value ("immutable" view):', print vars(immutableview).get('testcachedunfifoobar', 'NOCACHE')