def common(cls, constructor=None, mutable=False, iter_methods=False,<EOL>view_methods=False, recursive=True):
tests = (<EOL>item_access, iteration, containment, length, equality,<EOL>item_creation, item_deletion, sequence_typing, addition,<EOL>to_kwargs, pickling,<EOL>)<EOL>mutable_tests = (<EOL>pop, popitem, clear, update, setdefault, copying, deepcopying,<EOL>)<EOL>if constructor is None:<EOL><INDENT>constructor = cls<EOL><DEDENT>options = Options(cls, constructor, mutable, iter_methods, view_methods,<EOL>recursive)<EOL>if mutable:<EOL><INDENT>tests = chain(tests, mutable_tests)<EOL><DEDENT>for test in tests:<EOL><INDENT>test.description = test.__doc__.format(cls=cls.__name__)<EOL>yield test, options<EOL><DEDENT>
Iterates over tests common to multiple Attr-derived classes

cls: The class that is being tested.
mutable: (optional, False) Whether the object is supposed to be
    mutable.
iter_methods: (optional, False) Whether the class implements
    iter<keys,values,items> under Python 2.
view_methods: (optional, False) Whether the class implements
    view<keys,values,items> under Python 2.
recursive: (optional, True) Whether recursive assignment works.