diff options
author | Steven Knight <knight@baldmt.com> | 2008-11-09 14:47:35 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2008-11-09 14:47:35 (GMT) |
commit | a4c704fe9043561c343c40251696e505a1a52c4e (patch) | |
tree | a147a5820356021e8d7f130c7e4e71afbb4817ee /src | |
parent | cbce8f24f4e240f70a00d761c45a168d2d974a60 (diff) | |
download | SCons-a4c704fe9043561c343c40251696e505a1a52c4e.zip SCons-a4c704fe9043561c343c40251696e505a1a52c4e.tar.gz SCons-a4c704fe9043561c343c40251696e505a1a52c4e.tar.bz2 |
Issue 2238: Add a __contains__() method to support the "val in env"
statement for construction environments.
Diffstat (limited to 'src')
-rw-r--r-- | src/CHANGES.txt | 3 | ||||
-rw-r--r-- | src/engine/SCons/Environment.py | 7 | ||||
-rw-r--r-- | src/engine/SCons/EnvironmentTests.py | 36 |
3 files changed, 46 insertions, 0 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt index b481617..5abdb29 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -46,6 +46,9 @@ RELEASE 1.X - XXX - Speed up the internal find_file() function (used for searching CPPPATH, LIBPATH, etc.). + - Add support for using the Python "in" keyword on construction + environments (for example, if "CPPPATH" in env: ...). + From Rob Managan: - Scan for TeX files in the paths specified in the $TEXINPUTS diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py index 327e0d1..0873354 100644 --- a/src/engine/SCons/Environment.py +++ b/src/engine/SCons/Environment.py @@ -399,6 +399,9 @@ class SubstitutionEnvironment: def has_key(self, key): return self._dict.has_key(key) + def __contains__(self, key): + return self._dict.__contains__(key) + def items(self): return self._dict.items() @@ -2169,6 +2172,10 @@ class OverrideEnvironment(Base): return 1 except KeyError: return self.__dict__['__subject'].has_key(key) + def __contains__(self, key): + if self.__dict__['overrides'].__contains__(key): + return 1 + return self.__dict__['__subject'].__contains__(key) def Dictionary(self): """Emulates the items() method of dictionaries.""" d = self.__dict__['__subject'].Dictionary().copy() diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py index 62530ba..f738891 100644 --- a/src/engine/SCons/EnvironmentTests.py +++ b/src/engine/SCons/EnvironmentTests.py @@ -233,6 +233,21 @@ class SubstitutionTestCase(unittest.TestCase): assert env.has_key('XXX') assert not env.has_key('YYY') + def test_contains(self): + """Test the SubstitutionEnvironment __contains__() method + """ + try: + 'x' in {'x':1} + except TypeError: + # TODO(1.5) + # An early version of Python that doesn't support "in" + # on dictionaries. Just pass the test. + pass + else: + env = SubstitutionEnvironment(XXX = 'x') + assert 'XXX' in env + assert not 'YYY' in env + def test_items(self): """Test the SubstitutionEnvironment items() method """ @@ -3507,6 +3522,27 @@ class OverrideEnvironmentTestCase(unittest.TestCase,TestEnvironmentFixture): assert not env2.has_key('ZZZ'), env2.has_key('ZZZ') assert env3.has_key('ZZZ'), env3.has_key('ZZZ') + def test_contains(self): + """Test the OverrideEnvironment __contains__() method""" + try: + 'x' in {'x':1} + except TypeError: + # TODO(1.5) + # An early version of Python that doesn't support "in" + # on dictionaries. Just pass the test. + pass + else: + env, env2, env3 = self.envs + assert 'XXX' in env + assert 'XXX' in env2 + assert 'XXX' in env3 + assert 'YYY' in env + assert 'YYY' in env2 + assert 'YYY' in env3 + assert not 'ZZZ' in env + assert not 'ZZZ' in env2 + assert 'ZZZ' in env3 + def test_items(self): """Test the OverrideEnvironment Dictionary() method""" env, env2, env3 = self.envs |