1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
import os
from tempfile import TemporaryDirectory
import pytest
from debian.substvars import Substvars, Substvar
class TestSubstvars:
def test_substvars(self):
# type: () -> None
substvars = Substvars()
assert substvars.substvars_path is None, None
# add_dependency automatically creates variables
assert 'misc:Recommends' not in substvars
substvars.add_dependency('misc:Recommends', "foo (>= 1.0)")
assert substvars['misc:Recommends'] == 'foo (>= 1.0)'
# It can be appended to other variables
substvars['foo'] = 'bar, golf'
substvars.add_dependency('foo', 'dpkg (>= 1.20.0)')
assert substvars['foo'] == 'bar, dpkg (>= 1.20.0), golf'
# Exact duplicates are ignored
substvars.add_dependency('foo', 'dpkg (>= 1.20.0)')
assert substvars['foo'] == 'bar, dpkg (>= 1.20.0), golf'
substvar = substvars.as_substvar['foo']
assert substvar.assignment_operator == "="
substvar.assignment_operator = "?="
with pytest.raises(ValueError):
# Only "=" and "?=" are allowed
substvar.assignment_operator = 'golf'
assert 'foo' in substvars
del substvars['foo']
assert not ('foo' in substvars)
def test_save_raises(self):
# type: () -> None
s = Substvars()
with pytest.raises(TypeError):
# Should raise because it has no base file
s.save()
def test_save(self):
# type: () -> None
with TemporaryDirectory() as tmpdir:
filename = os.path.join(tmpdir, "foo.substvars")
# Obviously, this does not exist
assert not os.path.exists(filename)
with Substvars.load_from_path(filename, missing_ok=True) as svars:
svars.add_dependency("misc:Depends", "bar (>= 1.0)")
svars.as_substvar["foo"] = Substvar("anything goes", assignment_operator="?=")
assert svars.substvars_path == filename
assert os.path.exists(filename)
with Substvars.load_from_path(filename) as svars:
# Verify we can actually load the file we just wrote again
assert svars['misc:Depends'] == "bar (>= 1.0)"
assert svars.as_substvar["misc:Depends"].assignment_operator == "="
assert svars['foo'] == "anything goes"
assert svars.as_substvar["foo"].assignment_operator == "?="
def test_equals(self):
# type: () -> None
foo_a = Substvar("foo", assignment_operator="=")
foo_b = Substvar("foo", assignment_operator="=")
foo_optional_a = Substvar("foo", assignment_operator="?=")
foo_optional_b = Substvar("foo", assignment_operator="?=")
assert foo_a == foo_b
assert foo_optional_a == foo_optional_b
assert foo_a != foo_optional_a
assert foo_a != object()
substvars_a = Substvars()
substvars_b = Substvars()
substvars_a["foo"] = "bar"
substvars_b["foo"] = "bar"
assert substvars_a == substvars_b
assert substvars_a != object()
|