summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLudwig Hähne <pankrat@tigris.org>2008-09-05 16:28:48 (GMT)
committerLudwig Hähne <pankrat@tigris.org>2008-09-05 16:28:48 (GMT)
commit587587669d48a2cc6ccfc8295b573d225fe3cb60 (patch)
treebf934b697ada84dbfc66f744c5a6596f0f230792
parent0dc55878f15880c32ace0c7d63b215b92587714f (diff)
downloadSCons-587587669d48a2cc6ccfc8295b573d225fe3cb60.zip
SCons-587587669d48a2cc6ccfc8295b573d225fe3cb60.tar.gz
SCons-587587669d48a2cc6ccfc8295b573d225fe3cb60.tar.bz2
Issue 2176: BuilderWrapper __getattr__ should not raise KeyError
-rw-r--r--src/engine/SCons/Environment.py2
-rw-r--r--src/engine/SCons/EnvironmentTests.py21
2 files changed, 22 insertions, 1 deletions
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 67881eb..1a4f5f5 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -230,7 +230,7 @@ class BuilderWrapper(MethodWrapper):
elif name == 'builder':
return self.method
else:
- return self.__dict__[name]
+ raise AttributeError, name
def __setattr__(self, name, value):
if name == 'env':
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index 7e6d4ca..01e7e06 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -916,7 +916,28 @@ class BaseTestCase(unittest.TestCase,TestEnvironmentFixture):
assert called_it['target'] == None, called_it
assert called_it['source'] == None, called_it
+ def test_BuilderWrapper_attributes(self):
+ """Test getting and setting of BuilderWrapper attributes
+ """
+ b1 = Builder()
+ b2 = Builder()
+ e1 = Environment()
+ e2 = Environment()
+
+ e1.Replace(BUILDERS = {'b' : b1})
+ bw = e1.b
+
+ assert bw.env is e1
+ bw.env = e2
+ assert bw.env is e2
+
+ assert bw.builder is b1
+ bw.builder = b2
+ assert bw.builder is b2
+ self.assertRaises(AttributeError, getattr, bw, 'foobar')
+ bw.foobar = 42
+ assert bw.foobar is 42
# This unit test is currently disabled because we don't think the
# underlying method it tests (Environment.BuilderWrapper.execute())