Fixed typo in WidthRatioNode's error.
Fixed #19401 -- Ensure that swappable model references are case insensitive.

This is necessary because get_model() checks are case insensitive, and if the swapable check isn't, the
swappable logic gets tied up in knots with models that are partially swapped out.

Thanks to chris@cogdon.org for the report and extensive analysis, and Preston for his work on the draft patch.
Fixed #19500 -- Solved a regression in join reuse

The ORM didn't reuse joins for direct foreign key traversals when using
chained filters. For example:
    qs.filter(fk__somefield=1).filter(fk__somefield=2))
produced two joins.

As a bonus, reverse onetoone filters can now reuse joins correctly

The regression was caused by the join() method refactor in commit
68847135bc9acb2c51c2d36797d0a85395f0cd35

Thanks for Simon Charette for spotting some issues with the first draft
of the patch.
Fixed #18854 -- Join promotion in disjunction cases

The added promotion logic is based on promoting any joins used in only
some of the childs of an OR clause unless the join existed before the
OR clause addition.
Fixed a regression in distinct_on

Caused by regression fix for #19500.
Fixed #19387 -- Preserved SafeData status in contrib.messages

Thanks Anton Baklanov for the report and the patch.
Fixed #19506 - Remove 'mysite' prefix in model example.

Thanks Mike O'Connor for the report.
Fixed #19497 -- Refactored testing docs.

Thanks Tim Graham for the review and suggestions.
Fixed #19487 -- Used str in the test client's WSGI environ.

This regression was introduced by the unicode_literals patch. The WSGI
spec mandates that environ contains native strings.
Fixed #19468 -- Decoded request.path correctly on Python 3.

Thanks aliva for the report and claudep for the feedback.
Fixed #19509 -- Fixed crypt/bcrypt non-ascii password encoding

Also systematically added non-ascii passwords in hashers test suite.
Thanks Vaal for the report.
Better name for a new testing documentation link.
Fixed #15516 -- Updated the ticket life cycle diagram.
Add assertInHTML method to TestCase
Add assertJSONEqual method to TestCase
Use new TestCase methods for equality comparisons
Use HTML parser to compare html snippets
Don't rely on dictionary ordering in tests
Sort HTML attributes on generated forms
Made admin generated changelist URLs independent of dict ordering