mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 17:27:53 +03:00
9dc21f8d0b
Summary: D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`. That has nasty problems if both `import mercurial` and `import edenscm.mercurial` are used, because Python would think `mercurial.foo` and `edenscm.mercurial.foo` are different modules so code like `try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)` would fail to handle the `edenscm.mercurial` version. There are also some module-level states (ex. `extensions._extensions`) that would cause trouble if they have multiple versions in a single process. Change imports to use the `edenscm` so ideally the `mercurial` is no longer imported at all. Add checks in extensions.py to catch unexpected extensions importing modules from the old (wrong) locations when running tests. Reviewed By: phillco Differential Revision: D13868981 fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
79 lines
1.9 KiB
Python
79 lines
1.9 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
from edenscm.mercurial import util
|
|
|
|
|
|
def printifpresent(d, xs, name="d"):
|
|
for x in xs:
|
|
present = x in d
|
|
print("'%s' in %s: %s" % (x, name, present))
|
|
if present:
|
|
print("%s['%s']: %s" % (name, x, d[x]))
|
|
|
|
|
|
def test_lrucachedict():
|
|
d = util.lrucachedict(4)
|
|
d["a"] = "va"
|
|
d["b"] = "vb"
|
|
d["c"] = "vc"
|
|
d["d"] = "vd"
|
|
|
|
# all of these should be present
|
|
printifpresent(d, ["a", "b", "c", "d"])
|
|
|
|
# 'a' should be dropped because it was least recently used
|
|
d["e"] = "ve"
|
|
printifpresent(d, ["a", "b", "c", "d", "e"])
|
|
|
|
assert d.get("a") is None
|
|
assert d.get("e") == "ve"
|
|
|
|
# touch entries in some order (get or set).
|
|
d["e"]
|
|
d["c"] = "vc2"
|
|
d["d"]
|
|
d["b"] = "vb2"
|
|
|
|
# 'e' should be dropped now
|
|
d["f"] = "vf"
|
|
printifpresent(d, ["b", "c", "d", "e", "f"])
|
|
|
|
d.clear()
|
|
printifpresent(d, ["b", "c", "d", "e", "f"])
|
|
|
|
# Now test dicts that aren't full.
|
|
d = util.lrucachedict(4)
|
|
d["a"] = 1
|
|
d["b"] = 2
|
|
d["a"]
|
|
d["b"]
|
|
printifpresent(d, ["a", "b"])
|
|
|
|
# test copy method
|
|
d = util.lrucachedict(4)
|
|
d["a"] = "va3"
|
|
d["b"] = "vb3"
|
|
d["c"] = "vc3"
|
|
d["d"] = "vd3"
|
|
|
|
dc = d.copy()
|
|
|
|
# all of these should be present
|
|
print("\nAll of these should be present:")
|
|
printifpresent(dc, ["a", "b", "c", "d"], "dc")
|
|
|
|
# 'a' should be dropped because it was least recently used
|
|
print("\nAll of these except 'a' should be present:")
|
|
dc["e"] = "ve3"
|
|
printifpresent(dc, ["a", "b", "c", "d", "e"], "dc")
|
|
|
|
# contents and order of original dict should remain unchanged
|
|
print("\nThese should be in reverse alphabetical order and read 'v?3':")
|
|
dc["b"] = "vb3_new"
|
|
for k in list(iter(d)):
|
|
print("d['%s']: %s" % (k, d[k]))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_lrucachedict()
|