diff --git a/Lib/__future__.py b/Lib/__future__.py new file mode 100644 index 00000000000..c50b810a7f5 --- /dev/null +++ b/Lib/__future__.py @@ -0,0 +1,44 @@ +"""__future__: Record of phased-in incompatible language changes. + +Each line is of the form: + + FeatureName = ReleaseInfo + +ReleaseInfo is a pair of the form: + + (OptionalRelease, MandatoryRelease) + +where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples +of the same form as sys.version_info: + + (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int + PY_MINOR_VERSION, # the 1; an int + PY_MICRO_VERSION, # the 0; an int + PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string + PY_RELEASE_SERIAL # the 3; an int + ) + +OptionalRelease records the first release in which + + from __future__ import FeatureName + +was accepted. + +In the case of MandatoryReleases that have not yet occurred, +MandatoryRelease predicts the release in which the feature will become part +of the language. + +Else MandatoryRelease records when the feature became part of the language; +in releases at or after that, modules no longer need + + from __future__ import FeatureName + +to use the feature in question, but may continue to use such imports. + +MandatoryRelease may also be None, meaning that a planned feature got +dropped. + +No line is ever to be deleted from this file. +""" + +nested_scopes = (2, 1, 0, "beta", 1), (2, 2, 0, "final", 0) diff --git a/Lib/test/output/test___future__ b/Lib/test/output/test___future__ new file mode 100644 index 00000000000..c263de3f224 --- /dev/null +++ b/Lib/test/output/test___future__ @@ -0,0 +1 @@ +test___future__ diff --git a/Lib/test/test___future__.py b/Lib/test/test___future__.py new file mode 100644 index 00000000000..3ae1cf1f21c --- /dev/null +++ b/Lib/test/test___future__.py @@ -0,0 +1,42 @@ +#! /usr/bin/env python +from test_support import verbose, verify +from types import TupleType, StringType, IntType +import __future__ + +GOOD_SERIALS = ("alpha", "beta", "candidate", "final") + +features = [x for x in dir(__future__) if x[:1] != "_"] +for feature in features: + value = getattr(__future__, feature) + if verbose: + print "Checking __future__ ", feature, "value", value + verify(type(value) is TupleType, "feature value isn't tuple") + verify(len(value) == 2, "feature value isn't 2-tuple") + + optional, mandatory = value + + verify(type(optional) is TupleType, "optional isn't tuple") + verify(len(optional) == 5, "optional isn't 5-tuple") + major, minor, micro, level, serial = optional + verify(type(major) is IntType, "optional major isn't int") + verify(type(minor) is IntType, "optional minor isn't int") + verify(type(micro) is IntType, "optional micro isn't int") + verify(type(level) is StringType, "optional level isn't string") + verify(level in GOOD_SERIALS, + "optional level string has unknown value") + verify(type(serial) is IntType, "optional serial isn't int") + + verify(type(mandatory) is TupleType or + mandatory is None, "mandatory isn't tuple or None") + if mandatory is not None: + verify(len(mandatory) == 5, "mandatory isn't 5-tuple") + major, minor, micro, level, serial = mandatory + verify(type(major) is IntType, "mandatory major isn't int") + verify(type(minor) is IntType, "mandatory minor isn't int") + verify(type(micro) is IntType, "mandatory micro isn't int") + verify(type(level) is StringType, "mandatory level isn't string") + verify(level in GOOD_SERIALS, + "mandatory serial string has unknown value") + verify(type(serial) is IntType, "mandatory serial isn't int") + verify(optional < mandatory, + "optional not less than mandatory, and mandatory not None")