From dbdd2538607e06f5f59c6f3c16737acb6bc68918 Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sun, 16 Dec 2012 21:05:49 +0100 Subject: [PATCH] Replaced the test case hierarchy schema with a vector version. The OmniGraffle source file is included for future use. --- .../django_unittest_classes_hierarchy.graffle | 883 ++++++++++++++++++ .../django_unittest_classes_hierarchy.pdf | Bin 0 -> 51979 bytes .../django_unittest_classes_hierarchy.png | Bin 11757 -> 0 bytes .../django_unittest_classes_hierarchy.svg | 3 + docs/topics/http/middleware.txt | 4 +- docs/topics/testing.txt | 7 +- 6 files changed, 893 insertions(+), 4 deletions(-) create mode 100644 docs/topics/_images/django_unittest_classes_hierarchy.graffle create mode 100644 docs/topics/_images/django_unittest_classes_hierarchy.pdf delete mode 100644 docs/topics/_images/django_unittest_classes_hierarchy.png create mode 100644 docs/topics/_images/django_unittest_classes_hierarchy.svg diff --git a/docs/topics/_images/django_unittest_classes_hierarchy.graffle b/docs/topics/_images/django_unittest_classes_hierarchy.graffle new file mode 100644 index 0000000000..7211c0f3be --- /dev/null +++ b/docs/topics/_images/django_unittest_classes_hierarchy.graffle @@ -0,0 +1,883 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGrafflePro + 139.16.0.171715 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559.28997802734375, 782.8900146484375}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2012-12-16 18:52:14 +0000 + Creator + Aymeric Augustin + DisplayScale + 1.000 cm = 1.000 cm + GraphDocumentVersion + 8 + GraphicsList + + + Class + LineGraphic + Head + + ID + 8 + + ID + 29 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {369, 459} + {216, 400.5} + + Style + + stroke + + HeadArrow + UMLInheritance + HeadScale + 0.79999995231628418 + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 6 + Info + 2 + + + + Class + LineGraphic + Head + + ID + 12 + Info + 1 + + ID + 27 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {135, 270} + {369, 225} + + Style + + stroke + + HeadArrow + UMLInheritance + HeadScale + 0.79999995231628418 + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 26 + Position + 0.5 + + + + Class + LineGraphic + Head + + ID + 10 + + ID + 26 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {135, 315} + {135, 225} + + Style + + stroke + + HeadArrow + UMLInheritance + HeadScale + 0.79999995231628418 + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 9 + + + + Class + LineGraphic + Head + + ID + 9 + + ID + 25 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {135, 387} + {135, 342} + + Style + + stroke + + HeadArrow + UMLInheritance + HeadScale + 0.79999995231628418 + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 8 + + + + Class + LineGraphic + Head + + ID + 8 + + ID + 23 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {135, 459} + {135, 414} + + Style + + stroke + + HeadArrow + UMLInheritance + HeadScale + 0.79999995231628418 + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 7 + + + + Bounds + {{378, 252}, {81, 27}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 22 + Shape + NoteShape + Style + + stroke + + Color + + b + 0 + g + 0.501961 + r + 0 + + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;\red0\green128\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\i\fs24 \cf2 Python < 2.7} + VerticalPad + 0 + + TextRelativeArea + {{0, 0}, {1, 1}} + + + Bounds + {{45, 252}, {81, 27}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 20 + Shape + NoteShape + Style + + stroke + + Color + + b + 0 + g + 0.501961 + r + 0 + + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;\red0\green128\blue0;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\i\fs24 \cf2 Python \uc0\u8805 2.7} + VerticalPad + 0 + + + + Bounds + {{288, 198}, {162, 27}} + Class + ShapedGraphic + ID + 12 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 TestCase} + + + + Bounds + {{54, 198}, {162, 27}} + Class + ShapedGraphic + ID + 10 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 TestCase} + + + + Bounds + {{54, 315}, {162, 27}} + Class + ShapedGraphic + ID + 9 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 SimpleTestCase} + + + + Bounds + {{54, 387}, {162, 27}} + Class + ShapedGraphic + ID + 8 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 TransactionTestCase} + + + + Bounds + {{54, 459}, {162, 27}} + Class + ShapedGraphic + ID + 7 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 TestCase} + + + + Bounds + {{288, 459}, {162, 27}} + Class + ShapedGraphic + ID + 6 + Magnets + + {0, 1} + {0, -1} + {1, 0} + {-1, 0} + + Shape + Rectangle + Style + + fill + + FillType + 2 + GradientAngle + 90 + GradientColor + + w + 0.666667 + + + stroke + + CornerRadius + 5 + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 LiveServerTestCase} + + + + Bounds + {{18, 297}, {468, 207}} + Class + ShapedGraphic + ID + 13 + Shape + Rectangle + Style + + Text + + Align + 2 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qr + +\f0\fs24 \cf0 django.test} + + TextPlacement + 0 + + + Bounds + {{18, 153}, {225, 90}} + Class + ShapedGraphic + ID + 18 + Shape + Rectangle + Style + + Text + + Align + 2 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qr + +\f0\fs24 \cf0 django.utils.unittest\ += unittest (standard library)} + + TextPlacement + 0 + + + Bounds + {{261, 153}, {225, 90}} + Class + ShapedGraphic + ID + 19 + Shape + Rectangle + Style + + Text + + Align + 2 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 +\cocoascreenfonts1{\fonttbl\f0\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qr + +\f0\fs24 \cf0 django.utils.unittest\ += unittest2 (bundled copy)} + + TextPlacement + 0 + + + GridInfo + + ShowsGrid + YES + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Calque 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2012-12-16 19:08:28 +0000 + Modifier + Aymeric Augustin + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595.28997802734375, 841.8900146484375} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canevas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + Frame + {{9, 4}, {694, 874}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{0, 0}, {559, 735}} + Zoom + 1 + ZoomValues + + + Canevas 1 + 1 + 1 + + + + + diff --git a/docs/topics/_images/django_unittest_classes_hierarchy.pdf b/docs/topics/_images/django_unittest_classes_hierarchy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cedaba22ac7f5e26690d43ddf9aa081c2c28eedb GIT binary patch literal 51979 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 Lj%v;yrVsxM+^(=o diff --git a/docs/topics/_images/django_unittest_classes_hierarchy.svg b/docs/topics/_images/django_unittest_classes_hierarchy.svg new file mode 100644 index 0000000000..0482f044dd --- /dev/null +++ b/docs/topics/_images/django_unittest_classes_hierarchy.svg @@ -0,0 +1,3 @@ + + +2012-12-16 19:08ZCanevas 1Calque 1django.utils.unittest= unittest2 (bundled copy)django.utils.unittest= unittest (standard library)django.testLiveServerTestCaseTestCaseTransactionTestCaseSimpleTestCaseTestCaseTestCasePython ≥ 2.7Python < 2.7 diff --git a/docs/topics/http/middleware.txt b/docs/topics/http/middleware.txt index 52f0e8582d..18243c77ce 100644 --- a/docs/topics/http/middleware.txt +++ b/docs/topics/http/middleware.txt @@ -65,8 +65,8 @@ reverse order, from the bottom up. Three hooks are available: .. image:: _images/middleware.* :alt: middleware application order - :width: 480 - :height: 408 + :width: 481 + :height: 409 If you prefer, you can also think of it like an onion: each middleware class is a "layer" that wraps the view. diff --git a/docs/topics/testing.txt b/docs/topics/testing.txt index a52e4fe169..8c11e32a55 100644 --- a/docs/topics/testing.txt +++ b/docs/topics/testing.txt @@ -1186,10 +1186,13 @@ Normal Python unit test classes extend a base class of .. _testcase_hierarchy_diagram: -.. figure:: _images/django_unittest_classes_hierarchy.png +.. figure:: _images/django_unittest_classes_hierarchy.* :alt: Hierarchy of Django unit testing classes (TestCase subclasses) + :width: 508 + :height: 391 - Hierarchy of Django unit testing classes +Regardless of the version of Python you're using, if you've installed +:mod:`unittest2`, :mod:`django.utils.unittest` will point to that library. TestCase ^^^^^^^^