##// END OF EJS Templates
pycompat: custom implementation of urllib.parse.quote()...
pycompat: custom implementation of urllib.parse.quote() urllib.parse.quote() accepts either str or bytes and returns str. There exists a urllib.parse.quote_from_bytes() which only accepts bytes. We should probably use that to retain strong typing and avoid surprises. In addition, since nearly all strings in Mercurial are bytes, we probably don't want quote() returning unicode. So, this patch implements a custom quote() that only accepts bytes and returns bytes. The quoted URL should only contain URL safe characters which is a strict subset of ASCII. So `.encode('ascii', 'strict')` should be safe.

File last commit:

r30559:d83ca854 default
r31400:fb1f7033 default
Show More
test-propertycache.py
182 lines | 6.4 KiB | text/x-python | PythonLexer
/ tests / test-propertycache.py
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 """test behavior of propertycache and unfiltered propertycache
Mads Kiilerich
spelling: random spell checker fixes
r19951 The repoview overlay is quite complex. We test the behavior of
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 property cache of both localrepo and repoview to prevent
regression."""
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 from __future__ import absolute_import, print_function
Robert Stanca
py3: use absolute_import in test-propertycache.py
r28755 import os
import subprocess
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Yuya Nishihara
tests: import mercurial modules by name in test-propertycache...
r28839 from mercurial import (
hg,
localrepo,
ui as uimod,
util,
)
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
# create some special property cache that trace they call
calllog = []
Yuya Nishihara
tests: import mercurial modules by name in test-propertycache...
r28839 @util.propertycache
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 def testcachedfoobar(repo):
name = repo.filtername
if name is None:
name = ''
val = len(name)
calllog.append(val)
return val
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846 unficalllog = []
Yuya Nishihara
tests: import mercurial modules by name in test-propertycache...
r28839 @localrepo.unfilteredpropertycache
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846 def testcachedunfifoobar(repo):
name = repo.filtername
if name is None:
name = ''
val = 100 + len(name)
unficalllog.append(val)
return val
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 #plug them on repo
Yuya Nishihara
tests: import mercurial modules by name in test-propertycache...
r28839 localrepo.localrepository.testcachedfoobar = testcachedfoobar
localrepo.localrepository.testcachedunfifoobar = testcachedunfifoobar
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Mads Kiilerich
spelling: fixes from spell checker
r21024 # Create an empty repo and instantiate it. It is important to run
# these tests on the real object to detect regression.
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 repopath = os.path.join(os.environ['TESTTMP'], 'repo')
Pierre-Yves David
test: make test-propertycache.py python2.4 compatible...
r19878 assert subprocess.call(['hg', 'init', repopath]) == 0
Yuya Nishihara
ui: factor out ui.load() to create a ui without loading configs (API)...
r30559 ui = uimod.ui.load()
Yuya Nishihara
tests: import mercurial modules by name in test-propertycache...
r28839 repo = hg.repository(ui, path=repopath).unfiltered()
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 print('')
print('=== property cache ===')
print('')
print('calllog:', calllog)
print('cached value (unfiltered):',
vars(repo).get('testcachedfoobar', 'NOCACHE'))
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 print('')
print('= first access on "visible" view, should do a call')
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 visibleview = repo.filtered('visible')
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 print('')
print('= no effect on other view')
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845 immutableview = repo.filtered('immutable')
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: make propertycache.setcache compatible with repoview...
r19845
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846 # unfiltered property cache test
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 print('')
print('= even if we clear the unfiltered cache')
Pierre-Yves David
repoview: have unfilteredpropertycache using the underlying cache...
r19846 del repo.__dict__['testcachedunfifoobar']
Robert Stanca
py3: use print_function in test-propertycache.py
r28762 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'))