diff --git a/CHANGES.rst b/CHANGES.rst
index 624d87f..5eada5d 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -97,6 +97,16 @@
 - Make ``Iterable`` and ``Container`` properly implement ``IIterable``
   and ``IContainer``, respectively.
 
+- Make ``SimpleVocabulary.fromItems`` accept triples to allow
+  specifying the title of terms. See `issue 18
+  <https://github.com/zopefoundation/zope.schema/issues/18>`_.
+
+- Make ``TreeVocabulary.fromDict`` only create
+  ``ITitledTokenizedTerms`` when a title is actually provided.
+
+- Make ``SimpleVocabulary`` and ``SimpleTerm`` have value-based
+  equality and hashing methods.
+
 4.5.0 (2017-07-10)
 ==================
 
diff --git a/src/zope/schema/vocabulary.py b/src/zope/schema/vocabulary.py
index 9649547..a1211e4 100644
--- a/src/zope/schema/vocabulary.py
+++ b/src/zope/schema/vocabulary.py
@@ -17,6 +17,7 @@ from collections import OrderedDict
 
 from zope.interface import directlyProvides
 from zope.interface import implementer
+from zope.interface import providedBy
 
 from zope.schema._compat import text_type
 from zope.schema.interfaces import ITitledTokenizedTerm
@@ -32,14 +33,20 @@ _marker = object()
 
 @implementer(ITokenizedTerm)
 class SimpleTerm(object):
-    """Simple tokenized term used by SimpleVocabulary."""
+    """
+    Simple tokenized term used by SimpleVocabulary.
+
+    .. versionchanged:: 4.6.0
+       Implement equality and hashing based on the value, token and title.
+    """
 
     def __init__(self, value, token=None, title=None):
         """Create a term for *value* and *token*. If *token* is
         omitted, str(value) is used for the token, escaping any
         non-ASCII characters.
 
-        If *title* is provided, term implements `ITitledTokenizedTerm`.
+        If *title* is provided, term implements
+        :class:`zope.schema.interfaces.ITitledTokenizedTerm`.
         """
         self.value = value
         if token is None:
@@ -64,10 +71,35 @@ class SimpleTerm(object):
         if title is not None:
             directlyProvides(self, ITitledTokenizedTerm)
 
+    def __eq__(self, other):
+        if other is self:
+            return True
+
+        if not isinstance(other, SimpleTerm):
+            return False
+
+        return (
+            self.value == other.value
+            and self.token == other.token
+            and self.title == other.title
+        )
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def __hash__(self):
+        return hash((self.value, self.token, self.title))
+
 
 @implementer(IVocabularyTokenized)
 class SimpleVocabulary(object):
-    """Vocabulary that works from a sequence of terms."""
+    """
+    Vocabulary that works from a sequence of terms.
+
+    .. versionchanged:: 4.6.0
+       Implement equality and hashing based on the terms list
+       and interfaces implemented by this object.
+    """
 
     def __init__(self, terms, *interfaces, **kwargs):
         """Initialize the vocabulary given a list of terms.
@@ -80,14 +112,14 @@ class SimpleVocabulary(object):
 
         By default, ValueErrors are thrown if duplicate values or tokens
         are passed in. If you want to swallow these exceptions, pass
-        in swallow_duplicates=True. In this case, the values will
+        in ``swallow_duplicates=True``. In this case, the values will
         override themselves.
         """
         self.by_value = {}
         self.by_token = {}
         self._terms = terms
+        swallow_dupes = kwargs.get('swallow_duplicates', False)
         for term in self._terms:
