diff options
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_constants.py')
-rwxr-xr-x | lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_constants.py | 778 |
1 files changed, 0 insertions, 778 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_constants.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_constants.py deleted file mode 100755 index 870d342b..00000000 --- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/python/test/test_constants.py +++ /dev/null @@ -1,778 +0,0 @@ -# Copyright (c) Twisted Matrix Laboratories. -# See LICENSE for details. - -""" -Unit tests for L{twisted.python.constants}. -""" - -from twisted.trial.unittest import TestCase - -from twisted.python.constants import ( - NamedConstant, Names, ValueConstant, Values, FlagConstant, Flags) - - -class NamedConstantTests(TestCase): - """ - Tests for the L{twisted.python.constants.NamedConstant} class which is used - to represent individual values. - """ - def setUp(self): - """ - Create a dummy container into which constants can be placed. - """ - class foo(Names): - pass - self.container = foo - - - def test_name(self): - """ - The C{name} attribute of a L{NamedConstant} refers to the value passed - for the C{name} parameter to C{_realize}. - """ - name = NamedConstant() - name._realize(self.container, "bar", None) - self.assertEqual("bar", name.name) - - - def test_representation(self): - """ - The string representation of an instance of L{NamedConstant} includes - the container the instances belongs to as well as the instance's name. - """ - name = NamedConstant() - name._realize(self.container, "bar", None) - self.assertEqual("<foo=bar>", repr(name)) - - - def test_equality(self): - """ - A L{NamedConstant} instance compares equal to itself. - """ - name = NamedConstant() - name._realize(self.container, "bar", None) - self.assertTrue(name == name) - self.assertFalse(name != name) - - - def test_nonequality(self): - """ - Two different L{NamedConstant} instances do not compare equal to each - other. - """ - first = NamedConstant() - first._realize(self.container, "bar", None) - second = NamedConstant() - second._realize(self.container, "bar", None) - self.assertFalse(first == second) - self.assertTrue(first != second) - - - def test_hash(self): - """ - Because two different L{NamedConstant} instances do not compare as equal - to each other, they also have different hashes to avoid collisions when - added to a C{dict} or C{set}. - """ - first = NamedConstant() - first._realize(self.container, "bar", None) - second = NamedConstant() - second._realize(self.container, "bar", None) - self.assertNotEqual(hash(first), hash(second)) - - - -class _ConstantsTestsMixin(object): - """ - Mixin defining test helpers common to multiple types of constants - collections. - """ - def _notInstantiableTest(self, name, cls): - """ - Assert that an attempt to instantiate the constants class raises - C{TypeError}. - - @param name: A C{str} giving the name of the constants collection. - @param cls: The constants class to test. - """ - exc = self.assertRaises(TypeError, cls) - self.assertEqual(name + " may not be instantiated.", str(exc)) - - - -class NamesTests(TestCase, _ConstantsTestsMixin): - """ - Tests for L{twisted.python.constants.Names}, a base class for containers of - related constaints. - """ - def setUp(self): - """ - Create a fresh new L{Names} subclass for each unit test to use. Since - L{Names} is stateful, re-using the same subclass across test methods - makes exercising all of the implementation code paths difficult. - """ - class METHOD(Names): - """ - A container for some named constants to use in unit tests for - L{Names}. - """ - GET = NamedConstant() - PUT = NamedConstant() - POST = NamedConstant() - DELETE = NamedConstant() - - self.METHOD = METHOD - - - def test_notInstantiable(self): - """ - A subclass of L{Names} raises C{TypeError} if an attempt is made to - instantiate it. - """ - self._notInstantiableTest("METHOD", self.METHOD) - - - def test_symbolicAttributes(self): - """ - Each name associated with a L{NamedConstant} instance in the definition - of a L{Names} subclass is available as an attribute on the resulting - class. - """ - self.assertTrue(hasattr(self.METHOD, "GET")) - self.assertTrue(hasattr(self.METHOD, "PUT")) - self.assertTrue(hasattr(self.METHOD, "POST")) - self.assertTrue(hasattr(self.METHOD, "DELETE")) - - - def test_withoutOtherAttributes(self): - """ - As usual, names not defined in the class scope of a L{Names} - subclass are not available as attributes on the resulting class. - """ - self.assertFalse(hasattr(self.METHOD, "foo")) - - - def test_representation(self): - """ - The string representation of a constant on a L{Names} subclass includes - the name of the L{Names} subclass and the name of the constant itself. - """ - self.assertEqual("<METHOD=GET>", repr(self.METHOD.GET)) - - - def test_lookupByName(self): - """ - Constants can be looked up by name using L{Names.lookupByName}. - """ - method = self.METHOD.lookupByName("GET") - self.assertIdentical(self.METHOD.GET, method) - - - def test_notLookupMissingByName(self): - """ - Names not defined with a L{NamedConstant} instance cannot be looked up - using L{Names.lookupByName}. - """ - self.assertRaises(ValueError, self.METHOD.lookupByName, "lookupByName") - self.assertRaises(ValueError, self.METHOD.lookupByName, "__init__") - self.assertRaises(ValueError, self.METHOD.lookupByName, "foo") - - - def test_name(self): - """ - The C{name} attribute of one of the named constants gives that - constant's name. - """ - self.assertEqual("GET", self.METHOD.GET.name) - - - def test_attributeIdentity(self): - """ - Repeated access of an attribute associated with a L{NamedConstant} value - in a L{Names} subclass results in the same object. - """ - self.assertIdentical(self.METHOD.GET, self.METHOD.GET) - - - def test_iterconstants(self): - """ - L{Names.iterconstants} returns an iterator over all of the constants - defined in the class, in the order they were defined. - """ - constants = list(self.METHOD.iterconstants()) - self.assertEqual( - [self.METHOD.GET, self.METHOD.PUT, - self.METHOD.POST, self.METHOD.DELETE], - constants) - - - def test_attributeIterconstantsIdentity(self): - """ - The constants returned from L{Names.iterconstants} are identical to the - constants accessible using attributes. - """ - constants = list(self.METHOD.iterconstants()) - self.assertIdentical(self.METHOD.GET, constants[0]) - self.assertIdentical(self.METHOD.PUT, constants[1]) - self.assertIdentical(self.METHOD.POST, constants[2]) - self.assertIdentical(self.METHOD.DELETE, constants[3]) - - - def test_iterconstantsIdentity(self): - """ - The constants returned from L{Names.iterconstants} are identical on each - call to that method. - """ - constants = list(self.METHOD.iterconstants()) - again = list(self.METHOD.iterconstants()) - self.assertIdentical(again[0], constants[0]) - self.assertIdentical(again[1], constants[1]) - self.assertIdentical(again[2], constants[2]) - self.assertIdentical(again[3], constants[3]) - - - def test_initializedOnce(self): - """ - L{Names._enumerants} is initialized once and its value re-used on - subsequent access. - """ - first = self.METHOD._enumerants - self.METHOD.GET # Side-effects! - second = self.METHOD._enumerants - self.assertIdentical(first, second) - - - -class ValuesTests(TestCase, _ConstantsTestsMixin): - """ - Tests for L{twisted.python.constants.Names}, a base class for containers of - related constaints with arbitrary values. - """ - def setUp(self): - """ - Create a fresh new L{Values} subclass for each unit test to use. Since - L{Values} is stateful, re-using the same subclass across test methods - makes exercising all of the implementation code paths difficult. - """ - class STATUS(Values): - OK = ValueConstant("200") - NOT_FOUND = ValueConstant("404") - - self.STATUS = STATUS - - - def test_notInstantiable(self): - """ - A subclass of L{Values} raises C{TypeError} if an attempt is made to - instantiate it. - """ - self._notInstantiableTest("STATUS", self.STATUS) - - - def test_symbolicAttributes(self): - """ - Each name associated with a L{ValueConstant} instance in the definition - of a L{Values} subclass is available as an attribute on the resulting - class. - """ - self.assertTrue(hasattr(self.STATUS, "OK")) - self.assertTrue(hasattr(self.STATUS, "NOT_FOUND")) - - - def test_withoutOtherAttributes(self): - """ - As usual, names not defined in the class scope of a L{Values} - subclass are not available as attributes on the resulting class. - """ - self.assertFalse(hasattr(self.STATUS, "foo")) - - - def test_representation(self): - """ - The string representation of a constant on a L{Values} subclass includes - the name of the L{Values} subclass and the name of the constant itself. - """ - self.assertEqual("<STATUS=OK>", repr(self.STATUS.OK)) - - - def test_lookupByName(self): - """ - Constants can be looked up by name using L{Values.lookupByName}. - """ - method = self.STATUS.lookupByName("OK") - self.assertIdentical(self.STATUS.OK, method) - - - def test_notLookupMissingByName(self): - """ - Names not defined with a L{ValueConstant} instance cannot be looked up - using L{Values.lookupByName}. - """ - self.assertRaises(ValueError, self.STATUS.lookupByName, "lookupByName") - self.assertRaises(ValueError, self.STATUS.lookupByName, "__init__") - self.assertRaises(ValueError, self.STATUS.lookupByName, "foo") - - - def test_lookupByValue(self): - """ - Constants can be looked up by their associated value, defined by the - argument passed to L{ValueConstant}, using L{Values.lookupByValue}. - """ - status = self.STATUS.lookupByValue("200") - self.assertIdentical(self.STATUS.OK, status) - - - def test_lookupDuplicateByValue(self): - """ - If more than one constant is associated with a particular value, - L{Values.lookupByValue} returns whichever of them is defined first. - """ - class TRANSPORT_MESSAGE(Values): - """ - Message types supported by an SSH transport. - """ - KEX_DH_GEX_REQUEST_OLD = ValueConstant(30) - KEXDH_INIT = ValueConstant(30) - - self.assertIdentical( - TRANSPORT_MESSAGE.lookupByValue(30), - TRANSPORT_MESSAGE.KEX_DH_GEX_REQUEST_OLD) - - - def test_notLookupMissingByValue(self): - """ - L{Values.lookupByValue} raises L{ValueError} when called with a value - with which no constant is associated. - """ - self.assertRaises(ValueError, self.STATUS.lookupByValue, "OK") - self.assertRaises(ValueError, self.STATUS.lookupByValue, 200) - self.assertRaises(ValueError, self.STATUS.lookupByValue, "200.1") - - - def test_name(self): - """ - The C{name} attribute of one of the constants gives that constant's - name. - """ - self.assertEqual("OK", self.STATUS.OK.name) - - - def test_attributeIdentity(self): - """ - Repeated access of an attribute associated with a L{ValueConstant} value - in a L{Values} subclass results in the same object. - """ - self.assertIdentical(self.STATUS.OK, self.STATUS.OK) - - - def test_iterconstants(self): - """ - L{Values.iterconstants} returns an iterator over all of the constants - defined in the class, in the order they were defined. - """ - constants = list(self.STATUS.iterconstants()) - self.assertEqual( - [self.STATUS.OK, self.STATUS.NOT_FOUND], - constants) - - - def test_attributeIterconstantsIdentity(self): - """ - The constants returned from L{Values.iterconstants} are identical to the - constants accessible using attributes. - """ - constants = list(self.STATUS.iterconstants()) - self.assertIdentical(self.STATUS.OK, constants[0]) - self.assertIdentical(self.STATUS.NOT_FOUND, constants[1]) - - - def test_iterconstantsIdentity(self): - """ - The constants returned from L{Values.iterconstants} are identical on - each call to that method. - """ - constants = list(self.STATUS.iterconstants()) - again = list(self.STATUS.iterconstants()) - self.assertIdentical(again[0], constants[0]) - self.assertIdentical(again[1], constants[1]) - - - def test_initializedOnce(self): - """ - L{Values._enumerants} is initialized once and its value re-used on - subsequent access. - """ - first = self.STATUS._enumerants - self.STATUS.OK # Side-effects! - second = self.STATUS._enumerants - self.assertIdentical(first, second) - - -class _FlagsTestsMixin(object): - """ - Mixin defining setup code for any tests for L{Flags} subclasses. - - @ivar FXF: A L{Flags} subclass created for each test method. - """ - def setUp(self): - """ - Create a fresh new L{Flags} subclass for each unit test to use. Since - L{Flags} is stateful, re-using the same subclass across test methods - makes exercising all of the implementation code paths difficult. - """ - class FXF(Flags): - # Implicitly assign three flag values based on definition order - READ = FlagConstant() - WRITE = FlagConstant() - APPEND = FlagConstant() - - # Explicitly assign one flag value by passing it in - EXCLUSIVE = FlagConstant(0x20) - - # Implicitly assign another flag value, following the previously - # specified explicit value. - TEXT = FlagConstant() - - self.FXF = FXF - - - -class FlagsTests(_FlagsTestsMixin, TestCase, _ConstantsTestsMixin): - """ - Tests for L{twisted.python.constants.Flags}, a base class for containers of - related, combinable flag or bitvector-like constants. - """ - def test_notInstantiable(self): - """ - A subclass of L{Flags} raises L{TypeError} if an attempt is made to - instantiate it. - """ - self._notInstantiableTest("FXF", self.FXF) - - - def test_symbolicAttributes(self): - """ - Each name associated with a L{FlagConstant} instance in the definition - of a L{Flags} subclass is available as an attribute on the resulting - class. - """ - self.assertTrue(hasattr(self.FXF, "READ")) - self.assertTrue(hasattr(self.FXF, "WRITE")) - self.assertTrue(hasattr(self.FXF, "APPEND")) - self.assertTrue(hasattr(self.FXF, "EXCLUSIVE")) - self.assertTrue(hasattr(self.FXF, "TEXT")) - - - def test_withoutOtherAttributes(self): - """ - As usual, names not defined in the class scope of a L{Flags} subclass - are not available as attributes on the resulting class. - """ - self.assertFalse(hasattr(self.FXF, "foo")) - - - def test_representation(self): - """ - The string representation of a constant on a L{Flags} subclass includes - the name of the L{Flags} subclass and the name of the constant itself. - """ - self.assertEqual("<FXF=READ>", repr(self.FXF.READ)) - - - def test_lookupByName(self): - """ - Constants can be looked up by name using L{Flags.lookupByName}. - """ - flag = self.FXF.lookupByName("READ") - self.assertIdentical(self.FXF.READ, flag) - - - def test_notLookupMissingByName(self): - """ - Names not defined with a L{FlagConstant} instance cannot be looked up - using L{Flags.lookupByName}. - """ - self.assertRaises(ValueError, self.FXF.lookupByName, "lookupByName") - self.assertRaises(ValueError, self.FXF.lookupByName, "__init__") - self.assertRaises(ValueError, self.FXF.lookupByName, "foo") - - - def test_lookupByValue(self): - """ - Constants can be looked up by their associated value, defined implicitly - by the position in which the constant appears in the class definition or - explicitly by the argument passed to L{FlagConstant}. - """ - flag = self.FXF.lookupByValue(0x01) - self.assertIdentical(flag, self.FXF.READ) - - flag = self.FXF.lookupByValue(0x02) - self.assertIdentical(flag, self.FXF.WRITE) - - flag = self.FXF.lookupByValue(0x04) - self.assertIdentical(flag, self.FXF.APPEND) - - flag = self.FXF.lookupByValue(0x20) - self.assertIdentical(flag, self.FXF.EXCLUSIVE) - - flag = self.FXF.lookupByValue(0x40) - self.assertIdentical(flag, self.FXF.TEXT) - - - def test_lookupDuplicateByValue(self): - """ - If more than one constant is associated with a particular value, - L{Flags.lookupByValue} returns whichever of them is defined first. - """ - class TIMEX(Flags): - # (timex.mode) - ADJ_OFFSET = FlagConstant(0x0001) # time offset - - # xntp 3.4 compatibility names - MOD_OFFSET = FlagConstant(0x0001) - - self.assertIdentical(TIMEX.lookupByValue(0x0001), TIMEX.ADJ_OFFSET) - - - def test_notLookupMissingByValue(self): - """ - L{Flags.lookupByValue} raises L{ValueError} when called with a value - with which no constant is associated. - """ - self.assertRaises(ValueError, self.FXF.lookupByValue, 0x10) - - - def test_name(self): - """ - The C{name} attribute of one of the constants gives that constant's - name. - """ - self.assertEqual("READ", self.FXF.READ.name) - - - def test_attributeIdentity(self): - """ - Repeated access of an attribute associated with a L{FlagConstant} value - in a L{Flags} subclass results in the same object. - """ - self.assertIdentical(self.FXF.READ, self.FXF.READ) - - - def test_iterconstants(self): - """ - L{Flags.iterconstants} returns an iterator over all of the constants - defined in the class, in the order they were defined. - """ - constants = list(self.FXF.iterconstants()) - self.assertEqual( - [self.FXF.READ, self.FXF.WRITE, self.FXF.APPEND, - self.FXF.EXCLUSIVE, self.FXF.TEXT], - constants) - - - def test_attributeIterconstantsIdentity(self): - """ - The constants returned from L{Flags.iterconstants} are identical to the - constants accessible using attributes. - """ - constants = list(self.FXF.iterconstants()) - self.assertIdentical(self.FXF.READ, constants[0]) - self.assertIdentical(self.FXF.WRITE, constants[1]) - self.assertIdentical(self.FXF.APPEND, constants[2]) - self.assertIdentical(self.FXF.EXCLUSIVE, constants[3]) - self.assertIdentical(self.FXF.TEXT, constants[4]) - - - def test_iterconstantsIdentity(self): - """ - The constants returned from L{Flags.iterconstants} are identical on each - call to that method. - """ - constants = list(self.FXF.iterconstants()) - again = list(self.FXF.iterconstants()) - self.assertIdentical(again[0], constants[0]) - self.assertIdentical(again[1], constants[1]) - self.assertIdentical(again[2], constants[2]) - self.assertIdentical(again[3], constants[3]) - self.assertIdentical(again[4], constants[4]) - - - def test_initializedOnce(self): - """ - L{Flags._enumerants} is initialized once and its value re-used on - subsequent access. - """ - first = self.FXF._enumerants - self.FXF.READ # Side-effects! - second = self.FXF._enumerants - self.assertIdentical(first, second) - - - -class FlagConstantSimpleOrTests(_FlagsTestsMixin, TestCase): - """ - Tests for the C{|} operator as defined for L{FlagConstant} instances, used - to create new L{FlagConstant} instances representing both of two existing - L{FlagConstant} instances from the same L{Flags} class. - """ - def test_value(self): - """ - The value of the L{FlagConstant} which results from C{|} has all of the - bits set which were set in either of the values of the two original - constants. - """ - flag = self.FXF.READ | self.FXF.WRITE - self.assertEqual(self.FXF.READ.value | self.FXF.WRITE.value, flag.value) - - - def test_name(self): - """ - The name of the L{FlagConstant} instance which results from C{|} - includes the names of both of the two original constants. - """ - flag = self.FXF.READ | self.FXF.WRITE - self.assertEqual("{READ,WRITE}", flag.name) - - - def test_representation(self): - """ - The string representation of a L{FlagConstant} instance which results - from C{|} includes the names of both of the two original constants. - """ - flag = self.FXF.READ | self.FXF.WRITE - self.assertEqual("<FXF={READ,WRITE}>", repr(flag)) - - - -class FlagConstantSimpleAndTests(_FlagsTestsMixin, TestCase): - """ - Tests for the C{&} operator as defined for L{FlagConstant} instances, used - to create new L{FlagConstant} instances representing the common parts of two - existing L{FlagConstant} instances from the same L{Flags} class. - """ - def test_value(self): - """ - The value of the L{FlagConstant} which results from C{&} has all of the - bits set which were set in both of the values of the two original - constants. - """ - readWrite = (self.FXF.READ | self.FXF.WRITE) - writeAppend = (self.FXF.WRITE | self.FXF.APPEND) - flag = readWrite & writeAppend - self.assertEqual(self.FXF.WRITE.value, flag.value) - - - def test_name(self): - """ - The name of the L{FlagConstant} instance which results from C{&} - includes the names of only the flags which were set in both of the two - original constants. - """ - readWrite = (self.FXF.READ | self.FXF.WRITE) - writeAppend = (self.FXF.WRITE | self.FXF.APPEND) - flag = readWrite & writeAppend - self.assertEqual("WRITE", flag.name) - - - def test_representation(self): - """ - The string representation of a L{FlagConstant} instance which results - from C{&} includes the names of only the flags which were set in both - both of the two original constants. - """ - readWrite = (self.FXF.READ | self.FXF.WRITE) - writeAppend = (self.FXF.WRITE | self.FXF.APPEND) - flag = readWrite & writeAppend - self.assertEqual("<FXF=WRITE>", repr(flag)) - - - -class FlagConstantSimpleExclusiveOrTests(_FlagsTestsMixin, TestCase): - """ - Tests for the C{^} operator as defined for L{FlagConstant} instances, used - to create new L{FlagConstant} instances representing the uncommon parts of - two existing L{FlagConstant} instances from the same L{Flags} class. - """ - def test_value(self): - """ - The value of the L{FlagConstant} which results from C{^} has all of the - bits set which were set in exactly one of the values of the two original - constants. - """ - readWrite = (self.FXF.READ | self.FXF.WRITE) - writeAppend = (self.FXF.WRITE | self.FXF.APPEND) - flag = readWrite ^ writeAppend - self.assertEqual(self.FXF.READ.value | self.FXF.APPEND.value, flag.value) - - - def test_name(self): - """ - The name of the L{FlagConstant} instance which results from C{^} - includes the names of only the flags which were set in exactly one of - the two original constants. - """ - readWrite = (self.FXF.READ | self.FXF.WRITE) - writeAppend = (self.FXF.WRITE | self.FXF.APPEND) - flag = readWrite ^ writeAppend - self.assertEqual("{APPEND,READ}", flag.name) - - - def test_representation(self): - """ - The string representation of a L{FlagConstant} instance which results - from C{^} includes the names of only the flags which were set in exactly - one of the two original constants. - """ - readWrite = (self.FXF.READ | self.FXF.WRITE) - writeAppend = (self.FXF.WRITE | self.FXF.APPEND) - flag = readWrite ^ writeAppend - self.assertEqual("<FXF={APPEND,READ}>", repr(flag)) - - - -class FlagConstantNegationTests(_FlagsTestsMixin, TestCase): - """ - Tests for the C{~} operator as defined for L{FlagConstant} instances, used - to create new L{FlagConstant} instances representing all the flags from a - L{Flags} class not set in a particular L{FlagConstant} instance. - """ - def test_value(self): - """ - The value of the L{FlagConstant} which results from C{~} has all of the - bits set which were not set in the original constant. - """ - flag = ~self.FXF.READ - self.assertEqual( - self.FXF.WRITE.value | - self.FXF.APPEND.value | - self.FXF.EXCLUSIVE.value | - self.FXF.TEXT.value, - flag.value) - - flag = ~self.FXF.WRITE - self.assertEqual( - self.FXF.READ.value | - self.FXF.APPEND.value | - self.FXF.EXCLUSIVE.value | - self.FXF.TEXT.value, - flag.value) - - - def test_name(self): - """ - The name of the L{FlagConstant} instance which results from C{~} - includes the names of all the flags which were not set in the original - constant. - """ - flag = ~self.FXF.WRITE - self.assertEqual("{APPEND,EXCLUSIVE,READ,TEXT}", flag.name) - - - def test_representation(self): - """ - The string representation of a L{FlagConstant} instance which results - from C{~} includes the names of all the flags which were not set in the - original constant. - """ - flag = ~self.FXF.WRITE - self.assertEqual("<FXF={APPEND,EXCLUSIVE,READ,TEXT}>", repr(flag)) |