cpython/Lib/test/crashers
Jeremy Hylton fa955697fa Add checking for a number of metaclass error conditions.
We add some new rules that are required for preserving internal
invariants of types.

1.  If type (or a subclass of type) appears in bases, it must appear
    before any non-type bases.  If a non-type base (like a regular
    new-style class) occurred first, it could trick type into
    allocating the new class an __dict__ which must be impossible.

2. There are several checks that are made of bases when creating a
   type.  Those checks are now repeated when assigning to __bases__.
   We also add the restriction that assignment to __bases__ may not
   change the metaclass of the type.

Add new tests for these cases and for a few other oddball errors that
were no previously tested.  Remove a crasher test that was fixed.

Also some internal refactoring:  Extract the code to find the most
derived metaclass of a type and its bases.  It is now needed in two
places.  Rewrite the TypeError checks in test_descr to use doctest.
The tests now clearly show what exception they expect to see.
2007-02-27 18:29:45 +00:00
..
bogus_code_obj.py
bogus_sre_bytecode.py
borrowed_ref_1.py
borrowed_ref_2.py
dangerous_subclassing.py
gc_inspection.py
infinite_loop_re.py
infinite_rec_1.py
infinite_rec_2.py
infinite_rec_4.py
infinite_rec_5.py
loosing_dict_ref.py
loosing_mro_ref.py
nasty_eq_vs_dict.py
README
recursion_limit_too_high.py
recursive_call.py
weakref_in_del.py

This directory only contains tests for outstanding bugs that cause
the interpreter to segfault.  Ideally this directory should always
be empty.  Sometimes it may not be easy to fix the underlying cause.

Each test should fail when run from the command line:

	./python Lib/test/crashers/weakref_in_del.py

Each test should have a link to the bug report:

	# http://python.org/sf/BUG#

Put as much info into a docstring or comments to help determine
the cause of the failure.  Particularly note if the cause is
system or environment dependent and what the variables are.

Once the crash is fixed, the test case should be moved into an appropriate
test (even if it was originally from the test suite).  This ensures the
regression doesn't happen again.  And if it does, it should be easier
to track down.