|
1 #! /usr/bin/env python |
|
2 import unittest |
|
3 from test import test_support |
|
4 import __future__ |
|
5 |
|
6 GOOD_SERIALS = ("alpha", "beta", "candidate", "final") |
|
7 |
|
8 features = __future__.all_feature_names |
|
9 |
|
10 class FutureTest(unittest.TestCase): |
|
11 |
|
12 def test_names(self): |
|
13 # Verify that all_feature_names appears correct. |
|
14 given_feature_names = features[:] |
|
15 for name in dir(__future__): |
|
16 obj = getattr(__future__, name, None) |
|
17 if obj is not None and isinstance(obj, __future__._Feature): |
|
18 self.assert_( |
|
19 name in given_feature_names, |
|
20 "%r should have been in all_feature_names" % name |
|
21 ) |
|
22 given_feature_names.remove(name) |
|
23 self.assertEqual(len(given_feature_names), 0, |
|
24 "all_feature_names has too much: %r" % given_feature_names) |
|
25 |
|
26 def test_attributes(self): |
|
27 for feature in features: |
|
28 value = getattr(__future__, feature) |
|
29 |
|
30 optional = value.getOptionalRelease() |
|
31 mandatory = value.getMandatoryRelease() |
|
32 |
|
33 a = self.assert_ |
|
34 e = self.assertEqual |
|
35 def check(t, name): |
|
36 a(isinstance(t, tuple), "%s isn't tuple" % name) |
|
37 e(len(t), 5, "%s isn't 5-tuple" % name) |
|
38 (major, minor, micro, level, serial) = t |
|
39 a(isinstance(major, int), "%s major isn't int" % name) |
|
40 a(isinstance(minor, int), "%s minor isn't int" % name) |
|
41 a(isinstance(micro, int), "%s micro isn't int" % name) |
|
42 a(isinstance(level, basestring), |
|
43 "%s level isn't string" % name) |
|
44 a(level in GOOD_SERIALS, |
|
45 "%s level string has unknown value" % name) |
|
46 a(isinstance(serial, int), "%s serial isn't int" % name) |
|
47 |
|
48 check(optional, "optional") |
|
49 if mandatory is not None: |
|
50 check(mandatory, "mandatory") |
|
51 a(optional < mandatory, |
|
52 "optional not less than mandatory, and mandatory not None") |
|
53 |
|
54 a(hasattr(value, "compiler_flag"), |
|
55 "feature is missing a .compiler_flag attr") |
|
56 a(isinstance(getattr(value, "compiler_flag"), int), |
|
57 ".compiler_flag isn't int") |
|
58 |
|
59 def test_main(): |
|
60 test_support.run_unittest(FutureTest) |
|
61 |
|
62 if __name__ == "__main__": |
|
63 test_main() |