-            swallow_dupes = kwargs.get('swallow_duplicates', False)
             if not swallow_dupes:
                 if term.value in self.by_value:
                     raise ValueError(
@@ -102,16 +134,23 @@ class SimpleVocabulary(object):
 
     @classmethod
     def fromItems(cls, items, *interfaces):
-        """Construct a vocabulary from a list of (token, value) pairs.
+        """
+        Construct a vocabulary from a list of (token, value) pairs or
+        (token, value, title) triples. The list does not have to be
+        homogeneous.
 
         The order of the items is preserved as the order of the terms
-        in the vocabulary.  Terms are created by calling the class
-        method createTerm() with the pair (value, token).
+        in the vocabulary. Terms are created by calling the class
+        method :meth:`createTerm`` with the pair or triple.
 
         One or more interfaces may also be provided so that alternate
         widgets may be bound without subclassing.
+
+        .. versionchanged:: 4.6.0
+            Allow passing in triples to set item titles.
         """
-        terms = [cls.createTerm(value, token) for (token, value) in items]
+        terms = [cls.createTerm(item[1], item[0], *item[2:])
+                 for item in items]
         return cls(terms, *interfaces)
 
     @classmethod
@@ -119,10 +158,10 @@ class SimpleVocabulary(object):
         """Construct a vocabulary from a simple list.
 
         Values of the list become both the tokens and values of the
-        terms in the vocabulary.  The order of the values is preserved
-        as the order of the terms in the vocabulary.  Tokens are
-        created by calling the class method createTerm() with the
-        value as the only parameter.
+        terms in the vocabulary. The order of the values is preserved
+        as the order of the terms in the vocabulary. Tokens are
+        created by calling the class method :meth:`createTerm()` with
+        the value as the only parameter.
 
         One or more interfaces may also be provided so that alternate
         widgets may be bound without subclassing.
@@ -169,6 +208,21 @@ class SimpleVocabulary(object):
         """See zope.schema.interfaces.IIterableVocabulary"""
         return len(self.by_value)
 
+    def __eq__(self, other):
+        if other is self:
+            return True
+
+        if not isinstance(other, SimpleVocabulary):
+            return False
+
+        return self._terms == other._terms and providedBy(self) == providedBy(other)
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def __hash__(self):
+        return hash(tuple(self._terms))
+
 
 def _createTermTree(ttree, dict_):
     """ Helper method that creates a tree-like dict with ITokenizedTerm
@@ -177,7 +231,7 @@ def _createTermTree(ttree, dict_):
     See fromDict for more details.
     """
     for key in sorted(dict_.keys()):
-        term = SimpleTerm(key[1], key[0], key[-1])
+        term = SimpleTerm(key[1], key[0], *key[2:])
         ttree[term] = TreeVocabulary.terms_factory()
         _createTermTree(ttree[term], dict_[key])
     return ttree
@@ -272,7 +326,8 @@ class TreeVocabulary(object):
         OrderedDict), that has tuples for keys.
 
         The tuples should have either 2 or 3 values, i.e:
-        (token, value, title) or (token, value)
+        (token, value, title) or (token, value). Only tuples that have
+        three values will create a :class:`zope.schema.interfaces.ITitledTokenizedTerm`.
 
         For example, a dict with 2-valued tuples:
 
@@ -290,6 +345,10 @@ class TreeVocabulary(object):
         }
         One or more interfaces may also be provided so that alternate
         widgets may be bound without subclassing.
+
+        .. versionchanged:: 4.6.0
+           Only create ``ITitledTokenizedTerm`` when a title is actually
+           provided.
         """
         return cls(_createTermTree(cls.terms_factory(), dict_), *interfaces)
 

Creating vocabularies 
There are a few helper methods in SimpleVocabulary that create vocabs for you. None of these appear to allow one to pass through a title to the SimpleTerm objects that are created. I find myself writing a method that allows me to pass in a title and create a simple vocab quite often. It would be nice to have this added to the SimpleVocabulary class.

diff --git a/src/zope/schema/tests/test__field.py b/src/zope/schema/tests/test__field.py
index cb0e127..0d12ad7 100644
--- a/src/zope/schema/tests/test__field.py
+++ b/src/zope/schema/tests/test__field.py
@@ -705,16 +705,13 @@ class ChoiceTests(EqualityTestsMixin,
         from zope.schema._field import Choice
         return Choice
 
-    from zope.schema.vocabulary import SimpleVocabulary
-    # SimpleVocabulary uses identity semantics for equality
-    _default_vocabulary = SimpleVocabulary.fromValues([1, 2, 3])
-
     def _makeOneFromClass(self, cls, *args, **kwargs):
         if (not args
             and 'vocabulary' not in kwargs
             and 'values' not in kwargs
             and 'source' not in kwargs):
-            kwargs['vocabulary'] = self._default_vocabulary
+            from zope.schema.vocabulary import SimpleVocabulary
+            kwargs['vocabulary'] = SimpleVocabulary.fromValues([1, 2, 3])
         return super(ChoiceTests, self)._makeOneFromClass(cls, *args, **kwargs)
 
     def _getTargetInterface(self):
diff --git a/src/zope/schema/tests/test_vocabulary.py b/src/zope/schema/tests/test_vocabulary.py
index 86e8164..63904b6 100644
--- a/src/zope/schema/tests/test_vocabulary.py
+++ b/src/zope/schema/tests/test_vocabulary.py
@@ -66,6 +66,41 @@ class SimpleTermTests(unittest.TestCase):
         self.assertFalse(ITitledTokenizedTerm.providedBy(term))
 
 
+    def test__eq__and__hash__(self):
+        from zope import interface
+
+        term = self._makeOne('value')
+        # Equal to itself
+        self.assertEqual(term, term)
+        # Not equal to a different class
+        self.assertNotEqual(term, object())
+        self.assertNotEqual(object(), term)
+
+        term2 = self._makeOne('value')
+        # Equal to another with the same value
+        self.assertEqual(term, term2)
+        # equal objects hash the same
+        self.assertEqual(hash(term), hash(term2))
+
+        # Providing tokens or titles that differ
+        # changes equality
+        term = self._makeOne('value', 'token')
+        self.assertNotEqual(term, term2)
+        self.assertNotEqual(hash(term), hash(term2))
+
+        term2 = self._makeOne('value', 'token')
+        self.assertEqual(term, term2)
+        self.assertEqual(hash(term), hash(term2))
+
+        term = self._makeOne('value', 'token', 'title')
+        self.assertNotEqual(term, term2)
+        self.assertNotEqual(hash(term), hash(term2))
+
+        term2 = self._makeOne('value', 'token', 'title')
+        self.assertEqual(term, term2)
+        self.assertEqual(hash(term), hash(term2))
+
+
 class SimpleVocabularyTests(unittest.TestCase):
 
     def _getTargetClass(self):
@@ -102,8 +137,8 @@ class SimpleVocabularyTests(unittest.TestCase):
             self.assertTrue(value in vocabulary)
         self.assertFalse('ABC' in vocabulary)
         for term in vocabulary:
-            self.assertTrue(vocabulary.getTerm(term.value) is term)
-            self.assertTrue(vocabulary.getTermByToken(term.token) is term)
+            self.assertIs(vocabulary.getTerm(term.value), term)
+            self.assertIs(vocabulary.getTermByToken(term.token), term)
 
     def test_fromValues(self):
         from zope.interface import Interface
@@ -119,7 +154,7 @@ class SimpleVocabularyTests(unittest.TestCase):
             self.assertTrue(ITokenizedTerm.providedBy(term))
             self.assertEqual(term.value, value)
         for value in VALUES:
-            self.assertTrue(value in vocabulary)
+            self.assertIn(value, vocabulary)
 
     def test_fromItems(self):
         from zope.interface import Interface
@@ -136,7 +171,30 @@ class SimpleVocabularyTests(unittest.TestCase):
             self.assertEqual(term.token, item[0])
             self.assertEqual(term.value, item[1])
         for item in ITEMS:
-            self.assertTrue(item[1] in vocabulary)
+            self.assertIn(item[1], vocabulary)
+
+    def test_fromItems_triples(self):
+        from zope.interface import Interface
+        from zope.schema.interfaces import ITitledTokenizedTerm
+
+        class IStupid(Interface):
+            pass
+
+        ITEMS = [
+            ('one', 1, 'title 1'),
+            ('two', 2, 'title 2'),
+            ('three', 3, 'title 3'),
+            ('fore!', 4, 'title four')
+        ]
+        vocabulary = self._getTargetClass().fromItems(ITEMS)
+        self.assertEqual(len(vocabulary), len(ITEMS))
+        for item, term in zip(ITEMS, vocabulary):
+            self.assertTrue(ITitledTokenizedTerm.providedBy(term))
+            self.assertEqual(term.token, item[0])
+            self.assertEqual(term.value, item[1])
+            self.assertEqual(term.title, item[2])
+        for item in ITEMS:
+            self.assertIn(item[1], vocabulary)
 
     def test_createTerm(self):
         from zope.schema.vocabulary import SimpleTerm
@@ -204,6 +262,38 @@ class SimpleVocabularyTests(unittest.TestCase):
         for term in vocab:
             self.assertEqual(term.value + 1, term.nextvalue)
 
+    def test__eq__and__hash__(self):
+        from zope import interface
+
+        values = [1, 4, 2, 9]
+        vocabulary = self._getTargetClass().fromValues(values)
+
+        # Equal to itself
+        self.assertEqual(vocabulary, vocabulary)
+        # Not to other classes
+        self.assertNotEqual(vocabulary, object())
+        self.assertNotEqual(object(), vocabulary)
+
+        # Equal to another object with the same values
+        vocabulary2 = self._getTargetClass().fromValues(values)
+        self.assertEqual(vocabulary, vocabulary2)
+        self.assertEqual(hash(vocabulary), hash(vocabulary2))
+
+        # Changing the values or the interfaces changes
+        # equality
+        class IFoo(interface.Interface):
+            "an interface"
+
+        vocabulary = self._getTargetClass().fromValues(values, IFoo)
+        self.assertNotEqual(vocabulary, vocabulary2)
+        # Interfaces are not taken into account in the hash; that's
+        # OK: equal hashes do not imply equal objects
+        self.assertEqual(hash(vocabulary), hash(vocabulary2))
+
+        vocabulary2 = self._getTargetClass().fromValues(values, IFoo)
+        self.assertEqual(vocabulary, vocabulary2)
+        self.assertEqual(hash(vocabulary), hash(vocabulary2))
+
 
 # Test _createTermTree via TreeVocabulary.fromDict
 
@@ -256,6 +346,18 @@ class TreeVocabularyTests(unittest.TestCase):
     def tree_vocab_3(self):
         return self._getTargetClass().fromDict(self.business_tree())
 
+    def test_only_titled_if_triples(self):
+        from zope.schema.interfaces import ITitledTokenizedTerm
+        no_titles = self.tree_vocab_2()
+        for term in no_titles:
+            self.assertIsNone(term.title)
+            self.assertFalse(ITitledTokenizedTerm.providedBy(term))
+
+        all_titles = self.tree_vocab_3()
+        for term in all_titles:
+            self.assertIsNotNone(term.title)
+            self.assertTrue(ITitledTokenizedTerm.providedBy(term))
+
     def test_implementation(self):
         from zope.interface.verify import verifyObject
         from zope.interface.common.mapping import IEnumerableMapping

pip install -e .[test]
parse_log_pytest
pytest
coverage sphinx pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
Babel==2.11.0
certifi==2021.5.30
charset-normalizer==2.0.12
coverage==6.2
docutils==0.18.1
idna==3.10
imagesize==1.4.1
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
Jinja2==3.0.3
MarkupSafe==2.0.1
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
Pygments==2.14.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytz==2025.2
requests==2.27.1
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work
zope.event==4.6
zope.exceptions==4.6
zope.interface==5.5.2
-e git+https://github.com/zopefoundation/zope.schema.git@665e2e73f639d07620f421540100cc29fa3498f7#egg=zope.schema
zope.testing==5.0.1
zope.testrunner==5.6

name: zope.schema
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - babel==2.11.0
      - charset-normalizer==2.0.12
      - coverage==6.2
      - docutils==0.18.1
      - idna==3.10
      - imagesize==1.4.1
      - jinja2==3.0.3
      - markupsafe==2.0.1
      - pygments==2.14.0
      - pytz==2025.2
      - requests==2.27.1
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - urllib3==1.26.20
      - zope-event==4.6
      - zope-exceptions==4.6
      - zope-interface==5.5.2
      - zope-testing==5.0.1
      - zope-testrunner==5.6
prefix: /opt/conda/envs/zope.schema

src/zope/schema/tests/test__field.py::ChoiceTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ChoiceTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ChoiceTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test__eq__and__hash__ src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test__eq__and__hash__ src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_fromItems_triples src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_only_titled_if_triples
src/zope/schema/tests/test__field.py::BytesTests::test___eq___different_type src/zope/schema/tests/test__field.py::BytesTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::BytesTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::BytesTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::BytesTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::BytesTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::BytesTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::BytesTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::BytesTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::BytesTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::BytesTests::test_is_hashable src/zope/schema/tests/test__field.py::BytesTests::test_validate_not_required src/zope/schema/tests/test__field.py::BytesTests::test_validate_required src/zope/schema/tests/test__field.py::BytesTests::test_validate_w_invalid_default src/zope/schema/tests/test__field.py::BytesTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ASCIITests::test___eq___different_type src/zope/schema/tests/test__field.py::ASCIITests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ASCIITests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ASCIITests::test__validate_empty src/zope/schema/tests/test__field.py::ASCIITests::test__validate_non_empty_hit src/zope/schema/tests/test__field.py::ASCIITests::test__validate_non_empty_miss src/zope/schema/tests/test__field.py::ASCIITests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIITests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ASCIITests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ASCIITests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIITests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ASCIITests::test_is_hashable src/zope/schema/tests/test__field.py::ASCIITests::test_validate_wrong_types src/zope/schema/tests/test__field.py::BytesLineTests::test___eq___different_type src/zope/schema/tests/test__field.py::BytesLineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::BytesLineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::BytesLineTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::BytesLineTests::test_constraint src/zope/schema/tests/test__field.py::BytesLineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::BytesLineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::BytesLineTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::BytesLineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::BytesLineTests::test_is_hashable src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_not_required src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_required src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ASCIILineTests::test___eq___different_type src/zope/schema/tests/test__field.py::ASCIILineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ASCIILineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ASCIILineTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIILineTests::test_constraint src/zope/schema/tests/test__field.py::ASCIILineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ASCIILineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ASCIILineTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ASCIILineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ASCIILineTests::test_is_hashable src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_not_required src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_required src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::FloatTests::test___eq___different_type src/zope/schema/tests/test__field.py::FloatTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::FloatTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::FloatTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::FloatTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::FloatTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::FloatTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::FloatTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::FloatTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::FloatTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::FloatTests::test_is_hashable src/zope/schema/tests/test__field.py::FloatTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_min src/zope/schema/tests/test__field.py::FloatTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_not_required src/zope/schema/tests/test__field.py::FloatTests::test_validate_required src/zope/schema/tests/test__field.py::DecimalTests::test___eq___different_type src/zope/schema/tests/test__field.py::DecimalTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DecimalTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DecimalTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DecimalTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DecimalTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::DecimalTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::DecimalTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DecimalTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DecimalTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DecimalTests::test_is_hashable src/zope/schema/tests/test__field.py::DecimalTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_min src/zope/schema/tests/test__field.py::DecimalTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_not_required src/zope/schema/tests/test__field.py::DecimalTests::test_validate_required src/zope/schema/tests/test__field.py::DatetimeTests::test___eq___different_type src/zope/schema/tests/test__field.py::DatetimeTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DatetimeTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DatetimeTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DatetimeTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DatetimeTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DatetimeTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DatetimeTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DatetimeTests::test_is_hashable src/zope/schema/tests/test__field.py::DatetimeTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_not_required src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_required src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_min src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_min_and_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DateTests::test___eq___different_type src/zope/schema/tests/test__field.py::DateTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DateTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DateTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DateTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DateTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DateTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DateTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DateTests::test_is_hashable src/zope/schema/tests/test__field.py::DateTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DateTests::test_validate_not_required src/zope/schema/tests/test__field.py::DateTests::test_validate_required src/zope/schema/tests/test__field.py::DateTests::test_validate_w_max src/zope/schema/tests/test__field.py::DateTests::test_validate_w_min src/zope/schema/tests/test__field.py::DateTests::test_validate_w_min_and_max src/zope/schema/tests/test__field.py::DateTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::TimedeltaTests::test___eq___different_type src/zope/schema/tests/test__field.py::TimedeltaTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::TimedeltaTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::TimedeltaTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::TimedeltaTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::TimedeltaTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::TimedeltaTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::TimedeltaTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::TimedeltaTests::test_is_hashable src/zope/schema/tests/test__field.py::TimedeltaTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_min src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_not_required src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_required src/zope/schema/tests/test__field.py::TimeTests::test___eq___different_type src/zope/schema/tests/test__field.py::TimeTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::TimeTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::TimeTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::TimeTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::TimeTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::TimeTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::TimeTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::TimeTests::test_is_hashable src/zope/schema/tests/test__field.py::TimeTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_min src/zope/schema/tests/test__field.py::TimeTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_not_required src/zope/schema/tests/test__field.py::TimeTests::test_validate_required src/zope/schema/tests/test__field.py::ChoiceTests::test___eq___different_type src/zope/schema/tests/test__field.py::ChoiceTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_int src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_mixed src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_source_is_ICSB_bound src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_source_is_ICSB_unbound src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_string src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_tuple src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_w_named_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_w_named_vocabulary_invalid src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_preconstructed_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_is_ICSB src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_is_ICSB_but_not_ISource src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_not_ICSB src/zope/schema/tests/test__field.py::ChoiceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_both_vocabulary_and_source src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_both_vocabulary_and_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_invalid_source src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_invalid_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_named_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_preconstructed_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_unicode_non_ascii_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_wo_values_vocabulary_or_source src/zope/schema/tests/test__field.py::ChoiceTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::ChoiceTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::ChoiceTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ChoiceTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ChoiceTests::test_is_hashable src/zope/schema/tests/test__field.py::URITests::test___eq___different_type src/zope/schema/tests/test__field.py::URITests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::URITests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::URITests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::URITests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::URITests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::URITests::test_fromUnicode_ok src/zope/schema/tests/test__field.py::URITests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::URITests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::URITests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::URITests::test_is_hashable src/zope/schema/tests/test__field.py::URITests::test_validate_not_a_uri src/zope/schema/tests/test__field.py::URITests::test_validate_not_required src/zope/schema/tests/test__field.py::URITests::test_validate_required src/zope/schema/tests/test__field.py::URITests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DottedNameTests::test___eq___different_type src/zope/schema/tests/test__field.py::DottedNameTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DottedNameTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DottedNameTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_defaults src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_max_dots_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_max_dots_valid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_min_dots_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_min_dots_valid src/zope/schema/tests/test__field.py::DottedNameTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DottedNameTests::test_fromUnicode_dotted_name_ok src/zope/schema/tests/test__field.py::DottedNameTests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DottedNameTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DottedNameTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DottedNameTests::test_is_hashable src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_not_a_dotted_name src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_not_required src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_required src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_w_max_dots src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_w_min_dots src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::IdTests::test___eq___different_type src/zope/schema/tests/test__field.py::IdTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::IdTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::IdTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::IdTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_dotted_name_ok src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_url_ok src/zope/schema/tests/test__field.py::IdTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::IdTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::IdTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::IdTests::test_is_hashable src/zope/schema/tests/test__field.py::IdTests::test_validate_not_a_uri src/zope/schema/tests/test__field.py::IdTests::test_validate_not_required src/zope/schema/tests/test__field.py::IdTests::test_validate_required src/zope/schema/tests/test__field.py::IdTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::InterfaceFieldTests::test___eq___different_type src/zope/schema/tests/test__field.py::InterfaceFieldTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::InterfaceFieldTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_is_hashable src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_not_required src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_required src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::CollectionTests::test___eq___different_type src/zope/schema/tests/test__field.py::CollectionTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::CollectionTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::CollectionTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::CollectionTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::CollectionTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::CollectionTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::CollectionTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::CollectionTests::test_ctor_defaults src/zope/schema/tests/test__field.py::CollectionTests::test_ctor_explicit src/zope/schema/tests/test__field.py::CollectionTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::CollectionTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::CollectionTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::CollectionTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::CollectionTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::CollectionTests::test_is_hashable src/zope/schema/tests/test__field.py::CollectionTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::CollectionTests::test_validate_max_length src/zope/schema/tests/test__field.py::CollectionTests::test_validate_min_length src/zope/schema/tests/test__field.py::CollectionTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::CollectionTests::test_validate_not_required src/zope/schema/tests/test__field.py::CollectionTests::test_validate_required src/zope/schema/tests/test__field.py::SequenceTests::test___eq___different_type src/zope/schema/tests/test__field.py::SequenceTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::SequenceTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::SequenceTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::SequenceTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::SequenceTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::SequenceTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::SequenceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::SequenceTests::test_ctor_defaults src/zope/schema/tests/test__field.py::SequenceTests::test_ctor_explicit src/zope/schema/tests/test__field.py::SequenceTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::SequenceTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::SequenceTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::SequenceTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::SequenceTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::SequenceTests::test_is_hashable src/zope/schema/tests/test__field.py::SequenceTests::test_mutable_sequence src/zope/schema/tests/test__field.py::SequenceTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::SequenceTests::test_sequence src/zope/schema/tests/test__field.py::SequenceTests::test_validate_max_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_min_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_not_required src/zope/schema/tests/test__field.py::SequenceTests::test_validate_required src/zope/schema/tests/test__field.py::SequenceTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::TupleTests::test___eq___different_type src/zope/schema/tests/test__field.py::TupleTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::TupleTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::TupleTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::TupleTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::TupleTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::TupleTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::TupleTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::TupleTests::test_ctor_defaults src/zope/schema/tests/test__field.py::TupleTests::test_ctor_explicit src/zope/schema/tests/test__field.py::TupleTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::TupleTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::TupleTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::TupleTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::TupleTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::TupleTests::test_is_hashable src/zope/schema/tests/test__field.py::TupleTests::test_mutable_sequence src/zope/schema/tests/test__field.py::TupleTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::TupleTests::test_sequence src/zope/schema/tests/test__field.py::TupleTests::test_validate_max_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_min_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_not_required src/zope/schema/tests/test__field.py::TupleTests::test_validate_required src/zope/schema/tests/test__field.py::TupleTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::MutableSequenceTests::test___eq___different_type src/zope/schema/tests/test__field.py::MutableSequenceTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::MutableSequenceTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::MutableSequenceTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::MutableSequenceTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MutableSequenceTests::test_ctor_defaults src/zope/schema/tests/test__field.py::MutableSequenceTests::test_ctor_explicit src/zope/schema/tests/test__field.py::MutableSequenceTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::MutableSequenceTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::MutableSequenceTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::MutableSequenceTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MutableSequenceTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::MutableSequenceTests::test_is_hashable src/zope/schema/tests/test__field.py::MutableSequenceTests::test_mutable_sequence src/zope/schema/tests/test__field.py::MutableSequenceTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::MutableSequenceTests::test_sequence src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_max_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_min_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_not_required src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_required src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ListTests::test___eq___different_type src/zope/schema/tests/test__field.py::ListTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ListTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ListTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::ListTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::ListTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::ListTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::ListTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ListTests::test_ctor_defaults src/zope/schema/tests/test__field.py::ListTests::test_ctor_explicit src/zope/schema/tests/test__field.py::ListTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::ListTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ListTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ListTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ListTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ListTests::test_is_hashable src/zope/schema/tests/test__field.py::ListTests::test_mutable_sequence src/zope/schema/tests/test__field.py::ListTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::ListTests::test_sequence src/zope/schema/tests/test__field.py::ListTests::test_validate_max_length src/zope/schema/tests/test__field.py::ListTests::test_validate_min_length src/zope/schema/tests/test__field.py::ListTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::ListTests::test_validate_not_required src/zope/schema/tests/test__field.py::ListTests::test_validate_required src/zope/schema/tests/test__field.py::ListTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::SetTests::test___eq___different_type src/zope/schema/tests/test__field.py::SetTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::SetTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::SetTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::SetTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::SetTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::SetTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::SetTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::SetTests::test_ctor_defaults src/zope/schema/tests/test__field.py::SetTests::test_ctor_disallows_unique src/zope/schema/tests/test__field.py::SetTests::test_ctor_explicit src/zope/schema/tests/test__field.py::SetTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::SetTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::SetTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::SetTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::SetTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::SetTests::test_is_hashable src/zope/schema/tests/test__field.py::SetTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::SetTests::test_validate_max_length src/zope/schema/tests/test__field.py::SetTests::test_validate_min_length src/zope/schema/tests/test__field.py::SetTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::SetTests::test_validate_not_required src/zope/schema/tests/test__field.py::SetTests::test_validate_required src/zope/schema/tests/test__field.py::SetTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::FrozenSetTests::test___eq___different_type src/zope/schema/tests/test__field.py::FrozenSetTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::FrozenSetTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::FrozenSetTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::FrozenSetTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::FrozenSetTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::FrozenSetTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::FrozenSetTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_defaults src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_disallows_unique src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_explicit src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::FrozenSetTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::FrozenSetTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::FrozenSetTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::FrozenSetTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::FrozenSetTests::test_is_hashable src/zope/schema/tests/test__field.py::FrozenSetTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_max_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_min_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_not_required src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_required src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ObjectTests::test___eq___different_type src/zope/schema/tests/test__field.py::ObjectTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::ObjectTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_empty_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_not_providing_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema_but_invalid_fields src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema_but_missing_fields src/zope/schema/tests/test__field.py::ObjectTests::test_class_conforms_to_IObject src/zope/schema/tests/test__field.py::ObjectTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ObjectTests::test_ctor_w_bad_schema src/zope/schema/tests/test__field.py::ObjectTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::ObjectTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::ObjectTests::test_instance_conforms_to_IObject src/zope/schema/tests/test__field.py::ObjectTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::ObjectTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::ObjectTests::test_is_hashable src/zope/schema/tests/test__field.py::ObjectTests::test_schema_defined_by_subclass src/zope/schema/tests/test__field.py::ObjectTests::test_set_allows_IBOAE_subscr_to_replace_value src/zope/schema/tests/test__field.py::ObjectTests::test_set_emits_IBOAE src/zope/schema/tests/test__field.py::ObjectTests::test_validate_not_required src/zope/schema/tests/test__field.py::ObjectTests::test_validate_required src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles_collection_not_valid src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles_object_not_valid src/zope/schema/tests/test__field.py::ObjectTests::test_validates_invariants_by_default src/zope/schema/tests/test__field.py::MappingTests::test___eq___different_type src/zope/schema/tests/test__field.py::MappingTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::MappingTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::MappingTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::MappingTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MappingTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::MappingTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::MappingTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::MappingTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::MappingTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MappingTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::MappingTests::test_is_hashable src/zope/schema/tests/test__field.py::MappingTests::test_mapping src/zope/schema/tests/test__field.py::MappingTests::test_mutable_mapping src/zope/schema/tests/test__field.py::MappingTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::MappingTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::MappingTests::test_validate_max_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_min_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_not_required src/zope/schema/tests/test__field.py::MappingTests::test_validate_required src/zope/schema/tests/test__field.py::MappingTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::MutableMappingTests::test___eq___different_type src/zope/schema/tests/test__field.py::MutableMappingTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::MutableMappingTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::MutableMappingTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::MutableMappingTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MutableMappingTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::MutableMappingTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::MutableMappingTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::MutableMappingTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::MutableMappingTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MutableMappingTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::MutableMappingTests::test_is_hashable src/zope/schema/tests/test__field.py::MutableMappingTests::test_mapping src/zope/schema/tests/test__field.py::MutableMappingTests::test_mutable_mapping src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_max_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_min_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_not_required src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_required src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DictTests::test___eq___different_type src/zope/schema/tests/test__field.py::DictTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__field.py::DictTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__field.py::DictTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::DictTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DictTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::DictTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::DictTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__field.py::DictTests::test_hash_across_unequal_instances src/zope/schema/tests/test__field.py::DictTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DictTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__field.py::DictTests::test_is_hashable src/zope/schema/tests/test__field.py::DictTests::test_mapping src/zope/schema/tests/test__field.py::DictTests::test_mutable_mapping src/zope/schema/tests/test__field.py::DictTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::DictTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::DictTests::test_validate_max_length src/zope/schema/tests/test__field.py::DictTests::test_validate_min_length src/zope/schema/tests/test__field.py::DictTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::DictTests::test_validate_not_required src/zope/schema/tests/test__field.py::DictTests::test_validate_required src/zope/schema/tests/test__field.py::DictTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::test_suite src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test_bytes_value src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test_class_conforms_to_ITokenizedTerm src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test_ctor_defaults src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test_ctor_explicit src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test_instance_conforms_to_ITokenizedTerm src/zope/schema/tests/test_vocabulary.py::SimpleTermTests::test_unicode_non_ascii_value src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_class_conforms_to_IVocabularyTokenized src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_createTerm src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_ctor_additional_interfaces src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_fromItems src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_fromValues src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_getTermByToken_miss src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_getTerm_miss src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_instance_conforms_to_IVocabularyTokenized src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_nonunique_token_message src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_nonunique_token_messages src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_nonunique_tokens src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_nonunique_tokens_swallow src/zope/schema/tests/test_vocabulary.py::SimpleVocabularyTests::test_overriding_createTerm src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_additional_interfaces src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_contains src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_get src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_get_term src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_implementation src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_indexes src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_len src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_nonunique_token_message src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_nonunique_value_message src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_nonunique_values_and_tokens src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_ordering src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_recursive_methods src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_termpath src/zope/schema/tests/test_vocabulary.py::TreeVocabularyTests::test_values_and_items src/zope/schema/tests/test_vocabulary.py::RegistryTests::test_getVocabularyRegistry src/zope/schema/tests/test_vocabulary.py::RegistryTests::test_setVocabularyRegistry
src/zope/schema/vocabulary.py CHANGES.rst
src/zope/schema/vocabulary.py CHANGES.rst