summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_compile.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_compile.py')
-rw-r--r--Lib/test/test_compile.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index d3e69bf..9d5f721 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -1960,6 +1960,64 @@ class TestSourcePositions(unittest.TestCase):
)
+class TestExpectedAttributes(unittest.TestCase):
+
+ def test_basic(self):
+ class C:
+ def f(self):
+ self.a = self.b = 42
+
+ self.assertIsInstance(C.__static_attributes__, tuple)
+ self.assertEqual(sorted(C.__static_attributes__), ['a', 'b'])
+
+ def test_nested_function(self):
+ class C:
+ def f(self):
+ self.x = 1
+ self.y = 2
+ self.x = 3 # check deduplication
+
+ def g(self, obj):
+ self.y = 4
+ self.z = 5
+
+ def h(self, a):
+ self.u = 6
+ self.v = 7
+
+ obj.self = 8
+
+ self.assertEqual(sorted(C.__static_attributes__), ['u', 'v', 'x', 'y', 'z'])
+
+ def test_nested_class(self):
+ class C:
+ def f(self):
+ self.x = 42
+ self.y = 42
+
+ class D:
+ def g(self):
+ self.y = 42
+ self.z = 42
+
+ self.assertEqual(sorted(C.__static_attributes__), ['x', 'y'])
+ self.assertEqual(sorted(C.D.__static_attributes__), ['y', 'z'])
+
+ def test_subclass(self):
+ class C:
+ def f(self):
+ self.x = 42
+ self.y = 42
+
+ class D(C):
+ def g(self):
+ self.y = 42
+ self.z = 42
+
+ self.assertEqual(sorted(C.__static_attributes__), ['x', 'y'])
+ self.assertEqual(sorted(D.__static_attributes__), ['y', 'z'])
+
+
class TestExpressionStackSize(unittest.TestCase):
# These tests check that the computed stack size for a code object
# stays within reasonable bounds (see issue #21523 for an example