From 89f40e36246100df6a11316c31a76712ebc6c501 Mon Sep 17 00:00:00 2001 From: Florian Apolloner Date: Tue, 26 Feb 2013 09:53:47 +0100 Subject: Merged regressiontests and modeltests into the test root. --- tests/admin_changelist/__init__.py | 0 tests/admin_changelist/admin.py | 104 + tests/admin_changelist/models.py | 89 + tests/admin_changelist/tests.py | 565 +++ tests/admin_changelist/urls.py | 8 + tests/admin_custom_urls/__init__.py | 1 + tests/admin_custom_urls/fixtures/actions.json | 44 + tests/admin_custom_urls/fixtures/users.json | 20 + tests/admin_custom_urls/models.py | 80 + tests/admin_custom_urls/tests.py | 141 + tests/admin_custom_urls/urls.py | 8 + tests/admin_filters/__init__.py | 0 tests/admin_filters/models.py | 36 + tests/admin_filters/tests.py | 743 ++++ tests/admin_inlines/__init__.py | 0 tests/admin_inlines/admin.py | 153 + tests/admin_inlines/fixtures/admin-views-users.xml | 17 + tests/admin_inlines/models.py | 198 + tests/admin_inlines/tests.py | 617 +++ tests/admin_inlines/urls.py | 10 + tests/admin_ordering/__init__.py | 0 tests/admin_ordering/models.py | 35 + tests/admin_ordering/tests.py | 106 + tests/admin_registration/__init__.py | 0 tests/admin_registration/models.py | 16 + tests/admin_registration/tests.py | 64 + tests/admin_scripts/__init__.py | 0 tests/admin_scripts/app_with_import/__init__.py | 0 tests/admin_scripts/app_with_import/models.py | 8 + tests/admin_scripts/broken_app/__init__.py | 0 tests/admin_scripts/broken_app/models.py | 1 + tests/admin_scripts/complex_app/__init__.py | 0 tests/admin_scripts/complex_app/admin/__init__.py | 0 tests/admin_scripts/complex_app/admin/foo.py | 8 + tests/admin_scripts/complex_app/models/__init__.py | 4 + tests/admin_scripts/complex_app/models/bar.py | 11 + tests/admin_scripts/complex_app/models/foo.py | 7 + .../custom_templates/app_template/__init__.py | 0 .../custom_templates/app_template/api.py | 1 + .../custom_templates/app_template/models.py | 1 + .../custom_templates/project_template.tgz | Bin 0 -> 164 bytes .../project_template/additional_dir/Procfile | 1 + .../additional_dir/additional_file.py | 1 + .../project_template/additional_dir/extra.py | 1 + .../additional_dir/requirements.txt | 1 + .../custom_templates/project_template/manage.py | 6 + .../project_template/project_name/__init__.py | 0 .../project_template/project_name/settings.py | 1 + .../ticket-18091-non-ascii-template.txt | 2 + .../project_template/ticket-19397-binary-file.ico | Bin 0 -> 894 bytes tests/admin_scripts/management/__init__.py | 0 .../admin_scripts/management/commands/__init__.py | 0 .../management/commands/app_command.py | 11 + .../management/commands/base_command.py | 17 + .../management/commands/custom_startproject.py | 11 + .../management/commands/label_command.py | 10 + .../management/commands/noargs_command.py | 10 + tests/admin_scripts/models.py | 14 + tests/admin_scripts/simple_app/__init__.py | 0 tests/admin_scripts/simple_app/models.py | 3 + tests/admin_scripts/tests.py | 1649 ++++++++ tests/admin_scripts/urls.py | 11 + tests/admin_util/__init__.py | 0 tests/admin_util/models.py | 44 + tests/admin_util/tests.py | 320 ++ tests/admin_validation/__init__.py | 0 tests/admin_validation/models.py | 57 + tests/admin_validation/tests.py | 303 ++ tests/admin_views/__init__.py | 0 tests/admin_views/admin.py | 750 ++++ tests/admin_views/customadmin.py | 59 + tests/admin_views/fixtures/admin-views-actions.xml | 15 + tests/admin_views/fixtures/admin-views-books.xml | 45 + tests/admin_views/fixtures/admin-views-colors.xml | 19 + tests/admin_views/fixtures/admin-views-fabrics.xml | 12 + tests/admin_views/fixtures/admin-views-person.xml | 18 + tests/admin_views/fixtures/admin-views-unicode.xml | 63 + tests/admin_views/fixtures/admin-views-users.xml | 96 + tests/admin_views/fixtures/deleted-objects.xml | 53 + .../fixtures/multiple-child-classes.json | 107 + tests/admin_views/fixtures/string-primary-key.xml | 6 + tests/admin_views/forms.py | 11 + tests/admin_views/models.py | 680 ++++ .../templates/custom_filter_template.html | 7 + tests/admin_views/tests.py | 4017 ++++++++++++++++++++ tests/admin_views/urls.py | 15 + tests/admin_views/views.py | 6 + tests/admin_widgets/__init__.py | 0 .../admin_widgets/fixtures/admin-widgets-users.xml | 43 + tests/admin_widgets/models.py | 130 + tests/admin_widgets/tests.py | 744 ++++ tests/admin_widgets/urls.py | 10 + tests/admin_widgets/widgetadmin.py | 50 + tests/aggregation/__init__.py | 0 tests/aggregation/fixtures/aggregation.json | 243 ++ tests/aggregation/models.py | 47 + tests/aggregation/tests.py | 587 +++ tests/aggregation_regress/__init__.py | 0 .../fixtures/aggregation_regress.json | 257 ++ tests/aggregation_regress/models.py | 89 + tests/aggregation_regress/tests.py | 1022 +++++ tests/app_loading/__init__.py | 0 tests/app_loading/eggs/brokenapp.egg | Bin 0 -> 1605 bytes tests/app_loading/eggs/modelapp.egg | Bin 0 -> 3347 bytes tests/app_loading/eggs/nomodelapp.egg | Bin 0 -> 1211 bytes tests/app_loading/eggs/omelet.egg | Bin 0 -> 9020 bytes tests/app_loading/models.py | 0 tests/app_loading/not_installed/__init__.py | 0 tests/app_loading/not_installed/models.py | 13 + tests/app_loading/tests.py | 110 + tests/backends/__init__.py | 0 tests/backends/models.py | 101 + tests/backends/tests.py | 748 ++++ tests/base/__init__.py | 0 tests/base/models.py | 23 + tests/bash_completion/__init__.py | 1 + tests/bash_completion/management/__init__.py | 1 + .../management/commands/__init__.py | 1 + .../management/commands/test_command.py | 13 + tests/bash_completion/models.py | 1 + tests/bash_completion/tests.py | 88 + tests/basic/__init__.py | 0 tests/basic/models.py | 20 + tests/basic/tests.py | 693 ++++ tests/bug639/__init__.py | 0 tests/bug639/models.py | 27 + tests/bug639/test.jpg | Bin 0 -> 1780 bytes tests/bug639/tests.py | 47 + tests/bug8245/__init__.py | 0 tests/bug8245/admin.py | 9 + tests/bug8245/models.py | 5 + tests/bug8245/tests.py | 20 + tests/builtin_server/__init__.py | 0 tests/builtin_server/models.py | 0 tests/builtin_server/tests.py | 55 + tests/bulk_create/__init__.py | 0 tests/bulk_create/models.py | 25 + tests/bulk_create/tests.py | 167 + tests/cache/__init__.py | 0 tests/cache/closeable_cache.py | 11 + tests/cache/liberal_backend.py | 10 + tests/cache/models.py | 13 + tests/cache/tests.py | 1901 +++++++++ tests/choices/__init__.py | 0 tests/choices/models.py | 27 + tests/choices/tests.py | 25 + tests/commands_sql/__init__.py | 0 tests/commands_sql/models.py | 7 + tests/commands_sql/tests.py | 52 + tests/comment_tests/__init__.py | 0 tests/comment_tests/custom_comments/__init__.py | 32 + tests/comment_tests/custom_comments/forms.py | 5 + tests/comment_tests/custom_comments/models.py | 5 + tests/comment_tests/custom_comments/views.py | 14 + tests/comment_tests/fixtures/comment_tests.json | 53 + tests/comment_tests/fixtures/comment_utils.xml | 15 + tests/comment_tests/models.py | 39 + tests/comment_tests/tests/__init__.py | 95 + tests/comment_tests/tests/app_api_tests.py | 80 + tests/comment_tests/tests/comment_form_tests.py | 85 + .../tests/comment_utils_moderators_tests.py | 97 + tests/comment_tests/tests/comment_view_tests.py | 324 ++ tests/comment_tests/tests/feed_tests.py | 53 + tests/comment_tests/tests/model_tests.py | 58 + tests/comment_tests/tests/moderation_view_tests.py | 315 ++ tests/comment_tests/tests/templatetag_tests.py | 171 + tests/comment_tests/urls.py | 23 + tests/comment_tests/urls_admin.py | 19 + tests/comment_tests/urls_default.py | 9 + tests/conditional_processing/__init__.py | 1 + tests/conditional_processing/models.py | 129 + tests/conditional_processing/urls.py | 12 + tests/conditional_processing/views.py | 29 + tests/context_processors/__init__.py | 0 tests/context_processors/models.py | 1 + .../context_processors/request_attrs.html | 13 + tests/context_processors/tests.py | 37 + tests/context_processors/urls.py | 10 + tests/context_processors/views.py | 8 + tests/createsuperuser/__init__.py | 0 tests/createsuperuser/models.py | 0 tests/createsuperuser/tests.py | 56 + tests/csrf_tests/__init__.py | 0 tests/csrf_tests/models.py | 1 + tests/csrf_tests/tests.py | 342 ++ tests/custom_columns/__init__.py | 0 tests/custom_columns/models.py | 46 + tests/custom_columns/tests.py | 74 + tests/custom_columns_regress/__init__.py | 0 tests/custom_columns_regress/models.py | 41 + tests/custom_columns_regress/tests.py | 80 + tests/custom_managers/__init__.py | 0 tests/custom_managers/models.py | 65 + tests/custom_managers/tests.py | 74 + tests/custom_managers_regress/__init__.py | 0 tests/custom_managers_regress/models.py | 45 + tests/custom_managers_regress/tests.py | 50 + tests/custom_methods/__init__.py | 0 tests/custom_methods/models.py | 40 + tests/custom_methods/tests.py | 44 + tests/custom_pk/__init__.py | 0 tests/custom_pk/fields.py | 57 + tests/custom_pk/models.py | 48 + tests/custom_pk/tests.py | 182 + tests/datatypes/__init__.py | 0 tests/datatypes/models.py | 28 + tests/datatypes/tests.py | 96 + tests/dates/__init__.py | 0 tests/dates/models.py | 28 + tests/dates/tests.py | 83 + tests/datetimes/__init__.py | 0 tests/datetimes/models.py | 28 + tests/datetimes/tests.py | 83 + tests/db_typecasts/__init__.py | 0 tests/db_typecasts/models.py | 0 tests/db_typecasts/tests.py | 56 + tests/decorators/__init__.py | 0 tests/decorators/models.py | 2 + tests/decorators/tests.py | 250 ++ tests/defaultfilters/__init__.py | 0 tests/defaultfilters/models.py | 0 tests/defaultfilters/tests.py | 653 ++++ tests/defer/__init__.py | 0 tests/defer/models.py | 30 + tests/defer/tests.py | 185 + tests/defer_regress/__init__.py | 0 tests/defer_regress/models.py | 64 + tests/defer_regress/tests.py | 248 ++ tests/delete/__init__.py | 0 tests/delete/models.py | 128 + tests/delete/tests.py | 374 ++ tests/delete_regress/__init__.py | 1 + tests/delete_regress/models.py | 111 + tests/delete_regress/tests.py | 360 ++ tests/dispatch/__init__.py | 2 + tests/dispatch/models.py | 0 tests/dispatch/tests/__init__.py | 8 + tests/dispatch/tests/test_dispatcher.py | 164 + tests/dispatch/tests/test_saferef.py | 71 + tests/distinct_on_fields/__init__.py | 1 + tests/distinct_on_fields/models.py | 46 + tests/distinct_on_fields/tests.py | 118 + tests/empty/__init__.py | 0 tests/empty/models.py | 12 + tests/empty/no_models/__init__.py | 0 tests/empty/no_models/tests.py | 6 + tests/empty/tests.py | 38 + tests/expressions/__init__.py | 0 tests/expressions/models.py | 32 + tests/expressions/tests.py | 262 ++ tests/expressions_regress/__init__.py | 0 tests/expressions_regress/models.py | 29 + tests/expressions_regress/tests.py | 388 ++ tests/extra_regress/__init__.py | 0 tests/extra_regress/models.py | 45 + tests/extra_regress/tests.py | 350 ++ tests/field_defaults/__init__.py | 0 tests/field_defaults/models.py | 25 + tests/field_defaults/tests.py | 19 + tests/field_subclassing/__init__.py | 0 tests/field_subclassing/fields.py | 74 + tests/field_subclassing/models.py | 26 + tests/field_subclassing/tests.py | 92 + tests/file_storage/__init__.py | 1 + tests/file_storage/magic.png | Bin 0 -> 70445 bytes tests/file_storage/models.py | 0 tests/file_storage/test.png | Bin 0 -> 482 bytes tests/file_storage/test1.png | Bin 0 -> 480 bytes tests/file_storage/tests.py | 645 ++++ tests/file_uploads/__init__.py | 0 tests/file_uploads/models.py | 5 + tests/file_uploads/tests.py | 415 ++ tests/file_uploads/uploadhandler.py | 35 + tests/file_uploads/urls.py | 19 + tests/file_uploads/views.py | 138 + tests/files/__init__.py | 1 + tests/files/models.py | 30 + tests/files/tests.py | 148 + tests/fixtures/__init__.py | 2 + tests/fixtures/fixtures/db_fixture_1.default.json | 10 + .../fixtures/fixtures/db_fixture_2.default.json.gz | Bin 0 -> 175 bytes tests/fixtures/fixtures/db_fixture_3.nosuchdb.json | 10 + tests/fixtures/fixtures/fixture1.json | 34 + tests/fixtures/fixtures/fixture2.json | 18 + tests/fixtures/fixtures/fixture2.xml | 11 + tests/fixtures/fixtures/fixture3.xml | 11 + tests/fixtures/fixtures/fixture4.json.zip | Bin 0 -> 282 bytes tests/fixtures/fixtures/fixture5.json.gz | Bin 0 -> 169 bytes tests/fixtures/fixtures/fixture5.json.zip | Bin 0 -> 295 bytes tests/fixtures/fixtures/fixture6.json | 41 + tests/fixtures/fixtures/fixture7.xml | 27 + tests/fixtures/fixtures/fixture8.json | 32 + tests/fixtures/fixtures/fixture9.xml | 48 + tests/fixtures/fixtures/initial_data.json | 9 + tests/fixtures/fixtures/invalid.json | 10 + tests/fixtures/models.py | 107 + tests/fixtures/tests.py | 333 ++ tests/fixtures_model_package/__init__.py | 2 + .../fixtures_model_package/fixtures/fixture1.json | 18 + .../fixtures_model_package/fixtures/fixture2.json | 18 + tests/fixtures_model_package/fixtures/fixture2.xml | 11 + .../fixtures/initial_data.json | 9 + tests/fixtures_model_package/models/__init__.py | 21 + tests/fixtures_model_package/tests.py | 104 + tests/fixtures_regress/__init__.py | 0 tests/fixtures_regress/fixtures/absolute.json | 9 + tests/fixtures_regress/fixtures/animal.xml | 9 + tests/fixtures_regress/fixtures/bad_fixture1.unkn | 1 + tests/fixtures_regress/fixtures/bad_fixture2.xml | 7 + tests/fixtures_regress/fixtures/big-fixture.json | 83 + tests/fixtures_regress/fixtures/empty.json | 1 + tests/fixtures_regress/fixtures/forward_ref.json | 17 + .../fixtures/forward_ref_bad_data.json | 17 + .../fixtures/forward_ref_lookup.json | 34 + .../fixtures/model-inheritance.json | 4 + .../fixtures_regress/fixtures/nk-inheritance.json | 18 + .../fixtures_regress/fixtures/nk-inheritance2.xml | 23 + tests/fixtures_regress/fixtures/non_natural_1.json | 25 + tests/fixtures_regress/fixtures/non_natural_2.xml | 16 + tests/fixtures_regress/fixtures/pretty.xml | 11 + tests/fixtures_regress/fixtures/sequence.json | 12 + .../fixtures_regress/fixtures/sequence_extra.json | 13 + tests/fixtures_regress/fixtures/thingy.json | 9 + .../fixtures_regress/fixtures_1/forward_ref_1.json | 10 + .../fixtures_regress/fixtures_2/forward_ref_2.json | 9 + tests/fixtures_regress/models.py | 237 ++ tests/fixtures_regress/tests.py | 688 ++++ tests/force_insert_update/__init__.py | 0 tests/force_insert_update/models.py | 24 + tests/force_insert_update/tests.py | 63 + tests/forms/__init__.py | 0 tests/forms/models.py | 90 + tests/forms/templates/forms/article_form.html | 8 + tests/forms/tests/__init__.py | 21 + tests/forms/tests/error_messages.py | 263 ++ tests/forms/tests/extra.py | 807 ++++ tests/forms/tests/fields.py | 1190 ++++++ tests/forms/tests/filepath_test_files/.dot-file | 0 .../tests/filepath_test_files/directory/.keep | 0 .../forms/tests/filepath_test_files/fake-image.jpg | 0 .../tests/filepath_test_files/real-text-file.txt | 0 tests/forms/tests/forms.py | 1799 +++++++++ tests/forms/tests/formsets.py | 1055 +++++ tests/forms/tests/input_formats.py | 861 +++++ tests/forms/tests/media.py | 907 +++++ tests/forms/tests/models.py | 218 ++ tests/forms/tests/regressions.py | 150 + tests/forms/tests/util.py | 67 + tests/forms/tests/validators.py | 16 + tests/forms/tests/widgets.py | 1124 ++++++ tests/forms/urls.py | 9 + tests/forms/views.py | 8 + tests/generic_inline_admin/__init__.py | 0 tests/generic_inline_admin/admin.py | 47 + tests/generic_inline_admin/fixtures/users.xml | 17 + tests/generic_inline_admin/models.py | 76 + tests/generic_inline_admin/tests.py | 327 ++ tests/generic_inline_admin/urls.py | 9 + tests/generic_relations/__init__.py | 0 tests/generic_relations/models.py | 100 + tests/generic_relations/tests.py | 261 ++ tests/generic_relations_regress/__init__.py | 0 tests/generic_relations_regress/models.py | 124 + tests/generic_relations_regress/tests.py | 137 + tests/generic_views/__init__.py | 0 tests/generic_views/base.py | 413 ++ tests/generic_views/dates.py | 638 ++++ tests/generic_views/detail.py | 101 + tests/generic_views/edit.py | 317 ++ .../fixtures/generic-views-test-data.json | 54 + tests/generic_views/forms.py | 18 + tests/generic_views/list.py | 217 ++ tests/generic_views/models.py | 51 + .../templates/generic_views/about.html | 2 + .../templates/generic_views/apple_detail.html | 1 + .../templates/generic_views/artist_detail.html | 1 + .../templates/generic_views/artist_form.html | 1 + .../generic_views/author_confirm_delete.html | 1 + .../templates/generic_views/author_detail.html | 1 + .../templates/generic_views/author_form.html | 1 + .../templates/generic_views/author_list.html | 3 + .../templates/generic_views/author_objects.html | 3 + .../templates/generic_views/author_view.html | 1 + .../templates/generic_views/book_archive.html | 1 + .../templates/generic_views/book_archive_day.html | 1 + .../generic_views/book_archive_month.html | 1 + .../templates/generic_views/book_archive_week.html | 1 + .../templates/generic_views/book_archive_year.html | 1 + .../templates/generic_views/book_detail.html | 1 + .../templates/generic_views/book_list.html | 3 + .../templates/generic_views/confirm_delete.html | 1 + .../templates/generic_views/detail.html | 1 + .../templates/generic_views/form.html | 1 + .../templates/generic_views/list.html | 3 + .../templates/generic_views/page_template.html | 1 + .../templates/generic_views/robots.txt | 1 + .../templates/registration/login.html | 1 + tests/generic_views/tests.py | 11 + tests/generic_views/urls.py | 266 ++ tests/generic_views/views.py | 250 ++ tests/get_earliest_or_latest/__init__.py | 0 tests/get_earliest_or_latest/models.py | 16 + tests/get_earliest_or_latest/tests.py | 123 + tests/get_object_or_404/__init__.py | 0 tests/get_object_or_404/models.py | 36 + tests/get_object_or_404/tests.py | 107 + tests/get_or_create/__init__.py | 0 tests/get_or_create/models.py | 26 + tests/get_or_create/tests.py | 66 + tests/get_or_create_regress/__init__.py | 0 tests/get_or_create_regress/models.py | 13 + tests/get_or_create_regress/tests.py | 66 + tests/handlers/__init__.py | 0 tests/handlers/models.py | 0 tests/handlers/tests.py | 60 + tests/handlers/urls.py | 9 + tests/http_utils/__init__.py | 0 tests/http_utils/models.py | 0 tests/http_utils/tests.py | 45 + tests/httpwrappers/__init__.py | 0 tests/httpwrappers/abc.txt | 1 + tests/httpwrappers/models.py | 0 tests/httpwrappers/tests.py | 607 +++ tests/i18n/__init__.py | 0 tests/i18n/commands/__init__.py | 8 + tests/i18n/commands/code.sample | 4 + tests/i18n/commands/compilation.py | 101 + tests/i18n/commands/extraction.py | 420 ++ tests/i18n/commands/ignore_dir/ignored.html | 2 + tests/i18n/commands/javascript.js | 47 + .../commands/locale/es_AR/LC_MESSAGES/django.po | 20 + .../i18n/commands/locale/fr/LC_MESSAGES/django.po | 71 + .../i18n/commands/locale/hr/LC_MESSAGES/django.po | 71 + .../i18n/commands/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 775 bytes .../i18n/commands/locale/it/LC_MESSAGES/django.po | 30 + tests/i18n/commands/templates/comments.thtml | 13 + .../commands/templates/template_with_error.tpl | 3 + tests/i18n/commands/templates/test.html | 84 + tests/i18n/commands/tests.py | 48 + tests/i18n/contenttypes/__init__.py | 0 .../contenttypes/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 418 bytes .../contenttypes/locale/en/LC_MESSAGES/django.po | 26 + .../contenttypes/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../contenttypes/locale/fr/LC_MESSAGES/django.po | 27 + tests/i18n/contenttypes/tests.py | 36 + tests/i18n/forms.py | 26 + tests/i18n/models.py | 17 + tests/i18n/other/__init__.py | 0 tests/i18n/other/locale/__init__.py | 0 tests/i18n/other/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 2070 bytes tests/i18n/other/locale/de/LC_MESSAGES/django.po | 110 + tests/i18n/other/locale/de/__init__.py | 0 tests/i18n/other/locale/de/formats.py | 0 tests/i18n/other/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 528 bytes tests/i18n/other/locale/fr/LC_MESSAGES/django.po | 27 + tests/i18n/patterns/__init__.py | 0 .../i18n/patterns/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 651 bytes .../i18n/patterns/locale/en/LC_MESSAGES/django.po | 37 + .../i18n/patterns/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 696 bytes .../i18n/patterns/locale/nl/LC_MESSAGES/django.po | 38 + .../patterns/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 696 bytes .../patterns/locale/pt_BR/LC_MESSAGES/django.po | 38 + tests/i18n/patterns/templates/404.html | 0 tests/i18n/patterns/templates/dummy.html | 0 tests/i18n/patterns/tests.py | 307 ++ tests/i18n/patterns/urls/__init__.py | 0 tests/i18n/patterns/urls/default.py | 20 + tests/i18n/patterns/urls/disabled.py | 9 + tests/i18n/patterns/urls/namespace.py | 11 + tests/i18n/patterns/urls/path_unused.py | 10 + tests/i18n/patterns/urls/wrong.py | 8 + tests/i18n/patterns/urls/wrong_namespace.py | 11 + tests/i18n/resolution/__init__.py | 0 .../resolution/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 489 bytes .../resolution/locale/de/LC_MESSAGES/django.po | 25 + tests/i18n/resolution/models.py | 1 + tests/i18n/tests.py | 1097 ++++++ tests/indexes/__init__.py | 0 tests/indexes/models.py | 20 + tests/indexes/tests.py | 27 + tests/initial_sql_regress/__init__.py | 0 tests/initial_sql_regress/models.py | 10 + tests/initial_sql_regress/sql/simple.sql | 11 + tests/initial_sql_regress/tests.py | 28 + tests/inline_formsets/__init__.py | 0 tests/inline_formsets/models.py | 31 + tests/inline_formsets/tests.py | 159 + tests/inspectdb/__init__.py | 1 + tests/inspectdb/models.py | 56 + tests/inspectdb/tests.py | 159 + tests/introspection/__init__.py | 0 tests/introspection/models.py | 35 + tests/introspection/tests.py | 148 + tests/invalid_models/__init__.py | 1 + tests/invalid_models/invalid_models/__init__.py | 0 tests/invalid_models/invalid_models/models.py | 485 +++ tests/invalid_models/models.py | 0 tests/invalid_models/tests.py | 59 + tests/known_related_objects/__init__.py | 0 .../known_related_objects/fixtures/tournament.json | 76 + tests/known_related_objects/models.py | 23 + tests/known_related_objects/tests.py | 128 + tests/logging_tests/__init__.py | 0 tests/logging_tests/logconfig.py | 15 + tests/logging_tests/models.py | 0 tests/logging_tests/tests.py | 345 ++ tests/lookup/__init__.py | 0 tests/lookup/models.py | 59 + tests/lookup/tests.py | 688 ++++ tests/m2m_and_m2o/__init__.py | 0 tests/m2m_and_m2o/models.py | 30 + tests/m2m_and_m2o/tests.py | 90 + tests/m2m_intermediary/__init__.py | 0 tests/m2m_intermediary/models.py | 42 + tests/m2m_intermediary/tests.py | 41 + tests/m2m_multiple/__init__.py | 0 tests/m2m_multiple/models.py | 34 + tests/m2m_multiple/tests.py | 86 + tests/m2m_recursive/__init__.py | 0 tests/m2m_recursive/models.py | 30 + tests/m2m_recursive/tests.py | 264 ++ tests/m2m_regress/__init__.py | 0 tests/m2m_regress/models.py | 80 + tests/m2m_regress/tests.py | 111 + tests/m2m_signals/__init__.py | 1 + tests/m2m_signals/models.py | 40 + tests/m2m_signals/tests.py | 429 +++ tests/m2m_through/__init__.py | 2 + tests/m2m_through/models.py | 73 + tests/m2m_through/tests.py | 345 ++ tests/m2m_through_regress/__init__.py | 2 + .../m2m_through_regress/fixtures/m2m_through.json | 34 + tests/m2m_through_regress/models.py | 87 + tests/m2m_through_regress/tests.py | 235 ++ tests/m2o_recursive/__init__.py | 0 tests/m2o_recursive/models.py | 32 + tests/m2o_recursive/tests.py | 42 + tests/mail/__init__.py | 2 + tests/mail/custombackend.py | 15 + tests/mail/models.py | 1 + tests/mail/tests.py | 740 ++++ tests/managers_regress/__init__.py | 0 tests/managers_regress/models.py | 121 + tests/managers_regress/tests.py | 195 + tests/many_to_many/__init__.py | 0 tests/many_to_many/models.py | 33 + tests/many_to_many/tests.py | 390 ++ tests/many_to_one/__init__.py | 0 tests/many_to_one/models.py | 31 + tests/many_to_one/tests.py | 443 +++ tests/many_to_one_null/__init__.py | 0 tests/many_to_one_null/models.py | 28 + tests/many_to_one_null/tests.py | 95 + tests/many_to_one_regress/__init__.py | 0 tests/many_to_one_regress/models.py | 56 + tests/many_to_one_regress/tests.py | 136 + tests/max_lengths/__init__.py | 1 + tests/max_lengths/models.py | 14 + tests/max_lengths/tests.py | 39 + tests/middleware/__init__.py | 0 tests/middleware/cond_get_urls.py | 6 + tests/middleware/extra_urls.py | 7 + tests/middleware/models.py | 13 + tests/middleware/tests.py | 731 ++++ tests/middleware/urls.py | 7 + tests/middleware_exceptions/__init__.py | 0 tests/middleware_exceptions/models.py | 0 tests/middleware_exceptions/tests.py | 786 ++++ tests/middleware_exceptions/urls.py | 17 + tests/middleware_exceptions/views.py | 26 + tests/model_fields/4x8.png | Bin 0 -> 87 bytes tests/model_fields/8x4.png | Bin 0 -> 87 bytes tests/model_fields/__init__.py | 0 tests/model_fields/imagefield.py | 434 +++ tests/model_fields/models.py | 200 + tests/model_fields/tests.py | 426 +++ tests/model_forms/__init__.py | 0 tests/model_forms/models.py | 280 ++ tests/model_forms/test.png | Bin 0 -> 482 bytes tests/model_forms/test2.png | Bin 0 -> 2072 bytes tests/model_forms/tests.py | 1554 ++++++++ tests/model_forms_regress/__init__.py | 0 tests/model_forms_regress/models.py | 78 + tests/model_forms_regress/tests.py | 494 +++ tests/model_formsets/__init__.py | 0 tests/model_formsets/models.py | 217 ++ tests/model_formsets/tests.py | 1225 ++++++ tests/model_formsets_regress/__init__.py | 0 tests/model_formsets_regress/models.py | 32 + tests/model_formsets_regress/tests.py | 449 +++ tests/model_inheritance/__init__.py | 0 tests/model_inheritance/models.py | 164 + tests/model_inheritance/tests.py | 296 ++ tests/model_inheritance_regress/__init__.py | 0 tests/model_inheritance_regress/models.py | 184 + tests/model_inheritance_regress/tests.py | 424 +++ .../model_inheritance_same_model_name/__init__.py | 0 tests/model_inheritance_same_model_name/models.py | 24 + tests/model_inheritance_same_model_name/tests.py | 36 + tests/model_inheritance_select_related/__init__.py | 0 tests/model_inheritance_select_related/models.py | 35 + tests/model_inheritance_select_related/tests.py | 31 + tests/model_package/__init__.py | 1 + tests/model_package/models/__init__.py | 5 + tests/model_package/models/article.py | 11 + tests/model_package/models/publication.py | 8 + tests/model_package/tests.py | 74 + tests/model_permalink/__init__.py | 0 tests/model_permalink/models.py | 24 + tests/model_permalink/tests.py | 27 + tests/model_permalink/urls.py | 5 + tests/model_regress/__init__.py | 0 tests/model_regress/models.py | 84 + tests/model_regress/tests.py | 217 ++ tests/modeladmin/__init__.py | 0 tests/modeladmin/models.py | 44 + tests/modeladmin/tests.py | 1497 ++++++++ tests/modeltests/aggregation/__init__.py | 0 .../aggregation/fixtures/aggregation.json | 243 -- tests/modeltests/aggregation/models.py | 47 - tests/modeltests/aggregation/tests.py | 587 --- tests/modeltests/base/__init__.py | 0 tests/modeltests/base/models.py | 23 - tests/modeltests/basic/__init__.py | 0 tests/modeltests/basic/models.py | 20 - tests/modeltests/basic/tests.py | 693 ---- tests/modeltests/choices/__init__.py | 0 tests/modeltests/choices/models.py | 27 - tests/modeltests/choices/tests.py | 25 - tests/modeltests/custom_columns/__init__.py | 0 tests/modeltests/custom_columns/models.py | 46 - tests/modeltests/custom_columns/tests.py | 74 - tests/modeltests/custom_managers/__init__.py | 0 tests/modeltests/custom_managers/models.py | 65 - tests/modeltests/custom_managers/tests.py | 74 - tests/modeltests/custom_methods/__init__.py | 0 tests/modeltests/custom_methods/models.py | 40 - tests/modeltests/custom_methods/tests.py | 44 - tests/modeltests/custom_pk/__init__.py | 0 tests/modeltests/custom_pk/fields.py | 57 - tests/modeltests/custom_pk/models.py | 48 - tests/modeltests/custom_pk/tests.py | 182 - tests/modeltests/defer/__init__.py | 0 tests/modeltests/defer/models.py | 30 - tests/modeltests/defer/tests.py | 185 - tests/modeltests/delete/__init__.py | 0 tests/modeltests/delete/models.py | 128 - tests/modeltests/delete/tests.py | 374 -- tests/modeltests/distinct_on_fields/__init__.py | 1 - tests/modeltests/distinct_on_fields/models.py | 46 - tests/modeltests/distinct_on_fields/tests.py | 118 - tests/modeltests/empty/__init__.py | 0 tests/modeltests/empty/models.py | 12 - tests/modeltests/empty/no_models/__init__.py | 0 tests/modeltests/empty/no_models/tests.py | 6 - tests/modeltests/empty/tests.py | 38 - tests/modeltests/expressions/__init__.py | 0 tests/modeltests/expressions/models.py | 32 - tests/modeltests/expressions/tests.py | 262 -- tests/modeltests/field_defaults/__init__.py | 0 tests/modeltests/field_defaults/models.py | 25 - tests/modeltests/field_defaults/tests.py | 19 - tests/modeltests/field_subclassing/__init__.py | 0 tests/modeltests/field_subclassing/fields.py | 74 - tests/modeltests/field_subclassing/models.py | 26 - tests/modeltests/field_subclassing/tests.py | 92 - tests/modeltests/files/__init__.py | 1 - tests/modeltests/files/models.py | 30 - tests/modeltests/files/tests.py | 148 - tests/modeltests/fixtures/__init__.py | 2 - .../fixtures/fixtures/db_fixture_1.default.json | 10 - .../fixtures/fixtures/db_fixture_2.default.json.gz | Bin 175 -> 0 bytes .../fixtures/fixtures/db_fixture_3.nosuchdb.json | 10 - tests/modeltests/fixtures/fixtures/fixture1.json | 34 - tests/modeltests/fixtures/fixtures/fixture2.json | 18 - tests/modeltests/fixtures/fixtures/fixture2.xml | 11 - tests/modeltests/fixtures/fixtures/fixture3.xml | 11 - .../modeltests/fixtures/fixtures/fixture4.json.zip | Bin 282 -> 0 bytes .../modeltests/fixtures/fixtures/fixture5.json.gz | Bin 169 -> 0 bytes .../modeltests/fixtures/fixtures/fixture5.json.zip | Bin 295 -> 0 bytes tests/modeltests/fixtures/fixtures/fixture6.json | 41 - tests/modeltests/fixtures/fixtures/fixture7.xml | 27 - tests/modeltests/fixtures/fixtures/fixture8.json | 32 - tests/modeltests/fixtures/fixtures/fixture9.xml | 48 - .../modeltests/fixtures/fixtures/initial_data.json | 9 - tests/modeltests/fixtures/fixtures/invalid.json | 10 - tests/modeltests/fixtures/models.py | 107 - tests/modeltests/fixtures/tests.py | 333 -- .../modeltests/fixtures_model_package/__init__.py | 2 - .../fixtures_model_package/fixtures/fixture1.json | 18 - .../fixtures_model_package/fixtures/fixture2.json | 18 - .../fixtures_model_package/fixtures/fixture2.xml | 11 - .../fixtures/initial_data.json | 9 - .../fixtures_model_package/models/__init__.py | 21 - tests/modeltests/fixtures_model_package/tests.py | 104 - tests/modeltests/force_insert_update/__init__.py | 0 tests/modeltests/force_insert_update/models.py | 24 - tests/modeltests/force_insert_update/tests.py | 63 - tests/modeltests/generic_relations/__init__.py | 0 tests/modeltests/generic_relations/models.py | 100 - tests/modeltests/generic_relations/tests.py | 261 -- .../modeltests/get_earliest_or_latest/__init__.py | 0 tests/modeltests/get_earliest_or_latest/models.py | 16 - tests/modeltests/get_earliest_or_latest/tests.py | 123 - tests/modeltests/get_object_or_404/__init__.py | 0 tests/modeltests/get_object_or_404/models.py | 36 - tests/modeltests/get_object_or_404/tests.py | 107 - tests/modeltests/get_or_create/__init__.py | 0 tests/modeltests/get_or_create/models.py | 26 - tests/modeltests/get_or_create/tests.py | 66 - tests/modeltests/invalid_models/__init__.py | 1 - .../invalid_models/invalid_models/__init__.py | 0 .../invalid_models/invalid_models/models.py | 485 --- tests/modeltests/invalid_models/models.py | 0 tests/modeltests/invalid_models/tests.py | 59 - tests/modeltests/known_related_objects/__init__.py | 0 .../known_related_objects/fixtures/tournament.json | 76 - tests/modeltests/known_related_objects/models.py | 23 - tests/modeltests/known_related_objects/tests.py | 128 - tests/modeltests/lookup/__init__.py | 0 tests/modeltests/lookup/models.py | 59 - tests/modeltests/lookup/tests.py | 688 ---- tests/modeltests/m2m_and_m2o/__init__.py | 0 tests/modeltests/m2m_and_m2o/models.py | 30 - tests/modeltests/m2m_and_m2o/tests.py | 90 - tests/modeltests/m2m_intermediary/__init__.py | 0 tests/modeltests/m2m_intermediary/models.py | 42 - tests/modeltests/m2m_intermediary/tests.py | 41 - tests/modeltests/m2m_multiple/__init__.py | 0 tests/modeltests/m2m_multiple/models.py | 34 - tests/modeltests/m2m_multiple/tests.py | 86 - tests/modeltests/m2m_recursive/__init__.py | 0 tests/modeltests/m2m_recursive/models.py | 30 - tests/modeltests/m2m_recursive/tests.py | 264 -- tests/modeltests/m2m_signals/__init__.py | 1 - tests/modeltests/m2m_signals/models.py | 40 - tests/modeltests/m2m_signals/tests.py | 429 --- tests/modeltests/m2m_through/__init__.py | 2 - tests/modeltests/m2m_through/models.py | 73 - tests/modeltests/m2m_through/tests.py | 345 -- tests/modeltests/m2o_recursive/__init__.py | 0 tests/modeltests/m2o_recursive/models.py | 32 - tests/modeltests/m2o_recursive/tests.py | 42 - tests/modeltests/many_to_many/__init__.py | 0 tests/modeltests/many_to_many/models.py | 33 - tests/modeltests/many_to_many/tests.py | 390 -- tests/modeltests/many_to_one/__init__.py | 0 tests/modeltests/many_to_one/models.py | 31 - tests/modeltests/many_to_one/tests.py | 443 --- tests/modeltests/many_to_one_null/__init__.py | 0 tests/modeltests/many_to_one_null/models.py | 28 - tests/modeltests/many_to_one_null/tests.py | 95 - tests/modeltests/model_forms/__init__.py | 0 tests/modeltests/model_forms/models.py | 280 -- tests/modeltests/model_forms/test.png | Bin 482 -> 0 bytes tests/modeltests/model_forms/test2.png | Bin 2072 -> 0 bytes tests/modeltests/model_forms/tests.py | 1554 -------- tests/modeltests/model_formsets/__init__.py | 0 tests/modeltests/model_formsets/models.py | 217 -- tests/modeltests/model_formsets/tests.py | 1225 ------ tests/modeltests/model_inheritance/__init__.py | 0 tests/modeltests/model_inheritance/models.py | 164 - tests/modeltests/model_inheritance/tests.py | 296 -- .../model_inheritance_same_model_name/__init__.py | 0 .../model_inheritance_same_model_name/models.py | 24 - .../model_inheritance_same_model_name/tests.py | 36 - tests/modeltests/model_package/__init__.py | 1 - tests/modeltests/model_package/models/__init__.py | 5 - tests/modeltests/model_package/models/article.py | 11 - .../modeltests/model_package/models/publication.py | 8 - tests/modeltests/model_package/tests.py | 74 - tests/modeltests/mutually_referential/__init__.py | 0 tests/modeltests/mutually_referential/models.py | 20 - tests/modeltests/mutually_referential/tests.py | 24 - tests/modeltests/one_to_one/__init__.py | 0 tests/modeltests/one_to_one/models.py | 54 - tests/modeltests/one_to_one/tests.py | 123 - tests/modeltests/or_lookups/__init__.py | 0 tests/modeltests/or_lookups/models.py | 25 - tests/modeltests/or_lookups/tests.py | 234 -- tests/modeltests/order_with_respect_to/__init__.py | 0 tests/modeltests/order_with_respect_to/models.py | 33 - tests/modeltests/order_with_respect_to/tests.py | 73 - tests/modeltests/ordering/__init__.py | 0 tests/modeltests/ordering/models.py | 38 - tests/modeltests/ordering/tests.py | 167 - tests/modeltests/prefetch_related/__init__.py | 0 tests/modeltests/prefetch_related/models.py | 197 - tests/modeltests/prefetch_related/tests.py | 620 --- tests/modeltests/properties/__init__.py | 0 tests/modeltests/properties/models.py | 22 - tests/modeltests/properties/tests.py | 24 - .../modeltests/proxy_model_inheritance/__init__.py | 0 .../proxy_model_inheritance/app1/__init__.py | 0 .../proxy_model_inheritance/app1/models.py | 9 - .../proxy_model_inheritance/app2/__init__.py | 0 .../proxy_model_inheritance/app2/models.py | 5 - tests/modeltests/proxy_model_inheritance/models.py | 13 - tests/modeltests/proxy_model_inheritance/tests.py | 61 - tests/modeltests/proxy_models/__init__.py | 0 .../modeltests/proxy_models/fixtures/myhorses.json | 24 - .../modeltests/proxy_models/fixtures/mypeople.json | 9 - tests/modeltests/proxy_models/models.py | 169 - tests/modeltests/proxy_models/tests.py | 382 -- tests/modeltests/raw_query/__init__.py | 0 .../raw_query/fixtures/raw_query_books.json | 110 - tests/modeltests/raw_query/models.py | 31 - tests/modeltests/raw_query/tests.py | 222 -- tests/modeltests/reserved_names/__init__.py | 0 tests/modeltests/reserved_names/models.py | 28 - tests/modeltests/reserved_names/tests.py | 51 - tests/modeltests/reverse_lookup/__init__.py | 0 tests/modeltests/reverse_lookup/models.py | 33 - tests/modeltests/reverse_lookup/tests.py | 52 - tests/modeltests/save_delete_hooks/__init__.py | 0 tests/modeltests/save_delete_hooks/models.py | 35 - tests/modeltests/save_delete_hooks/tests.py | 33 - tests/modeltests/select_for_update/__init__.py | 1 - tests/modeltests/select_for_update/models.py | 5 - tests/modeltests/select_for_update/tests.py | 283 -- tests/modeltests/select_related/__init__.py | 0 tests/modeltests/select_related/models.py | 68 - tests/modeltests/select_related/tests.py | 174 - tests/modeltests/serializers/__init__.py | 0 tests/modeltests/serializers/models.py | 126 - tests/modeltests/serializers/tests.py | 501 --- tests/modeltests/signals/__init__.py | 0 tests/modeltests/signals/models.py | 24 - tests/modeltests/signals/tests.py | 179 - tests/modeltests/str/__init__.py | 0 tests/modeltests/str/models.py | 44 - tests/modeltests/str/tests.py | 45 - tests/modeltests/tablespaces/__init__.py | 0 tests/modeltests/tablespaces/models.py | 42 - tests/modeltests/tablespaces/tests.py | 128 - tests/modeltests/test_client/__init__.py | 0 .../modeltests/test_client/fixtures/testdata.json | 56 - tests/modeltests/test_client/models.py | 508 --- tests/modeltests/test_client/tests.py | 21 - tests/modeltests/test_client/urls.py | 34 - tests/modeltests/test_client/views.py | 218 -- tests/modeltests/timezones/__init__.py | 0 tests/modeltests/timezones/admin.py | 15 - tests/modeltests/timezones/fixtures/tz_users.xml | 17 - tests/modeltests/timezones/forms.py | 13 - tests/modeltests/timezones/models.py | 21 - tests/modeltests/timezones/tests.py | 1124 ------ tests/modeltests/timezones/urls.py | 10 - tests/modeltests/transactions/__init__.py | 0 tests/modeltests/transactions/models.py | 25 - tests/modeltests/transactions/tests.py | 310 -- tests/modeltests/unmanaged_models/__init__.py | 2 - tests/modeltests/unmanaged_models/models.py | 132 - tests/modeltests/unmanaged_models/tests.py | 61 - tests/modeltests/update/__init__.py | 0 tests/modeltests/update/models.py | 40 - tests/modeltests/update/tests.py | 118 - tests/modeltests/update_only_fields/__init__.py | 0 tests/modeltests/update_only_fields/models.py | 41 - tests/modeltests/update_only_fields/tests.py | 262 -- tests/modeltests/user_commands/__init__.py | 0 .../user_commands/management/__init__.py | 0 .../user_commands/management/commands/__init__.py | 0 .../user_commands/management/commands/dance.py | 20 - .../commands/leave_locale_alone_false.py | 10 - .../management/commands/leave_locale_alone_true.py | 10 - tests/modeltests/user_commands/models.py | 14 - tests/modeltests/user_commands/tests.py | 60 - tests/modeltests/validation/__init__.py | 16 - tests/modeltests/validation/models.py | 110 - .../modeltests/validation/test_custom_messages.py | 15 - tests/modeltests/validation/test_error_messages.py | 97 - tests/modeltests/validation/test_unique.py | 144 - tests/modeltests/validation/tests.py | 166 - tests/modeltests/validation/validators.py | 19 - tests/modeltests/validators/__init__.py | 0 tests/modeltests/validators/models.py | 0 tests/modeltests/validators/tests.py | 224 -- tests/multiple_database/__init__.py | 0 .../multiple_database/fixtures/multidb-common.json | 10 + .../fixtures/multidb.default.json | 26 + .../multiple_database/fixtures/multidb.other.json | 26 + tests/multiple_database/fixtures/pets.json | 18 + tests/multiple_database/models.py | 83 + tests/multiple_database/tests.py | 1946 ++++++++++ tests/mutually_referential/__init__.py | 0 tests/mutually_referential/models.py | 20 + tests/mutually_referential/tests.py | 24 + tests/nested_foreign_keys/__init__.py | 0 tests/nested_foreign_keys/models.py | 28 + tests/nested_foreign_keys/tests.py | 172 + tests/null_fk/__init__.py | 0 tests/null_fk/models.py | 50 + tests/null_fk/tests.py | 69 + tests/null_fk_ordering/__init__.py | 0 tests/null_fk_ordering/models.py | 55 + tests/null_fk_ordering/tests.py | 42 + tests/null_queries/__init__.py | 0 tests/null_queries/models.py | 32 + tests/null_queries/tests.py | 83 + tests/one_to_one/__init__.py | 0 tests/one_to_one/models.py | 54 + tests/one_to_one/tests.py | 123 + tests/one_to_one_regress/__init__.py | 0 tests/one_to_one_regress/models.py | 51 + tests/one_to_one_regress/tests.py | 244 ++ tests/or_lookups/__init__.py | 0 tests/or_lookups/models.py | 25 + tests/or_lookups/tests.py | 234 ++ tests/order_with_respect_to/__init__.py | 0 tests/order_with_respect_to/models.py | 33 + tests/order_with_respect_to/tests.py | 73 + tests/ordering/__init__.py | 0 tests/ordering/models.py | 38 + tests/ordering/tests.py | 167 + tests/pagination/__init__.py | 0 tests/pagination/custom.py | 20 + tests/pagination/models.py | 11 + tests/pagination/tests.py | 307 ++ tests/prefetch_related/__init__.py | 0 tests/prefetch_related/models.py | 197 + tests/prefetch_related/tests.py | 620 +++ tests/properties/__init__.py | 0 tests/properties/models.py | 22 + tests/properties/tests.py | 24 + tests/proxy_model_inheritance/__init__.py | 0 tests/proxy_model_inheritance/app1/__init__.py | 0 tests/proxy_model_inheritance/app1/models.py | 9 + tests/proxy_model_inheritance/app2/__init__.py | 0 tests/proxy_model_inheritance/app2/models.py | 5 + tests/proxy_model_inheritance/models.py | 13 + tests/proxy_model_inheritance/tests.py | 61 + tests/proxy_models/__init__.py | 0 tests/proxy_models/fixtures/myhorses.json | 24 + tests/proxy_models/fixtures/mypeople.json | 9 + tests/proxy_models/models.py | 169 + tests/proxy_models/tests.py | 382 ++ tests/queries/__init__.py | 0 tests/queries/models.py | 456 +++ tests/queries/tests.py | 2640 +++++++++++++ tests/queryset_pickle/__init__.py | 0 tests/queryset_pickle/models.py | 38 + tests/queryset_pickle/tests.py | 48 + tests/raw_query/__init__.py | 0 tests/raw_query/fixtures/raw_query_books.json | 110 + tests/raw_query/models.py | 31 + tests/raw_query/tests.py | 222 ++ tests/regressiontests/admin_changelist/__init__.py | 0 tests/regressiontests/admin_changelist/admin.py | 104 - tests/regressiontests/admin_changelist/models.py | 89 - tests/regressiontests/admin_changelist/tests.py | 565 --- tests/regressiontests/admin_changelist/urls.py | 8 - .../regressiontests/admin_custom_urls/__init__.py | 1 - .../admin_custom_urls/fixtures/actions.json | 44 - .../admin_custom_urls/fixtures/users.json | 20 - tests/regressiontests/admin_custom_urls/models.py | 80 - tests/regressiontests/admin_custom_urls/tests.py | 141 - tests/regressiontests/admin_custom_urls/urls.py | 8 - tests/regressiontests/admin_filters/__init__.py | 0 tests/regressiontests/admin_filters/models.py | 36 - tests/regressiontests/admin_filters/tests.py | 743 ---- tests/regressiontests/admin_inlines/__init__.py | 0 tests/regressiontests/admin_inlines/admin.py | 153 - .../admin_inlines/fixtures/admin-views-users.xml | 17 - tests/regressiontests/admin_inlines/models.py | 198 - tests/regressiontests/admin_inlines/tests.py | 617 --- tests/regressiontests/admin_inlines/urls.py | 10 - tests/regressiontests/admin_ordering/__init__.py | 0 tests/regressiontests/admin_ordering/models.py | 35 - tests/regressiontests/admin_ordering/tests.py | 106 - .../regressiontests/admin_registration/__init__.py | 0 tests/regressiontests/admin_registration/models.py | 16 - tests/regressiontests/admin_registration/tests.py | 64 - tests/regressiontests/admin_scripts/__init__.py | 0 .../admin_scripts/app_with_import/__init__.py | 0 .../admin_scripts/app_with_import/models.py | 8 - .../admin_scripts/broken_app/__init__.py | 0 .../admin_scripts/broken_app/models.py | 1 - .../admin_scripts/complex_app/__init__.py | 0 .../admin_scripts/complex_app/admin/__init__.py | 0 .../admin_scripts/complex_app/admin/foo.py | 8 - .../admin_scripts/complex_app/models/__init__.py | 4 - .../admin_scripts/complex_app/models/bar.py | 11 - .../admin_scripts/complex_app/models/foo.py | 7 - .../custom_templates/app_template/__init__.py | 0 .../custom_templates/app_template/api.py | 1 - .../custom_templates/app_template/models.py | 1 - .../custom_templates/project_template.tgz | Bin 164 -> 0 bytes .../project_template/additional_dir/Procfile | 1 - .../additional_dir/additional_file.py | 1 - .../project_template/additional_dir/extra.py | 1 - .../additional_dir/requirements.txt | 1 - .../custom_templates/project_template/manage.py | 6 - .../project_template/project_name/__init__.py | 0 .../project_template/project_name/settings.py | 1 - .../ticket-18091-non-ascii-template.txt | 2 - .../project_template/ticket-19397-binary-file.ico | Bin 894 -> 0 bytes .../admin_scripts/management/__init__.py | 0 .../admin_scripts/management/commands/__init__.py | 0 .../management/commands/app_command.py | 11 - .../management/commands/base_command.py | 17 - .../management/commands/custom_startproject.py | 11 - .../management/commands/label_command.py | 10 - .../management/commands/noargs_command.py | 10 - tests/regressiontests/admin_scripts/models.py | 14 - .../admin_scripts/simple_app/__init__.py | 0 .../admin_scripts/simple_app/models.py | 3 - tests/regressiontests/admin_scripts/tests.py | 1649 -------- tests/regressiontests/admin_scripts/urls.py | 11 - tests/regressiontests/admin_util/__init__.py | 0 tests/regressiontests/admin_util/models.py | 44 - tests/regressiontests/admin_util/tests.py | 320 -- tests/regressiontests/admin_validation/__init__.py | 0 tests/regressiontests/admin_validation/models.py | 57 - tests/regressiontests/admin_validation/tests.py | 303 -- tests/regressiontests/admin_views/__init__.py | 0 tests/regressiontests/admin_views/admin.py | 750 ---- tests/regressiontests/admin_views/customadmin.py | 59 - .../admin_views/fixtures/admin-views-actions.xml | 15 - .../admin_views/fixtures/admin-views-books.xml | 45 - .../admin_views/fixtures/admin-views-colors.xml | 19 - .../admin_views/fixtures/admin-views-fabrics.xml | 12 - .../admin_views/fixtures/admin-views-person.xml | 18 - .../admin_views/fixtures/admin-views-unicode.xml | 63 - .../admin_views/fixtures/admin-views-users.xml | 96 - .../admin_views/fixtures/deleted-objects.xml | 53 - .../fixtures/multiple-child-classes.json | 107 - .../admin_views/fixtures/string-primary-key.xml | 6 - tests/regressiontests/admin_views/forms.py | 11 - tests/regressiontests/admin_views/models.py | 680 ---- .../templates/custom_filter_template.html | 7 - tests/regressiontests/admin_views/tests.py | 4017 -------------------- tests/regressiontests/admin_views/urls.py | 15 - tests/regressiontests/admin_views/views.py | 6 - tests/regressiontests/admin_widgets/__init__.py | 0 .../admin_widgets/fixtures/admin-widgets-users.xml | 43 - tests/regressiontests/admin_widgets/models.py | 130 - tests/regressiontests/admin_widgets/tests.py | 744 ---- tests/regressiontests/admin_widgets/urls.py | 10 - tests/regressiontests/admin_widgets/widgetadmin.py | 50 - .../aggregation_regress/__init__.py | 0 .../fixtures/aggregation_regress.json | 257 -- .../regressiontests/aggregation_regress/models.py | 89 - tests/regressiontests/aggregation_regress/tests.py | 1022 ----- tests/regressiontests/app_loading/__init__.py | 0 .../regressiontests/app_loading/eggs/brokenapp.egg | Bin 1605 -> 0 bytes .../regressiontests/app_loading/eggs/modelapp.egg | Bin 3347 -> 0 bytes .../app_loading/eggs/nomodelapp.egg | Bin 1211 -> 0 bytes tests/regressiontests/app_loading/eggs/omelet.egg | Bin 9020 -> 0 bytes tests/regressiontests/app_loading/models.py | 0 .../app_loading/not_installed/__init__.py | 0 .../app_loading/not_installed/models.py | 13 - tests/regressiontests/app_loading/tests.py | 110 - tests/regressiontests/backends/__init__.py | 0 tests/regressiontests/backends/models.py | 101 - tests/regressiontests/backends/tests.py | 748 ---- tests/regressiontests/bash_completion/__init__.py | 1 - .../bash_completion/management/__init__.py | 1 - .../management/commands/__init__.py | 1 - .../management/commands/test_command.py | 13 - tests/regressiontests/bash_completion/models.py | 1 - tests/regressiontests/bash_completion/tests.py | 88 - tests/regressiontests/bug639/__init__.py | 0 tests/regressiontests/bug639/models.py | 27 - tests/regressiontests/bug639/test.jpg | Bin 1780 -> 0 bytes tests/regressiontests/bug639/tests.py | 47 - tests/regressiontests/bug8245/__init__.py | 0 tests/regressiontests/bug8245/admin.py | 9 - tests/regressiontests/bug8245/models.py | 5 - tests/regressiontests/bug8245/tests.py | 20 - tests/regressiontests/builtin_server/__init__.py | 0 tests/regressiontests/builtin_server/models.py | 0 tests/regressiontests/builtin_server/tests.py | 55 - tests/regressiontests/bulk_create/__init__.py | 0 tests/regressiontests/bulk_create/models.py | 25 - tests/regressiontests/bulk_create/tests.py | 167 - tests/regressiontests/cache/__init__.py | 0 tests/regressiontests/cache/closeable_cache.py | 11 - tests/regressiontests/cache/liberal_backend.py | 10 - tests/regressiontests/cache/models.py | 13 - tests/regressiontests/cache/tests.py | 1901 --------- tests/regressiontests/commands_sql/__init__.py | 0 tests/regressiontests/commands_sql/models.py | 7 - tests/regressiontests/commands_sql/tests.py | 52 - tests/regressiontests/comment_tests/__init__.py | 0 .../comment_tests/custom_comments/__init__.py | 32 - .../comment_tests/custom_comments/forms.py | 5 - .../comment_tests/custom_comments/models.py | 5 - .../comment_tests/custom_comments/views.py | 14 - .../comment_tests/fixtures/comment_tests.json | 53 - .../comment_tests/fixtures/comment_utils.xml | 15 - tests/regressiontests/comment_tests/models.py | 39 - .../comment_tests/tests/__init__.py | 95 - .../comment_tests/tests/app_api_tests.py | 80 - .../comment_tests/tests/comment_form_tests.py | 85 - .../tests/comment_utils_moderators_tests.py | 97 - .../comment_tests/tests/comment_view_tests.py | 324 -- .../comment_tests/tests/feed_tests.py | 53 - .../comment_tests/tests/model_tests.py | 58 - .../comment_tests/tests/moderation_view_tests.py | 315 -- .../comment_tests/tests/templatetag_tests.py | 171 - tests/regressiontests/comment_tests/urls.py | 23 - tests/regressiontests/comment_tests/urls_admin.py | 19 - .../regressiontests/comment_tests/urls_default.py | 9 - .../conditional_processing/__init__.py | 1 - .../conditional_processing/models.py | 129 - .../regressiontests/conditional_processing/urls.py | 12 - .../conditional_processing/views.py | 29 - .../regressiontests/context_processors/__init__.py | 0 tests/regressiontests/context_processors/models.py | 1 - .../context_processors/request_attrs.html | 13 - tests/regressiontests/context_processors/tests.py | 37 - tests/regressiontests/context_processors/urls.py | 10 - tests/regressiontests/context_processors/views.py | 8 - tests/regressiontests/createsuperuser/__init__.py | 0 tests/regressiontests/createsuperuser/models.py | 0 tests/regressiontests/createsuperuser/tests.py | 56 - tests/regressiontests/csrf_tests/__init__.py | 0 tests/regressiontests/csrf_tests/models.py | 1 - tests/regressiontests/csrf_tests/tests.py | 342 -- .../custom_columns_regress/__init__.py | 0 .../custom_columns_regress/models.py | 41 - .../custom_columns_regress/tests.py | 80 - .../custom_managers_regress/__init__.py | 0 .../custom_managers_regress/models.py | 45 - .../custom_managers_regress/tests.py | 50 - tests/regressiontests/datatypes/__init__.py | 0 tests/regressiontests/datatypes/models.py | 28 - tests/regressiontests/datatypes/tests.py | 96 - tests/regressiontests/dates/__init__.py | 0 tests/regressiontests/dates/models.py | 28 - tests/regressiontests/dates/tests.py | 83 - tests/regressiontests/datetimes/__init__.py | 0 tests/regressiontests/datetimes/models.py | 28 - tests/regressiontests/datetimes/tests.py | 83 - tests/regressiontests/db_typecasts/__init__.py | 0 tests/regressiontests/db_typecasts/models.py | 0 tests/regressiontests/db_typecasts/tests.py | 56 - tests/regressiontests/decorators/__init__.py | 0 tests/regressiontests/decorators/models.py | 2 - tests/regressiontests/decorators/tests.py | 250 -- tests/regressiontests/defaultfilters/__init__.py | 0 tests/regressiontests/defaultfilters/models.py | 0 tests/regressiontests/defaultfilters/tests.py | 653 ---- tests/regressiontests/defer_regress/__init__.py | 0 tests/regressiontests/defer_regress/models.py | 64 - tests/regressiontests/defer_regress/tests.py | 248 -- tests/regressiontests/delete_regress/__init__.py | 1 - tests/regressiontests/delete_regress/models.py | 111 - tests/regressiontests/delete_regress/tests.py | 360 -- tests/regressiontests/dispatch/__init__.py | 2 - tests/regressiontests/dispatch/models.py | 0 tests/regressiontests/dispatch/tests/__init__.py | 8 - .../dispatch/tests/test_dispatcher.py | 164 - .../regressiontests/dispatch/tests/test_saferef.py | 71 - .../expressions_regress/__init__.py | 0 .../regressiontests/expressions_regress/models.py | 29 - tests/regressiontests/expressions_regress/tests.py | 388 -- tests/regressiontests/extra_regress/__init__.py | 0 tests/regressiontests/extra_regress/models.py | 45 - tests/regressiontests/extra_regress/tests.py | 350 -- tests/regressiontests/file_storage/__init__.py | 1 - tests/regressiontests/file_storage/magic.png | Bin 70445 -> 0 bytes tests/regressiontests/file_storage/models.py | 0 tests/regressiontests/file_storage/test.png | Bin 482 -> 0 bytes tests/regressiontests/file_storage/test1.png | Bin 480 -> 0 bytes tests/regressiontests/file_storage/tests.py | 645 ---- tests/regressiontests/file_uploads/__init__.py | 0 tests/regressiontests/file_uploads/models.py | 5 - tests/regressiontests/file_uploads/tests.py | 415 -- .../regressiontests/file_uploads/uploadhandler.py | 35 - tests/regressiontests/file_uploads/urls.py | 19 - tests/regressiontests/file_uploads/views.py | 138 - tests/regressiontests/fixtures_regress/__init__.py | 0 .../fixtures_regress/fixtures/absolute.json | 9 - .../fixtures_regress/fixtures/animal.xml | 9 - .../fixtures_regress/fixtures/bad_fixture1.unkn | 1 - .../fixtures_regress/fixtures/bad_fixture2.xml | 7 - .../fixtures_regress/fixtures/big-fixture.json | 83 - .../fixtures_regress/fixtures/empty.json | 1 - .../fixtures_regress/fixtures/forward_ref.json | 17 - .../fixtures/forward_ref_bad_data.json | 17 - .../fixtures/forward_ref_lookup.json | 34 - .../fixtures/model-inheritance.json | 4 - .../fixtures_regress/fixtures/nk-inheritance.json | 18 - .../fixtures_regress/fixtures/nk-inheritance2.xml | 23 - .../fixtures_regress/fixtures/non_natural_1.json | 25 - .../fixtures_regress/fixtures/non_natural_2.xml | 16 - .../fixtures_regress/fixtures/pretty.xml | 11 - .../fixtures_regress/fixtures/sequence.json | 12 - .../fixtures_regress/fixtures/sequence_extra.json | 13 - .../fixtures_regress/fixtures/thingy.json | 9 - .../fixtures_regress/fixtures_1/forward_ref_1.json | 10 - .../fixtures_regress/fixtures_2/forward_ref_2.json | 9 - tests/regressiontests/fixtures_regress/models.py | 237 -- tests/regressiontests/fixtures_regress/tests.py | 688 ---- tests/regressiontests/forms/__init__.py | 0 tests/regressiontests/forms/models.py | 90 - .../forms/templates/forms/article_form.html | 8 - tests/regressiontests/forms/tests/__init__.py | 21 - .../regressiontests/forms/tests/error_messages.py | 263 -- tests/regressiontests/forms/tests/extra.py | 807 ---- tests/regressiontests/forms/tests/fields.py | 1190 ------ .../forms/tests/filepath_test_files/.dot-file | 0 .../tests/filepath_test_files/directory/.keep | 0 .../forms/tests/filepath_test_files/fake-image.jpg | 0 .../tests/filepath_test_files/real-text-file.txt | 0 tests/regressiontests/forms/tests/forms.py | 1799 --------- tests/regressiontests/forms/tests/formsets.py | 1055 ----- tests/regressiontests/forms/tests/input_formats.py | 861 ----- tests/regressiontests/forms/tests/media.py | 907 ----- tests/regressiontests/forms/tests/models.py | 218 -- tests/regressiontests/forms/tests/regressions.py | 150 - tests/regressiontests/forms/tests/util.py | 67 - tests/regressiontests/forms/tests/validators.py | 16 - tests/regressiontests/forms/tests/widgets.py | 1124 ------ tests/regressiontests/forms/urls.py | 9 - tests/regressiontests/forms/views.py | 8 - .../generic_inline_admin/__init__.py | 0 .../regressiontests/generic_inline_admin/admin.py | 47 - .../generic_inline_admin/fixtures/users.xml | 17 - .../regressiontests/generic_inline_admin/models.py | 76 - .../regressiontests/generic_inline_admin/tests.py | 327 -- tests/regressiontests/generic_inline_admin/urls.py | 9 - .../generic_relations_regress/__init__.py | 0 .../generic_relations_regress/models.py | 124 - .../generic_relations_regress/tests.py | 137 - tests/regressiontests/generic_views/__init__.py | 0 tests/regressiontests/generic_views/base.py | 413 -- tests/regressiontests/generic_views/dates.py | 638 ---- tests/regressiontests/generic_views/detail.py | 101 - tests/regressiontests/generic_views/edit.py | 317 -- .../fixtures/generic-views-test-data.json | 54 - tests/regressiontests/generic_views/forms.py | 18 - tests/regressiontests/generic_views/list.py | 217 -- tests/regressiontests/generic_views/models.py | 51 - .../templates/generic_views/about.html | 2 - .../templates/generic_views/apple_detail.html | 1 - .../templates/generic_views/artist_detail.html | 1 - .../templates/generic_views/artist_form.html | 1 - .../generic_views/author_confirm_delete.html | 1 - .../templates/generic_views/author_detail.html | 1 - .../templates/generic_views/author_form.html | 1 - .../templates/generic_views/author_list.html | 3 - .../templates/generic_views/author_objects.html | 3 - .../templates/generic_views/author_view.html | 1 - .../templates/generic_views/book_archive.html | 1 - .../templates/generic_views/book_archive_day.html | 1 - .../generic_views/book_archive_month.html | 1 - .../templates/generic_views/book_archive_week.html | 1 - .../templates/generic_views/book_archive_year.html | 1 - .../templates/generic_views/book_detail.html | 1 - .../templates/generic_views/book_list.html | 3 - .../templates/generic_views/confirm_delete.html | 1 - .../templates/generic_views/detail.html | 1 - .../templates/generic_views/form.html | 1 - .../templates/generic_views/list.html | 3 - .../templates/generic_views/page_template.html | 1 - .../templates/generic_views/robots.txt | 1 - .../templates/registration/login.html | 1 - tests/regressiontests/generic_views/tests.py | 11 - tests/regressiontests/generic_views/urls.py | 266 -- tests/regressiontests/generic_views/views.py | 250 -- .../get_or_create_regress/__init__.py | 0 .../get_or_create_regress/models.py | 13 - .../regressiontests/get_or_create_regress/tests.py | 66 - tests/regressiontests/handlers/__init__.py | 0 tests/regressiontests/handlers/models.py | 0 tests/regressiontests/handlers/tests.py | 60 - tests/regressiontests/handlers/urls.py | 9 - tests/regressiontests/http_utils/__init__.py | 0 tests/regressiontests/http_utils/models.py | 0 tests/regressiontests/http_utils/tests.py | 45 - tests/regressiontests/httpwrappers/__init__.py | 0 tests/regressiontests/httpwrappers/abc.txt | 1 - tests/regressiontests/httpwrappers/models.py | 0 tests/regressiontests/httpwrappers/tests.py | 607 --- tests/regressiontests/i18n/__init__.py | 0 tests/regressiontests/i18n/commands/__init__.py | 8 - tests/regressiontests/i18n/commands/code.sample | 4 - tests/regressiontests/i18n/commands/compilation.py | 101 - tests/regressiontests/i18n/commands/extraction.py | 420 -- .../i18n/commands/ignore_dir/ignored.html | 2 - tests/regressiontests/i18n/commands/javascript.js | 47 - .../commands/locale/es_AR/LC_MESSAGES/django.po | 20 - .../i18n/commands/locale/fr/LC_MESSAGES/django.po | 71 - .../i18n/commands/locale/hr/LC_MESSAGES/django.po | 71 - .../i18n/commands/locale/it/LC_MESSAGES/django.mo | Bin 775 -> 0 bytes .../i18n/commands/locale/it/LC_MESSAGES/django.po | 30 - .../i18n/commands/templates/comments.thtml | 13 - .../commands/templates/template_with_error.tpl | 3 - .../i18n/commands/templates/test.html | 84 - tests/regressiontests/i18n/commands/tests.py | 48 - .../regressiontests/i18n/contenttypes/__init__.py | 0 .../contenttypes/locale/en/LC_MESSAGES/django.mo | Bin 418 -> 0 bytes .../contenttypes/locale/en/LC_MESSAGES/django.po | 26 - .../contenttypes/locale/fr/LC_MESSAGES/django.mo | Bin 461 -> 0 bytes .../contenttypes/locale/fr/LC_MESSAGES/django.po | 27 - tests/regressiontests/i18n/contenttypes/tests.py | 36 - tests/regressiontests/i18n/forms.py | 26 - tests/regressiontests/i18n/models.py | 17 - tests/regressiontests/i18n/other/__init__.py | 0 .../regressiontests/i18n/other/locale/__init__.py | 0 .../i18n/other/locale/de/LC_MESSAGES/django.mo | Bin 2070 -> 0 bytes .../i18n/other/locale/de/LC_MESSAGES/django.po | 110 - .../i18n/other/locale/de/__init__.py | 0 .../i18n/other/locale/de/formats.py | 0 .../i18n/other/locale/fr/LC_MESSAGES/django.mo | Bin 528 -> 0 bytes .../i18n/other/locale/fr/LC_MESSAGES/django.po | 27 - tests/regressiontests/i18n/patterns/__init__.py | 0 .../i18n/patterns/locale/en/LC_MESSAGES/django.mo | Bin 651 -> 0 bytes .../i18n/patterns/locale/en/LC_MESSAGES/django.po | 37 - .../i18n/patterns/locale/nl/LC_MESSAGES/django.mo | Bin 696 -> 0 bytes .../i18n/patterns/locale/nl/LC_MESSAGES/django.po | 38 - .../patterns/locale/pt_BR/LC_MESSAGES/django.mo | Bin 696 -> 0 bytes .../patterns/locale/pt_BR/LC_MESSAGES/django.po | 38 - .../i18n/patterns/templates/404.html | 0 .../i18n/patterns/templates/dummy.html | 0 tests/regressiontests/i18n/patterns/tests.py | 307 -- .../regressiontests/i18n/patterns/urls/__init__.py | 0 .../regressiontests/i18n/patterns/urls/default.py | 20 - .../regressiontests/i18n/patterns/urls/disabled.py | 9 - .../i18n/patterns/urls/namespace.py | 11 - .../i18n/patterns/urls/path_unused.py | 10 - tests/regressiontests/i18n/patterns/urls/wrong.py | 8 - .../i18n/patterns/urls/wrong_namespace.py | 11 - tests/regressiontests/i18n/resolution/__init__.py | 0 .../resolution/locale/de/LC_MESSAGES/django.mo | Bin 489 -> 0 bytes .../resolution/locale/de/LC_MESSAGES/django.po | 25 - tests/regressiontests/i18n/resolution/models.py | 1 - tests/regressiontests/i18n/tests.py | 1097 ------ tests/regressiontests/indexes/__init__.py | 0 tests/regressiontests/indexes/models.py | 20 - tests/regressiontests/indexes/tests.py | 27 - .../initial_sql_regress/__init__.py | 0 .../regressiontests/initial_sql_regress/models.py | 10 - .../initial_sql_regress/sql/simple.sql | 11 - tests/regressiontests/initial_sql_regress/tests.py | 28 - tests/regressiontests/inline_formsets/__init__.py | 0 tests/regressiontests/inline_formsets/models.py | 31 - tests/regressiontests/inline_formsets/tests.py | 159 - tests/regressiontests/inspectdb/__init__.py | 1 - tests/regressiontests/inspectdb/models.py | 56 - tests/regressiontests/inspectdb/tests.py | 159 - tests/regressiontests/introspection/__init__.py | 0 tests/regressiontests/introspection/models.py | 35 - tests/regressiontests/introspection/tests.py | 148 - tests/regressiontests/logging_tests/__init__.py | 0 tests/regressiontests/logging_tests/logconfig.py | 15 - tests/regressiontests/logging_tests/models.py | 0 tests/regressiontests/logging_tests/tests.py | 345 -- tests/regressiontests/m2m_regress/__init__.py | 0 tests/regressiontests/m2m_regress/models.py | 80 - tests/regressiontests/m2m_regress/tests.py | 111 - .../m2m_through_regress/__init__.py | 2 - .../m2m_through_regress/fixtures/m2m_through.json | 34 - .../regressiontests/m2m_through_regress/models.py | 87 - tests/regressiontests/m2m_through_regress/tests.py | 235 -- tests/regressiontests/mail/__init__.py | 2 - tests/regressiontests/mail/custombackend.py | 15 - tests/regressiontests/mail/models.py | 1 - tests/regressiontests/mail/tests.py | 740 ---- tests/regressiontests/managers_regress/__init__.py | 0 tests/regressiontests/managers_regress/models.py | 121 - tests/regressiontests/managers_regress/tests.py | 195 - .../many_to_one_regress/__init__.py | 0 .../regressiontests/many_to_one_regress/models.py | 56 - tests/regressiontests/many_to_one_regress/tests.py | 136 - tests/regressiontests/max_lengths/__init__.py | 1 - tests/regressiontests/max_lengths/models.py | 14 - tests/regressiontests/max_lengths/tests.py | 39 - tests/regressiontests/middleware/__init__.py | 0 tests/regressiontests/middleware/cond_get_urls.py | 6 - tests/regressiontests/middleware/extra_urls.py | 7 - tests/regressiontests/middleware/models.py | 13 - tests/regressiontests/middleware/tests.py | 731 ---- tests/regressiontests/middleware/urls.py | 7 - .../middleware_exceptions/__init__.py | 0 .../middleware_exceptions/models.py | 0 .../regressiontests/middleware_exceptions/tests.py | 786 ---- .../regressiontests/middleware_exceptions/urls.py | 17 - .../regressiontests/middleware_exceptions/views.py | 26 - tests/regressiontests/model_fields/4x8.png | Bin 87 -> 0 bytes tests/regressiontests/model_fields/8x4.png | Bin 87 -> 0 bytes tests/regressiontests/model_fields/__init__.py | 0 tests/regressiontests/model_fields/imagefield.py | 434 --- tests/regressiontests/model_fields/models.py | 200 - tests/regressiontests/model_fields/tests.py | 426 --- .../model_forms_regress/__init__.py | 0 .../regressiontests/model_forms_regress/models.py | 78 - tests/regressiontests/model_forms_regress/tests.py | 494 --- .../model_formsets_regress/__init__.py | 0 .../model_formsets_regress/models.py | 32 - .../model_formsets_regress/tests.py | 449 --- .../model_inheritance_regress/__init__.py | 0 .../model_inheritance_regress/models.py | 184 - .../model_inheritance_regress/tests.py | 424 --- .../model_inheritance_select_related/__init__.py | 0 .../model_inheritance_select_related/models.py | 35 - .../model_inheritance_select_related/tests.py | 31 - tests/regressiontests/model_permalink/__init__.py | 0 tests/regressiontests/model_permalink/models.py | 24 - tests/regressiontests/model_permalink/tests.py | 27 - tests/regressiontests/model_permalink/urls.py | 5 - tests/regressiontests/model_regress/__init__.py | 0 tests/regressiontests/model_regress/models.py | 84 - tests/regressiontests/model_regress/tests.py | 217 -- tests/regressiontests/modeladmin/__init__.py | 0 tests/regressiontests/modeladmin/models.py | 44 - tests/regressiontests/modeladmin/tests.py | 1497 -------- .../regressiontests/multiple_database/__init__.py | 0 .../multiple_database/fixtures/multidb-common.json | 10 - .../fixtures/multidb.default.json | 26 - .../multiple_database/fixtures/multidb.other.json | 26 - .../multiple_database/fixtures/pets.json | 18 - tests/regressiontests/multiple_database/models.py | 83 - tests/regressiontests/multiple_database/tests.py | 1946 ---------- .../nested_foreign_keys/__init__.py | 0 .../regressiontests/nested_foreign_keys/models.py | 28 - tests/regressiontests/nested_foreign_keys/tests.py | 172 - tests/regressiontests/null_fk/__init__.py | 0 tests/regressiontests/null_fk/models.py | 50 - tests/regressiontests/null_fk/tests.py | 69 - tests/regressiontests/null_fk_ordering/__init__.py | 0 tests/regressiontests/null_fk_ordering/models.py | 55 - tests/regressiontests/null_fk_ordering/tests.py | 42 - tests/regressiontests/null_queries/__init__.py | 0 tests/regressiontests/null_queries/models.py | 32 - tests/regressiontests/null_queries/tests.py | 83 - .../regressiontests/one_to_one_regress/__init__.py | 0 tests/regressiontests/one_to_one_regress/models.py | 51 - tests/regressiontests/one_to_one_regress/tests.py | 244 -- tests/regressiontests/pagination/__init__.py | 0 tests/regressiontests/pagination/custom.py | 20 - tests/regressiontests/pagination/models.py | 11 - tests/regressiontests/pagination/tests.py | 307 -- tests/regressiontests/queries/__init__.py | 0 tests/regressiontests/queries/models.py | 456 --- tests/regressiontests/queries/tests.py | 2640 ------------- tests/regressiontests/queryset_pickle/__init__.py | 0 tests/regressiontests/queryset_pickle/models.py | 38 - tests/regressiontests/queryset_pickle/tests.py | 48 - tests/regressiontests/requests/__init__.py | 3 - tests/regressiontests/requests/models.py | 1 - tests/regressiontests/requests/tests.py | 590 --- tests/regressiontests/resolve_url/__init__.py | 0 tests/regressiontests/resolve_url/models.py | 12 - tests/regressiontests/resolve_url/tests.py | 68 - .../reverse_single_related/__init__.py | 0 .../reverse_single_related/models.py | 13 - .../reverse_single_related/tests.py | 39 - .../select_related_onetoone/__init__.py | 0 .../select_related_onetoone/models.py | 102 - .../select_related_onetoone/tests.py | 210 - .../select_related_regress/__init__.py | 0 .../select_related_regress/models.py | 110 - .../select_related_regress/tests.py | 175 - .../serializers_regress/__init__.py | 0 .../regressiontests/serializers_regress/models.py | 277 -- tests/regressiontests/serializers_regress/tests.py | 531 --- tests/regressiontests/servers/__init__.py | 0 .../regressiontests/servers/fixtures/testdata.json | 16 - .../servers/media/example_media_file.txt | 1 - tests/regressiontests/servers/models.py | 5 - .../servers/static/example_static_file.txt | 1 - tests/regressiontests/servers/tests.py | 170 - tests/regressiontests/servers/urls.py | 13 - tests/regressiontests/servers/views.py | 21 - tests/regressiontests/settings_tests/__init__.py | 0 tests/regressiontests/settings_tests/models.py | 0 tests/regressiontests/settings_tests/tests.py | 289 -- tests/regressiontests/signals_regress/__init__.py | 0 tests/regressiontests/signals_regress/models.py | 18 - tests/regressiontests/signals_regress/tests.py | 95 - .../signed_cookies_tests/__init__.py | 0 .../regressiontests/signed_cookies_tests/models.py | 1 - .../regressiontests/signed_cookies_tests/tests.py | 64 - tests/regressiontests/signing/__init__.py | 0 tests/regressiontests/signing/models.py | 1 - tests/regressiontests/signing/tests.py | 127 - tests/regressiontests/sites_framework/__init__.py | 0 tests/regressiontests/sites_framework/models.py | 38 - tests/regressiontests/sites_framework/tests.py | 38 - tests/regressiontests/special_headers/__init__.py | 0 .../special_headers/fixtures/data.xml | 20 - tests/regressiontests/special_headers/models.py | 5 - .../templates/special_headers/article_detail.html | 1 - tests/regressiontests/special_headers/tests.py | 62 - tests/regressiontests/special_headers/urls.py | 13 - tests/regressiontests/special_headers/views.py | 21 - .../regressiontests/staticfiles_tests/__init__.py | 0 .../staticfiles_tests/apps/__init__.py | 0 .../staticfiles_tests/apps/no_label/__init__.py | 0 .../staticfiles_tests/apps/no_label/models.py | 0 .../apps/no_label/static/file2.txt | 1 - .../staticfiles_tests/apps/test/__init__.py | 0 .../staticfiles_tests/apps/test/models.py | 0 .../apps/test/otherdir/odfile.txt | 1 - .../staticfiles_tests/apps/test/static/test/CVS | 1 - .../apps/test/static/test/file.txt | 1 - .../apps/test/static/test/file1.txt | 1 - .../apps/test/static/test/nonascii.css | 5 - .../apps/test/static/test/test.ignoreme | 1 - .../apps/test/static/test/window.png | Bin 207 -> 0 bytes tests/regressiontests/staticfiles_tests/models.py | 0 .../project/documents/cached/absolute.css | 4 - .../project/documents/cached/css/fonts/font.eot | 1 - .../project/documents/cached/css/fonts/font.svg | 1 - .../project/documents/cached/css/fragments.css | 8 - .../project/documents/cached/css/ignored.css | 8 - .../project/documents/cached/css/img/window.png | Bin 207 -> 0 bytes .../project/documents/cached/css/window.css | 3 - .../project/documents/cached/denorm.css | 4 - .../project/documents/cached/img/relative.png | Bin 207 -> 0 bytes .../project/documents/cached/import.css | 1 - .../project/documents/cached/other.css | 0 .../project/documents/cached/relative.css | 6 - .../project/documents/cached/styles.css | 1 - .../documents/cached/styles_insensitive.css | 1 - .../project/documents/cached/url.css | 1 - .../project/documents/subdir/test.txt | 1 - .../staticfiles_tests/project/documents/test.txt | 1 - .../project/documents/test/camelCase.txt | 1 - .../project/documents/test/file.txt | 2 - .../staticfiles_tests/project/prefixed/test.txt | 1 - .../project/site_media/media/media-file.txt | 1 - .../project/site_media/static/testfile.txt | 1 - tests/regressiontests/staticfiles_tests/storage.py | 26 - tests/regressiontests/staticfiles_tests/tests.py | 761 ---- .../staticfiles_tests/urls/__init__.py | 0 .../staticfiles_tests/urls/default.py | 5 - .../staticfiles_tests/urls/helper.py | 3 - tests/regressiontests/string_lookup/__init__.py | 0 tests/regressiontests/string_lookup/models.py | 55 - tests/regressiontests/string_lookup/tests.py | 81 - tests/regressiontests/swappable_models/__init__.py | 0 tests/regressiontests/swappable_models/models.py | 15 - tests/regressiontests/swappable_models/tests.py | 58 - tests/regressiontests/syndication/__init__.py | 0 tests/regressiontests/syndication/feeds.py | 160 - .../syndication/fixtures/feeddata.json | 42 - tests/regressiontests/syndication/models.py | 27 - .../templates/syndication/description.html | 1 - .../templates/syndication/description_context.html | 1 - .../syndication/templates/syndication/title.html | 1 - .../templates/syndication/title_context.html | 1 - tests/regressiontests/syndication/tests.py | 369 -- tests/regressiontests/syndication/urls.py | 25 - tests/regressiontests/templates/__init__.py | 0 tests/regressiontests/templates/alternate_urls.py | 16 - tests/regressiontests/templates/callables.py | 113 - tests/regressiontests/templates/context.py | 16 - tests/regressiontests/templates/custom.py | 377 -- tests/regressiontests/templates/eggs/tagsegg.egg | Bin 2581 -> 0 bytes tests/regressiontests/templates/filters.py | 371 -- tests/regressiontests/templates/loaders.py | 156 - tests/regressiontests/templates/models.py | 0 tests/regressiontests/templates/nodelist.py | 58 - tests/regressiontests/templates/parser.py | 95 - tests/regressiontests/templates/response.py | 352 -- tests/regressiontests/templates/smartif.py | 53 - .../templates/templates/broken_base.html | 1 - .../templates/templates/first/test.html | 1 - .../templates/templates/inclusion.html | 1 - .../templates/templates/response.html | 2 - .../templates/templates/second/test.html | 1 - .../templates/ssi include with spaces.html | 1 - .../templates/templates/ssi_include.html | 1 - .../templates/templates/test_context.html | 1 - .../templates/templates/test_extends_error.html | 1 - .../templates/test_incl_tag_current_app.html | 1 - .../templates/test_incl_tag_use_l10n.html | 1 - .../templates/templates/test_include_error.html | 1 - .../templates/templatetags/__init__.py | 0 .../templates/templatetags/bad_tag.py | 12 - .../templates/templatetags/broken_tag.py | 1 - .../templates/templatetags/custom.py | 313 -- .../templates/templatetags/subpackage/__init__.py | 0 .../templates/templatetags/subpackage/echo.py | 7 - .../templatetags/subpackage/echo_invalid.py | 1 - tests/regressiontests/templates/tests.py | 1818 --------- tests/regressiontests/templates/unicode.py | 32 - tests/regressiontests/templates/urls.py | 20 - tests/regressiontests/templates/views.py | 22 - .../test_client_regress/__init__.py | 0 .../test_client_regress/bad_templates/404.html | 3 - .../test_client_regress/fixtures/testdata.json | 56 - .../regressiontests/test_client_regress/models.py | 0 .../regressiontests/test_client_regress/session.py | 30 - .../templates/request_context.html | 1 - .../test_client_regress/templates/unicode.html | 5 - tests/regressiontests/test_client_regress/tests.py | 1024 ----- tests/regressiontests/test_client_regress/urls.py | 38 - tests/regressiontests/test_client_regress/views.py | 108 - tests/regressiontests/test_runner/__init__.py | 0 .../test_runner/deprecation_app/__init__.py | 0 .../test_runner/deprecation_app/models.py | 3 - .../test_runner/deprecation_app/tests.py | 9 - .../test_runner/invalid_app/__init__.py | 4 - .../test_runner/invalid_app/models/__init__.py | 0 .../test_runner/invalid_app/tests/__init__.py | 4 - tests/regressiontests/test_runner/models.py | 5 - tests/regressiontests/test_runner/tests.py | 328 -- .../test_runner/valid_app/__init__.py | 3 - .../test_runner/valid_app/models/__init__.py | 0 .../test_runner/valid_app/tests/__init__.py | 0 tests/regressiontests/test_utils/__init__.py | 0 .../test_utils/fixtures/should_not_be_loaded.json | 10 - tests/regressiontests/test_utils/models.py | 9 - .../templates/template_used/alternative.html | 0 .../test_utils/templates/template_used/base.html | 0 .../templates/template_used/extends.html | 1 - .../templates/template_used/include.html | 1 - tests/regressiontests/test_utils/tests.py | 650 ---- tests/regressiontests/test_utils/urls.py | 10 - tests/regressiontests/test_utils/views.py | 11 - tests/regressiontests/text/__init__.py | 0 tests/regressiontests/text/models.py | 0 tests/regressiontests/text/tests.py | 105 - .../transactions_regress/__init__.py | 0 .../regressiontests/transactions_regress/models.py | 13 - .../regressiontests/transactions_regress/tests.py | 266 -- .../urlpatterns_reverse/__init__.py | 0 .../urlpatterns_reverse/erroneous_urls.py | 16 - .../urlpatterns_reverse/erroneous_views_module.py | 4 - .../urlpatterns_reverse/extra_urls.py | 17 - .../urlpatterns_reverse/included_named_urls.py | 14 - .../urlpatterns_reverse/included_named_urls2.py | 13 - .../urlpatterns_reverse/included_namespace_urls.py | 26 - .../urlpatterns_reverse/included_urls.py | 12 - .../urlpatterns_reverse/included_urls2.py | 18 - .../urlpatterns_reverse/middleware.py | 12 - .../regressiontests/urlpatterns_reverse/models.py | 0 .../urlpatterns_reverse/named_urls.py | 13 - .../urlpatterns_reverse/namespace_urls.py | 59 - .../regressiontests/urlpatterns_reverse/no_urls.py | 2 - .../urlpatterns_reverse/reverse_lazy_urls.py | 12 - tests/regressiontests/urlpatterns_reverse/tests.py | 562 --- .../urlpatterns_reverse/urlconf_inner.py | 12 - .../urlpatterns_reverse/urlconf_outer.py | 11 - tests/regressiontests/urlpatterns_reverse/urls.py | 69 - .../urlpatterns_reverse/urls_error_handlers.py | 8 - .../urls_error_handlers_callables.py | 13 - .../urls_without_full_import.py | 14 - tests/regressiontests/urlpatterns_reverse/views.py | 43 - .../urlpatterns_reverse/views_broken.py | 2 - tests/regressiontests/utils/__init__.py | 0 tests/regressiontests/utils/archive.py | 72 - tests/regressiontests/utils/archives/foobar.tar | Bin 10240 -> 0 bytes .../regressiontests/utils/archives/foobar.tar.bz2 | Bin 238 -> 0 bytes tests/regressiontests/utils/archives/foobar.tar.gz | Bin 249 -> 0 bytes tests/regressiontests/utils/archives/foobar.zip | Bin 1130 -> 0 bytes tests/regressiontests/utils/baseconv.py | 42 - tests/regressiontests/utils/checksums.py | 29 - tests/regressiontests/utils/crypto.py | 146 - tests/regressiontests/utils/datastructures.py | 306 -- tests/regressiontests/utils/dateformat.py | 142 - tests/regressiontests/utils/dateparse.py | 44 - tests/regressiontests/utils/datetime_safe.py | 42 - tests/regressiontests/utils/decorators.py | 108 - tests/regressiontests/utils/eggs/test_egg.egg | Bin 4844 -> 0 bytes tests/regressiontests/utils/encoding.py | 17 - tests/regressiontests/utils/feedgenerator.py | 117 - tests/regressiontests/utils/functional.py | 66 - tests/regressiontests/utils/html.py | 161 - tests/regressiontests/utils/http.py | 163 - tests/regressiontests/utils/ipv6.py | 53 - tests/regressiontests/utils/jslex.py | 216 -- tests/regressiontests/utils/models.py | 1 - tests/regressiontests/utils/module_loading.py | 184 - tests/regressiontests/utils/numberformat.py | 47 - tests/regressiontests/utils/os_utils.py | 26 - tests/regressiontests/utils/regex_helper.py | 50 - tests/regressiontests/utils/simplelazyobject.py | 123 - tests/regressiontests/utils/termcolors.py | 157 - .../regressiontests/utils/test_module/__init__.py | 0 .../utils/test_module/bad_module.py | 3 - .../utils/test_module/good_module.py | 1 - tests/regressiontests/utils/test_no_submodule.py | 1 - tests/regressiontests/utils/tests.py | 33 - tests/regressiontests/utils/text.py | 108 - tests/regressiontests/utils/timesince.py | 124 - tests/regressiontests/utils/timezone.py | 63 - tests/regressiontests/utils/tzinfo.py | 79 - tests/regressiontests/version/__init__.py | 0 tests/regressiontests/version/models.py | 0 tests/regressiontests/version/tests.py | 27 - tests/regressiontests/views/__init__.py | 11 - tests/regressiontests/views/app0/__init__.py | 1 - .../views/app0/locale/en/LC_MESSAGES/djangojs.mo | Bin 482 -> 0 bytes .../views/app0/locale/en/LC_MESSAGES/djangojs.po | 20 - tests/regressiontests/views/app1/__init__.py | 1 - .../views/app1/locale/fr/LC_MESSAGES/djangojs.mo | Bin 482 -> 0 bytes .../views/app1/locale/fr/LC_MESSAGES/djangojs.po | 20 - tests/regressiontests/views/app2/__init__.py | 1 - .../views/app2/locale/fr/LC_MESSAGES/djangojs.mo | Bin 482 -> 0 bytes .../views/app2/locale/fr/LC_MESSAGES/djangojs.po | 20 - tests/regressiontests/views/app3/__init__.py | 1 - .../app3/locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 483 -> 0 bytes .../app3/locale/es_AR/LC_MESSAGES/djangojs.po | 20 - tests/regressiontests/views/app4/__init__.py | 1 - .../app4/locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 483 -> 0 bytes .../app4/locale/es_AR/LC_MESSAGES/djangojs.po | 20 - tests/regressiontests/views/fixtures/testdata.json | 75 - tests/regressiontests/views/generic_urls.py | 57 - .../views/locale/de/LC_MESSAGES/djangojs.mo | Bin 615 -> 0 bytes .../views/locale/de/LC_MESSAGES/djangojs.po | 40 - .../views/locale/es/LC_MESSAGES/djangojs.mo | Bin 490 -> 0 bytes .../views/locale/es/LC_MESSAGES/djangojs.po | 25 - .../views/locale/fr/LC_MESSAGES/djangojs.mo | Bin 519 -> 0 bytes .../views/locale/fr/LC_MESSAGES/djangojs.po | 28 - .../views/locale/ru/LC_MESSAGES/djangojs.mo | Bin 489 -> 0 bytes .../views/locale/ru/LC_MESSAGES/djangojs.po | 24 - tests/regressiontests/views/media/file.txt | 1 - tests/regressiontests/views/media/file.txt.gz | Bin 51 -> 0 bytes tests/regressiontests/views/media/file.unknown | 1 - tests/regressiontests/views/models.py | 52 - .../views/templates/debug/render_test.html | 1 - .../views/templates/debug/template_exception.html | 2 - tests/regressiontests/views/templates/jsi18n.html | 44 - .../regressiontests/views/templatetags/__init__.py | 0 .../views/templatetags/debugtags.py | 13 - tests/regressiontests/views/tests/__init__.py | 10 - tests/regressiontests/views/tests/debug.py | 559 --- tests/regressiontests/views/tests/defaults.py | 98 - tests/regressiontests/views/tests/i18n.py | 221 -- tests/regressiontests/views/tests/shortcuts.py | 59 - tests/regressiontests/views/tests/specials.py | 39 - tests/regressiontests/views/tests/static.py | 120 - tests/regressiontests/views/urls.py | 71 - tests/regressiontests/views/views.py | 266 -- tests/regressiontests/wsgi/__init__.py | 0 tests/regressiontests/wsgi/models.py | 0 tests/regressiontests/wsgi/tests.py | 99 - tests/regressiontests/wsgi/urls.py | 10 - tests/regressiontests/wsgi/wsgi.py | 2 - tests/requests/__init__.py | 3 + tests/requests/models.py | 1 + tests/requests/tests.py | 590 +++ tests/reserved_names/__init__.py | 0 tests/reserved_names/models.py | 28 + tests/reserved_names/tests.py | 51 + tests/resolve_url/__init__.py | 0 tests/resolve_url/models.py | 12 + tests/resolve_url/tests.py | 68 + tests/reverse_lookup/__init__.py | 0 tests/reverse_lookup/models.py | 33 + tests/reverse_lookup/tests.py | 52 + tests/reverse_single_related/__init__.py | 0 tests/reverse_single_related/models.py | 13 + tests/reverse_single_related/tests.py | 39 + tests/save_delete_hooks/__init__.py | 0 tests/save_delete_hooks/models.py | 35 + tests/save_delete_hooks/tests.py | 33 + tests/select_for_update/__init__.py | 1 + tests/select_for_update/models.py | 5 + tests/select_for_update/tests.py | 283 ++ tests/select_related/__init__.py | 0 tests/select_related/models.py | 68 + tests/select_related/tests.py | 174 + tests/select_related_onetoone/__init__.py | 0 tests/select_related_onetoone/models.py | 102 + tests/select_related_onetoone/tests.py | 210 + tests/select_related_regress/__init__.py | 0 tests/select_related_regress/models.py | 110 + tests/select_related_regress/tests.py | 175 + tests/serializers/__init__.py | 0 tests/serializers/models.py | 126 + tests/serializers/tests.py | 501 +++ tests/serializers_regress/__init__.py | 0 tests/serializers_regress/models.py | 277 ++ tests/serializers_regress/tests.py | 531 +++ tests/servers/__init__.py | 0 tests/servers/fixtures/testdata.json | 16 + tests/servers/media/example_media_file.txt | 1 + tests/servers/models.py | 5 + tests/servers/static/example_static_file.txt | 1 + tests/servers/tests.py | 170 + tests/servers/urls.py | 13 + tests/servers/views.py | 21 + tests/settings_tests/__init__.py | 0 tests/settings_tests/models.py | 0 tests/settings_tests/tests.py | 289 ++ tests/signals/__init__.py | 0 tests/signals/models.py | 24 + tests/signals/tests.py | 179 + tests/signals_regress/__init__.py | 0 tests/signals_regress/models.py | 18 + tests/signals_regress/tests.py | 95 + tests/signed_cookies_tests/__init__.py | 0 tests/signed_cookies_tests/models.py | 1 + tests/signed_cookies_tests/tests.py | 64 + tests/signing/__init__.py | 0 tests/signing/models.py | 1 + tests/signing/tests.py | 127 + tests/sites_framework/__init__.py | 0 tests/sites_framework/models.py | 38 + tests/sites_framework/tests.py | 38 + tests/special_headers/__init__.py | 0 tests/special_headers/fixtures/data.xml | 20 + tests/special_headers/models.py | 5 + .../templates/special_headers/article_detail.html | 1 + tests/special_headers/tests.py | 62 + tests/special_headers/urls.py | 13 + tests/special_headers/views.py | 21 + tests/staticfiles_tests/__init__.py | 0 tests/staticfiles_tests/apps/__init__.py | 0 tests/staticfiles_tests/apps/no_label/__init__.py | 0 tests/staticfiles_tests/apps/no_label/models.py | 0 .../apps/no_label/static/file2.txt | 1 + tests/staticfiles_tests/apps/test/__init__.py | 0 tests/staticfiles_tests/apps/test/models.py | 0 .../apps/test/otherdir/odfile.txt | 1 + tests/staticfiles_tests/apps/test/static/test/CVS | 1 + .../apps/test/static/test/file.txt | 1 + .../apps/test/static/test/file1.txt | 1 + .../apps/test/static/test/nonascii.css | 5 + .../apps/test/static/test/test.ignoreme | 1 + .../apps/test/static/test/window.png | Bin 0 -> 207 bytes tests/staticfiles_tests/models.py | 0 .../project/documents/cached/absolute.css | 4 + .../project/documents/cached/css/fonts/font.eot | 1 + .../project/documents/cached/css/fonts/font.svg | 1 + .../project/documents/cached/css/fragments.css | 8 + .../project/documents/cached/css/ignored.css | 8 + .../project/documents/cached/css/img/window.png | Bin 0 -> 207 bytes .../project/documents/cached/css/window.css | 3 + .../project/documents/cached/denorm.css | 4 + .../project/documents/cached/img/relative.png | Bin 0 -> 207 bytes .../project/documents/cached/import.css | 1 + .../project/documents/cached/other.css | 0 .../project/documents/cached/relative.css | 6 + .../project/documents/cached/styles.css | 1 + .../documents/cached/styles_insensitive.css | 1 + .../project/documents/cached/url.css | 1 + .../project/documents/subdir/test.txt | 1 + tests/staticfiles_tests/project/documents/test.txt | 1 + .../project/documents/test/camelCase.txt | 1 + .../project/documents/test/file.txt | 2 + tests/staticfiles_tests/project/prefixed/test.txt | 1 + .../project/site_media/media/media-file.txt | 1 + .../project/site_media/static/testfile.txt | 1 + tests/staticfiles_tests/storage.py | 26 + tests/staticfiles_tests/tests.py | 761 ++++ tests/staticfiles_tests/urls/__init__.py | 0 tests/staticfiles_tests/urls/default.py | 5 + tests/staticfiles_tests/urls/helper.py | 3 + tests/str/__init__.py | 0 tests/str/models.py | 44 + tests/str/tests.py | 45 + tests/string_lookup/__init__.py | 0 tests/string_lookup/models.py | 55 + tests/string_lookup/tests.py | 81 + tests/swappable_models/__init__.py | 0 tests/swappable_models/models.py | 15 + tests/swappable_models/tests.py | 58 + tests/syndication/__init__.py | 0 tests/syndication/feeds.py | 160 + tests/syndication/fixtures/feeddata.json | 42 + tests/syndication/models.py | 27 + .../templates/syndication/description.html | 1 + .../templates/syndication/description_context.html | 1 + tests/syndication/templates/syndication/title.html | 1 + .../templates/syndication/title_context.html | 1 + tests/syndication/tests.py | 369 ++ tests/syndication/urls.py | 25 + tests/tablespaces/__init__.py | 0 tests/tablespaces/models.py | 42 + tests/tablespaces/tests.py | 128 + tests/templates/__init__.py | 0 tests/templates/alternate_urls.py | 16 + tests/templates/callables.py | 113 + tests/templates/context.py | 16 + tests/templates/custom.py | 377 ++ tests/templates/eggs/tagsegg.egg | Bin 0 -> 2581 bytes tests/templates/filters.py | 371 ++ tests/templates/loaders.py | 156 + tests/templates/models.py | 0 tests/templates/nodelist.py | 58 + tests/templates/parser.py | 95 + tests/templates/response.py | 352 ++ tests/templates/smartif.py | 53 + tests/templates/templates/broken_base.html | 1 + tests/templates/templates/first/test.html | 1 + tests/templates/templates/inclusion.html | 1 + tests/templates/templates/response.html | 2 + tests/templates/templates/second/test.html | 1 + .../templates/ssi include with spaces.html | 1 + tests/templates/templates/ssi_include.html | 1 + tests/templates/templates/test_context.html | 1 + tests/templates/templates/test_extends_error.html | 1 + .../templates/test_incl_tag_current_app.html | 1 + .../templates/test_incl_tag_use_l10n.html | 1 + tests/templates/templates/test_include_error.html | 1 + tests/templates/templatetags/__init__.py | 0 tests/templates/templatetags/bad_tag.py | 12 + tests/templates/templatetags/broken_tag.py | 1 + tests/templates/templatetags/custom.py | 313 ++ .../templates/templatetags/subpackage/__init__.py | 0 tests/templates/templatetags/subpackage/echo.py | 7 + .../templatetags/subpackage/echo_invalid.py | 1 + tests/templates/tests.py | 1818 +++++++++ tests/templates/unicode.py | 32 + tests/templates/urls.py | 20 + tests/templates/views.py | 22 + tests/test_client/__init__.py | 0 tests/test_client/fixtures/testdata.json | 56 + tests/test_client/models.py | 508 +++ tests/test_client/tests.py | 21 + tests/test_client/urls.py | 34 + tests/test_client/views.py | 218 ++ tests/test_client_regress/__init__.py | 0 tests/test_client_regress/bad_templates/404.html | 3 + tests/test_client_regress/fixtures/testdata.json | 56 + tests/test_client_regress/models.py | 0 tests/test_client_regress/session.py | 30 + .../templates/request_context.html | 1 + tests/test_client_regress/templates/unicode.html | 5 + tests/test_client_regress/tests.py | 1024 +++++ tests/test_client_regress/urls.py | 38 + tests/test_client_regress/views.py | 108 + tests/test_runner/__init__.py | 0 tests/test_runner/deprecation_app/__init__.py | 0 tests/test_runner/deprecation_app/models.py | 3 + tests/test_runner/deprecation_app/tests.py | 9 + tests/test_runner/invalid_app/__init__.py | 4 + tests/test_runner/invalid_app/models/__init__.py | 0 tests/test_runner/invalid_app/tests/__init__.py | 4 + tests/test_runner/models.py | 5 + tests/test_runner/tests.py | 328 ++ tests/test_runner/valid_app/__init__.py | 3 + tests/test_runner/valid_app/models/__init__.py | 0 tests/test_runner/valid_app/tests/__init__.py | 0 tests/test_utils/__init__.py | 0 .../test_utils/fixtures/should_not_be_loaded.json | 10 + tests/test_utils/models.py | 9 + .../templates/template_used/alternative.html | 0 tests/test_utils/templates/template_used/base.html | 0 .../templates/template_used/extends.html | 1 + .../templates/template_used/include.html | 1 + tests/test_utils/tests.py | 650 ++++ tests/test_utils/urls.py | 10 + tests/test_utils/views.py | 11 + tests/text/__init__.py | 0 tests/text/models.py | 0 tests/text/tests.py | 105 + tests/timezones/__init__.py | 0 tests/timezones/admin.py | 15 + tests/timezones/fixtures/tz_users.xml | 17 + tests/timezones/forms.py | 13 + tests/timezones/models.py | 21 + tests/timezones/tests.py | 1124 ++++++ tests/timezones/urls.py | 10 + tests/transactions/__init__.py | 0 tests/transactions/models.py | 25 + tests/transactions/tests.py | 310 ++ tests/transactions_regress/__init__.py | 0 tests/transactions_regress/models.py | 13 + tests/transactions_regress/tests.py | 266 ++ tests/unmanaged_models/__init__.py | 2 + tests/unmanaged_models/models.py | 132 + tests/unmanaged_models/tests.py | 61 + tests/update/__init__.py | 0 tests/update/models.py | 40 + tests/update/tests.py | 118 + tests/update_only_fields/__init__.py | 0 tests/update_only_fields/models.py | 41 + tests/update_only_fields/tests.py | 262 ++ tests/urlpatterns_reverse/__init__.py | 0 tests/urlpatterns_reverse/erroneous_urls.py | 16 + .../urlpatterns_reverse/erroneous_views_module.py | 4 + tests/urlpatterns_reverse/extra_urls.py | 17 + tests/urlpatterns_reverse/included_named_urls.py | 14 + tests/urlpatterns_reverse/included_named_urls2.py | 13 + .../urlpatterns_reverse/included_namespace_urls.py | 26 + tests/urlpatterns_reverse/included_urls.py | 12 + tests/urlpatterns_reverse/included_urls2.py | 18 + tests/urlpatterns_reverse/middleware.py | 12 + tests/urlpatterns_reverse/models.py | 0 tests/urlpatterns_reverse/named_urls.py | 13 + tests/urlpatterns_reverse/namespace_urls.py | 59 + tests/urlpatterns_reverse/no_urls.py | 2 + tests/urlpatterns_reverse/reverse_lazy_urls.py | 12 + tests/urlpatterns_reverse/tests.py | 562 +++ tests/urlpatterns_reverse/urlconf_inner.py | 12 + tests/urlpatterns_reverse/urlconf_outer.py | 11 + tests/urlpatterns_reverse/urls.py | 69 + tests/urlpatterns_reverse/urls_error_handlers.py | 8 + .../urls_error_handlers_callables.py | 13 + .../urls_without_full_import.py | 14 + tests/urlpatterns_reverse/views.py | 43 + tests/urlpatterns_reverse/views_broken.py | 2 + tests/user_commands/__init__.py | 0 tests/user_commands/management/__init__.py | 0 .../user_commands/management/commands/__init__.py | 0 tests/user_commands/management/commands/dance.py | 20 + .../commands/leave_locale_alone_false.py | 10 + .../management/commands/leave_locale_alone_true.py | 10 + tests/user_commands/models.py | 14 + tests/user_commands/tests.py | 60 + tests/utils/__init__.py | 0 tests/utils/archive.py | 72 + tests/utils/archives/foobar.tar | Bin 0 -> 10240 bytes tests/utils/archives/foobar.tar.bz2 | Bin 0 -> 238 bytes tests/utils/archives/foobar.tar.gz | Bin 0 -> 249 bytes tests/utils/archives/foobar.zip | Bin 0 -> 1130 bytes tests/utils/baseconv.py | 42 + tests/utils/checksums.py | 29 + tests/utils/crypto.py | 146 + tests/utils/datastructures.py | 306 ++ tests/utils/dateformat.py | 142 + tests/utils/dateparse.py | 44 + tests/utils/datetime_safe.py | 42 + tests/utils/decorators.py | 108 + tests/utils/eggs/test_egg.egg | Bin 0 -> 4844 bytes tests/utils/encoding.py | 17 + tests/utils/feedgenerator.py | 117 + tests/utils/functional.py | 66 + tests/utils/html.py | 161 + tests/utils/http.py | 163 + tests/utils/ipv6.py | 53 + tests/utils/jslex.py | 216 ++ tests/utils/models.py | 1 + tests/utils/module_loading.py | 184 + tests/utils/numberformat.py | 47 + tests/utils/os_utils.py | 26 + tests/utils/regex_helper.py | 50 + tests/utils/simplelazyobject.py | 123 + tests/utils/termcolors.py | 157 + tests/utils/test_module/__init__.py | 0 tests/utils/test_module/bad_module.py | 3 + tests/utils/test_module/good_module.py | 1 + tests/utils/test_no_submodule.py | 1 + tests/utils/tests.py | 33 + tests/utils/text.py | 108 + tests/utils/timesince.py | 124 + tests/utils/timezone.py | 63 + tests/utils/tzinfo.py | 79 + tests/validation/__init__.py | 16 + tests/validation/models.py | 110 + tests/validation/test_custom_messages.py | 15 + tests/validation/test_error_messages.py | 97 + tests/validation/test_unique.py | 144 + tests/validation/tests.py | 166 + tests/validation/validators.py | 19 + tests/validators/__init__.py | 0 tests/validators/models.py | 0 tests/validators/tests.py | 224 ++ tests/version/__init__.py | 0 tests/version/models.py | 0 tests/version/tests.py | 27 + tests/views/__init__.py | 11 + tests/views/app0/__init__.py | 1 + tests/views/app0/locale/en/LC_MESSAGES/djangojs.mo | Bin 0 -> 482 bytes tests/views/app0/locale/en/LC_MESSAGES/djangojs.po | 20 + tests/views/app1/__init__.py | 1 + tests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo | Bin 0 -> 482 bytes tests/views/app1/locale/fr/LC_MESSAGES/djangojs.po | 20 + tests/views/app2/__init__.py | 1 + tests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo | Bin 0 -> 482 bytes tests/views/app2/locale/fr/LC_MESSAGES/djangojs.po | 20 + tests/views/app3/__init__.py | 1 + .../app3/locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 0 -> 483 bytes .../app3/locale/es_AR/LC_MESSAGES/djangojs.po | 20 + tests/views/app4/__init__.py | 1 + .../app4/locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 0 -> 483 bytes .../app4/locale/es_AR/LC_MESSAGES/djangojs.po | 20 + tests/views/fixtures/testdata.json | 75 + tests/views/generic_urls.py | 57 + tests/views/locale/de/LC_MESSAGES/djangojs.mo | Bin 0 -> 615 bytes tests/views/locale/de/LC_MESSAGES/djangojs.po | 40 + tests/views/locale/es/LC_MESSAGES/djangojs.mo | Bin 0 -> 490 bytes tests/views/locale/es/LC_MESSAGES/djangojs.po | 25 + tests/views/locale/fr/LC_MESSAGES/djangojs.mo | Bin 0 -> 519 bytes tests/views/locale/fr/LC_MESSAGES/djangojs.po | 28 + tests/views/locale/ru/LC_MESSAGES/djangojs.mo | Bin 0 -> 489 bytes tests/views/locale/ru/LC_MESSAGES/djangojs.po | 24 + tests/views/media/file.txt | 1 + tests/views/media/file.txt.gz | Bin 0 -> 51 bytes tests/views/media/file.unknown | 1 + tests/views/models.py | 52 + tests/views/templates/debug/render_test.html | 1 + .../views/templates/debug/template_exception.html | 2 + tests/views/templates/jsi18n.html | 44 + tests/views/templatetags/__init__.py | 0 tests/views/templatetags/debugtags.py | 13 + tests/views/tests/__init__.py | 10 + tests/views/tests/debug.py | 559 +++ tests/views/tests/defaults.py | 98 + tests/views/tests/i18n.py | 221 ++ tests/views/tests/shortcuts.py | 59 + tests/views/tests/specials.py | 39 + tests/views/tests/static.py | 120 + tests/views/urls.py | 71 + tests/views/views.py | 266 ++ tests/wsgi/__init__.py | 0 tests/wsgi/models.py | 0 tests/wsgi/tests.py | 99 + tests/wsgi/urls.py | 10 + tests/wsgi/wsgi.py | 2 + 2100 files changed, 95533 insertions(+), 95533 deletions(-) create mode 100644 tests/admin_changelist/__init__.py create mode 100644 tests/admin_changelist/admin.py create mode 100644 tests/admin_changelist/models.py create mode 100644 tests/admin_changelist/tests.py create mode 100644 tests/admin_changelist/urls.py create mode 100644 tests/admin_custom_urls/__init__.py create mode 100644 tests/admin_custom_urls/fixtures/actions.json create mode 100644 tests/admin_custom_urls/fixtures/users.json create mode 100644 tests/admin_custom_urls/models.py create mode 100644 tests/admin_custom_urls/tests.py create mode 100644 tests/admin_custom_urls/urls.py create mode 100644 tests/admin_filters/__init__.py create mode 100644 tests/admin_filters/models.py create mode 100644 tests/admin_filters/tests.py create mode 100644 tests/admin_inlines/__init__.py create mode 100644 tests/admin_inlines/admin.py create mode 100644 tests/admin_inlines/fixtures/admin-views-users.xml create mode 100644 tests/admin_inlines/models.py create mode 100644 tests/admin_inlines/tests.py create mode 100644 tests/admin_inlines/urls.py create mode 100644 tests/admin_ordering/__init__.py create mode 100644 tests/admin_ordering/models.py create mode 100644 tests/admin_ordering/tests.py create mode 100644 tests/admin_registration/__init__.py create mode 100644 tests/admin_registration/models.py create mode 100644 tests/admin_registration/tests.py create mode 100644 tests/admin_scripts/__init__.py create mode 100644 tests/admin_scripts/app_with_import/__init__.py create mode 100644 tests/admin_scripts/app_with_import/models.py create mode 100644 tests/admin_scripts/broken_app/__init__.py create mode 100644 tests/admin_scripts/broken_app/models.py create mode 100644 tests/admin_scripts/complex_app/__init__.py create mode 100644 tests/admin_scripts/complex_app/admin/__init__.py create mode 100644 tests/admin_scripts/complex_app/admin/foo.py create mode 100644 tests/admin_scripts/complex_app/models/__init__.py create mode 100644 tests/admin_scripts/complex_app/models/bar.py create mode 100644 tests/admin_scripts/complex_app/models/foo.py create mode 100644 tests/admin_scripts/custom_templates/app_template/__init__.py create mode 100644 tests/admin_scripts/custom_templates/app_template/api.py create mode 100644 tests/admin_scripts/custom_templates/app_template/models.py create mode 100644 tests/admin_scripts/custom_templates/project_template.tgz create mode 100644 tests/admin_scripts/custom_templates/project_template/additional_dir/Procfile create mode 100644 tests/admin_scripts/custom_templates/project_template/additional_dir/additional_file.py create mode 100644 tests/admin_scripts/custom_templates/project_template/additional_dir/extra.py create mode 100644 tests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt create mode 100755 tests/admin_scripts/custom_templates/project_template/manage.py create mode 100644 tests/admin_scripts/custom_templates/project_template/project_name/__init__.py create mode 100644 tests/admin_scripts/custom_templates/project_template/project_name/settings.py create mode 100644 tests/admin_scripts/custom_templates/project_template/ticket-18091-non-ascii-template.txt create mode 100644 tests/admin_scripts/custom_templates/project_template/ticket-19397-binary-file.ico create mode 100644 tests/admin_scripts/management/__init__.py create mode 100644 tests/admin_scripts/management/commands/__init__.py create mode 100644 tests/admin_scripts/management/commands/app_command.py create mode 100644 tests/admin_scripts/management/commands/base_command.py create mode 100644 tests/admin_scripts/management/commands/custom_startproject.py create mode 100644 tests/admin_scripts/management/commands/label_command.py create mode 100644 tests/admin_scripts/management/commands/noargs_command.py create mode 100644 tests/admin_scripts/models.py create mode 100644 tests/admin_scripts/simple_app/__init__.py create mode 100644 tests/admin_scripts/simple_app/models.py create mode 100644 tests/admin_scripts/tests.py create mode 100644 tests/admin_scripts/urls.py create mode 100644 tests/admin_util/__init__.py create mode 100644 tests/admin_util/models.py create mode 100644 tests/admin_util/tests.py create mode 100644 tests/admin_validation/__init__.py create mode 100644 tests/admin_validation/models.py create mode 100644 tests/admin_validation/tests.py create mode 100644 tests/admin_views/__init__.py create mode 100644 tests/admin_views/admin.py create mode 100644 tests/admin_views/customadmin.py create mode 100644 tests/admin_views/fixtures/admin-views-actions.xml create mode 100644 tests/admin_views/fixtures/admin-views-books.xml create mode 100644 tests/admin_views/fixtures/admin-views-colors.xml create mode 100644 tests/admin_views/fixtures/admin-views-fabrics.xml create mode 100644 tests/admin_views/fixtures/admin-views-person.xml create mode 100644 tests/admin_views/fixtures/admin-views-unicode.xml create mode 100644 tests/admin_views/fixtures/admin-views-users.xml create mode 100644 tests/admin_views/fixtures/deleted-objects.xml create mode 100644 tests/admin_views/fixtures/multiple-child-classes.json create mode 100644 tests/admin_views/fixtures/string-primary-key.xml create mode 100644 tests/admin_views/forms.py create mode 100644 tests/admin_views/models.py create mode 100644 tests/admin_views/templates/custom_filter_template.html create mode 100644 tests/admin_views/tests.py create mode 100644 tests/admin_views/urls.py create mode 100644 tests/admin_views/views.py create mode 100644 tests/admin_widgets/__init__.py create mode 100644 tests/admin_widgets/fixtures/admin-widgets-users.xml create mode 100644 tests/admin_widgets/models.py create mode 100644 tests/admin_widgets/tests.py create mode 100644 tests/admin_widgets/urls.py create mode 100644 tests/admin_widgets/widgetadmin.py create mode 100644 tests/aggregation/__init__.py create mode 100644 tests/aggregation/fixtures/aggregation.json create mode 100644 tests/aggregation/models.py create mode 100644 tests/aggregation/tests.py create mode 100644 tests/aggregation_regress/__init__.py create mode 100644 tests/aggregation_regress/fixtures/aggregation_regress.json create mode 100644 tests/aggregation_regress/models.py create mode 100644 tests/aggregation_regress/tests.py create mode 100644 tests/app_loading/__init__.py create mode 100644 tests/app_loading/eggs/brokenapp.egg create mode 100644 tests/app_loading/eggs/modelapp.egg create mode 100644 tests/app_loading/eggs/nomodelapp.egg create mode 100644 tests/app_loading/eggs/omelet.egg create mode 100644 tests/app_loading/models.py create mode 100644 tests/app_loading/not_installed/__init__.py create mode 100644 tests/app_loading/not_installed/models.py create mode 100644 tests/app_loading/tests.py create mode 100644 tests/backends/__init__.py create mode 100644 tests/backends/models.py create mode 100644 tests/backends/tests.py create mode 100644 tests/base/__init__.py create mode 100644 tests/base/models.py create mode 100644 tests/bash_completion/__init__.py create mode 100644 tests/bash_completion/management/__init__.py create mode 100644 tests/bash_completion/management/commands/__init__.py create mode 100644 tests/bash_completion/management/commands/test_command.py create mode 100644 tests/bash_completion/models.py create mode 100644 tests/bash_completion/tests.py create mode 100644 tests/basic/__init__.py create mode 100644 tests/basic/models.py create mode 100644 tests/basic/tests.py create mode 100644 tests/bug639/__init__.py create mode 100644 tests/bug639/models.py create mode 100644 tests/bug639/test.jpg create mode 100644 tests/bug639/tests.py create mode 100644 tests/bug8245/__init__.py create mode 100644 tests/bug8245/admin.py create mode 100644 tests/bug8245/models.py create mode 100644 tests/bug8245/tests.py create mode 100644 tests/builtin_server/__init__.py create mode 100644 tests/builtin_server/models.py create mode 100644 tests/builtin_server/tests.py create mode 100644 tests/bulk_create/__init__.py create mode 100644 tests/bulk_create/models.py create mode 100644 tests/bulk_create/tests.py create mode 100644 tests/cache/__init__.py create mode 100644 tests/cache/closeable_cache.py create mode 100644 tests/cache/liberal_backend.py create mode 100644 tests/cache/models.py create mode 100644 tests/cache/tests.py create mode 100644 tests/choices/__init__.py create mode 100644 tests/choices/models.py create mode 100644 tests/choices/tests.py create mode 100644 tests/commands_sql/__init__.py create mode 100644 tests/commands_sql/models.py create mode 100644 tests/commands_sql/tests.py create mode 100644 tests/comment_tests/__init__.py create mode 100644 tests/comment_tests/custom_comments/__init__.py create mode 100644 tests/comment_tests/custom_comments/forms.py create mode 100644 tests/comment_tests/custom_comments/models.py create mode 100644 tests/comment_tests/custom_comments/views.py create mode 100644 tests/comment_tests/fixtures/comment_tests.json create mode 100644 tests/comment_tests/fixtures/comment_utils.xml create mode 100644 tests/comment_tests/models.py create mode 100644 tests/comment_tests/tests/__init__.py create mode 100644 tests/comment_tests/tests/app_api_tests.py create mode 100644 tests/comment_tests/tests/comment_form_tests.py create mode 100644 tests/comment_tests/tests/comment_utils_moderators_tests.py create mode 100644 tests/comment_tests/tests/comment_view_tests.py create mode 100644 tests/comment_tests/tests/feed_tests.py create mode 100644 tests/comment_tests/tests/model_tests.py create mode 100644 tests/comment_tests/tests/moderation_view_tests.py create mode 100644 tests/comment_tests/tests/templatetag_tests.py create mode 100644 tests/comment_tests/urls.py create mode 100644 tests/comment_tests/urls_admin.py create mode 100644 tests/comment_tests/urls_default.py create mode 100644 tests/conditional_processing/__init__.py create mode 100644 tests/conditional_processing/models.py create mode 100644 tests/conditional_processing/urls.py create mode 100644 tests/conditional_processing/views.py create mode 100644 tests/context_processors/__init__.py create mode 100644 tests/context_processors/models.py create mode 100644 tests/context_processors/templates/context_processors/request_attrs.html create mode 100644 tests/context_processors/tests.py create mode 100644 tests/context_processors/urls.py create mode 100644 tests/context_processors/views.py create mode 100644 tests/createsuperuser/__init__.py create mode 100644 tests/createsuperuser/models.py create mode 100644 tests/createsuperuser/tests.py create mode 100644 tests/csrf_tests/__init__.py create mode 100644 tests/csrf_tests/models.py create mode 100644 tests/csrf_tests/tests.py create mode 100644 tests/custom_columns/__init__.py create mode 100644 tests/custom_columns/models.py create mode 100644 tests/custom_columns/tests.py create mode 100644 tests/custom_columns_regress/__init__.py create mode 100644 tests/custom_columns_regress/models.py create mode 100644 tests/custom_columns_regress/tests.py create mode 100644 tests/custom_managers/__init__.py create mode 100644 tests/custom_managers/models.py create mode 100644 tests/custom_managers/tests.py create mode 100644 tests/custom_managers_regress/__init__.py create mode 100644 tests/custom_managers_regress/models.py create mode 100644 tests/custom_managers_regress/tests.py create mode 100644 tests/custom_methods/__init__.py create mode 100644 tests/custom_methods/models.py create mode 100644 tests/custom_methods/tests.py create mode 100644 tests/custom_pk/__init__.py create mode 100644 tests/custom_pk/fields.py create mode 100644 tests/custom_pk/models.py create mode 100644 tests/custom_pk/tests.py create mode 100644 tests/datatypes/__init__.py create mode 100644 tests/datatypes/models.py create mode 100644 tests/datatypes/tests.py create mode 100644 tests/dates/__init__.py create mode 100644 tests/dates/models.py create mode 100644 tests/dates/tests.py create mode 100644 tests/datetimes/__init__.py create mode 100644 tests/datetimes/models.py create mode 100644 tests/datetimes/tests.py create mode 100644 tests/db_typecasts/__init__.py create mode 100644 tests/db_typecasts/models.py create mode 100644 tests/db_typecasts/tests.py create mode 100644 tests/decorators/__init__.py create mode 100644 tests/decorators/models.py create mode 100644 tests/decorators/tests.py create mode 100644 tests/defaultfilters/__init__.py create mode 100644 tests/defaultfilters/models.py create mode 100644 tests/defaultfilters/tests.py create mode 100644 tests/defer/__init__.py create mode 100644 tests/defer/models.py create mode 100644 tests/defer/tests.py create mode 100644 tests/defer_regress/__init__.py create mode 100644 tests/defer_regress/models.py create mode 100644 tests/defer_regress/tests.py create mode 100644 tests/delete/__init__.py create mode 100644 tests/delete/models.py create mode 100644 tests/delete/tests.py create mode 100644 tests/delete_regress/__init__.py create mode 100644 tests/delete_regress/models.py create mode 100644 tests/delete_regress/tests.py create mode 100644 tests/dispatch/__init__.py create mode 100644 tests/dispatch/models.py create mode 100644 tests/dispatch/tests/__init__.py create mode 100644 tests/dispatch/tests/test_dispatcher.py create mode 100644 tests/dispatch/tests/test_saferef.py create mode 100644 tests/distinct_on_fields/__init__.py create mode 100644 tests/distinct_on_fields/models.py create mode 100644 tests/distinct_on_fields/tests.py create mode 100644 tests/empty/__init__.py create mode 100644 tests/empty/models.py create mode 100644 tests/empty/no_models/__init__.py create mode 100644 tests/empty/no_models/tests.py create mode 100644 tests/empty/tests.py create mode 100644 tests/expressions/__init__.py create mode 100644 tests/expressions/models.py create mode 100644 tests/expressions/tests.py create mode 100644 tests/expressions_regress/__init__.py create mode 100644 tests/expressions_regress/models.py create mode 100644 tests/expressions_regress/tests.py create mode 100644 tests/extra_regress/__init__.py create mode 100644 tests/extra_regress/models.py create mode 100644 tests/extra_regress/tests.py create mode 100644 tests/field_defaults/__init__.py create mode 100644 tests/field_defaults/models.py create mode 100644 tests/field_defaults/tests.py create mode 100644 tests/field_subclassing/__init__.py create mode 100644 tests/field_subclassing/fields.py create mode 100644 tests/field_subclassing/models.py create mode 100644 tests/field_subclassing/tests.py create mode 100644 tests/file_storage/__init__.py create mode 100644 tests/file_storage/magic.png create mode 100644 tests/file_storage/models.py create mode 100644 tests/file_storage/test.png create mode 100644 tests/file_storage/test1.png create mode 100644 tests/file_storage/tests.py create mode 100644 tests/file_uploads/__init__.py create mode 100644 tests/file_uploads/models.py create mode 100644 tests/file_uploads/tests.py create mode 100644 tests/file_uploads/uploadhandler.py create mode 100644 tests/file_uploads/urls.py create mode 100644 tests/file_uploads/views.py create mode 100644 tests/files/__init__.py create mode 100644 tests/files/models.py create mode 100644 tests/files/tests.py create mode 100644 tests/fixtures/__init__.py create mode 100644 tests/fixtures/fixtures/db_fixture_1.default.json create mode 100644 tests/fixtures/fixtures/db_fixture_2.default.json.gz create mode 100644 tests/fixtures/fixtures/db_fixture_3.nosuchdb.json create mode 100644 tests/fixtures/fixtures/fixture1.json create mode 100644 tests/fixtures/fixtures/fixture2.json create mode 100644 tests/fixtures/fixtures/fixture2.xml create mode 100644 tests/fixtures/fixtures/fixture3.xml create mode 100644 tests/fixtures/fixtures/fixture4.json.zip create mode 100644 tests/fixtures/fixtures/fixture5.json.gz create mode 100644 tests/fixtures/fixtures/fixture5.json.zip create mode 100644 tests/fixtures/fixtures/fixture6.json create mode 100644 tests/fixtures/fixtures/fixture7.xml create mode 100644 tests/fixtures/fixtures/fixture8.json create mode 100644 tests/fixtures/fixtures/fixture9.xml create mode 100644 tests/fixtures/fixtures/initial_data.json create mode 100644 tests/fixtures/fixtures/invalid.json create mode 100644 tests/fixtures/models.py create mode 100644 tests/fixtures/tests.py create mode 100644 tests/fixtures_model_package/__init__.py create mode 100644 tests/fixtures_model_package/fixtures/fixture1.json create mode 100644 tests/fixtures_model_package/fixtures/fixture2.json create mode 100644 tests/fixtures_model_package/fixtures/fixture2.xml create mode 100644 tests/fixtures_model_package/fixtures/initial_data.json create mode 100644 tests/fixtures_model_package/models/__init__.py create mode 100644 tests/fixtures_model_package/tests.py create mode 100644 tests/fixtures_regress/__init__.py create mode 100644 tests/fixtures_regress/fixtures/absolute.json create mode 100644 tests/fixtures_regress/fixtures/animal.xml create mode 100644 tests/fixtures_regress/fixtures/bad_fixture1.unkn create mode 100644 tests/fixtures_regress/fixtures/bad_fixture2.xml create mode 100644 tests/fixtures_regress/fixtures/big-fixture.json create mode 100644 tests/fixtures_regress/fixtures/empty.json create mode 100644 tests/fixtures_regress/fixtures/forward_ref.json create mode 100644 tests/fixtures_regress/fixtures/forward_ref_bad_data.json create mode 100644 tests/fixtures_regress/fixtures/forward_ref_lookup.json create mode 100644 tests/fixtures_regress/fixtures/model-inheritance.json create mode 100644 tests/fixtures_regress/fixtures/nk-inheritance.json create mode 100644 tests/fixtures_regress/fixtures/nk-inheritance2.xml create mode 100644 tests/fixtures_regress/fixtures/non_natural_1.json create mode 100644 tests/fixtures_regress/fixtures/non_natural_2.xml create mode 100644 tests/fixtures_regress/fixtures/pretty.xml create mode 100644 tests/fixtures_regress/fixtures/sequence.json create mode 100644 tests/fixtures_regress/fixtures/sequence_extra.json create mode 100644 tests/fixtures_regress/fixtures/thingy.json create mode 100644 tests/fixtures_regress/fixtures_1/forward_ref_1.json create mode 100644 tests/fixtures_regress/fixtures_2/forward_ref_2.json create mode 100644 tests/fixtures_regress/models.py create mode 100644 tests/fixtures_regress/tests.py create mode 100644 tests/force_insert_update/__init__.py create mode 100644 tests/force_insert_update/models.py create mode 100644 tests/force_insert_update/tests.py create mode 100644 tests/forms/__init__.py create mode 100644 tests/forms/models.py create mode 100644 tests/forms/templates/forms/article_form.html create mode 100644 tests/forms/tests/__init__.py create mode 100644 tests/forms/tests/error_messages.py create mode 100644 tests/forms/tests/extra.py create mode 100644 tests/forms/tests/fields.py create mode 100644 tests/forms/tests/filepath_test_files/.dot-file create mode 100644 tests/forms/tests/filepath_test_files/directory/.keep create mode 100644 tests/forms/tests/filepath_test_files/fake-image.jpg create mode 100644 tests/forms/tests/filepath_test_files/real-text-file.txt create mode 100644 tests/forms/tests/forms.py create mode 100644 tests/forms/tests/formsets.py create mode 100644 tests/forms/tests/input_formats.py create mode 100644 tests/forms/tests/media.py create mode 100644 tests/forms/tests/models.py create mode 100644 tests/forms/tests/regressions.py create mode 100644 tests/forms/tests/util.py create mode 100644 tests/forms/tests/validators.py create mode 100644 tests/forms/tests/widgets.py create mode 100644 tests/forms/urls.py create mode 100644 tests/forms/views.py create mode 100644 tests/generic_inline_admin/__init__.py create mode 100644 tests/generic_inline_admin/admin.py create mode 100644 tests/generic_inline_admin/fixtures/users.xml create mode 100644 tests/generic_inline_admin/models.py create mode 100644 tests/generic_inline_admin/tests.py create mode 100644 tests/generic_inline_admin/urls.py create mode 100644 tests/generic_relations/__init__.py create mode 100644 tests/generic_relations/models.py create mode 100644 tests/generic_relations/tests.py create mode 100644 tests/generic_relations_regress/__init__.py create mode 100644 tests/generic_relations_regress/models.py create mode 100644 tests/generic_relations_regress/tests.py create mode 100644 tests/generic_views/__init__.py create mode 100644 tests/generic_views/base.py create mode 100644 tests/generic_views/dates.py create mode 100644 tests/generic_views/detail.py create mode 100644 tests/generic_views/edit.py create mode 100644 tests/generic_views/fixtures/generic-views-test-data.json create mode 100644 tests/generic_views/forms.py create mode 100644 tests/generic_views/list.py create mode 100644 tests/generic_views/models.py create mode 100644 tests/generic_views/templates/generic_views/about.html create mode 100644 tests/generic_views/templates/generic_views/apple_detail.html create mode 100644 tests/generic_views/templates/generic_views/artist_detail.html create mode 100644 tests/generic_views/templates/generic_views/artist_form.html create mode 100644 tests/generic_views/templates/generic_views/author_confirm_delete.html create mode 100644 tests/generic_views/templates/generic_views/author_detail.html create mode 100644 tests/generic_views/templates/generic_views/author_form.html create mode 100644 tests/generic_views/templates/generic_views/author_list.html create mode 100644 tests/generic_views/templates/generic_views/author_objects.html create mode 100644 tests/generic_views/templates/generic_views/author_view.html create mode 100644 tests/generic_views/templates/generic_views/book_archive.html create mode 100644 tests/generic_views/templates/generic_views/book_archive_day.html create mode 100644 tests/generic_views/templates/generic_views/book_archive_month.html create mode 100644 tests/generic_views/templates/generic_views/book_archive_week.html create mode 100644 tests/generic_views/templates/generic_views/book_archive_year.html create mode 100644 tests/generic_views/templates/generic_views/book_detail.html create mode 100644 tests/generic_views/templates/generic_views/book_list.html create mode 100644 tests/generic_views/templates/generic_views/confirm_delete.html create mode 100644 tests/generic_views/templates/generic_views/detail.html create mode 100644 tests/generic_views/templates/generic_views/form.html create mode 100644 tests/generic_views/templates/generic_views/list.html create mode 100644 tests/generic_views/templates/generic_views/page_template.html create mode 100644 tests/generic_views/templates/generic_views/robots.txt create mode 100644 tests/generic_views/templates/registration/login.html create mode 100644 tests/generic_views/tests.py create mode 100644 tests/generic_views/urls.py create mode 100644 tests/generic_views/views.py create mode 100644 tests/get_earliest_or_latest/__init__.py create mode 100644 tests/get_earliest_or_latest/models.py create mode 100644 tests/get_earliest_or_latest/tests.py create mode 100644 tests/get_object_or_404/__init__.py create mode 100644 tests/get_object_or_404/models.py create mode 100644 tests/get_object_or_404/tests.py create mode 100644 tests/get_or_create/__init__.py create mode 100644 tests/get_or_create/models.py create mode 100644 tests/get_or_create/tests.py create mode 100644 tests/get_or_create_regress/__init__.py create mode 100644 tests/get_or_create_regress/models.py create mode 100644 tests/get_or_create_regress/tests.py create mode 100644 tests/handlers/__init__.py create mode 100644 tests/handlers/models.py create mode 100644 tests/handlers/tests.py create mode 100644 tests/handlers/urls.py create mode 100644 tests/http_utils/__init__.py create mode 100644 tests/http_utils/models.py create mode 100644 tests/http_utils/tests.py create mode 100644 tests/httpwrappers/__init__.py create mode 100644 tests/httpwrappers/abc.txt create mode 100644 tests/httpwrappers/models.py create mode 100644 tests/httpwrappers/tests.py create mode 100644 tests/i18n/__init__.py create mode 100644 tests/i18n/commands/__init__.py create mode 100644 tests/i18n/commands/code.sample create mode 100644 tests/i18n/commands/compilation.py create mode 100644 tests/i18n/commands/extraction.py create mode 100644 tests/i18n/commands/ignore_dir/ignored.html create mode 100644 tests/i18n/commands/javascript.js create mode 100644 tests/i18n/commands/locale/es_AR/LC_MESSAGES/django.po create mode 100644 tests/i18n/commands/locale/fr/LC_MESSAGES/django.po create mode 100644 tests/i18n/commands/locale/hr/LC_MESSAGES/django.po create mode 100644 tests/i18n/commands/locale/it/LC_MESSAGES/django.mo create mode 100644 tests/i18n/commands/locale/it/LC_MESSAGES/django.po create mode 100644 tests/i18n/commands/templates/comments.thtml create mode 100644 tests/i18n/commands/templates/template_with_error.tpl create mode 100644 tests/i18n/commands/templates/test.html create mode 100644 tests/i18n/commands/tests.py create mode 100644 tests/i18n/contenttypes/__init__.py create mode 100644 tests/i18n/contenttypes/locale/en/LC_MESSAGES/django.mo create mode 100644 tests/i18n/contenttypes/locale/en/LC_MESSAGES/django.po create mode 100644 tests/i18n/contenttypes/locale/fr/LC_MESSAGES/django.mo create mode 100644 tests/i18n/contenttypes/locale/fr/LC_MESSAGES/django.po create mode 100644 tests/i18n/contenttypes/tests.py create mode 100644 tests/i18n/forms.py create mode 100644 tests/i18n/models.py create mode 100644 tests/i18n/other/__init__.py create mode 100644 tests/i18n/other/locale/__init__.py create mode 100644 tests/i18n/other/locale/de/LC_MESSAGES/django.mo create mode 100644 tests/i18n/other/locale/de/LC_MESSAGES/django.po create mode 100644 tests/i18n/other/locale/de/__init__.py create mode 100644 tests/i18n/other/locale/de/formats.py create mode 100644 tests/i18n/other/locale/fr/LC_MESSAGES/django.mo create mode 100644 tests/i18n/other/locale/fr/LC_MESSAGES/django.po create mode 100644 tests/i18n/patterns/__init__.py create mode 100644 tests/i18n/patterns/locale/en/LC_MESSAGES/django.mo create mode 100644 tests/i18n/patterns/locale/en/LC_MESSAGES/django.po create mode 100644 tests/i18n/patterns/locale/nl/LC_MESSAGES/django.mo create mode 100644 tests/i18n/patterns/locale/nl/LC_MESSAGES/django.po create mode 100644 tests/i18n/patterns/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 tests/i18n/patterns/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 tests/i18n/patterns/templates/404.html create mode 100644 tests/i18n/patterns/templates/dummy.html create mode 100644 tests/i18n/patterns/tests.py create mode 100644 tests/i18n/patterns/urls/__init__.py create mode 100644 tests/i18n/patterns/urls/default.py create mode 100644 tests/i18n/patterns/urls/disabled.py create mode 100644 tests/i18n/patterns/urls/namespace.py create mode 100644 tests/i18n/patterns/urls/path_unused.py create mode 100644 tests/i18n/patterns/urls/wrong.py create mode 100644 tests/i18n/patterns/urls/wrong_namespace.py create mode 100644 tests/i18n/resolution/__init__.py create mode 100644 tests/i18n/resolution/locale/de/LC_MESSAGES/django.mo create mode 100644 tests/i18n/resolution/locale/de/LC_MESSAGES/django.po create mode 100644 tests/i18n/resolution/models.py create mode 100644 tests/i18n/tests.py create mode 100644 tests/indexes/__init__.py create mode 100644 tests/indexes/models.py create mode 100644 tests/indexes/tests.py create mode 100644 tests/initial_sql_regress/__init__.py create mode 100644 tests/initial_sql_regress/models.py create mode 100644 tests/initial_sql_regress/sql/simple.sql create mode 100644 tests/initial_sql_regress/tests.py create mode 100644 tests/inline_formsets/__init__.py create mode 100644 tests/inline_formsets/models.py create mode 100644 tests/inline_formsets/tests.py create mode 100644 tests/inspectdb/__init__.py create mode 100644 tests/inspectdb/models.py create mode 100644 tests/inspectdb/tests.py create mode 100644 tests/introspection/__init__.py create mode 100644 tests/introspection/models.py create mode 100644 tests/introspection/tests.py create mode 100644 tests/invalid_models/__init__.py create mode 100644 tests/invalid_models/invalid_models/__init__.py create mode 100644 tests/invalid_models/invalid_models/models.py create mode 100644 tests/invalid_models/models.py create mode 100644 tests/invalid_models/tests.py create mode 100644 tests/known_related_objects/__init__.py create mode 100644 tests/known_related_objects/fixtures/tournament.json create mode 100644 tests/known_related_objects/models.py create mode 100644 tests/known_related_objects/tests.py create mode 100644 tests/logging_tests/__init__.py create mode 100644 tests/logging_tests/logconfig.py create mode 100644 tests/logging_tests/models.py create mode 100644 tests/logging_tests/tests.py create mode 100644 tests/lookup/__init__.py create mode 100644 tests/lookup/models.py create mode 100644 tests/lookup/tests.py create mode 100644 tests/m2m_and_m2o/__init__.py create mode 100644 tests/m2m_and_m2o/models.py create mode 100644 tests/m2m_and_m2o/tests.py create mode 100644 tests/m2m_intermediary/__init__.py create mode 100644 tests/m2m_intermediary/models.py create mode 100644 tests/m2m_intermediary/tests.py create mode 100644 tests/m2m_multiple/__init__.py create mode 100644 tests/m2m_multiple/models.py create mode 100644 tests/m2m_multiple/tests.py create mode 100644 tests/m2m_recursive/__init__.py create mode 100644 tests/m2m_recursive/models.py create mode 100644 tests/m2m_recursive/tests.py create mode 100644 tests/m2m_regress/__init__.py create mode 100644 tests/m2m_regress/models.py create mode 100644 tests/m2m_regress/tests.py create mode 100644 tests/m2m_signals/__init__.py create mode 100644 tests/m2m_signals/models.py create mode 100644 tests/m2m_signals/tests.py create mode 100644 tests/m2m_through/__init__.py create mode 100644 tests/m2m_through/models.py create mode 100644 tests/m2m_through/tests.py create mode 100644 tests/m2m_through_regress/__init__.py create mode 100644 tests/m2m_through_regress/fixtures/m2m_through.json create mode 100644 tests/m2m_through_regress/models.py create mode 100644 tests/m2m_through_regress/tests.py create mode 100644 tests/m2o_recursive/__init__.py create mode 100644 tests/m2o_recursive/models.py create mode 100644 tests/m2o_recursive/tests.py create mode 100644 tests/mail/__init__.py create mode 100644 tests/mail/custombackend.py create mode 100644 tests/mail/models.py create mode 100644 tests/mail/tests.py create mode 100644 tests/managers_regress/__init__.py create mode 100644 tests/managers_regress/models.py create mode 100644 tests/managers_regress/tests.py create mode 100644 tests/many_to_many/__init__.py create mode 100644 tests/many_to_many/models.py create mode 100644 tests/many_to_many/tests.py create mode 100644 tests/many_to_one/__init__.py create mode 100644 tests/many_to_one/models.py create mode 100644 tests/many_to_one/tests.py create mode 100644 tests/many_to_one_null/__init__.py create mode 100644 tests/many_to_one_null/models.py create mode 100644 tests/many_to_one_null/tests.py create mode 100644 tests/many_to_one_regress/__init__.py create mode 100644 tests/many_to_one_regress/models.py create mode 100644 tests/many_to_one_regress/tests.py create mode 100644 tests/max_lengths/__init__.py create mode 100644 tests/max_lengths/models.py create mode 100644 tests/max_lengths/tests.py create mode 100644 tests/middleware/__init__.py create mode 100644 tests/middleware/cond_get_urls.py create mode 100644 tests/middleware/extra_urls.py create mode 100644 tests/middleware/models.py create mode 100644 tests/middleware/tests.py create mode 100644 tests/middleware/urls.py create mode 100644 tests/middleware_exceptions/__init__.py create mode 100644 tests/middleware_exceptions/models.py create mode 100644 tests/middleware_exceptions/tests.py create mode 100644 tests/middleware_exceptions/urls.py create mode 100644 tests/middleware_exceptions/views.py create mode 100644 tests/model_fields/4x8.png create mode 100644 tests/model_fields/8x4.png create mode 100644 tests/model_fields/__init__.py create mode 100644 tests/model_fields/imagefield.py create mode 100644 tests/model_fields/models.py create mode 100644 tests/model_fields/tests.py create mode 100644 tests/model_forms/__init__.py create mode 100644 tests/model_forms/models.py create mode 100644 tests/model_forms/test.png create mode 100644 tests/model_forms/test2.png create mode 100644 tests/model_forms/tests.py create mode 100644 tests/model_forms_regress/__init__.py create mode 100644 tests/model_forms_regress/models.py create mode 100644 tests/model_forms_regress/tests.py create mode 100644 tests/model_formsets/__init__.py create mode 100644 tests/model_formsets/models.py create mode 100644 tests/model_formsets/tests.py create mode 100644 tests/model_formsets_regress/__init__.py create mode 100644 tests/model_formsets_regress/models.py create mode 100644 tests/model_formsets_regress/tests.py create mode 100644 tests/model_inheritance/__init__.py create mode 100644 tests/model_inheritance/models.py create mode 100644 tests/model_inheritance/tests.py create mode 100644 tests/model_inheritance_regress/__init__.py create mode 100644 tests/model_inheritance_regress/models.py create mode 100644 tests/model_inheritance_regress/tests.py create mode 100644 tests/model_inheritance_same_model_name/__init__.py create mode 100644 tests/model_inheritance_same_model_name/models.py create mode 100644 tests/model_inheritance_same_model_name/tests.py create mode 100644 tests/model_inheritance_select_related/__init__.py create mode 100644 tests/model_inheritance_select_related/models.py create mode 100644 tests/model_inheritance_select_related/tests.py create mode 100644 tests/model_package/__init__.py create mode 100644 tests/model_package/models/__init__.py create mode 100644 tests/model_package/models/article.py create mode 100644 tests/model_package/models/publication.py create mode 100644 tests/model_package/tests.py create mode 100644 tests/model_permalink/__init__.py create mode 100644 tests/model_permalink/models.py create mode 100644 tests/model_permalink/tests.py create mode 100644 tests/model_permalink/urls.py create mode 100644 tests/model_regress/__init__.py create mode 100644 tests/model_regress/models.py create mode 100644 tests/model_regress/tests.py create mode 100644 tests/modeladmin/__init__.py create mode 100644 tests/modeladmin/models.py create mode 100644 tests/modeladmin/tests.py delete mode 100644 tests/modeltests/aggregation/__init__.py delete mode 100644 tests/modeltests/aggregation/fixtures/aggregation.json delete mode 100644 tests/modeltests/aggregation/models.py delete mode 100644 tests/modeltests/aggregation/tests.py delete mode 100644 tests/modeltests/base/__init__.py delete mode 100644 tests/modeltests/base/models.py delete mode 100644 tests/modeltests/basic/__init__.py delete mode 100644 tests/modeltests/basic/models.py delete mode 100644 tests/modeltests/basic/tests.py delete mode 100644 tests/modeltests/choices/__init__.py delete mode 100644 tests/modeltests/choices/models.py delete mode 100644 tests/modeltests/choices/tests.py delete mode 100644 tests/modeltests/custom_columns/__init__.py delete mode 100644 tests/modeltests/custom_columns/models.py delete mode 100644 tests/modeltests/custom_columns/tests.py delete mode 100644 tests/modeltests/custom_managers/__init__.py delete mode 100644 tests/modeltests/custom_managers/models.py delete mode 100644 tests/modeltests/custom_managers/tests.py delete mode 100644 tests/modeltests/custom_methods/__init__.py delete mode 100644 tests/modeltests/custom_methods/models.py delete mode 100644 tests/modeltests/custom_methods/tests.py delete mode 100644 tests/modeltests/custom_pk/__init__.py delete mode 100644 tests/modeltests/custom_pk/fields.py delete mode 100644 tests/modeltests/custom_pk/models.py delete mode 100644 tests/modeltests/custom_pk/tests.py delete mode 100644 tests/modeltests/defer/__init__.py delete mode 100644 tests/modeltests/defer/models.py delete mode 100644 tests/modeltests/defer/tests.py delete mode 100644 tests/modeltests/delete/__init__.py delete mode 100644 tests/modeltests/delete/models.py delete mode 100644 tests/modeltests/delete/tests.py delete mode 100644 tests/modeltests/distinct_on_fields/__init__.py delete mode 100644 tests/modeltests/distinct_on_fields/models.py delete mode 100644 tests/modeltests/distinct_on_fields/tests.py delete mode 100644 tests/modeltests/empty/__init__.py delete mode 100644 tests/modeltests/empty/models.py delete mode 100644 tests/modeltests/empty/no_models/__init__.py delete mode 100644 tests/modeltests/empty/no_models/tests.py delete mode 100644 tests/modeltests/empty/tests.py delete mode 100644 tests/modeltests/expressions/__init__.py delete mode 100644 tests/modeltests/expressions/models.py delete mode 100644 tests/modeltests/expressions/tests.py delete mode 100644 tests/modeltests/field_defaults/__init__.py delete mode 100644 tests/modeltests/field_defaults/models.py delete mode 100644 tests/modeltests/field_defaults/tests.py delete mode 100644 tests/modeltests/field_subclassing/__init__.py delete mode 100644 tests/modeltests/field_subclassing/fields.py delete mode 100644 tests/modeltests/field_subclassing/models.py delete mode 100644 tests/modeltests/field_subclassing/tests.py delete mode 100644 tests/modeltests/files/__init__.py delete mode 100644 tests/modeltests/files/models.py delete mode 100644 tests/modeltests/files/tests.py delete mode 100644 tests/modeltests/fixtures/__init__.py delete mode 100644 tests/modeltests/fixtures/fixtures/db_fixture_1.default.json delete mode 100644 tests/modeltests/fixtures/fixtures/db_fixture_2.default.json.gz delete mode 100644 tests/modeltests/fixtures/fixtures/db_fixture_3.nosuchdb.json delete mode 100644 tests/modeltests/fixtures/fixtures/fixture1.json delete mode 100644 tests/modeltests/fixtures/fixtures/fixture2.json delete mode 100644 tests/modeltests/fixtures/fixtures/fixture2.xml delete mode 100644 tests/modeltests/fixtures/fixtures/fixture3.xml delete mode 100644 tests/modeltests/fixtures/fixtures/fixture4.json.zip delete mode 100644 tests/modeltests/fixtures/fixtures/fixture5.json.gz delete mode 100644 tests/modeltests/fixtures/fixtures/fixture5.json.zip delete mode 100644 tests/modeltests/fixtures/fixtures/fixture6.json delete mode 100644 tests/modeltests/fixtures/fixtures/fixture7.xml delete mode 100644 tests/modeltests/fixtures/fixtures/fixture8.json delete mode 100644 tests/modeltests/fixtures/fixtures/fixture9.xml delete mode 100644 tests/modeltests/fixtures/fixtures/initial_data.json delete mode 100644 tests/modeltests/fixtures/fixtures/invalid.json delete mode 100644 tests/modeltests/fixtures/models.py delete mode 100644 tests/modeltests/fixtures/tests.py delete mode 100644 tests/modeltests/fixtures_model_package/__init__.py delete mode 100644 tests/modeltests/fixtures_model_package/fixtures/fixture1.json delete mode 100644 tests/modeltests/fixtures_model_package/fixtures/fixture2.json delete mode 100644 tests/modeltests/fixtures_model_package/fixtures/fixture2.xml delete mode 100644 tests/modeltests/fixtures_model_package/fixtures/initial_data.json delete mode 100644 tests/modeltests/fixtures_model_package/models/__init__.py delete mode 100644 tests/modeltests/fixtures_model_package/tests.py delete mode 100644 tests/modeltests/force_insert_update/__init__.py delete mode 100644 tests/modeltests/force_insert_update/models.py delete mode 100644 tests/modeltests/force_insert_update/tests.py delete mode 100644 tests/modeltests/generic_relations/__init__.py delete mode 100644 tests/modeltests/generic_relations/models.py delete mode 100644 tests/modeltests/generic_relations/tests.py delete mode 100644 tests/modeltests/get_earliest_or_latest/__init__.py delete mode 100644 tests/modeltests/get_earliest_or_latest/models.py delete mode 100644 tests/modeltests/get_earliest_or_latest/tests.py delete mode 100644 tests/modeltests/get_object_or_404/__init__.py delete mode 100644 tests/modeltests/get_object_or_404/models.py delete mode 100644 tests/modeltests/get_object_or_404/tests.py delete mode 100644 tests/modeltests/get_or_create/__init__.py delete mode 100644 tests/modeltests/get_or_create/models.py delete mode 100644 tests/modeltests/get_or_create/tests.py delete mode 100644 tests/modeltests/invalid_models/__init__.py delete mode 100644 tests/modeltests/invalid_models/invalid_models/__init__.py delete mode 100644 tests/modeltests/invalid_models/invalid_models/models.py delete mode 100644 tests/modeltests/invalid_models/models.py delete mode 100644 tests/modeltests/invalid_models/tests.py delete mode 100644 tests/modeltests/known_related_objects/__init__.py delete mode 100644 tests/modeltests/known_related_objects/fixtures/tournament.json delete mode 100644 tests/modeltests/known_related_objects/models.py delete mode 100644 tests/modeltests/known_related_objects/tests.py delete mode 100644 tests/modeltests/lookup/__init__.py delete mode 100644 tests/modeltests/lookup/models.py delete mode 100644 tests/modeltests/lookup/tests.py delete mode 100644 tests/modeltests/m2m_and_m2o/__init__.py delete mode 100644 tests/modeltests/m2m_and_m2o/models.py delete mode 100644 tests/modeltests/m2m_and_m2o/tests.py delete mode 100644 tests/modeltests/m2m_intermediary/__init__.py delete mode 100644 tests/modeltests/m2m_intermediary/models.py delete mode 100644 tests/modeltests/m2m_intermediary/tests.py delete mode 100644 tests/modeltests/m2m_multiple/__init__.py delete mode 100644 tests/modeltests/m2m_multiple/models.py delete mode 100644 tests/modeltests/m2m_multiple/tests.py delete mode 100644 tests/modeltests/m2m_recursive/__init__.py delete mode 100644 tests/modeltests/m2m_recursive/models.py delete mode 100644 tests/modeltests/m2m_recursive/tests.py delete mode 100644 tests/modeltests/m2m_signals/__init__.py delete mode 100644 tests/modeltests/m2m_signals/models.py delete mode 100644 tests/modeltests/m2m_signals/tests.py delete mode 100644 tests/modeltests/m2m_through/__init__.py delete mode 100644 tests/modeltests/m2m_through/models.py delete mode 100644 tests/modeltests/m2m_through/tests.py delete mode 100644 tests/modeltests/m2o_recursive/__init__.py delete mode 100644 tests/modeltests/m2o_recursive/models.py delete mode 100644 tests/modeltests/m2o_recursive/tests.py delete mode 100644 tests/modeltests/many_to_many/__init__.py delete mode 100644 tests/modeltests/many_to_many/models.py delete mode 100644 tests/modeltests/many_to_many/tests.py delete mode 100644 tests/modeltests/many_to_one/__init__.py delete mode 100644 tests/modeltests/many_to_one/models.py delete mode 100644 tests/modeltests/many_to_one/tests.py delete mode 100644 tests/modeltests/many_to_one_null/__init__.py delete mode 100644 tests/modeltests/many_to_one_null/models.py delete mode 100644 tests/modeltests/many_to_one_null/tests.py delete mode 100644 tests/modeltests/model_forms/__init__.py delete mode 100644 tests/modeltests/model_forms/models.py delete mode 100644 tests/modeltests/model_forms/test.png delete mode 100644 tests/modeltests/model_forms/test2.png delete mode 100644 tests/modeltests/model_forms/tests.py delete mode 100644 tests/modeltests/model_formsets/__init__.py delete mode 100644 tests/modeltests/model_formsets/models.py delete mode 100644 tests/modeltests/model_formsets/tests.py delete mode 100644 tests/modeltests/model_inheritance/__init__.py delete mode 100644 tests/modeltests/model_inheritance/models.py delete mode 100644 tests/modeltests/model_inheritance/tests.py delete mode 100644 tests/modeltests/model_inheritance_same_model_name/__init__.py delete mode 100644 tests/modeltests/model_inheritance_same_model_name/models.py delete mode 100644 tests/modeltests/model_inheritance_same_model_name/tests.py delete mode 100644 tests/modeltests/model_package/__init__.py delete mode 100644 tests/modeltests/model_package/models/__init__.py delete mode 100644 tests/modeltests/model_package/models/article.py delete mode 100644 tests/modeltests/model_package/models/publication.py delete mode 100644 tests/modeltests/model_package/tests.py delete mode 100644 tests/modeltests/mutually_referential/__init__.py delete mode 100644 tests/modeltests/mutually_referential/models.py delete mode 100644 tests/modeltests/mutually_referential/tests.py delete mode 100644 tests/modeltests/one_to_one/__init__.py delete mode 100644 tests/modeltests/one_to_one/models.py delete mode 100644 tests/modeltests/one_to_one/tests.py delete mode 100644 tests/modeltests/or_lookups/__init__.py delete mode 100644 tests/modeltests/or_lookups/models.py delete mode 100644 tests/modeltests/or_lookups/tests.py delete mode 100644 tests/modeltests/order_with_respect_to/__init__.py delete mode 100644 tests/modeltests/order_with_respect_to/models.py delete mode 100644 tests/modeltests/order_with_respect_to/tests.py delete mode 100644 tests/modeltests/ordering/__init__.py delete mode 100644 tests/modeltests/ordering/models.py delete mode 100644 tests/modeltests/ordering/tests.py delete mode 100644 tests/modeltests/prefetch_related/__init__.py delete mode 100644 tests/modeltests/prefetch_related/models.py delete mode 100644 tests/modeltests/prefetch_related/tests.py delete mode 100644 tests/modeltests/properties/__init__.py delete mode 100644 tests/modeltests/properties/models.py delete mode 100644 tests/modeltests/properties/tests.py delete mode 100644 tests/modeltests/proxy_model_inheritance/__init__.py delete mode 100644 tests/modeltests/proxy_model_inheritance/app1/__init__.py delete mode 100644 tests/modeltests/proxy_model_inheritance/app1/models.py delete mode 100644 tests/modeltests/proxy_model_inheritance/app2/__init__.py delete mode 100644 tests/modeltests/proxy_model_inheritance/app2/models.py delete mode 100644 tests/modeltests/proxy_model_inheritance/models.py delete mode 100644 tests/modeltests/proxy_model_inheritance/tests.py delete mode 100644 tests/modeltests/proxy_models/__init__.py delete mode 100644 tests/modeltests/proxy_models/fixtures/myhorses.json delete mode 100644 tests/modeltests/proxy_models/fixtures/mypeople.json delete mode 100644 tests/modeltests/proxy_models/models.py delete mode 100644 tests/modeltests/proxy_models/tests.py delete mode 100644 tests/modeltests/raw_query/__init__.py delete mode 100644 tests/modeltests/raw_query/fixtures/raw_query_books.json delete mode 100644 tests/modeltests/raw_query/models.py delete mode 100644 tests/modeltests/raw_query/tests.py delete mode 100644 tests/modeltests/reserved_names/__init__.py delete mode 100644 tests/modeltests/reserved_names/models.py delete mode 100644 tests/modeltests/reserved_names/tests.py delete mode 100644 tests/modeltests/reverse_lookup/__init__.py delete mode 100644 tests/modeltests/reverse_lookup/models.py delete mode 100644 tests/modeltests/reverse_lookup/tests.py delete mode 100644 tests/modeltests/save_delete_hooks/__init__.py delete mode 100644 tests/modeltests/save_delete_hooks/models.py delete mode 100644 tests/modeltests/save_delete_hooks/tests.py delete mode 100644 tests/modeltests/select_for_update/__init__.py delete mode 100644 tests/modeltests/select_for_update/models.py delete mode 100644 tests/modeltests/select_for_update/tests.py delete mode 100644 tests/modeltests/select_related/__init__.py delete mode 100644 tests/modeltests/select_related/models.py delete mode 100644 tests/modeltests/select_related/tests.py delete mode 100644 tests/modeltests/serializers/__init__.py delete mode 100644 tests/modeltests/serializers/models.py delete mode 100644 tests/modeltests/serializers/tests.py delete mode 100644 tests/modeltests/signals/__init__.py delete mode 100644 tests/modeltests/signals/models.py delete mode 100644 tests/modeltests/signals/tests.py delete mode 100644 tests/modeltests/str/__init__.py delete mode 100644 tests/modeltests/str/models.py delete mode 100644 tests/modeltests/str/tests.py delete mode 100644 tests/modeltests/tablespaces/__init__.py delete mode 100644 tests/modeltests/tablespaces/models.py delete mode 100644 tests/modeltests/tablespaces/tests.py delete mode 100644 tests/modeltests/test_client/__init__.py delete mode 100644 tests/modeltests/test_client/fixtures/testdata.json delete mode 100644 tests/modeltests/test_client/models.py delete mode 100644 tests/modeltests/test_client/tests.py delete mode 100644 tests/modeltests/test_client/urls.py delete mode 100644 tests/modeltests/test_client/views.py delete mode 100644 tests/modeltests/timezones/__init__.py delete mode 100644 tests/modeltests/timezones/admin.py delete mode 100644 tests/modeltests/timezones/fixtures/tz_users.xml delete mode 100644 tests/modeltests/timezones/forms.py delete mode 100644 tests/modeltests/timezones/models.py delete mode 100644 tests/modeltests/timezones/tests.py delete mode 100644 tests/modeltests/timezones/urls.py delete mode 100644 tests/modeltests/transactions/__init__.py delete mode 100644 tests/modeltests/transactions/models.py delete mode 100644 tests/modeltests/transactions/tests.py delete mode 100644 tests/modeltests/unmanaged_models/__init__.py delete mode 100644 tests/modeltests/unmanaged_models/models.py delete mode 100644 tests/modeltests/unmanaged_models/tests.py delete mode 100644 tests/modeltests/update/__init__.py delete mode 100644 tests/modeltests/update/models.py delete mode 100644 tests/modeltests/update/tests.py delete mode 100644 tests/modeltests/update_only_fields/__init__.py delete mode 100644 tests/modeltests/update_only_fields/models.py delete mode 100644 tests/modeltests/update_only_fields/tests.py delete mode 100644 tests/modeltests/user_commands/__init__.py delete mode 100644 tests/modeltests/user_commands/management/__init__.py delete mode 100644 tests/modeltests/user_commands/management/commands/__init__.py delete mode 100644 tests/modeltests/user_commands/management/commands/dance.py delete mode 100644 tests/modeltests/user_commands/management/commands/leave_locale_alone_false.py delete mode 100644 tests/modeltests/user_commands/management/commands/leave_locale_alone_true.py delete mode 100644 tests/modeltests/user_commands/models.py delete mode 100644 tests/modeltests/user_commands/tests.py delete mode 100644 tests/modeltests/validation/__init__.py delete mode 100644 tests/modeltests/validation/models.py delete mode 100644 tests/modeltests/validation/test_custom_messages.py delete mode 100644 tests/modeltests/validation/test_error_messages.py delete mode 100644 tests/modeltests/validation/test_unique.py delete mode 100644 tests/modeltests/validation/tests.py delete mode 100644 tests/modeltests/validation/validators.py delete mode 100644 tests/modeltests/validators/__init__.py delete mode 100644 tests/modeltests/validators/models.py delete mode 100644 tests/modeltests/validators/tests.py create mode 100644 tests/multiple_database/__init__.py create mode 100644 tests/multiple_database/fixtures/multidb-common.json create mode 100644 tests/multiple_database/fixtures/multidb.default.json create mode 100644 tests/multiple_database/fixtures/multidb.other.json create mode 100644 tests/multiple_database/fixtures/pets.json create mode 100644 tests/multiple_database/models.py create mode 100644 tests/multiple_database/tests.py create mode 100644 tests/mutually_referential/__init__.py create mode 100644 tests/mutually_referential/models.py create mode 100644 tests/mutually_referential/tests.py create mode 100644 tests/nested_foreign_keys/__init__.py create mode 100644 tests/nested_foreign_keys/models.py create mode 100644 tests/nested_foreign_keys/tests.py create mode 100644 tests/null_fk/__init__.py create mode 100644 tests/null_fk/models.py create mode 100644 tests/null_fk/tests.py create mode 100644 tests/null_fk_ordering/__init__.py create mode 100644 tests/null_fk_ordering/models.py create mode 100644 tests/null_fk_ordering/tests.py create mode 100644 tests/null_queries/__init__.py create mode 100644 tests/null_queries/models.py create mode 100644 tests/null_queries/tests.py create mode 100644 tests/one_to_one/__init__.py create mode 100644 tests/one_to_one/models.py create mode 100644 tests/one_to_one/tests.py create mode 100644 tests/one_to_one_regress/__init__.py create mode 100644 tests/one_to_one_regress/models.py create mode 100644 tests/one_to_one_regress/tests.py create mode 100644 tests/or_lookups/__init__.py create mode 100644 tests/or_lookups/models.py create mode 100644 tests/or_lookups/tests.py create mode 100644 tests/order_with_respect_to/__init__.py create mode 100644 tests/order_with_respect_to/models.py create mode 100644 tests/order_with_respect_to/tests.py create mode 100644 tests/ordering/__init__.py create mode 100644 tests/ordering/models.py create mode 100644 tests/ordering/tests.py create mode 100644 tests/pagination/__init__.py create mode 100644 tests/pagination/custom.py create mode 100644 tests/pagination/models.py create mode 100644 tests/pagination/tests.py create mode 100644 tests/prefetch_related/__init__.py create mode 100644 tests/prefetch_related/models.py create mode 100644 tests/prefetch_related/tests.py create mode 100644 tests/properties/__init__.py create mode 100644 tests/properties/models.py create mode 100644 tests/properties/tests.py create mode 100644 tests/proxy_model_inheritance/__init__.py create mode 100644 tests/proxy_model_inheritance/app1/__init__.py create mode 100644 tests/proxy_model_inheritance/app1/models.py create mode 100644 tests/proxy_model_inheritance/app2/__init__.py create mode 100644 tests/proxy_model_inheritance/app2/models.py create mode 100644 tests/proxy_model_inheritance/models.py create mode 100644 tests/proxy_model_inheritance/tests.py create mode 100644 tests/proxy_models/__init__.py create mode 100644 tests/proxy_models/fixtures/myhorses.json create mode 100644 tests/proxy_models/fixtures/mypeople.json create mode 100644 tests/proxy_models/models.py create mode 100644 tests/proxy_models/tests.py create mode 100644 tests/queries/__init__.py create mode 100644 tests/queries/models.py create mode 100644 tests/queries/tests.py create mode 100644 tests/queryset_pickle/__init__.py create mode 100644 tests/queryset_pickle/models.py create mode 100644 tests/queryset_pickle/tests.py create mode 100644 tests/raw_query/__init__.py create mode 100644 tests/raw_query/fixtures/raw_query_books.json create mode 100644 tests/raw_query/models.py create mode 100644 tests/raw_query/tests.py delete mode 100644 tests/regressiontests/admin_changelist/__init__.py delete mode 100644 tests/regressiontests/admin_changelist/admin.py delete mode 100644 tests/regressiontests/admin_changelist/models.py delete mode 100644 tests/regressiontests/admin_changelist/tests.py delete mode 100644 tests/regressiontests/admin_changelist/urls.py delete mode 100644 tests/regressiontests/admin_custom_urls/__init__.py delete mode 100644 tests/regressiontests/admin_custom_urls/fixtures/actions.json delete mode 100644 tests/regressiontests/admin_custom_urls/fixtures/users.json delete mode 100644 tests/regressiontests/admin_custom_urls/models.py delete mode 100644 tests/regressiontests/admin_custom_urls/tests.py delete mode 100644 tests/regressiontests/admin_custom_urls/urls.py delete mode 100644 tests/regressiontests/admin_filters/__init__.py delete mode 100644 tests/regressiontests/admin_filters/models.py delete mode 100644 tests/regressiontests/admin_filters/tests.py delete mode 100644 tests/regressiontests/admin_inlines/__init__.py delete mode 100644 tests/regressiontests/admin_inlines/admin.py delete mode 100644 tests/regressiontests/admin_inlines/fixtures/admin-views-users.xml delete mode 100644 tests/regressiontests/admin_inlines/models.py delete mode 100644 tests/regressiontests/admin_inlines/tests.py delete mode 100644 tests/regressiontests/admin_inlines/urls.py delete mode 100644 tests/regressiontests/admin_ordering/__init__.py delete mode 100644 tests/regressiontests/admin_ordering/models.py delete mode 100644 tests/regressiontests/admin_ordering/tests.py delete mode 100644 tests/regressiontests/admin_registration/__init__.py delete mode 100644 tests/regressiontests/admin_registration/models.py delete mode 100644 tests/regressiontests/admin_registration/tests.py delete mode 100644 tests/regressiontests/admin_scripts/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/app_with_import/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/app_with_import/models.py delete mode 100644 tests/regressiontests/admin_scripts/broken_app/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/broken_app/models.py delete mode 100644 tests/regressiontests/admin_scripts/complex_app/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/complex_app/admin/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/complex_app/admin/foo.py delete mode 100644 tests/regressiontests/admin_scripts/complex_app/models/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/complex_app/models/bar.py delete mode 100644 tests/regressiontests/admin_scripts/complex_app/models/foo.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/app_template/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/app_template/api.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/app_template/models.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template.tgz delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/Procfile delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/additional_file.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/extra.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt delete mode 100755 tests/regressiontests/admin_scripts/custom_templates/project_template/manage.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/project_name/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/project_name/settings.py delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/ticket-18091-non-ascii-template.txt delete mode 100644 tests/regressiontests/admin_scripts/custom_templates/project_template/ticket-19397-binary-file.ico delete mode 100644 tests/regressiontests/admin_scripts/management/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/management/commands/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/management/commands/app_command.py delete mode 100644 tests/regressiontests/admin_scripts/management/commands/base_command.py delete mode 100644 tests/regressiontests/admin_scripts/management/commands/custom_startproject.py delete mode 100644 tests/regressiontests/admin_scripts/management/commands/label_command.py delete mode 100644 tests/regressiontests/admin_scripts/management/commands/noargs_command.py delete mode 100644 tests/regressiontests/admin_scripts/models.py delete mode 100644 tests/regressiontests/admin_scripts/simple_app/__init__.py delete mode 100644 tests/regressiontests/admin_scripts/simple_app/models.py delete mode 100644 tests/regressiontests/admin_scripts/tests.py delete mode 100644 tests/regressiontests/admin_scripts/urls.py delete mode 100644 tests/regressiontests/admin_util/__init__.py delete mode 100644 tests/regressiontests/admin_util/models.py delete mode 100644 tests/regressiontests/admin_util/tests.py delete mode 100644 tests/regressiontests/admin_validation/__init__.py delete mode 100644 tests/regressiontests/admin_validation/models.py delete mode 100644 tests/regressiontests/admin_validation/tests.py delete mode 100644 tests/regressiontests/admin_views/__init__.py delete mode 100644 tests/regressiontests/admin_views/admin.py delete mode 100644 tests/regressiontests/admin_views/customadmin.py delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-actions.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-books.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-colors.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-person.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-unicode.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-users.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/deleted-objects.xml delete mode 100644 tests/regressiontests/admin_views/fixtures/multiple-child-classes.json delete mode 100644 tests/regressiontests/admin_views/fixtures/string-primary-key.xml delete mode 100644 tests/regressiontests/admin_views/forms.py delete mode 100644 tests/regressiontests/admin_views/models.py delete mode 100644 tests/regressiontests/admin_views/templates/custom_filter_template.html delete mode 100644 tests/regressiontests/admin_views/tests.py delete mode 100644 tests/regressiontests/admin_views/urls.py delete mode 100644 tests/regressiontests/admin_views/views.py delete mode 100644 tests/regressiontests/admin_widgets/__init__.py delete mode 100644 tests/regressiontests/admin_widgets/fixtures/admin-widgets-users.xml delete mode 100644 tests/regressiontests/admin_widgets/models.py delete mode 100644 tests/regressiontests/admin_widgets/tests.py delete mode 100644 tests/regressiontests/admin_widgets/urls.py delete mode 100644 tests/regressiontests/admin_widgets/widgetadmin.py delete mode 100644 tests/regressiontests/aggregation_regress/__init__.py delete mode 100644 tests/regressiontests/aggregation_regress/fixtures/aggregation_regress.json delete mode 100644 tests/regressiontests/aggregation_regress/models.py delete mode 100644 tests/regressiontests/aggregation_regress/tests.py delete mode 100644 tests/regressiontests/app_loading/__init__.py delete mode 100644 tests/regressiontests/app_loading/eggs/brokenapp.egg delete mode 100644 tests/regressiontests/app_loading/eggs/modelapp.egg delete mode 100644 tests/regressiontests/app_loading/eggs/nomodelapp.egg delete mode 100644 tests/regressiontests/app_loading/eggs/omelet.egg delete mode 100644 tests/regressiontests/app_loading/models.py delete mode 100644 tests/regressiontests/app_loading/not_installed/__init__.py delete mode 100644 tests/regressiontests/app_loading/not_installed/models.py delete mode 100644 tests/regressiontests/app_loading/tests.py delete mode 100644 tests/regressiontests/backends/__init__.py delete mode 100644 tests/regressiontests/backends/models.py delete mode 100644 tests/regressiontests/backends/tests.py delete mode 100644 tests/regressiontests/bash_completion/__init__.py delete mode 100644 tests/regressiontests/bash_completion/management/__init__.py delete mode 100644 tests/regressiontests/bash_completion/management/commands/__init__.py delete mode 100644 tests/regressiontests/bash_completion/management/commands/test_command.py delete mode 100644 tests/regressiontests/bash_completion/models.py delete mode 100644 tests/regressiontests/bash_completion/tests.py delete mode 100644 tests/regressiontests/bug639/__init__.py delete mode 100644 tests/regressiontests/bug639/models.py delete mode 100644 tests/regressiontests/bug639/test.jpg delete mode 100644 tests/regressiontests/bug639/tests.py delete mode 100644 tests/regressiontests/bug8245/__init__.py delete mode 100644 tests/regressiontests/bug8245/admin.py delete mode 100644 tests/regressiontests/bug8245/models.py delete mode 100644 tests/regressiontests/bug8245/tests.py delete mode 100644 tests/regressiontests/builtin_server/__init__.py delete mode 100644 tests/regressiontests/builtin_server/models.py delete mode 100644 tests/regressiontests/builtin_server/tests.py delete mode 100644 tests/regressiontests/bulk_create/__init__.py delete mode 100644 tests/regressiontests/bulk_create/models.py delete mode 100644 tests/regressiontests/bulk_create/tests.py delete mode 100644 tests/regressiontests/cache/__init__.py delete mode 100644 tests/regressiontests/cache/closeable_cache.py delete mode 100644 tests/regressiontests/cache/liberal_backend.py delete mode 100644 tests/regressiontests/cache/models.py delete mode 100644 tests/regressiontests/cache/tests.py delete mode 100644 tests/regressiontests/commands_sql/__init__.py delete mode 100644 tests/regressiontests/commands_sql/models.py delete mode 100644 tests/regressiontests/commands_sql/tests.py delete mode 100644 tests/regressiontests/comment_tests/__init__.py delete mode 100644 tests/regressiontests/comment_tests/custom_comments/__init__.py delete mode 100644 tests/regressiontests/comment_tests/custom_comments/forms.py delete mode 100644 tests/regressiontests/comment_tests/custom_comments/models.py delete mode 100644 tests/regressiontests/comment_tests/custom_comments/views.py delete mode 100644 tests/regressiontests/comment_tests/fixtures/comment_tests.json delete mode 100644 tests/regressiontests/comment_tests/fixtures/comment_utils.xml delete mode 100644 tests/regressiontests/comment_tests/models.py delete mode 100644 tests/regressiontests/comment_tests/tests/__init__.py delete mode 100644 tests/regressiontests/comment_tests/tests/app_api_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/comment_form_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/comment_utils_moderators_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/comment_view_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/feed_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/model_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/moderation_view_tests.py delete mode 100644 tests/regressiontests/comment_tests/tests/templatetag_tests.py delete mode 100644 tests/regressiontests/comment_tests/urls.py delete mode 100644 tests/regressiontests/comment_tests/urls_admin.py delete mode 100644 tests/regressiontests/comment_tests/urls_default.py delete mode 100644 tests/regressiontests/conditional_processing/__init__.py delete mode 100644 tests/regressiontests/conditional_processing/models.py delete mode 100644 tests/regressiontests/conditional_processing/urls.py delete mode 100644 tests/regressiontests/conditional_processing/views.py delete mode 100644 tests/regressiontests/context_processors/__init__.py delete mode 100644 tests/regressiontests/context_processors/models.py delete mode 100644 tests/regressiontests/context_processors/templates/context_processors/request_attrs.html delete mode 100644 tests/regressiontests/context_processors/tests.py delete mode 100644 tests/regressiontests/context_processors/urls.py delete mode 100644 tests/regressiontests/context_processors/views.py delete mode 100644 tests/regressiontests/createsuperuser/__init__.py delete mode 100644 tests/regressiontests/createsuperuser/models.py delete mode 100644 tests/regressiontests/createsuperuser/tests.py delete mode 100644 tests/regressiontests/csrf_tests/__init__.py delete mode 100644 tests/regressiontests/csrf_tests/models.py delete mode 100644 tests/regressiontests/csrf_tests/tests.py delete mode 100644 tests/regressiontests/custom_columns_regress/__init__.py delete mode 100644 tests/regressiontests/custom_columns_regress/models.py delete mode 100644 tests/regressiontests/custom_columns_regress/tests.py delete mode 100644 tests/regressiontests/custom_managers_regress/__init__.py delete mode 100644 tests/regressiontests/custom_managers_regress/models.py delete mode 100644 tests/regressiontests/custom_managers_regress/tests.py delete mode 100644 tests/regressiontests/datatypes/__init__.py delete mode 100644 tests/regressiontests/datatypes/models.py delete mode 100644 tests/regressiontests/datatypes/tests.py delete mode 100644 tests/regressiontests/dates/__init__.py delete mode 100644 tests/regressiontests/dates/models.py delete mode 100644 tests/regressiontests/dates/tests.py delete mode 100644 tests/regressiontests/datetimes/__init__.py delete mode 100644 tests/regressiontests/datetimes/models.py delete mode 100644 tests/regressiontests/datetimes/tests.py delete mode 100644 tests/regressiontests/db_typecasts/__init__.py delete mode 100644 tests/regressiontests/db_typecasts/models.py delete mode 100644 tests/regressiontests/db_typecasts/tests.py delete mode 100644 tests/regressiontests/decorators/__init__.py delete mode 100644 tests/regressiontests/decorators/models.py delete mode 100644 tests/regressiontests/decorators/tests.py delete mode 100644 tests/regressiontests/defaultfilters/__init__.py delete mode 100644 tests/regressiontests/defaultfilters/models.py delete mode 100644 tests/regressiontests/defaultfilters/tests.py delete mode 100644 tests/regressiontests/defer_regress/__init__.py delete mode 100644 tests/regressiontests/defer_regress/models.py delete mode 100644 tests/regressiontests/defer_regress/tests.py delete mode 100644 tests/regressiontests/delete_regress/__init__.py delete mode 100644 tests/regressiontests/delete_regress/models.py delete mode 100644 tests/regressiontests/delete_regress/tests.py delete mode 100644 tests/regressiontests/dispatch/__init__.py delete mode 100644 tests/regressiontests/dispatch/models.py delete mode 100644 tests/regressiontests/dispatch/tests/__init__.py delete mode 100644 tests/regressiontests/dispatch/tests/test_dispatcher.py delete mode 100644 tests/regressiontests/dispatch/tests/test_saferef.py delete mode 100644 tests/regressiontests/expressions_regress/__init__.py delete mode 100644 tests/regressiontests/expressions_regress/models.py delete mode 100644 tests/regressiontests/expressions_regress/tests.py delete mode 100644 tests/regressiontests/extra_regress/__init__.py delete mode 100644 tests/regressiontests/extra_regress/models.py delete mode 100644 tests/regressiontests/extra_regress/tests.py delete mode 100644 tests/regressiontests/file_storage/__init__.py delete mode 100644 tests/regressiontests/file_storage/magic.png delete mode 100644 tests/regressiontests/file_storage/models.py delete mode 100644 tests/regressiontests/file_storage/test.png delete mode 100644 tests/regressiontests/file_storage/test1.png delete mode 100644 tests/regressiontests/file_storage/tests.py delete mode 100644 tests/regressiontests/file_uploads/__init__.py delete mode 100644 tests/regressiontests/file_uploads/models.py delete mode 100644 tests/regressiontests/file_uploads/tests.py delete mode 100644 tests/regressiontests/file_uploads/uploadhandler.py delete mode 100644 tests/regressiontests/file_uploads/urls.py delete mode 100644 tests/regressiontests/file_uploads/views.py delete mode 100644 tests/regressiontests/fixtures_regress/__init__.py delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/absolute.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/animal.xml delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/bad_fixture1.unkn delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/bad_fixture2.xml delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/big-fixture.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/empty.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/forward_ref.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/forward_ref_bad_data.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/model-inheritance.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/nk-inheritance.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/nk-inheritance2.xml delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/non_natural_1.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/non_natural_2.xml delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/pretty.xml delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/sequence.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/sequence_extra.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures/thingy.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures_1/forward_ref_1.json delete mode 100644 tests/regressiontests/fixtures_regress/fixtures_2/forward_ref_2.json delete mode 100644 tests/regressiontests/fixtures_regress/models.py delete mode 100644 tests/regressiontests/fixtures_regress/tests.py delete mode 100644 tests/regressiontests/forms/__init__.py delete mode 100644 tests/regressiontests/forms/models.py delete mode 100644 tests/regressiontests/forms/templates/forms/article_form.html delete mode 100644 tests/regressiontests/forms/tests/__init__.py delete mode 100644 tests/regressiontests/forms/tests/error_messages.py delete mode 100644 tests/regressiontests/forms/tests/extra.py delete mode 100644 tests/regressiontests/forms/tests/fields.py delete mode 100644 tests/regressiontests/forms/tests/filepath_test_files/.dot-file delete mode 100644 tests/regressiontests/forms/tests/filepath_test_files/directory/.keep delete mode 100644 tests/regressiontests/forms/tests/filepath_test_files/fake-image.jpg delete mode 100644 tests/regressiontests/forms/tests/filepath_test_files/real-text-file.txt delete mode 100644 tests/regressiontests/forms/tests/forms.py delete mode 100644 tests/regressiontests/forms/tests/formsets.py delete mode 100644 tests/regressiontests/forms/tests/input_formats.py delete mode 100644 tests/regressiontests/forms/tests/media.py delete mode 100644 tests/regressiontests/forms/tests/models.py delete mode 100644 tests/regressiontests/forms/tests/regressions.py delete mode 100644 tests/regressiontests/forms/tests/util.py delete mode 100644 tests/regressiontests/forms/tests/validators.py delete mode 100644 tests/regressiontests/forms/tests/widgets.py delete mode 100644 tests/regressiontests/forms/urls.py delete mode 100644 tests/regressiontests/forms/views.py delete mode 100644 tests/regressiontests/generic_inline_admin/__init__.py delete mode 100644 tests/regressiontests/generic_inline_admin/admin.py delete mode 100644 tests/regressiontests/generic_inline_admin/fixtures/users.xml delete mode 100644 tests/regressiontests/generic_inline_admin/models.py delete mode 100644 tests/regressiontests/generic_inline_admin/tests.py delete mode 100644 tests/regressiontests/generic_inline_admin/urls.py delete mode 100644 tests/regressiontests/generic_relations_regress/__init__.py delete mode 100644 tests/regressiontests/generic_relations_regress/models.py delete mode 100644 tests/regressiontests/generic_relations_regress/tests.py delete mode 100644 tests/regressiontests/generic_views/__init__.py delete mode 100644 tests/regressiontests/generic_views/base.py delete mode 100644 tests/regressiontests/generic_views/dates.py delete mode 100644 tests/regressiontests/generic_views/detail.py delete mode 100644 tests/regressiontests/generic_views/edit.py delete mode 100644 tests/regressiontests/generic_views/fixtures/generic-views-test-data.json delete mode 100644 tests/regressiontests/generic_views/forms.py delete mode 100644 tests/regressiontests/generic_views/list.py delete mode 100644 tests/regressiontests/generic_views/models.py delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/about.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/apple_detail.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/artist_detail.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/artist_form.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/author_confirm_delete.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/author_detail.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/author_form.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/author_list.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/author_objects.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/author_view.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_archive.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_archive_day.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_archive_month.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_archive_week.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_archive_year.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_detail.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/book_list.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/confirm_delete.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/detail.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/form.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/list.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/page_template.html delete mode 100644 tests/regressiontests/generic_views/templates/generic_views/robots.txt delete mode 100644 tests/regressiontests/generic_views/templates/registration/login.html delete mode 100644 tests/regressiontests/generic_views/tests.py delete mode 100644 tests/regressiontests/generic_views/urls.py delete mode 100644 tests/regressiontests/generic_views/views.py delete mode 100644 tests/regressiontests/get_or_create_regress/__init__.py delete mode 100644 tests/regressiontests/get_or_create_regress/models.py delete mode 100644 tests/regressiontests/get_or_create_regress/tests.py delete mode 100644 tests/regressiontests/handlers/__init__.py delete mode 100644 tests/regressiontests/handlers/models.py delete mode 100644 tests/regressiontests/handlers/tests.py delete mode 100644 tests/regressiontests/handlers/urls.py delete mode 100644 tests/regressiontests/http_utils/__init__.py delete mode 100644 tests/regressiontests/http_utils/models.py delete mode 100644 tests/regressiontests/http_utils/tests.py delete mode 100644 tests/regressiontests/httpwrappers/__init__.py delete mode 100644 tests/regressiontests/httpwrappers/abc.txt delete mode 100644 tests/regressiontests/httpwrappers/models.py delete mode 100644 tests/regressiontests/httpwrappers/tests.py delete mode 100644 tests/regressiontests/i18n/__init__.py delete mode 100644 tests/regressiontests/i18n/commands/__init__.py delete mode 100644 tests/regressiontests/i18n/commands/code.sample delete mode 100644 tests/regressiontests/i18n/commands/compilation.py delete mode 100644 tests/regressiontests/i18n/commands/extraction.py delete mode 100644 tests/regressiontests/i18n/commands/ignore_dir/ignored.html delete mode 100644 tests/regressiontests/i18n/commands/javascript.js delete mode 100644 tests/regressiontests/i18n/commands/locale/es_AR/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/commands/locale/fr/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/commands/locale/hr/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/commands/locale/it/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/commands/locale/it/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/commands/templates/comments.thtml delete mode 100644 tests/regressiontests/i18n/commands/templates/template_with_error.tpl delete mode 100644 tests/regressiontests/i18n/commands/templates/test.html delete mode 100644 tests/regressiontests/i18n/commands/tests.py delete mode 100644 tests/regressiontests/i18n/contenttypes/__init__.py delete mode 100644 tests/regressiontests/i18n/contenttypes/locale/en/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/contenttypes/locale/en/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/contenttypes/locale/fr/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/contenttypes/locale/fr/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/contenttypes/tests.py delete mode 100644 tests/regressiontests/i18n/forms.py delete mode 100644 tests/regressiontests/i18n/models.py delete mode 100644 tests/regressiontests/i18n/other/__init__.py delete mode 100644 tests/regressiontests/i18n/other/locale/__init__.py delete mode 100644 tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/other/locale/de/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/other/locale/de/__init__.py delete mode 100644 tests/regressiontests/i18n/other/locale/de/formats.py delete mode 100644 tests/regressiontests/i18n/other/locale/fr/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/other/locale/fr/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/patterns/__init__.py delete mode 100644 tests/regressiontests/i18n/patterns/locale/en/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/patterns/locale/en/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/patterns/locale/nl/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/patterns/locale/nl/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/patterns/locale/pt_BR/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/patterns/locale/pt_BR/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/patterns/templates/404.html delete mode 100644 tests/regressiontests/i18n/patterns/templates/dummy.html delete mode 100644 tests/regressiontests/i18n/patterns/tests.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/__init__.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/default.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/disabled.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/namespace.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/path_unused.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/wrong.py delete mode 100644 tests/regressiontests/i18n/patterns/urls/wrong_namespace.py delete mode 100644 tests/regressiontests/i18n/resolution/__init__.py delete mode 100644 tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.mo delete mode 100644 tests/regressiontests/i18n/resolution/locale/de/LC_MESSAGES/django.po delete mode 100644 tests/regressiontests/i18n/resolution/models.py delete mode 100644 tests/regressiontests/i18n/tests.py delete mode 100644 tests/regressiontests/indexes/__init__.py delete mode 100644 tests/regressiontests/indexes/models.py delete mode 100644 tests/regressiontests/indexes/tests.py delete mode 100644 tests/regressiontests/initial_sql_regress/__init__.py delete mode 100644 tests/regressiontests/initial_sql_regress/models.py delete mode 100644 tests/regressiontests/initial_sql_regress/sql/simple.sql delete mode 100644 tests/regressiontests/initial_sql_regress/tests.py delete mode 100644 tests/regressiontests/inline_formsets/__init__.py delete mode 100644 tests/regressiontests/inline_formsets/models.py delete mode 100644 tests/regressiontests/inline_formsets/tests.py delete mode 100644 tests/regressiontests/inspectdb/__init__.py delete mode 100644 tests/regressiontests/inspectdb/models.py delete mode 100644 tests/regressiontests/inspectdb/tests.py delete mode 100644 tests/regressiontests/introspection/__init__.py delete mode 100644 tests/regressiontests/introspection/models.py delete mode 100644 tests/regressiontests/introspection/tests.py delete mode 100644 tests/regressiontests/logging_tests/__init__.py delete mode 100644 tests/regressiontests/logging_tests/logconfig.py delete mode 100644 tests/regressiontests/logging_tests/models.py delete mode 100644 tests/regressiontests/logging_tests/tests.py delete mode 100644 tests/regressiontests/m2m_regress/__init__.py delete mode 100644 tests/regressiontests/m2m_regress/models.py delete mode 100644 tests/regressiontests/m2m_regress/tests.py delete mode 100644 tests/regressiontests/m2m_through_regress/__init__.py delete mode 100644 tests/regressiontests/m2m_through_regress/fixtures/m2m_through.json delete mode 100644 tests/regressiontests/m2m_through_regress/models.py delete mode 100644 tests/regressiontests/m2m_through_regress/tests.py delete mode 100644 tests/regressiontests/mail/__init__.py delete mode 100644 tests/regressiontests/mail/custombackend.py delete mode 100644 tests/regressiontests/mail/models.py delete mode 100644 tests/regressiontests/mail/tests.py delete mode 100644 tests/regressiontests/managers_regress/__init__.py delete mode 100644 tests/regressiontests/managers_regress/models.py delete mode 100644 tests/regressiontests/managers_regress/tests.py delete mode 100644 tests/regressiontests/many_to_one_regress/__init__.py delete mode 100644 tests/regressiontests/many_to_one_regress/models.py delete mode 100644 tests/regressiontests/many_to_one_regress/tests.py delete mode 100644 tests/regressiontests/max_lengths/__init__.py delete mode 100644 tests/regressiontests/max_lengths/models.py delete mode 100644 tests/regressiontests/max_lengths/tests.py delete mode 100644 tests/regressiontests/middleware/__init__.py delete mode 100644 tests/regressiontests/middleware/cond_get_urls.py delete mode 100644 tests/regressiontests/middleware/extra_urls.py delete mode 100644 tests/regressiontests/middleware/models.py delete mode 100644 tests/regressiontests/middleware/tests.py delete mode 100644 tests/regressiontests/middleware/urls.py delete mode 100644 tests/regressiontests/middleware_exceptions/__init__.py delete mode 100644 tests/regressiontests/middleware_exceptions/models.py delete mode 100644 tests/regressiontests/middleware_exceptions/tests.py delete mode 100644 tests/regressiontests/middleware_exceptions/urls.py delete mode 100644 tests/regressiontests/middleware_exceptions/views.py delete mode 100644 tests/regressiontests/model_fields/4x8.png delete mode 100644 tests/regressiontests/model_fields/8x4.png delete mode 100644 tests/regressiontests/model_fields/__init__.py delete mode 100644 tests/regressiontests/model_fields/imagefield.py delete mode 100644 tests/regressiontests/model_fields/models.py delete mode 100644 tests/regressiontests/model_fields/tests.py delete mode 100644 tests/regressiontests/model_forms_regress/__init__.py delete mode 100644 tests/regressiontests/model_forms_regress/models.py delete mode 100644 tests/regressiontests/model_forms_regress/tests.py delete mode 100644 tests/regressiontests/model_formsets_regress/__init__.py delete mode 100644 tests/regressiontests/model_formsets_regress/models.py delete mode 100644 tests/regressiontests/model_formsets_regress/tests.py delete mode 100644 tests/regressiontests/model_inheritance_regress/__init__.py delete mode 100644 tests/regressiontests/model_inheritance_regress/models.py delete mode 100644 tests/regressiontests/model_inheritance_regress/tests.py delete mode 100644 tests/regressiontests/model_inheritance_select_related/__init__.py delete mode 100644 tests/regressiontests/model_inheritance_select_related/models.py delete mode 100644 tests/regressiontests/model_inheritance_select_related/tests.py delete mode 100644 tests/regressiontests/model_permalink/__init__.py delete mode 100644 tests/regressiontests/model_permalink/models.py delete mode 100644 tests/regressiontests/model_permalink/tests.py delete mode 100644 tests/regressiontests/model_permalink/urls.py delete mode 100644 tests/regressiontests/model_regress/__init__.py delete mode 100644 tests/regressiontests/model_regress/models.py delete mode 100644 tests/regressiontests/model_regress/tests.py delete mode 100644 tests/regressiontests/modeladmin/__init__.py delete mode 100644 tests/regressiontests/modeladmin/models.py delete mode 100644 tests/regressiontests/modeladmin/tests.py delete mode 100644 tests/regressiontests/multiple_database/__init__.py delete mode 100644 tests/regressiontests/multiple_database/fixtures/multidb-common.json delete mode 100644 tests/regressiontests/multiple_database/fixtures/multidb.default.json delete mode 100644 tests/regressiontests/multiple_database/fixtures/multidb.other.json delete mode 100644 tests/regressiontests/multiple_database/fixtures/pets.json delete mode 100644 tests/regressiontests/multiple_database/models.py delete mode 100644 tests/regressiontests/multiple_database/tests.py delete mode 100644 tests/regressiontests/nested_foreign_keys/__init__.py delete mode 100644 tests/regressiontests/nested_foreign_keys/models.py delete mode 100644 tests/regressiontests/nested_foreign_keys/tests.py delete mode 100644 tests/regressiontests/null_fk/__init__.py delete mode 100644 tests/regressiontests/null_fk/models.py delete mode 100644 tests/regressiontests/null_fk/tests.py delete mode 100644 tests/regressiontests/null_fk_ordering/__init__.py delete mode 100644 tests/regressiontests/null_fk_ordering/models.py delete mode 100644 tests/regressiontests/null_fk_ordering/tests.py delete mode 100644 tests/regressiontests/null_queries/__init__.py delete mode 100644 tests/regressiontests/null_queries/models.py delete mode 100644 tests/regressiontests/null_queries/tests.py delete mode 100644 tests/regressiontests/one_to_one_regress/__init__.py delete mode 100644 tests/regressiontests/one_to_one_regress/models.py delete mode 100644 tests/regressiontests/one_to_one_regress/tests.py delete mode 100644 tests/regressiontests/pagination/__init__.py delete mode 100644 tests/regressiontests/pagination/custom.py delete mode 100644 tests/regressiontests/pagination/models.py delete mode 100644 tests/regressiontests/pagination/tests.py delete mode 100644 tests/regressiontests/queries/__init__.py delete mode 100644 tests/regressiontests/queries/models.py delete mode 100644 tests/regressiontests/queries/tests.py delete mode 100644 tests/regressiontests/queryset_pickle/__init__.py delete mode 100644 tests/regressiontests/queryset_pickle/models.py delete mode 100644 tests/regressiontests/queryset_pickle/tests.py delete mode 100644 tests/regressiontests/requests/__init__.py delete mode 100644 tests/regressiontests/requests/models.py delete mode 100644 tests/regressiontests/requests/tests.py delete mode 100644 tests/regressiontests/resolve_url/__init__.py delete mode 100644 tests/regressiontests/resolve_url/models.py delete mode 100644 tests/regressiontests/resolve_url/tests.py delete mode 100644 tests/regressiontests/reverse_single_related/__init__.py delete mode 100644 tests/regressiontests/reverse_single_related/models.py delete mode 100644 tests/regressiontests/reverse_single_related/tests.py delete mode 100644 tests/regressiontests/select_related_onetoone/__init__.py delete mode 100644 tests/regressiontests/select_related_onetoone/models.py delete mode 100644 tests/regressiontests/select_related_onetoone/tests.py delete mode 100644 tests/regressiontests/select_related_regress/__init__.py delete mode 100644 tests/regressiontests/select_related_regress/models.py delete mode 100644 tests/regressiontests/select_related_regress/tests.py delete mode 100644 tests/regressiontests/serializers_regress/__init__.py delete mode 100644 tests/regressiontests/serializers_regress/models.py delete mode 100644 tests/regressiontests/serializers_regress/tests.py delete mode 100644 tests/regressiontests/servers/__init__.py delete mode 100644 tests/regressiontests/servers/fixtures/testdata.json delete mode 100644 tests/regressiontests/servers/media/example_media_file.txt delete mode 100644 tests/regressiontests/servers/models.py delete mode 100644 tests/regressiontests/servers/static/example_static_file.txt delete mode 100644 tests/regressiontests/servers/tests.py delete mode 100644 tests/regressiontests/servers/urls.py delete mode 100644 tests/regressiontests/servers/views.py delete mode 100644 tests/regressiontests/settings_tests/__init__.py delete mode 100644 tests/regressiontests/settings_tests/models.py delete mode 100644 tests/regressiontests/settings_tests/tests.py delete mode 100644 tests/regressiontests/signals_regress/__init__.py delete mode 100644 tests/regressiontests/signals_regress/models.py delete mode 100644 tests/regressiontests/signals_regress/tests.py delete mode 100644 tests/regressiontests/signed_cookies_tests/__init__.py delete mode 100644 tests/regressiontests/signed_cookies_tests/models.py delete mode 100644 tests/regressiontests/signed_cookies_tests/tests.py delete mode 100644 tests/regressiontests/signing/__init__.py delete mode 100644 tests/regressiontests/signing/models.py delete mode 100644 tests/regressiontests/signing/tests.py delete mode 100644 tests/regressiontests/sites_framework/__init__.py delete mode 100644 tests/regressiontests/sites_framework/models.py delete mode 100644 tests/regressiontests/sites_framework/tests.py delete mode 100644 tests/regressiontests/special_headers/__init__.py delete mode 100644 tests/regressiontests/special_headers/fixtures/data.xml delete mode 100644 tests/regressiontests/special_headers/models.py delete mode 100644 tests/regressiontests/special_headers/templates/special_headers/article_detail.html delete mode 100644 tests/regressiontests/special_headers/tests.py delete mode 100644 tests/regressiontests/special_headers/urls.py delete mode 100644 tests/regressiontests/special_headers/views.py delete mode 100644 tests/regressiontests/staticfiles_tests/__init__.py delete mode 100644 tests/regressiontests/staticfiles_tests/apps/__init__.py delete mode 100644 tests/regressiontests/staticfiles_tests/apps/no_label/__init__.py delete mode 100644 tests/regressiontests/staticfiles_tests/apps/no_label/models.py delete mode 100644 tests/regressiontests/staticfiles_tests/apps/no_label/static/file2.txt delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/__init__.py delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/models.py delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/otherdir/odfile.txt delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/static/test/CVS delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/static/test/file.txt delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/static/test/file1.txt delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/static/test/nonascii.css delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/static/test/test.ignoreme delete mode 100644 tests/regressiontests/staticfiles_tests/apps/test/static/test/window.png delete mode 100644 tests/regressiontests/staticfiles_tests/models.py delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/absolute.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/css/fonts/font.eot delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/css/fonts/font.svg delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/css/fragments.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/css/ignored.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/css/img/window.png delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/css/window.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/denorm.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/img/relative.png delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/import.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/other.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/relative.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/styles.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/styles_insensitive.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/cached/url.css delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/subdir/test.txt delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/test.txt delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/test/camelCase.txt delete mode 100644 tests/regressiontests/staticfiles_tests/project/documents/test/file.txt delete mode 100644 tests/regressiontests/staticfiles_tests/project/prefixed/test.txt delete mode 100644 tests/regressiontests/staticfiles_tests/project/site_media/media/media-file.txt delete mode 100644 tests/regressiontests/staticfiles_tests/project/site_media/static/testfile.txt delete mode 100644 tests/regressiontests/staticfiles_tests/storage.py delete mode 100644 tests/regressiontests/staticfiles_tests/tests.py delete mode 100644 tests/regressiontests/staticfiles_tests/urls/__init__.py delete mode 100644 tests/regressiontests/staticfiles_tests/urls/default.py delete mode 100644 tests/regressiontests/staticfiles_tests/urls/helper.py delete mode 100644 tests/regressiontests/string_lookup/__init__.py delete mode 100644 tests/regressiontests/string_lookup/models.py delete mode 100644 tests/regressiontests/string_lookup/tests.py delete mode 100644 tests/regressiontests/swappable_models/__init__.py delete mode 100644 tests/regressiontests/swappable_models/models.py delete mode 100644 tests/regressiontests/swappable_models/tests.py delete mode 100644 tests/regressiontests/syndication/__init__.py delete mode 100644 tests/regressiontests/syndication/feeds.py delete mode 100644 tests/regressiontests/syndication/fixtures/feeddata.json delete mode 100644 tests/regressiontests/syndication/models.py delete mode 100644 tests/regressiontests/syndication/templates/syndication/description.html delete mode 100644 tests/regressiontests/syndication/templates/syndication/description_context.html delete mode 100644 tests/regressiontests/syndication/templates/syndication/title.html delete mode 100644 tests/regressiontests/syndication/templates/syndication/title_context.html delete mode 100644 tests/regressiontests/syndication/tests.py delete mode 100644 tests/regressiontests/syndication/urls.py delete mode 100644 tests/regressiontests/templates/__init__.py delete mode 100644 tests/regressiontests/templates/alternate_urls.py delete mode 100644 tests/regressiontests/templates/callables.py delete mode 100644 tests/regressiontests/templates/context.py delete mode 100644 tests/regressiontests/templates/custom.py delete mode 100644 tests/regressiontests/templates/eggs/tagsegg.egg delete mode 100644 tests/regressiontests/templates/filters.py delete mode 100644 tests/regressiontests/templates/loaders.py delete mode 100644 tests/regressiontests/templates/models.py delete mode 100644 tests/regressiontests/templates/nodelist.py delete mode 100644 tests/regressiontests/templates/parser.py delete mode 100644 tests/regressiontests/templates/response.py delete mode 100644 tests/regressiontests/templates/smartif.py delete mode 100644 tests/regressiontests/templates/templates/broken_base.html delete mode 100644 tests/regressiontests/templates/templates/first/test.html delete mode 100644 tests/regressiontests/templates/templates/inclusion.html delete mode 100644 tests/regressiontests/templates/templates/response.html delete mode 100644 tests/regressiontests/templates/templates/second/test.html delete mode 100644 tests/regressiontests/templates/templates/ssi include with spaces.html delete mode 100644 tests/regressiontests/templates/templates/ssi_include.html delete mode 100644 tests/regressiontests/templates/templates/test_context.html delete mode 100644 tests/regressiontests/templates/templates/test_extends_error.html delete mode 100644 tests/regressiontests/templates/templates/test_incl_tag_current_app.html delete mode 100644 tests/regressiontests/templates/templates/test_incl_tag_use_l10n.html delete mode 100644 tests/regressiontests/templates/templates/test_include_error.html delete mode 100644 tests/regressiontests/templates/templatetags/__init__.py delete mode 100644 tests/regressiontests/templates/templatetags/bad_tag.py delete mode 100644 tests/regressiontests/templates/templatetags/broken_tag.py delete mode 100644 tests/regressiontests/templates/templatetags/custom.py delete mode 100644 tests/regressiontests/templates/templatetags/subpackage/__init__.py delete mode 100644 tests/regressiontests/templates/templatetags/subpackage/echo.py delete mode 100644 tests/regressiontests/templates/templatetags/subpackage/echo_invalid.py delete mode 100644 tests/regressiontests/templates/tests.py delete mode 100644 tests/regressiontests/templates/unicode.py delete mode 100644 tests/regressiontests/templates/urls.py delete mode 100644 tests/regressiontests/templates/views.py delete mode 100644 tests/regressiontests/test_client_regress/__init__.py delete mode 100644 tests/regressiontests/test_client_regress/bad_templates/404.html delete mode 100644 tests/regressiontests/test_client_regress/fixtures/testdata.json delete mode 100644 tests/regressiontests/test_client_regress/models.py delete mode 100644 tests/regressiontests/test_client_regress/session.py delete mode 100644 tests/regressiontests/test_client_regress/templates/request_context.html delete mode 100644 tests/regressiontests/test_client_regress/templates/unicode.html delete mode 100644 tests/regressiontests/test_client_regress/tests.py delete mode 100644 tests/regressiontests/test_client_regress/urls.py delete mode 100644 tests/regressiontests/test_client_regress/views.py delete mode 100644 tests/regressiontests/test_runner/__init__.py delete mode 100644 tests/regressiontests/test_runner/deprecation_app/__init__.py delete mode 100644 tests/regressiontests/test_runner/deprecation_app/models.py delete mode 100644 tests/regressiontests/test_runner/deprecation_app/tests.py delete mode 100644 tests/regressiontests/test_runner/invalid_app/__init__.py delete mode 100644 tests/regressiontests/test_runner/invalid_app/models/__init__.py delete mode 100644 tests/regressiontests/test_runner/invalid_app/tests/__init__.py delete mode 100644 tests/regressiontests/test_runner/models.py delete mode 100644 tests/regressiontests/test_runner/tests.py delete mode 100644 tests/regressiontests/test_runner/valid_app/__init__.py delete mode 100644 tests/regressiontests/test_runner/valid_app/models/__init__.py delete mode 100644 tests/regressiontests/test_runner/valid_app/tests/__init__.py delete mode 100644 tests/regressiontests/test_utils/__init__.py delete mode 100644 tests/regressiontests/test_utils/fixtures/should_not_be_loaded.json delete mode 100644 tests/regressiontests/test_utils/models.py delete mode 100644 tests/regressiontests/test_utils/templates/template_used/alternative.html delete mode 100644 tests/regressiontests/test_utils/templates/template_used/base.html delete mode 100644 tests/regressiontests/test_utils/templates/template_used/extends.html delete mode 100644 tests/regressiontests/test_utils/templates/template_used/include.html delete mode 100644 tests/regressiontests/test_utils/tests.py delete mode 100644 tests/regressiontests/test_utils/urls.py delete mode 100644 tests/regressiontests/test_utils/views.py delete mode 100644 tests/regressiontests/text/__init__.py delete mode 100644 tests/regressiontests/text/models.py delete mode 100644 tests/regressiontests/text/tests.py delete mode 100644 tests/regressiontests/transactions_regress/__init__.py delete mode 100644 tests/regressiontests/transactions_regress/models.py delete mode 100644 tests/regressiontests/transactions_regress/tests.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/__init__.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/erroneous_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/erroneous_views_module.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/extra_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/included_named_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/included_named_urls2.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/included_namespace_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/included_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/included_urls2.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/middleware.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/models.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/named_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/namespace_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/no_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/reverse_lazy_urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/tests.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/urlconf_inner.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/urlconf_outer.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/urls.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/urls_error_handlers.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/urls_error_handlers_callables.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/urls_without_full_import.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/views.py delete mode 100644 tests/regressiontests/urlpatterns_reverse/views_broken.py delete mode 100644 tests/regressiontests/utils/__init__.py delete mode 100644 tests/regressiontests/utils/archive.py delete mode 100644 tests/regressiontests/utils/archives/foobar.tar delete mode 100644 tests/regressiontests/utils/archives/foobar.tar.bz2 delete mode 100644 tests/regressiontests/utils/archives/foobar.tar.gz delete mode 100644 tests/regressiontests/utils/archives/foobar.zip delete mode 100644 tests/regressiontests/utils/baseconv.py delete mode 100644 tests/regressiontests/utils/checksums.py delete mode 100644 tests/regressiontests/utils/crypto.py delete mode 100644 tests/regressiontests/utils/datastructures.py delete mode 100644 tests/regressiontests/utils/dateformat.py delete mode 100644 tests/regressiontests/utils/dateparse.py delete mode 100644 tests/regressiontests/utils/datetime_safe.py delete mode 100644 tests/regressiontests/utils/decorators.py delete mode 100644 tests/regressiontests/utils/eggs/test_egg.egg delete mode 100644 tests/regressiontests/utils/encoding.py delete mode 100644 tests/regressiontests/utils/feedgenerator.py delete mode 100644 tests/regressiontests/utils/functional.py delete mode 100644 tests/regressiontests/utils/html.py delete mode 100644 tests/regressiontests/utils/http.py delete mode 100644 tests/regressiontests/utils/ipv6.py delete mode 100644 tests/regressiontests/utils/jslex.py delete mode 100644 tests/regressiontests/utils/models.py delete mode 100644 tests/regressiontests/utils/module_loading.py delete mode 100644 tests/regressiontests/utils/numberformat.py delete mode 100644 tests/regressiontests/utils/os_utils.py delete mode 100644 tests/regressiontests/utils/regex_helper.py delete mode 100644 tests/regressiontests/utils/simplelazyobject.py delete mode 100644 tests/regressiontests/utils/termcolors.py delete mode 100644 tests/regressiontests/utils/test_module/__init__.py delete mode 100644 tests/regressiontests/utils/test_module/bad_module.py delete mode 100644 tests/regressiontests/utils/test_module/good_module.py delete mode 100644 tests/regressiontests/utils/test_no_submodule.py delete mode 100644 tests/regressiontests/utils/tests.py delete mode 100644 tests/regressiontests/utils/text.py delete mode 100644 tests/regressiontests/utils/timesince.py delete mode 100644 tests/regressiontests/utils/timezone.py delete mode 100644 tests/regressiontests/utils/tzinfo.py delete mode 100644 tests/regressiontests/version/__init__.py delete mode 100644 tests/regressiontests/version/models.py delete mode 100644 tests/regressiontests/version/tests.py delete mode 100644 tests/regressiontests/views/__init__.py delete mode 100644 tests/regressiontests/views/app0/__init__.py delete mode 100644 tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/app0/locale/en/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/app1/__init__.py delete mode 100644 tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/app1/locale/fr/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/app2/__init__.py delete mode 100644 tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/app2/locale/fr/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/app3/__init__.py delete mode 100644 tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/app4/__init__.py delete mode 100644 tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/fixtures/testdata.json delete mode 100644 tests/regressiontests/views/generic_urls.py delete mode 100644 tests/regressiontests/views/locale/de/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/locale/de/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/locale/es/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/locale/fr/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.mo delete mode 100644 tests/regressiontests/views/locale/ru/LC_MESSAGES/djangojs.po delete mode 100644 tests/regressiontests/views/media/file.txt delete mode 100644 tests/regressiontests/views/media/file.txt.gz delete mode 100644 tests/regressiontests/views/media/file.unknown delete mode 100644 tests/regressiontests/views/models.py delete mode 100644 tests/regressiontests/views/templates/debug/render_test.html delete mode 100644 tests/regressiontests/views/templates/debug/template_exception.html delete mode 100644 tests/regressiontests/views/templates/jsi18n.html delete mode 100644 tests/regressiontests/views/templatetags/__init__.py delete mode 100644 tests/regressiontests/views/templatetags/debugtags.py delete mode 100644 tests/regressiontests/views/tests/__init__.py delete mode 100644 tests/regressiontests/views/tests/debug.py delete mode 100644 tests/regressiontests/views/tests/defaults.py delete mode 100644 tests/regressiontests/views/tests/i18n.py delete mode 100644 tests/regressiontests/views/tests/shortcuts.py delete mode 100644 tests/regressiontests/views/tests/specials.py delete mode 100644 tests/regressiontests/views/tests/static.py delete mode 100644 tests/regressiontests/views/urls.py delete mode 100644 tests/regressiontests/views/views.py delete mode 100644 tests/regressiontests/wsgi/__init__.py delete mode 100644 tests/regressiontests/wsgi/models.py delete mode 100644 tests/regressiontests/wsgi/tests.py delete mode 100644 tests/regressiontests/wsgi/urls.py delete mode 100644 tests/regressiontests/wsgi/wsgi.py create mode 100644 tests/requests/__init__.py create mode 100644 tests/requests/models.py create mode 100644 tests/requests/tests.py create mode 100644 tests/reserved_names/__init__.py create mode 100644 tests/reserved_names/models.py create mode 100644 tests/reserved_names/tests.py create mode 100644 tests/resolve_url/__init__.py create mode 100644 tests/resolve_url/models.py create mode 100644 tests/resolve_url/tests.py create mode 100644 tests/reverse_lookup/__init__.py create mode 100644 tests/reverse_lookup/models.py create mode 100644 tests/reverse_lookup/tests.py create mode 100644 tests/reverse_single_related/__init__.py create mode 100644 tests/reverse_single_related/models.py create mode 100644 tests/reverse_single_related/tests.py create mode 100644 tests/save_delete_hooks/__init__.py create mode 100644 tests/save_delete_hooks/models.py create mode 100644 tests/save_delete_hooks/tests.py create mode 100644 tests/select_for_update/__init__.py create mode 100644 tests/select_for_update/models.py create mode 100644 tests/select_for_update/tests.py create mode 100644 tests/select_related/__init__.py create mode 100644 tests/select_related/models.py create mode 100644 tests/select_related/tests.py create mode 100644 tests/select_related_onetoone/__init__.py create mode 100644 tests/select_related_onetoone/models.py create mode 100644 tests/select_related_onetoone/tests.py create mode 100644 tests/select_related_regress/__init__.py create mode 100644 tests/select_related_regress/models.py create mode 100644 tests/select_related_regress/tests.py create mode 100644 tests/serializers/__init__.py create mode 100644 tests/serializers/models.py create mode 100644 tests/serializers/tests.py create mode 100644 tests/serializers_regress/__init__.py create mode 100644 tests/serializers_regress/models.py create mode 100644 tests/serializers_regress/tests.py create mode 100644 tests/servers/__init__.py create mode 100644 tests/servers/fixtures/testdata.json create mode 100644 tests/servers/media/example_media_file.txt create mode 100644 tests/servers/models.py create mode 100644 tests/servers/static/example_static_file.txt create mode 100644 tests/servers/tests.py create mode 100644 tests/servers/urls.py create mode 100644 tests/servers/views.py create mode 100644 tests/settings_tests/__init__.py create mode 100644 tests/settings_tests/models.py create mode 100644 tests/settings_tests/tests.py create mode 100644 tests/signals/__init__.py create mode 100644 tests/signals/models.py create mode 100644 tests/signals/tests.py create mode 100644 tests/signals_regress/__init__.py create mode 100644 tests/signals_regress/models.py create mode 100644 tests/signals_regress/tests.py create mode 100644 tests/signed_cookies_tests/__init__.py create mode 100644 tests/signed_cookies_tests/models.py create mode 100644 tests/signed_cookies_tests/tests.py create mode 100644 tests/signing/__init__.py create mode 100644 tests/signing/models.py create mode 100644 tests/signing/tests.py create mode 100644 tests/sites_framework/__init__.py create mode 100644 tests/sites_framework/models.py create mode 100644 tests/sites_framework/tests.py create mode 100644 tests/special_headers/__init__.py create mode 100644 tests/special_headers/fixtures/data.xml create mode 100644 tests/special_headers/models.py create mode 100644 tests/special_headers/templates/special_headers/article_detail.html create mode 100644 tests/special_headers/tests.py create mode 100644 tests/special_headers/urls.py create mode 100644 tests/special_headers/views.py create mode 100644 tests/staticfiles_tests/__init__.py create mode 100644 tests/staticfiles_tests/apps/__init__.py create mode 100644 tests/staticfiles_tests/apps/no_label/__init__.py create mode 100644 tests/staticfiles_tests/apps/no_label/models.py create mode 100644 tests/staticfiles_tests/apps/no_label/static/file2.txt create mode 100644 tests/staticfiles_tests/apps/test/__init__.py create mode 100644 tests/staticfiles_tests/apps/test/models.py create mode 100644 tests/staticfiles_tests/apps/test/otherdir/odfile.txt create mode 100644 tests/staticfiles_tests/apps/test/static/test/CVS create mode 100644 tests/staticfiles_tests/apps/test/static/test/file.txt create mode 100644 tests/staticfiles_tests/apps/test/static/test/file1.txt create mode 100644 tests/staticfiles_tests/apps/test/static/test/nonascii.css create mode 100644 tests/staticfiles_tests/apps/test/static/test/test.ignoreme create mode 100644 tests/staticfiles_tests/apps/test/static/test/window.png create mode 100644 tests/staticfiles_tests/models.py create mode 100644 tests/staticfiles_tests/project/documents/cached/absolute.css create mode 100644 tests/staticfiles_tests/project/documents/cached/css/fonts/font.eot create mode 100644 tests/staticfiles_tests/project/documents/cached/css/fonts/font.svg create mode 100644 tests/staticfiles_tests/project/documents/cached/css/fragments.css create mode 100644 tests/staticfiles_tests/project/documents/cached/css/ignored.css create mode 100644 tests/staticfiles_tests/project/documents/cached/css/img/window.png create mode 100644 tests/staticfiles_tests/project/documents/cached/css/window.css create mode 100644 tests/staticfiles_tests/project/documents/cached/denorm.css create mode 100644 tests/staticfiles_tests/project/documents/cached/img/relative.png create mode 100644 tests/staticfiles_tests/project/documents/cached/import.css create mode 100644 tests/staticfiles_tests/project/documents/cached/other.css create mode 100644 tests/staticfiles_tests/project/documents/cached/relative.css create mode 100644 tests/staticfiles_tests/project/documents/cached/styles.css create mode 100644 tests/staticfiles_tests/project/documents/cached/styles_insensitive.css create mode 100644 tests/staticfiles_tests/project/documents/cached/url.css create mode 100644 tests/staticfiles_tests/project/documents/subdir/test.txt create mode 100644 tests/staticfiles_tests/project/documents/test.txt create mode 100644 tests/staticfiles_tests/project/documents/test/camelCase.txt create mode 100644 tests/staticfiles_tests/project/documents/test/file.txt create mode 100644 tests/staticfiles_tests/project/prefixed/test.txt create mode 100644 tests/staticfiles_tests/project/site_media/media/media-file.txt create mode 100644 tests/staticfiles_tests/project/site_media/static/testfile.txt create mode 100644 tests/staticfiles_tests/storage.py create mode 100644 tests/staticfiles_tests/tests.py create mode 100644 tests/staticfiles_tests/urls/__init__.py create mode 100644 tests/staticfiles_tests/urls/default.py create mode 100644 tests/staticfiles_tests/urls/helper.py create mode 100644 tests/str/__init__.py create mode 100644 tests/str/models.py create mode 100644 tests/str/tests.py create mode 100644 tests/string_lookup/__init__.py create mode 100644 tests/string_lookup/models.py create mode 100644 tests/string_lookup/tests.py create mode 100644 tests/swappable_models/__init__.py create mode 100644 tests/swappable_models/models.py create mode 100644 tests/swappable_models/tests.py create mode 100644 tests/syndication/__init__.py create mode 100644 tests/syndication/feeds.py create mode 100644 tests/syndication/fixtures/feeddata.json create mode 100644 tests/syndication/models.py create mode 100644 tests/syndication/templates/syndication/description.html create mode 100644 tests/syndication/templates/syndication/description_context.html create mode 100644 tests/syndication/templates/syndication/title.html create mode 100644 tests/syndication/templates/syndication/title_context.html create mode 100644 tests/syndication/tests.py create mode 100644 tests/syndication/urls.py create mode 100644 tests/tablespaces/__init__.py create mode 100644 tests/tablespaces/models.py create mode 100644 tests/tablespaces/tests.py create mode 100644 tests/templates/__init__.py create mode 100644 tests/templates/alternate_urls.py create mode 100644 tests/templates/callables.py create mode 100644 tests/templates/context.py create mode 100644 tests/templates/custom.py create mode 100644 tests/templates/eggs/tagsegg.egg create mode 100644 tests/templates/filters.py create mode 100644 tests/templates/loaders.py create mode 100644 tests/templates/models.py create mode 100644 tests/templates/nodelist.py create mode 100644 tests/templates/parser.py create mode 100644 tests/templates/response.py create mode 100644 tests/templates/smartif.py create mode 100644 tests/templates/templates/broken_base.html create mode 100644 tests/templates/templates/first/test.html create mode 100644 tests/templates/templates/inclusion.html create mode 100644 tests/templates/templates/response.html create mode 100644 tests/templates/templates/second/test.html create mode 100644 tests/templates/templates/ssi include with spaces.html create mode 100644 tests/templates/templates/ssi_include.html create mode 100644 tests/templates/templates/test_context.html create mode 100644 tests/templates/templates/test_extends_error.html create mode 100644 tests/templates/templates/test_incl_tag_current_app.html create mode 100644 tests/templates/templates/test_incl_tag_use_l10n.html create mode 100644 tests/templates/templates/test_include_error.html create mode 100644 tests/templates/templatetags/__init__.py create mode 100644 tests/templates/templatetags/bad_tag.py create mode 100644 tests/templates/templatetags/broken_tag.py create mode 100644 tests/templates/templatetags/custom.py create mode 100644 tests/templates/templatetags/subpackage/__init__.py create mode 100644 tests/templates/templatetags/subpackage/echo.py create mode 100644 tests/templates/templatetags/subpackage/echo_invalid.py create mode 100644 tests/templates/tests.py create mode 100644 tests/templates/unicode.py create mode 100644 tests/templates/urls.py create mode 100644 tests/templates/views.py create mode 100644 tests/test_client/__init__.py create mode 100644 tests/test_client/fixtures/testdata.json create mode 100644 tests/test_client/models.py create mode 100644 tests/test_client/tests.py create mode 100644 tests/test_client/urls.py create mode 100644 tests/test_client/views.py create mode 100644 tests/test_client_regress/__init__.py create mode 100644 tests/test_client_regress/bad_templates/404.html create mode 100644 tests/test_client_regress/fixtures/testdata.json create mode 100644 tests/test_client_regress/models.py create mode 100644 tests/test_client_regress/session.py create mode 100644 tests/test_client_regress/templates/request_context.html create mode 100644 tests/test_client_regress/templates/unicode.html create mode 100644 tests/test_client_regress/tests.py create mode 100644 tests/test_client_regress/urls.py create mode 100644 tests/test_client_regress/views.py create mode 100644 tests/test_runner/__init__.py create mode 100644 tests/test_runner/deprecation_app/__init__.py create mode 100644 tests/test_runner/deprecation_app/models.py create mode 100644 tests/test_runner/deprecation_app/tests.py create mode 100644 tests/test_runner/invalid_app/__init__.py create mode 100644 tests/test_runner/invalid_app/models/__init__.py create mode 100644 tests/test_runner/invalid_app/tests/__init__.py create mode 100644 tests/test_runner/models.py create mode 100644 tests/test_runner/tests.py create mode 100644 tests/test_runner/valid_app/__init__.py create mode 100644 tests/test_runner/valid_app/models/__init__.py create mode 100644 tests/test_runner/valid_app/tests/__init__.py create mode 100644 tests/test_utils/__init__.py create mode 100644 tests/test_utils/fixtures/should_not_be_loaded.json create mode 100644 tests/test_utils/models.py create mode 100644 tests/test_utils/templates/template_used/alternative.html create mode 100644 tests/test_utils/templates/template_used/base.html create mode 100644 tests/test_utils/templates/template_used/extends.html create mode 100644 tests/test_utils/templates/template_used/include.html create mode 100644 tests/test_utils/tests.py create mode 100644 tests/test_utils/urls.py create mode 100644 tests/test_utils/views.py create mode 100644 tests/text/__init__.py create mode 100644 tests/text/models.py create mode 100644 tests/text/tests.py create mode 100644 tests/timezones/__init__.py create mode 100644 tests/timezones/admin.py create mode 100644 tests/timezones/fixtures/tz_users.xml create mode 100644 tests/timezones/forms.py create mode 100644 tests/timezones/models.py create mode 100644 tests/timezones/tests.py create mode 100644 tests/timezones/urls.py create mode 100644 tests/transactions/__init__.py create mode 100644 tests/transactions/models.py create mode 100644 tests/transactions/tests.py create mode 100644 tests/transactions_regress/__init__.py create mode 100644 tests/transactions_regress/models.py create mode 100644 tests/transactions_regress/tests.py create mode 100644 tests/unmanaged_models/__init__.py create mode 100644 tests/unmanaged_models/models.py create mode 100644 tests/unmanaged_models/tests.py create mode 100644 tests/update/__init__.py create mode 100644 tests/update/models.py create mode 100644 tests/update/tests.py create mode 100644 tests/update_only_fields/__init__.py create mode 100644 tests/update_only_fields/models.py create mode 100644 tests/update_only_fields/tests.py create mode 100644 tests/urlpatterns_reverse/__init__.py create mode 100644 tests/urlpatterns_reverse/erroneous_urls.py create mode 100644 tests/urlpatterns_reverse/erroneous_views_module.py create mode 100644 tests/urlpatterns_reverse/extra_urls.py create mode 100644 tests/urlpatterns_reverse/included_named_urls.py create mode 100644 tests/urlpatterns_reverse/included_named_urls2.py create mode 100644 tests/urlpatterns_reverse/included_namespace_urls.py create mode 100644 tests/urlpatterns_reverse/included_urls.py create mode 100644 tests/urlpatterns_reverse/included_urls2.py create mode 100644 tests/urlpatterns_reverse/middleware.py create mode 100644 tests/urlpatterns_reverse/models.py create mode 100644 tests/urlpatterns_reverse/named_urls.py create mode 100644 tests/urlpatterns_reverse/namespace_urls.py create mode 100644 tests/urlpatterns_reverse/no_urls.py create mode 100644 tests/urlpatterns_reverse/reverse_lazy_urls.py create mode 100644 tests/urlpatterns_reverse/tests.py create mode 100644 tests/urlpatterns_reverse/urlconf_inner.py create mode 100644 tests/urlpatterns_reverse/urlconf_outer.py create mode 100644 tests/urlpatterns_reverse/urls.py create mode 100644 tests/urlpatterns_reverse/urls_error_handlers.py create mode 100644 tests/urlpatterns_reverse/urls_error_handlers_callables.py create mode 100644 tests/urlpatterns_reverse/urls_without_full_import.py create mode 100644 tests/urlpatterns_reverse/views.py create mode 100644 tests/urlpatterns_reverse/views_broken.py create mode 100644 tests/user_commands/__init__.py create mode 100644 tests/user_commands/management/__init__.py create mode 100644 tests/user_commands/management/commands/__init__.py create mode 100644 tests/user_commands/management/commands/dance.py create mode 100644 tests/user_commands/management/commands/leave_locale_alone_false.py create mode 100644 tests/user_commands/management/commands/leave_locale_alone_true.py create mode 100644 tests/user_commands/models.py create mode 100644 tests/user_commands/tests.py create mode 100644 tests/utils/__init__.py create mode 100644 tests/utils/archive.py create mode 100644 tests/utils/archives/foobar.tar create mode 100644 tests/utils/archives/foobar.tar.bz2 create mode 100644 tests/utils/archives/foobar.tar.gz create mode 100644 tests/utils/archives/foobar.zip create mode 100644 tests/utils/baseconv.py create mode 100644 tests/utils/checksums.py create mode 100644 tests/utils/crypto.py create mode 100644 tests/utils/datastructures.py create mode 100644 tests/utils/dateformat.py create mode 100644 tests/utils/dateparse.py create mode 100644 tests/utils/datetime_safe.py create mode 100644 tests/utils/decorators.py create mode 100644 tests/utils/eggs/test_egg.egg create mode 100644 tests/utils/encoding.py create mode 100644 tests/utils/feedgenerator.py create mode 100644 tests/utils/functional.py create mode 100644 tests/utils/html.py create mode 100644 tests/utils/http.py create mode 100644 tests/utils/ipv6.py create mode 100644 tests/utils/jslex.py create mode 100644 tests/utils/models.py create mode 100644 tests/utils/module_loading.py create mode 100644 tests/utils/numberformat.py create mode 100644 tests/utils/os_utils.py create mode 100644 tests/utils/regex_helper.py create mode 100644 tests/utils/simplelazyobject.py create mode 100644 tests/utils/termcolors.py create mode 100644 tests/utils/test_module/__init__.py create mode 100644 tests/utils/test_module/bad_module.py create mode 100644 tests/utils/test_module/good_module.py create mode 100644 tests/utils/test_no_submodule.py create mode 100644 tests/utils/tests.py create mode 100644 tests/utils/text.py create mode 100644 tests/utils/timesince.py create mode 100644 tests/utils/timezone.py create mode 100644 tests/utils/tzinfo.py create mode 100644 tests/validation/__init__.py create mode 100644 tests/validation/models.py create mode 100644 tests/validation/test_custom_messages.py create mode 100644 tests/validation/test_error_messages.py create mode 100644 tests/validation/test_unique.py create mode 100644 tests/validation/tests.py create mode 100644 tests/validation/validators.py create mode 100644 tests/validators/__init__.py create mode 100644 tests/validators/models.py create mode 100644 tests/validators/tests.py create mode 100644 tests/version/__init__.py create mode 100644 tests/version/models.py create mode 100644 tests/version/tests.py create mode 100644 tests/views/__init__.py create mode 100644 tests/views/app0/__init__.py create mode 100644 tests/views/app0/locale/en/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/app0/locale/en/LC_MESSAGES/djangojs.po create mode 100644 tests/views/app1/__init__.py create mode 100644 tests/views/app1/locale/fr/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/app1/locale/fr/LC_MESSAGES/djangojs.po create mode 100644 tests/views/app2/__init__.py create mode 100644 tests/views/app2/locale/fr/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/app2/locale/fr/LC_MESSAGES/djangojs.po create mode 100644 tests/views/app3/__init__.py create mode 100644 tests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/app3/locale/es_AR/LC_MESSAGES/djangojs.po create mode 100644 tests/views/app4/__init__.py create mode 100644 tests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/app4/locale/es_AR/LC_MESSAGES/djangojs.po create mode 100644 tests/views/fixtures/testdata.json create mode 100644 tests/views/generic_urls.py create mode 100644 tests/views/locale/de/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/locale/de/LC_MESSAGES/djangojs.po create mode 100644 tests/views/locale/es/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/locale/es/LC_MESSAGES/djangojs.po create mode 100644 tests/views/locale/fr/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/locale/fr/LC_MESSAGES/djangojs.po create mode 100644 tests/views/locale/ru/LC_MESSAGES/djangojs.mo create mode 100644 tests/views/locale/ru/LC_MESSAGES/djangojs.po create mode 100644 tests/views/media/file.txt create mode 100644 tests/views/media/file.txt.gz create mode 100644 tests/views/media/file.unknown create mode 100644 tests/views/models.py create mode 100644 tests/views/templates/debug/render_test.html create mode 100644 tests/views/templates/debug/template_exception.html create mode 100644 tests/views/templates/jsi18n.html create mode 100644 tests/views/templatetags/__init__.py create mode 100644 tests/views/templatetags/debugtags.py create mode 100644 tests/views/tests/__init__.py create mode 100644 tests/views/tests/debug.py create mode 100644 tests/views/tests/defaults.py create mode 100644 tests/views/tests/i18n.py create mode 100644 tests/views/tests/shortcuts.py create mode 100644 tests/views/tests/specials.py create mode 100644 tests/views/tests/static.py create mode 100644 tests/views/urls.py create mode 100644 tests/views/views.py create mode 100644 tests/wsgi/__init__.py create mode 100644 tests/wsgi/models.py create mode 100644 tests/wsgi/tests.py create mode 100644 tests/wsgi/urls.py create mode 100644 tests/wsgi/wsgi.py (limited to 'tests') diff --git a/tests/admin_changelist/__init__.py b/tests/admin_changelist/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_changelist/admin.py b/tests/admin_changelist/admin.py new file mode 100644 index 0000000000..5751d04bce --- /dev/null +++ b/tests/admin_changelist/admin.py @@ -0,0 +1,104 @@ +from __future__ import absolute_import + +from django.contrib import admin +from django.core.paginator import Paginator + +from .models import (Event, Child, Parent, Genre, Band, Musician, Group, + Quartet, Membership, ChordsMusician, ChordsBand, Invitation, Swallow) + + +site = admin.AdminSite(name="admin") + +class CustomPaginator(Paginator): + def __init__(self, queryset, page_size, orphans=0, allow_empty_first_page=True): + super(CustomPaginator, self).__init__(queryset, 5, orphans=2, + allow_empty_first_page=allow_empty_first_page) + + +class EventAdmin(admin.ModelAdmin): + list_display = ['event_date_func'] + + def event_date_func(self, event): + return event.date + +site.register(Event, EventAdmin) + + +class ParentAdmin(admin.ModelAdmin): + list_filter = ['child__name'] + search_fields = ['child__name'] + + +class ChildAdmin(admin.ModelAdmin): + list_display = ['name', 'parent'] + list_per_page = 10 + list_filter = ['parent', 'age'] + + def queryset(self, request): + return super(ChildAdmin, self).queryset(request).select_related("parent__name") + + +class CustomPaginationAdmin(ChildAdmin): + paginator = CustomPaginator + + +class FilteredChildAdmin(admin.ModelAdmin): + list_display = ['name', 'parent'] + list_per_page = 10 + + def queryset(self, request): + return super(FilteredChildAdmin, self).queryset(request).filter( + name__contains='filtered') + + +class BandAdmin(admin.ModelAdmin): + list_filter = ['genres'] + + +class GroupAdmin(admin.ModelAdmin): + list_filter = ['members'] + + +class QuartetAdmin(admin.ModelAdmin): + list_filter = ['members'] + + +class ChordsBandAdmin(admin.ModelAdmin): + list_filter = ['members'] + + +class DynamicListDisplayChildAdmin(admin.ModelAdmin): + list_display = ('parent', 'name', 'age') + + def get_list_display(self, request): + my_list_display = super(DynamicListDisplayChildAdmin, self).get_list_display(request) + if request.user.username == 'noparents': + my_list_display = list(my_list_display) + my_list_display.remove('parent') + return my_list_display + +class DynamicListDisplayLinksChildAdmin(admin.ModelAdmin): + list_display = ('parent', 'name', 'age') + list_display_links = ['parent', 'name'] + + def get_list_display_links(self, request, list_display): + return ['age'] + +site.register(Child, DynamicListDisplayChildAdmin) + +class SwallowAdmin(admin.ModelAdmin): + actions = None # prevent ['action_checkbox'] + list(list_display) + list_display = ('origin', 'load', 'speed') + +site.register(Swallow, SwallowAdmin) + +class DynamicListFilterChildAdmin(admin.ModelAdmin): + list_filter = ('parent', 'name', 'age') + + def get_list_filter(self, request): + my_list_filter = super(DynamicListFilterChildAdmin, self).get_list_filter(request) + if request.user.username == 'noparents': + my_list_filter = list(my_list_filter) + my_list_filter.remove('parent') + return my_list_filter + diff --git a/tests/admin_changelist/models.py b/tests/admin_changelist/models.py new file mode 100644 index 0000000000..4ba2f9c503 --- /dev/null +++ b/tests/admin_changelist/models.py @@ -0,0 +1,89 @@ +from django.db import models +from django.utils.encoding import python_2_unicode_compatible + +class Event(models.Model): + # Oracle can have problems with a column named "date" + date = models.DateField(db_column="event_date") + +class Parent(models.Model): + name = models.CharField(max_length=128) + +class Child(models.Model): + parent = models.ForeignKey(Parent, editable=False, null=True) + name = models.CharField(max_length=30, blank=True) + age = models.IntegerField(null=True, blank=True) + +class Genre(models.Model): + name = models.CharField(max_length=20) + +class Band(models.Model): + name = models.CharField(max_length=20) + nr_of_members = models.PositiveIntegerField() + genres = models.ManyToManyField(Genre) + +@python_2_unicode_compatible +class Musician(models.Model): + name = models.CharField(max_length=30) + + def __str__(self): + return self.name + +@python_2_unicode_compatible +class Group(models.Model): + name = models.CharField(max_length=30) + members = models.ManyToManyField(Musician, through='Membership') + + def __str__(self): + return self.name + +class Membership(models.Model): + music = models.ForeignKey(Musician) + group = models.ForeignKey(Group) + role = models.CharField(max_length=15) + +class Quartet(Group): + pass + +class ChordsMusician(Musician): + pass + +class ChordsBand(models.Model): + name = models.CharField(max_length=30) + members = models.ManyToManyField(ChordsMusician, through='Invitation') + +class Invitation(models.Model): + player = models.ForeignKey(ChordsMusician) + band = models.ForeignKey(ChordsBand) + instrument = models.CharField(max_length=15) + +class Swallow(models.Model): + origin = models.CharField(max_length=255) + load = models.FloatField() + speed = models.FloatField() + + class Meta: + ordering = ('speed', 'load') + + +class UnorderedObject(models.Model): + """ + Model without any defined `Meta.ordering`. + Refs #17198. + """ + bool = models.BooleanField(default=True) + + +class OrderedObjectManager(models.Manager): + def get_query_set(self): + return super(OrderedObjectManager, self).get_query_set().order_by('number') + +class OrderedObject(models.Model): + """ + Model with Manager that defines a default order. + Refs #17198. + """ + name = models.CharField(max_length=255) + bool = models.BooleanField(default=True) + number = models.IntegerField(default=0, db_column='number_val') + + objects = OrderedObjectManager() diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py new file mode 100644 index 0000000000..7a3a5c0e03 --- /dev/null +++ b/tests/admin_changelist/tests.py @@ -0,0 +1,565 @@ +from __future__ import absolute_import + +import datetime + +from django.contrib import admin +from django.contrib.admin.options import IncorrectLookupParameters +from django.contrib.admin.views.main import ChangeList, SEARCH_VAR, ALL_VAR +from django.contrib.auth.models import User +from django.core.urlresolvers import reverse +from django.template import Context, Template +from django.test import TestCase +from django.test.client import RequestFactory +from django.utils import formats +from django.utils import six + +from .admin import (ChildAdmin, QuartetAdmin, BandAdmin, ChordsBandAdmin, + GroupAdmin, ParentAdmin, DynamicListDisplayChildAdmin, + DynamicListDisplayLinksChildAdmin, CustomPaginationAdmin, + FilteredChildAdmin, CustomPaginator, site as custom_site, + SwallowAdmin, DynamicListFilterChildAdmin) +from .models import (Event, Child, Parent, Genre, Band, Musician, Group, + Quartet, Membership, ChordsMusician, ChordsBand, Invitation, Swallow, + UnorderedObject, OrderedObject) + + +class ChangeListTests(TestCase): + urls = "regressiontests.admin_changelist.urls" + + def setUp(self): + self.factory = RequestFactory() + + def _create_superuser(self, username): + return User.objects.create(username=username, is_superuser=True) + + def _mocked_authenticated_request(self, url, user): + request = self.factory.get(url) + request.user = user + return request + + def test_select_related_preserved(self): + """ + Regression test for #10348: ChangeList.get_query_set() shouldn't + overwrite a custom select_related provided by ModelAdmin.queryset(). + """ + m = ChildAdmin(Child, admin.site) + request = self.factory.get('/child/') + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m) + self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}}) + + def test_result_list_empty_changelist_value(self): + """ + Regression test for #14982: EMPTY_CHANGELIST_VALUE should be honored + for relationship fields + """ + new_child = Child.objects.create(name='name', parent=None) + request = self.factory.get('/child/') + m = ChildAdmin(Child, admin.site) + list_display = m.get_list_display(request) + list_display_links = m.get_list_display_links(request, list_display) + cl = ChangeList(request, Child, list_display, list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m) + cl.formset = None + template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}') + context = Context({'cl': cl}) + table_output = template.render(context) + link = reverse('admin:admin_changelist_child_change', args=(new_child.id,)) + row_html = 'name(None)' % link + self.assertFalse(table_output.find(row_html) == -1, + 'Failed to find expected row element: %s' % table_output) + + def test_result_list_html(self): + """ + Verifies that inclusion tag result_list generates a table when with + default ModelAdmin settings. + """ + new_parent = Parent.objects.create(name='parent') + new_child = Child.objects.create(name='name', parent=new_parent) + request = self.factory.get('/child/') + m = ChildAdmin(Child, admin.site) + list_display = m.get_list_display(request) + list_display_links = m.get_list_display_links(request, list_display) + cl = ChangeList(request, Child, list_display, list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m) + cl.formset = None + template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}') + context = Context({'cl': cl}) + table_output = template.render(context) + link = reverse('admin:admin_changelist_child_change', args=(new_child.id,)) + row_html = 'nameParent object' % link + self.assertFalse(table_output.find(row_html) == -1, + 'Failed to find expected row element: %s' % table_output) + + def test_result_list_editable_html(self): + """ + Regression tests for #11791: Inclusion tag result_list generates a + table and this checks that the items are nested within the table + element tags. + Also a regression test for #13599, verifies that hidden fields + when list_editable is enabled are rendered in a div outside the + table. + """ + new_parent = Parent.objects.create(name='parent') + new_child = Child.objects.create(name='name', parent=new_parent) + request = self.factory.get('/child/') + m = ChildAdmin(Child, admin.site) + + # Test with list_editable fields + m.list_display = ['id', 'name', 'parent'] + m.list_display_links = ['id'] + m.list_editable = ['name'] + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m) + FormSet = m.get_changelist_formset(request) + cl.formset = FormSet(queryset=cl.result_list) + template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}') + context = Context({'cl': cl}) + table_output = template.render(context) + # make sure that hidden fields are in the correct place + hiddenfields_div = '
' % new_child.id + self.assertInHTML(hiddenfields_div, table_output, msg_prefix='Failed to find hidden fields') + + # make sure that list editable fields are rendered in divs correctly + editable_name_field = '' + self.assertInHTML('%s' % editable_name_field, table_output, msg_prefix='Failed to find "name" list_editable field') + + def test_result_list_editable(self): + """ + Regression test for #14312: list_editable with pagination + """ + + new_parent = Parent.objects.create(name='parent') + for i in range(200): + new_child = Child.objects.create(name='name %s' % i, parent=new_parent) + request = self.factory.get('/child/', data={'p': -1}) # Anything outside range + m = ChildAdmin(Child, admin.site) + + # Test with list_editable fields + m.list_display = ['id', 'name', 'parent'] + m.list_display_links = ['id'] + m.list_editable = ['name'] + self.assertRaises(IncorrectLookupParameters, lambda: \ + ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m)) + + def test_custom_paginator(self): + new_parent = Parent.objects.create(name='parent') + for i in range(200): + new_child = Child.objects.create(name='name %s' % i, parent=new_parent) + + request = self.factory.get('/child/') + m = CustomPaginationAdmin(Child, admin.site) + + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, m.list_editable, m) + + cl.get_results(request) + self.assertIsInstance(cl.paginator, CustomPaginator) + + def test_distinct_for_m2m_in_list_filter(self): + """ + Regression test for #13902: When using a ManyToMany in list_filter, + results shouldn't apper more than once. Basic ManyToMany. + """ + blues = Genre.objects.create(name='Blues') + band = Band.objects.create(name='B.B. King Review', nr_of_members=11) + + band.genres.add(blues) + band.genres.add(blues) + + m = BandAdmin(Band, admin.site) + request = self.factory.get('/band/', data={'genres': blues.pk}) + + cl = ChangeList(request, Band, m.list_display, + m.list_display_links, m.list_filter, m.date_hierarchy, + m.search_fields, m.list_select_related, m.list_per_page, + m.list_max_show_all, m.list_editable, m) + + cl.get_results(request) + + # There's only one Group instance + self.assertEqual(cl.result_count, 1) + + def test_distinct_for_through_m2m_in_list_filter(self): + """ + Regression test for #13902: When using a ManyToMany in list_filter, + results shouldn't apper more than once. With an intermediate model. + """ + lead = Musician.objects.create(name='Vox') + band = Group.objects.create(name='The Hype') + Membership.objects.create(group=band, music=lead, role='lead voice') + Membership.objects.create(group=band, music=lead, role='bass player') + + m = GroupAdmin(Group, admin.site) + request = self.factory.get('/group/', data={'members': lead.pk}) + + cl = ChangeList(request, Group, m.list_display, + m.list_display_links, m.list_filter, m.date_hierarchy, + m.search_fields, m.list_select_related, m.list_per_page, + m.list_max_show_all, m.list_editable, m) + + cl.get_results(request) + + # There's only one Group instance + self.assertEqual(cl.result_count, 1) + + def test_distinct_for_inherited_m2m_in_list_filter(self): + """ + Regression test for #13902: When using a ManyToMany in list_filter, + results shouldn't apper more than once. Model managed in the + admin inherits from the one that defins the relationship. + """ + lead = Musician.objects.create(name='John') + four = Quartet.objects.create(name='The Beatles') + Membership.objects.create(group=four, music=lead, role='lead voice') + Membership.objects.create(group=four, music=lead, role='guitar player') + + m = QuartetAdmin(Quartet, admin.site) + request = self.factory.get('/quartet/', data={'members': lead.pk}) + + cl = ChangeList(request, Quartet, m.list_display, + m.list_display_links, m.list_filter, m.date_hierarchy, + m.search_fields, m.list_select_related, m.list_per_page, + m.list_max_show_all, m.list_editable, m) + + cl.get_results(request) + + # There's only one Quartet instance + self.assertEqual(cl.result_count, 1) + + def test_distinct_for_m2m_to_inherited_in_list_filter(self): + """ + Regression test for #13902: When using a ManyToMany in list_filter, + results shouldn't apper more than once. Target of the relationship + inherits from another. + """ + lead = ChordsMusician.objects.create(name='Player A') + three = ChordsBand.objects.create(name='The Chords Trio') + Invitation.objects.create(band=three, player=lead, instrument='guitar') + Invitation.objects.create(band=three, player=lead, instrument='bass') + + m = ChordsBandAdmin(ChordsBand, admin.site) + request = self.factory.get('/chordsband/', data={'members': lead.pk}) + + cl = ChangeList(request, ChordsBand, m.list_display, + m.list_display_links, m.list_filter, m.date_hierarchy, + m.search_fields, m.list_select_related, m.list_per_page, + m.list_max_show_all, m.list_editable, m) + + cl.get_results(request) + + # There's only one ChordsBand instance + self.assertEqual(cl.result_count, 1) + + def test_distinct_for_non_unique_related_object_in_list_filter(self): + """ + Regressions tests for #15819: If a field listed in list_filters + is a non-unique related object, distinct() must be called. + """ + parent = Parent.objects.create(name='Mary') + # Two children with the same name + Child.objects.create(parent=parent, name='Daniel') + Child.objects.create(parent=parent, name='Daniel') + + m = ParentAdmin(Parent, admin.site) + request = self.factory.get('/parent/', data={'child__name': 'Daniel'}) + + cl = ChangeList(request, Parent, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, + m.list_max_show_all, m.list_editable, m) + + # Make sure distinct() was called + self.assertEqual(cl.query_set.count(), 1) + + def test_distinct_for_non_unique_related_object_in_search_fields(self): + """ + Regressions tests for #15819: If a field listed in search_fields + is a non-unique related object, distinct() must be called. + """ + parent = Parent.objects.create(name='Mary') + Child.objects.create(parent=parent, name='Danielle') + Child.objects.create(parent=parent, name='Daniel') + + m = ParentAdmin(Parent, admin.site) + request = self.factory.get('/parent/', data={SEARCH_VAR: 'daniel'}) + + cl = ChangeList(request, Parent, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, + m.list_max_show_all, m.list_editable, m) + + # Make sure distinct() was called + self.assertEqual(cl.query_set.count(), 1) + + def test_pagination(self): + """ + Regression tests for #12893: Pagination in admins changelist doesn't + use queryset set by modeladmin. + """ + parent = Parent.objects.create(name='anything') + for i in range(30): + Child.objects.create(name='name %s' % i, parent=parent) + Child.objects.create(name='filtered %s' % i, parent=parent) + + request = self.factory.get('/child/') + + # Test default queryset + m = ChildAdmin(Child, admin.site) + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, + m.list_editable, m) + self.assertEqual(cl.query_set.count(), 60) + self.assertEqual(cl.paginator.count, 60) + self.assertEqual(list(cl.paginator.page_range), [1, 2, 3, 4, 5, 6]) + + # Test custom queryset + m = FilteredChildAdmin(Child, admin.site) + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, m.list_max_show_all, + m.list_editable, m) + self.assertEqual(cl.query_set.count(), 30) + self.assertEqual(cl.paginator.count, 30) + self.assertEqual(list(cl.paginator.page_range), [1, 2, 3]) + + def test_computed_list_display_localization(self): + """ + Regression test for #13196: output of functions should be localized + in the changelist. + """ + User.objects.create_superuser( + username='super', email='super@localhost', password='secret') + self.client.login(username='super', password='secret') + event = Event.objects.create(date=datetime.date.today()) + response = self.client.get('/admin/admin_changelist/event/') + self.assertContains(response, formats.localize(event.date)) + self.assertNotContains(response, six.text_type(event.date)) + + def test_dynamic_list_display(self): + """ + Regression tests for #14206: dynamic list_display support. + """ + parent = Parent.objects.create(name='parent') + for i in range(10): + Child.objects.create(name='child %s' % i, parent=parent) + + user_noparents = self._create_superuser('noparents') + user_parents = self._create_superuser('parents') + + # Test with user 'noparents' + m = custom_site._registry[Child] + request = self._mocked_authenticated_request('/child/', user_noparents) + response = m.changelist_view(request) + self.assertNotContains(response, 'Parent object') + + list_display = m.get_list_display(request) + list_display_links = m.get_list_display_links(request, list_display) + self.assertEqual(list_display, ['name', 'age']) + self.assertEqual(list_display_links, ['name']) + + # Test with user 'parents' + m = DynamicListDisplayChildAdmin(Child, admin.site) + request = self._mocked_authenticated_request('/child/', user_parents) + response = m.changelist_view(request) + self.assertContains(response, 'Parent object') + + custom_site.unregister(Child) + + list_display = m.get_list_display(request) + list_display_links = m.get_list_display_links(request, list_display) + self.assertEqual(list_display, ('parent', 'name', 'age')) + self.assertEqual(list_display_links, ['parent']) + + # Test default implementation + custom_site.register(Child, ChildAdmin) + m = custom_site._registry[Child] + request = self._mocked_authenticated_request('/child/', user_noparents) + response = m.changelist_view(request) + self.assertContains(response, 'Parent object') + + def test_show_all(self): + parent = Parent.objects.create(name='anything') + for i in range(30): + Child.objects.create(name='name %s' % i, parent=parent) + Child.objects.create(name='filtered %s' % i, parent=parent) + + # Add "show all" parameter to request + request = self.factory.get('/child/', data={ALL_VAR: ''}) + + # Test valid "show all" request (number of total objects is under max) + m = ChildAdmin(Child, admin.site) + # 200 is the max we'll pass to ChangeList + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, 200, m.list_editable, m) + cl.get_results(request) + self.assertEqual(len(cl.result_list), 60) + + # Test invalid "show all" request (number of total objects over max) + # falls back to paginated pages + m = ChildAdmin(Child, admin.site) + # 30 is the max we'll pass to ChangeList for this test + cl = ChangeList(request, Child, m.list_display, m.list_display_links, + m.list_filter, m.date_hierarchy, m.search_fields, + m.list_select_related, m.list_per_page, 30, m.list_editable, m) + cl.get_results(request) + self.assertEqual(len(cl.result_list), 10) + + def test_dynamic_list_display_links(self): + """ + Regression tests for #16257: dynamic list_display_links support. + """ + parent = Parent.objects.create(name='parent') + for i in range(1, 10): + Child.objects.create(id=i, name='child %s' % i, parent=parent, age=i) + + m = DynamicListDisplayLinksChildAdmin(Child, admin.site) + superuser = self._create_superuser('superuser') + request = self._mocked_authenticated_request('/child/', superuser) + response = m.changelist_view(request) + for i in range(1, 10): + link = reverse('admin:admin_changelist_child_change', args=(i,)) + self.assertContains(response, '%s' % (link, i)) + + list_display = m.get_list_display(request) + list_display_links = m.get_list_display_links(request, list_display) + self.assertEqual(list_display, ('parent', 'name', 'age')) + self.assertEqual(list_display_links, ['age']) + + def test_tuple_list_display(self): + """ + Regression test for #17128 + (ChangeList failing under Python 2.5 after r16319) + """ + swallow = Swallow.objects.create( + origin='Africa', load='12.34', speed='22.2') + model_admin = SwallowAdmin(Swallow, admin.site) + superuser = self._create_superuser('superuser') + request = self._mocked_authenticated_request('/swallow/', superuser) + response = model_admin.changelist_view(request) + # just want to ensure it doesn't blow up during rendering + self.assertContains(response, six.text_type(swallow.origin)) + self.assertContains(response, six.text_type(swallow.load)) + self.assertContains(response, six.text_type(swallow.speed)) + + def test_deterministic_order_for_unordered_model(self): + """ + Ensure that the primary key is systematically used in the ordering of + the changelist's results to guarantee a deterministic order, even + when the Model doesn't have any default ordering defined. + Refs #17198. + """ + superuser = self._create_superuser('superuser') + + for counter in range(1, 51): + UnorderedObject.objects.create(id=counter, bool=True) + + class UnorderedObjectAdmin(admin.ModelAdmin): + list_per_page = 10 + + def check_results_order(ascending=False): + admin.site.register(UnorderedObject, UnorderedObjectAdmin) + model_admin = UnorderedObjectAdmin(UnorderedObject, admin.site) + counter = 0 if ascending else 51 + for page in range (0, 5): + request = self._mocked_authenticated_request('/unorderedobject/?p=%s' % page, superuser) + response = model_admin.changelist_view(request) + for result in response.context_data['cl'].result_list: + counter += 1 if ascending else -1 + self.assertEqual(result.id, counter) + admin.site.unregister(UnorderedObject) + + # When no order is defined at all, everything is ordered by '-pk'. + check_results_order() + + # When an order field is defined but multiple records have the same + # value for that field, make sure everything gets ordered by -pk as well. + UnorderedObjectAdmin.ordering = ['bool'] + check_results_order() + + # When order fields are defined, including the pk itself, use them. + UnorderedObjectAdmin.ordering = ['bool', '-pk'] + check_results_order() + UnorderedObjectAdmin.ordering = ['bool', 'pk'] + check_results_order(ascending=True) + UnorderedObjectAdmin.ordering = ['-id', 'bool'] + check_results_order() + UnorderedObjectAdmin.ordering = ['id', 'bool'] + check_results_order(ascending=True) + + def test_deterministic_order_for_model_ordered_by_its_manager(self): + """ + Ensure that the primary key is systematically used in the ordering of + the changelist's results to guarantee a deterministic order, even + when the Model has a manager that defines a default ordering. + Refs #17198. + """ + superuser = self._create_superuser('superuser') + + for counter in range(1, 51): + OrderedObject.objects.create(id=counter, bool=True, number=counter) + + class OrderedObjectAdmin(admin.ModelAdmin): + list_per_page = 10 + + def check_results_order(ascending=False): + admin.site.register(OrderedObject, OrderedObjectAdmin) + model_admin = OrderedObjectAdmin(OrderedObject, admin.site) + counter = 0 if ascending else 51 + for page in range (0, 5): + request = self._mocked_authenticated_request('/orderedobject/?p=%s' % page, superuser) + response = model_admin.changelist_view(request) + for result in response.context_data['cl'].result_list: + counter += 1 if ascending else -1 + self.assertEqual(result.id, counter) + admin.site.unregister(OrderedObject) + + # When no order is defined at all, use the model's default ordering (i.e. 'number') + check_results_order(ascending=True) + + # When an order field is defined but multiple records have the same + # value for that field, make sure everything gets ordered by -pk as well. + OrderedObjectAdmin.ordering = ['bool'] + check_results_order() + + # When order fields are defined, including the pk itself, use them. + OrderedObjectAdmin.ordering = ['bool', '-pk'] + check_results_order() + OrderedObjectAdmin.ordering = ['bool', 'pk'] + check_results_order(ascending=True) + OrderedObjectAdmin.ordering = ['-id', 'bool'] + check_results_order() + OrderedObjectAdmin.ordering = ['id', 'bool'] + check_results_order(ascending=True) + + def test_dynamic_list_filter(self): + """ + Regression tests for ticket #17646: dynamic list_filter support. + """ + parent = Parent.objects.create(name='parent') + for i in range(10): + Child.objects.create(name='child %s' % i, parent=parent) + + user_noparents = self._create_superuser('noparents') + user_parents = self._create_superuser('parents') + + # Test with user 'noparents' + m = DynamicListFilterChildAdmin(Child, admin.site) + request = self._mocked_authenticated_request('/child/', user_noparents) + response = m.changelist_view(request) + self.assertEqual(response.context_data['cl'].list_filter, ['name', 'age']) + + # Test with user 'parents' + m = DynamicListFilterChildAdmin(Child, admin.site) + request = self._mocked_authenticated_request('/child/', user_parents) + response = m.changelist_view(request) + self.assertEqual(response.context_data['cl'].list_filter, ('parent', 'name', 'age')) diff --git a/tests/admin_changelist/urls.py b/tests/admin_changelist/urls.py new file mode 100644 index 0000000000..a5d927e20b --- /dev/null +++ b/tests/admin_changelist/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import patterns, include + +from . import admin + + +urlpatterns = patterns('', + (r'^admin/', include(admin.site.urls)), +) diff --git a/tests/admin_custom_urls/__init__.py b/tests/admin_custom_urls/__init__.py new file mode 100644 index 0000000000..792d600548 --- /dev/null +++ b/tests/admin_custom_urls/__init__.py @@ -0,0 +1 @@ +# diff --git a/tests/admin_custom_urls/fixtures/actions.json b/tests/admin_custom_urls/fixtures/actions.json new file mode 100644 index 0000000000..7c6341d71d --- /dev/null +++ b/tests/admin_custom_urls/fixtures/actions.json @@ -0,0 +1,44 @@ +[ + { + "pk": "delete", + "model": "admin_custom_urls.action", + "fields": { + "description": "Remove things." + } + }, + { + "pk": "rename", + "model": "admin_custom_urls.action", + "fields": { + "description": "Gives things other names." + } + }, + { + "pk": "add", + "model": "admin_custom_urls.action", + "fields": { + "description": "Add things." + } + }, + { + "pk": "path/to/file/", + "model": "admin_custom_urls.action", + "fields": { + "description": "An action with '/' in its name." + } + }, + { + "pk": "path/to/html/document.html", + "model": "admin_custom_urls.action", + "fields": { + "description": "An action with a name similar to a HTML doc path." + } + }, + { + "pk": "javascript:alert('Hello world');\">Click here", + "model": "admin_custom_urls.action", + "fields": { + "description": "An action with a name suspected of being a XSS attempt" + } + } +] diff --git a/tests/admin_custom_urls/fixtures/users.json b/tests/admin_custom_urls/fixtures/users.json new file mode 100644 index 0000000000..72d86d70ad --- /dev/null +++ b/tests/admin_custom_urls/fixtures/users.json @@ -0,0 +1,20 @@ +[ + { + "pk": 100, + "model": "auth.user", + "fields": { + "username": "super", + "first_name": "Super", + "last_name": "User", + "is_active": true, + "is_superuser": true, + "is_staff": true, + "last_login": "2007-05-30 13:20:10", + "groups": [], + "user_permissions": [], + "password": "sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158", + "email": "super@example.com", + "date_joined": "2007-05-30 13:20:10" + } + } +] diff --git a/tests/admin_custom_urls/models.py b/tests/admin_custom_urls/models.py new file mode 100644 index 0000000000..55fc064835 --- /dev/null +++ b/tests/admin_custom_urls/models.py @@ -0,0 +1,80 @@ +from functools import update_wrapper + +from django.contrib import admin +from django.core.urlresolvers import reverse +from django.db import models +from django.http import HttpResponseRedirect +from django.utils.encoding import python_2_unicode_compatible + + +@python_2_unicode_compatible +class Action(models.Model): + name = models.CharField(max_length=50, primary_key=True) + description = models.CharField(max_length=70) + + def __str__(self): + return self.name + + +class ActionAdmin(admin.ModelAdmin): + """ + A ModelAdmin for the Action model that changes the URL of the add_view + to '//!add/' + The Action model has a CharField PK. + """ + + list_display = ('name', 'description') + + def remove_url(self, name): + """ + Remove all entries named 'name' from the ModelAdmin instance URL + patterns list + """ + return [url for url in super(ActionAdmin, self).get_urls() if url.name != name] + + def get_urls(self): + # Add the URL of our custom 'add_view' view to the front of the URLs + # list. Remove the existing one(s) first + from django.conf.urls import patterns, url + + def wrap(view): + def wrapper(*args, **kwargs): + return self.admin_site.admin_view(view)(*args, **kwargs) + return update_wrapper(wrapper, view) + + info = self.model._meta.app_label, self.model._meta.model_name + + view_name = '%s_%s_add' % info + + return patterns('', + url(r'^!add/$', wrap(self.add_view), name=view_name), + ) + self.remove_url(view_name) + + +class Person(models.Model): + name = models.CharField(max_length=20) + +class PersonAdmin(admin.ModelAdmin): + + def response_post_save_add(self, request, obj): + return HttpResponseRedirect( + reverse('admin:admin_custom_urls_person_history', args=[obj.pk])) + + def response_post_save_change(self, request, obj): + return HttpResponseRedirect( + reverse('admin:admin_custom_urls_person_delete', args=[obj.pk])) + + +class Car(models.Model): + name = models.CharField(max_length=20) + +class CarAdmin(admin.ModelAdmin): + + def response_add(self, request, obj, post_url_continue=None): + return super(CarAdmin, self).response_add( + request, obj, post_url_continue=reverse('admin:admin_custom_urls_car_history', args=[obj.pk])) + + +admin.site.register(Action, ActionAdmin) +admin.site.register(Person, PersonAdmin) +admin.site.register(Car, CarAdmin) diff --git a/tests/admin_custom_urls/tests.py b/tests/admin_custom_urls/tests.py new file mode 100644 index 0000000000..31c93410f4 --- /dev/null +++ b/tests/admin_custom_urls/tests.py @@ -0,0 +1,141 @@ +from __future__ import absolute_import, unicode_literals +import warnings + +from django.contrib.admin.util import quote +from django.core.urlresolvers import reverse +from django.template.response import TemplateResponse +from django.test import TestCase +from django.test.utils import override_settings + +from .models import Action, Person, Car + + +@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) +class AdminCustomUrlsTest(TestCase): + """ + Remember that: + * The Action model has a CharField PK. + * The ModelAdmin for Action customizes the add_view URL, it's + '//!add/' + """ + fixtures = ['users.json', 'actions.json'] + + def setUp(self): + self.client.login(username='super', password='secret') + + def tearDown(self): + self.client.logout() + + def testBasicAddGet(self): + """ + Ensure GET on the add_view works. + """ + response = self.client.get('/custom_urls/admin/admin_custom_urls/action/!add/') + self.assertIsInstance(response, TemplateResponse) + self.assertEqual(response.status_code, 200) + + def testAddWithGETArgs(self): + """ + Ensure GET on the add_view plus specifying a field value in the query + string works. + """ + response = self.client.get('/custom_urls/admin/admin_custom_urls/action/!add/', {'name': 'My Action'}) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'value="My Action"') + + def testBasicAddPost(self): + """ + Ensure POST on add_view works. + """ + post_data = { + '_popup': '1', + "name": 'Action added through a popup', + "description": "Description of added action", + } + response = self.client.post('/custom_urls/admin/admin_custom_urls/action/!add/', post_data) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'dismissAddAnotherPopup') + self.assertContains(response, 'Action added through a popup') + + def testAdminUrlsNoClash(self): + """ + Test that some admin URLs work correctly. + """ + # Should get the change_view for model instance with PK 'add', not show + # the add_view + response = self.client.get('/custom_urls/admin/admin_custom_urls/action/add/') + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'Change action') + + # Ditto, but use reverse() to build the URL + url = reverse('admin:%s_action_change' % Action._meta.app_label, + args=(quote('add'),)) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'Change action') + + # Should correctly get the change_view for the model instance with the + # funny-looking PK (the one wth a 'path/to/html/document.html' value) + url = reverse('admin:%s_action_change' % Action._meta.app_label, + args=(quote("path/to/html/document.html"),)) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'Change action') + self.assertContains(response, 'value="path/to/html/document.html"') + + +@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) +class CustomRedirects(TestCase): + fixtures = ['users.json', 'actions.json'] + + def setUp(self): + self.client.login(username='super', password='secret') + + def tearDown(self): + self.client.logout() + + def test_post_save_add_redirect(self): + """ + Ensures that ModelAdmin.response_post_save_add() controls the + redirection after the 'Save' button has been pressed when adding a + new object. + Refs 8001, 18310, 19505. + """ + post_data = { 'name': 'John Doe', } + self.assertEqual(Person.objects.count(), 0) + response = self.client.post( + reverse('admin:admin_custom_urls_person_add'), post_data) + persons = Person.objects.all() + self.assertEqual(len(persons), 1) + self.assertRedirects( + response, reverse('admin:admin_custom_urls_person_history', args=[persons[0].pk])) + + def test_post_save_change_redirect(self): + """ + Ensures that ModelAdmin.response_post_save_change() controls the + redirection after the 'Save' button has been pressed when editing an + existing object. + Refs 8001, 18310, 19505. + """ + Person.objects.create(name='John Doe') + self.assertEqual(Person.objects.count(), 1) + person = Person.objects.all()[0] + post_data = { 'name': 'Jack Doe', } + response = self.client.post( + reverse('admin:admin_custom_urls_person_change', args=[person.pk]), post_data) + self.assertRedirects( + response, reverse('admin:admin_custom_urls_person_delete', args=[person.pk])) + + def test_post_url_continue(self): + """ + Ensures that the ModelAdmin.response_add()'s parameter `post_url_continue` + controls the redirection after an object has been created. + """ + post_data = { 'name': 'SuperFast', '_continue': '1' } + self.assertEqual(Car.objects.count(), 0) + response = self.client.post( + reverse('admin:admin_custom_urls_car_add'), post_data) + cars = Car.objects.all() + self.assertEqual(len(cars), 1) + self.assertRedirects( + response, reverse('admin:admin_custom_urls_car_history', args=[cars[0].pk])) diff --git a/tests/admin_custom_urls/urls.py b/tests/admin_custom_urls/urls.py new file mode 100644 index 0000000000..478390737d --- /dev/null +++ b/tests/admin_custom_urls/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import patterns, include +from django.contrib import admin + + +urlpatterns = patterns('', + (r'^admin/', include(admin.site.urls)), +) + diff --git a/tests/admin_filters/__init__.py b/tests/admin_filters/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_filters/models.py b/tests/admin_filters/models.py new file mode 100644 index 0000000000..e0b8bde2de --- /dev/null +++ b/tests/admin_filters/models.py @@ -0,0 +1,36 @@ +from __future__ import unicode_literals + +from django.contrib.auth.models import User +from django.db import models +from django.utils.encoding import python_2_unicode_compatible + + +@python_2_unicode_compatible +class Book(models.Model): + title = models.CharField(max_length=50) + year = models.PositiveIntegerField(null=True, blank=True) + author = models.ForeignKey(User, verbose_name="Verbose Author", related_name='books_authored', blank=True, null=True) + contributors = models.ManyToManyField(User, verbose_name="Verbose Contributors", related_name='books_contributed', blank=True, null=True) + is_best_seller = models.NullBooleanField(default=0) + date_registered = models.DateField(null=True) + no = models.IntegerField(verbose_name='number', blank=True, null=True) # This field is intentionally 2 characters long. See #16080. + + def __str__(self): + return self.title + + +@python_2_unicode_compatible +class Department(models.Model): + code = models.CharField(max_length=4, unique=True) + description = models.CharField(max_length=50, blank=True, null=True) + + def __str__(self): + return self.description + +@python_2_unicode_compatible +class Employee(models.Model): + department = models.ForeignKey(Department, to_field="code") + name = models.CharField(max_length=100) + + def __str__(self): + return self.name diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py new file mode 100644 index 0000000000..11f792e07a --- /dev/null +++ b/tests/admin_filters/tests.py @@ -0,0 +1,743 @@ +from __future__ import absolute_import, unicode_literals + +import datetime + +from django.contrib.admin import (site, ModelAdmin, SimpleListFilter, + BooleanFieldListFilter) +from django.contrib.admin.views.main import ChangeList +from django.contrib.auth.admin import UserAdmin +from django.contrib.auth.models import User +from django.core.exceptions import ImproperlyConfigured +from django.test import TestCase, RequestFactory +from django.test.utils import override_settings, six +from django.utils.encoding import force_text + +from .models import Book, Department, Employee + + +def select_by(dictlist, key, value): + return [x for x in dictlist if x[key] == value][0] + + +class DecadeListFilter(SimpleListFilter): + + def lookups(self, request, model_admin): + return ( + ('the 80s', "the 1980's"), + ('the 90s', "the 1990's"), + ('the 00s', "the 2000's"), + ('other', "other decades"), + ) + + def queryset(self, request, queryset): + decade = self.value() + if decade == 'the 80s': + return queryset.filter(year__gte=1980, year__lte=1989) + if decade == 'the 90s': + return queryset.filter(year__gte=1990, year__lte=1999) + if decade == 'the 00s': + return queryset.filter(year__gte=2000, year__lte=2009) + +class DecadeListFilterWithTitleAndParameter(DecadeListFilter): + title = 'publication decade' + parameter_name = 'publication-decade' + +class DecadeListFilterWithoutTitle(DecadeListFilter): + parameter_name = 'publication-decade' + +class DecadeListFilterWithoutParameter(DecadeListFilter): + title = 'publication decade' + +class DecadeListFilterWithNoneReturningLookups(DecadeListFilterWithTitleAndParameter): + + def lookups(self, request, model_admin): + pass + +class DecadeListFilterWithFailingQueryset(DecadeListFilterWithTitleAndParameter): + + def queryset(self, request, queryset): + raise 1/0 + +class DecadeListFilterWithQuerysetBasedLookups(DecadeListFilterWithTitleAndParameter): + + def lookups(self, request, model_admin): + qs = model_admin.queryset(request) + if qs.filter(year__gte=1980, year__lte=1989).exists(): + yield ('the 80s', "the 1980's") + if qs.filter(year__gte=1990, year__lte=1999).exists(): + yield ('the 90s', "the 1990's") + if qs.filter(year__gte=2000, year__lte=2009).exists(): + yield ('the 00s', "the 2000's") + +class DecadeListFilterParameterEndsWith__In(DecadeListFilter): + title = 'publication decade' + parameter_name = 'decade__in' # Ends with '__in" + +class DecadeListFilterParameterEndsWith__Isnull(DecadeListFilter): + title = 'publication decade' + parameter_name = 'decade__isnull' # Ends with '__isnull" + + +class DepartmentListFilterLookupWithNonStringValue(SimpleListFilter): + title = 'department' + parameter_name = 'department' + + def lookups(self, request, model_admin): + return sorted(set([ + (employee.department.id, # Intentionally not a string (Refs #19318) + employee.department.code) + for employee in model_admin.queryset(request).all() + ])) + + def queryset(self, request, queryset): + if self.value(): + return queryset.filter(department__id=self.value()) + +class CustomUserAdmin(UserAdmin): + list_filter = ('books_authored', 'books_contributed') + +class BookAdmin(ModelAdmin): + list_filter = ('year', 'author', 'contributors', 'is_best_seller', 'date_registered', 'no') + ordering = ('-id',) + +class BookAdminWithTupleBooleanFilter(BookAdmin): + list_filter = ('year', 'author', 'contributors', ('is_best_seller', BooleanFieldListFilter), 'date_registered', 'no') + +class DecadeFilterBookAdmin(ModelAdmin): + list_filter = ('author', DecadeListFilterWithTitleAndParameter) + ordering = ('-id',) + +class DecadeFilterBookAdminWithoutTitle(ModelAdmin): + list_filter = (DecadeListFilterWithoutTitle,) + +class DecadeFilterBookAdminWithoutParameter(ModelAdmin): + list_filter = (DecadeListFilterWithoutParameter,) + +class DecadeFilterBookAdminWithNoneReturningLookups(ModelAdmin): + list_filter = (DecadeListFilterWithNoneReturningLookups,) + +class DecadeFilterBookAdminWithFailingQueryset(ModelAdmin): + list_filter = (DecadeListFilterWithFailingQueryset,) + +class DecadeFilterBookAdminWithQuerysetBasedLookups(ModelAdmin): + list_filter = (DecadeListFilterWithQuerysetBasedLookups,) + +class DecadeFilterBookAdminParameterEndsWith__In(ModelAdmin): + list_filter = (DecadeListFilterParameterEndsWith__In,) + +class DecadeFilterBookAdminParameterEndsWith__Isnull(ModelAdmin): + list_filter = (DecadeListFilterParameterEndsWith__Isnull,) + +class EmployeeAdmin(ModelAdmin): + list_display = ['name', 'department'] + list_filter = ['department'] + + +class DepartmentFilterEmployeeAdmin(EmployeeAdmin): + list_filter = [DepartmentListFilterLookupWithNonStringValue, ] + + +class ListFiltersTests(TestCase): + + def setUp(self): + self.today = datetime.date.today() + self.tomorrow = self.today + datetime.timedelta(days=1) + self.one_week_ago = self.today - datetime.timedelta(days=7) + + self.request_factory = RequestFactory() + + # Users + self.alfred = User.objects.create_user('alfred', 'alfred@example.com') + self.bob = User.objects.create_user('bob', 'bob@example.com') + self.lisa = User.objects.create_user('lisa', 'lisa@example.com') + + # Books + self.djangonaut_book = Book.objects.create(title='Djangonaut: an art of living', year=2009, author=self.alfred, is_best_seller=True, date_registered=self.today) + self.bio_book = Book.objects.create(title='Django: a biography', year=1999, author=self.alfred, is_best_seller=False, no=207) + self.django_book = Book.objects.create(title='The Django Book', year=None, author=self.bob, is_best_seller=None, date_registered=self.today, no=103) + self.gipsy_book = Book.objects.create(title='Gipsy guitar for dummies', year=2002, is_best_seller=True, date_registered=self.one_week_ago) + self.gipsy_book.contributors = [self.bob, self.lisa] + self.gipsy_book.save() + + # Departments + self.dev = Department.objects.create(code='DEV', description='Development') + self.design = Department.objects.create(code='DSN', description='Design') + + # Employees + self.john = Employee.objects.create(name='John Blue', department=self.dev) + self.jack = Employee.objects.create(name='Jack Red', department=self.design) + + def get_changelist(self, request, model, modeladmin): + return ChangeList(request, model, modeladmin.list_display, modeladmin.list_display_links, + modeladmin.list_filter, modeladmin.date_hierarchy, modeladmin.search_fields, + modeladmin.list_select_related, modeladmin.list_per_page, modeladmin.list_max_show_all, modeladmin.list_editable, modeladmin) + + def test_datefieldlistfilter(self): + modeladmin = BookAdmin(Book, site) + + request = self.request_factory.get('/') + changelist = self.get_changelist(request, Book, modeladmin) + + request = self.request_factory.get('/', {'date_registered__gte': self.today, + 'date_registered__lt': self.tomorrow}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][4] + self.assertEqual(force_text(filterspec.title), 'date registered') + choice = select_by(filterspec.choices(changelist), "display", "Today") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?date_registered__gte=%s' + '&date_registered__lt=%s' + % (self.today, self.tomorrow)) + + request = self.request_factory.get('/', {'date_registered__gte': self.today.replace(day=1), + 'date_registered__lt': self.tomorrow}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + if (self.today.year, self.today.month) == (self.one_week_ago.year, self.one_week_ago.month): + # In case one week ago is in the same month. + self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book]) + else: + self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][4] + self.assertEqual(force_text(filterspec.title), 'date registered') + choice = select_by(filterspec.choices(changelist), "display", "This month") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?date_registered__gte=%s' + '&date_registered__lt=%s' + % (self.today.replace(day=1), self.tomorrow)) + + request = self.request_factory.get('/', {'date_registered__gte': self.today.replace(month=1, day=1), + 'date_registered__lt': self.tomorrow}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + if self.today.year == self.one_week_ago.year: + # In case one week ago is in the same year. + self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book]) + else: + self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][4] + self.assertEqual(force_text(filterspec.title), 'date registered') + choice = select_by(filterspec.choices(changelist), "display", "This year") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?date_registered__gte=%s' + '&date_registered__lt=%s' + % (self.today.replace(month=1, day=1), self.tomorrow)) + + request = self.request_factory.get('/', {'date_registered__gte': str(self.one_week_ago), + 'date_registered__lt': str(self.tomorrow)}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][4] + self.assertEqual(force_text(filterspec.title), 'date registered') + choice = select_by(filterspec.choices(changelist), "display", "Past 7 days") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?date_registered__gte=%s' + '&date_registered__lt=%s' + % (str(self.one_week_ago), str(self.tomorrow))) + + @override_settings(USE_TZ=True) + def test_datefieldlistfilter_with_time_zone_support(self): + # Regression for #17830 + self.test_datefieldlistfilter() + + def test_allvaluesfieldlistfilter(self): + modeladmin = BookAdmin(Book, site) + + request = self.request_factory.get('/', {'year__isnull': 'True'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.django_book]) + + # Make sure the last choice is None and is selected + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'year') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[-1]['selected'], True) + self.assertEqual(choices[-1]['query_string'], '?year__isnull=True') + + request = self.request_factory.get('/', {'year': '2002'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'year') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[2]['selected'], True) + self.assertEqual(choices[2]['query_string'], '?year=2002') + + def test_relatedfieldlistfilter_foreignkey(self): + modeladmin = BookAdmin(Book, site) + + request = self.request_factory.get('/', {'author__isnull': 'True'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.gipsy_book]) + + # Make sure the last choice is None and is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'Verbose Author') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[-1]['selected'], True) + self.assertEqual(choices[-1]['query_string'], '?author__isnull=True') + + request = self.request_factory.get('/', {'author__id__exact': self.alfred.pk}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'Verbose Author') + # order of choices depends on User model, which has no order + choice = select_by(filterspec.choices(changelist), "display", "alfred") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?author__id__exact=%d' % self.alfred.pk) + + def test_relatedfieldlistfilter_manytomany(self): + modeladmin = BookAdmin(Book, site) + + request = self.request_factory.get('/', {'contributors__isnull': 'True'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.django_book, self.bio_book, self.djangonaut_book]) + + # Make sure the last choice is None and is selected + filterspec = changelist.get_filters(request)[0][2] + self.assertEqual(force_text(filterspec.title), 'Verbose Contributors') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[-1]['selected'], True) + self.assertEqual(choices[-1]['query_string'], '?contributors__isnull=True') + + request = self.request_factory.get('/', {'contributors__id__exact': self.bob.pk}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][2] + self.assertEqual(force_text(filterspec.title), 'Verbose Contributors') + choice = select_by(filterspec.choices(changelist), "display", "bob") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?contributors__id__exact=%d' % self.bob.pk) + + def test_relatedfieldlistfilter_reverse_relationships(self): + modeladmin = CustomUserAdmin(User, site) + + # FK relationship ----- + request = self.request_factory.get('/', {'books_authored__isnull': 'True'}) + changelist = self.get_changelist(request, User, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.lisa]) + + # Make sure the last choice is None and is selected + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'book') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[-1]['selected'], True) + self.assertEqual(choices[-1]['query_string'], '?books_authored__isnull=True') + + request = self.request_factory.get('/', {'books_authored__id__exact': self.bio_book.pk}) + changelist = self.get_changelist(request, User, modeladmin) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'book') + choice = select_by(filterspec.choices(changelist), "display", self.bio_book.title) + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?books_authored__id__exact=%d' % self.bio_book.pk) + + # M2M relationship ----- + request = self.request_factory.get('/', {'books_contributed__isnull': 'True'}) + changelist = self.get_changelist(request, User, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.alfred]) + + # Make sure the last choice is None and is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'book') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[-1]['selected'], True) + self.assertEqual(choices[-1]['query_string'], '?books_contributed__isnull=True') + + request = self.request_factory.get('/', {'books_contributed__id__exact': self.django_book.pk}) + changelist = self.get_changelist(request, User, modeladmin) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'book') + choice = select_by(filterspec.choices(changelist), "display", self.django_book.title) + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?books_contributed__id__exact=%d' % self.django_book.pk) + + def test_booleanfieldlistfilter(self): + modeladmin = BookAdmin(Book, site) + self.verify_booleanfieldlistfilter(modeladmin) + + def test_booleanfieldlistfilter_tuple(self): + modeladmin = BookAdminWithTupleBooleanFilter(Book, site) + self.verify_booleanfieldlistfilter(modeladmin) + + def verify_booleanfieldlistfilter(self, modeladmin): + request = self.request_factory.get('/') + changelist = self.get_changelist(request, Book, modeladmin) + + request = self.request_factory.get('/', {'is_best_seller__exact': 0}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.bio_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][3] + self.assertEqual(force_text(filterspec.title), 'is best seller') + choice = select_by(filterspec.choices(changelist), "display", "No") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?is_best_seller__exact=0') + + request = self.request_factory.get('/', {'is_best_seller__exact': 1}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][3] + self.assertEqual(force_text(filterspec.title), 'is best seller') + choice = select_by(filterspec.choices(changelist), "display", "Yes") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?is_best_seller__exact=1') + + request = self.request_factory.get('/', {'is_best_seller__isnull': 'True'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.django_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][3] + self.assertEqual(force_text(filterspec.title), 'is best seller') + choice = select_by(filterspec.choices(changelist), "display", "Unknown") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?is_best_seller__isnull=True') + + def test_simplelistfilter(self): + modeladmin = DecadeFilterBookAdmin(Book, site) + + # Make sure that the first option is 'All' --------------------------- + + request = self.request_factory.get('/', {}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), list(Book.objects.all().order_by('-id'))) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[0]['display'], 'All') + self.assertEqual(choices[0]['selected'], True) + self.assertEqual(choices[0]['query_string'], '?') + + # Look for books in the 1980s ---------------------------------------- + + request = self.request_factory.get('/', {'publication-decade': 'the 80s'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), []) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[1]['display'], 'the 1980\'s') + self.assertEqual(choices[1]['selected'], True) + self.assertEqual(choices[1]['query_string'], '?publication-decade=the+80s') + + # Look for books in the 1990s ---------------------------------------- + + request = self.request_factory.get('/', {'publication-decade': 'the 90s'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.bio_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[2]['display'], 'the 1990\'s') + self.assertEqual(choices[2]['selected'], True) + self.assertEqual(choices[2]['query_string'], '?publication-decade=the+90s') + + # Look for books in the 2000s ---------------------------------------- + + request = self.request_factory.get('/', {'publication-decade': 'the 00s'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[3]['display'], 'the 2000\'s') + self.assertEqual(choices[3]['selected'], True) + self.assertEqual(choices[3]['query_string'], '?publication-decade=the+00s') + + # Combine multiple filters ------------------------------------------- + + request = self.request_factory.get('/', {'publication-decade': 'the 00s', 'author__id__exact': self.alfred.pk}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.djangonaut_book]) + + # Make sure the correct choices are selected + filterspec = changelist.get_filters(request)[0][1] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[3]['display'], 'the 2000\'s') + self.assertEqual(choices[3]['selected'], True) + self.assertEqual(choices[3]['query_string'], '?author__id__exact=%s&publication-decade=the+00s' % self.alfred.pk) + + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'Verbose Author') + choice = select_by(filterspec.choices(changelist), "display", "alfred") + self.assertEqual(choice['selected'], True) + self.assertEqual(choice['query_string'], '?author__id__exact=%s&publication-decade=the+00s' % self.alfred.pk) + + def test_listfilter_without_title(self): + """ + Any filter must define a title. + """ + modeladmin = DecadeFilterBookAdminWithoutTitle(Book, site) + request = self.request_factory.get('/', {}) + six.assertRaisesRegex(self, ImproperlyConfigured, + "The list filter 'DecadeListFilterWithoutTitle' does not specify a 'title'.", + self.get_changelist, request, Book, modeladmin) + + def test_simplelistfilter_without_parameter(self): + """ + Any SimpleListFilter must define a parameter_name. + """ + modeladmin = DecadeFilterBookAdminWithoutParameter(Book, site) + request = self.request_factory.get('/', {}) + six.assertRaisesRegex(self, ImproperlyConfigured, + "The list filter 'DecadeListFilterWithoutParameter' does not specify a 'parameter_name'.", + self.get_changelist, request, Book, modeladmin) + + def test_simplelistfilter_with_none_returning_lookups(self): + """ + A SimpleListFilter lookups method can return None but disables the + filter completely. + """ + modeladmin = DecadeFilterBookAdminWithNoneReturningLookups(Book, site) + request = self.request_factory.get('/', {}) + changelist = self.get_changelist(request, Book, modeladmin) + filterspec = changelist.get_filters(request)[0] + self.assertEqual(len(filterspec), 0) + + def test_filter_with_failing_queryset(self): + """ + Ensure that when a filter's queryset method fails, it fails loudly and + the corresponding exception doesn't get swallowed. + Refs #17828. + """ + modeladmin = DecadeFilterBookAdminWithFailingQueryset(Book, site) + request = self.request_factory.get('/', {}) + self.assertRaises(ZeroDivisionError, self.get_changelist, request, Book, modeladmin) + + def test_simplelistfilter_with_queryset_based_lookups(self): + modeladmin = DecadeFilterBookAdminWithQuerysetBasedLookups(Book, site) + request = self.request_factory.get('/', {}) + changelist = self.get_changelist(request, Book, modeladmin) + + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(len(choices), 3) + + self.assertEqual(choices[0]['display'], 'All') + self.assertEqual(choices[0]['selected'], True) + self.assertEqual(choices[0]['query_string'], '?') + + self.assertEqual(choices[1]['display'], 'the 1990\'s') + self.assertEqual(choices[1]['selected'], False) + self.assertEqual(choices[1]['query_string'], '?publication-decade=the+90s') + + self.assertEqual(choices[2]['display'], 'the 2000\'s') + self.assertEqual(choices[2]['selected'], False) + self.assertEqual(choices[2]['query_string'], '?publication-decade=the+00s') + + def test_two_characters_long_field(self): + """ + Ensure that list_filter works with two-characters long field names. + Refs #16080. + """ + modeladmin = BookAdmin(Book, site) + request = self.request_factory.get('/', {'no': '207'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.bio_book]) + + filterspec = changelist.get_filters(request)[0][-1] + self.assertEqual(force_text(filterspec.title), 'number') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[2]['selected'], True) + self.assertEqual(choices[2]['query_string'], '?no=207') + + def test_parameter_ends_with__in__or__isnull(self): + """ + Ensure that a SimpleListFilter's parameter name is not mistaken for a + model field if it ends with '__isnull' or '__in'. + Refs #17091. + """ + + # When it ends with '__in' ----------------------------------------- + modeladmin = DecadeFilterBookAdminParameterEndsWith__In(Book, site) + request = self.request_factory.get('/', {'decade__in': 'the 90s'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.bio_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[2]['display'], 'the 1990\'s') + self.assertEqual(choices[2]['selected'], True) + self.assertEqual(choices[2]['query_string'], '?decade__in=the+90s') + + # When it ends with '__isnull' --------------------------------------- + modeladmin = DecadeFilterBookAdminParameterEndsWith__Isnull(Book, site) + request = self.request_factory.get('/', {'decade__isnull': 'the 90s'}) + changelist = self.get_changelist(request, Book, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.bio_book]) + + # Make sure the correct choice is selected + filterspec = changelist.get_filters(request)[0][0] + self.assertEqual(force_text(filterspec.title), 'publication decade') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[2]['display'], 'the 1990\'s') + self.assertEqual(choices[2]['selected'], True) + self.assertEqual(choices[2]['query_string'], '?decade__isnull=the+90s') + + def test_lookup_with_non_string_value(self): + """ + Ensure choices are set the selected class when using non-string values + for lookups in SimpleListFilters. + Refs #19318 + """ + + modeladmin = DepartmentFilterEmployeeAdmin(Employee, site) + request = self.request_factory.get('/', {'department': self.john.pk}) + changelist = self.get_changelist(request, Employee, modeladmin) + + queryset = changelist.get_query_set(request) + + self.assertEqual(list(queryset), [self.john]) + + filterspec = changelist.get_filters(request)[0][-1] + self.assertEqual(force_text(filterspec.title), 'department') + choices = list(filterspec.choices(changelist)) + self.assertEqual(choices[1]['display'], 'DEV') + self.assertEqual(choices[1]['selected'], True) + self.assertEqual(choices[1]['query_string'], '?department=%s' % self.john.pk) + + def test_fk_with_to_field(self): + """ + Ensure that a filter on a FK respects the FK's to_field attribute. + Refs #17972. + """ + modeladmin = EmployeeAdmin(Employee, site) + + request = self.request_factory.get('/', {}) + changelist = self.get_changelist(request, Employee, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.jack, self.john]) + + filterspec = changelist.get_filters(request)[0][-1] + self.assertEqual(force_text(filterspec.title), 'department') + choices = list(filterspec.choices(changelist)) + + self.assertEqual(choices[0]['display'], 'All') + self.assertEqual(choices[0]['selected'], True) + self.assertEqual(choices[0]['query_string'], '?') + + self.assertEqual(choices[1]['display'], 'Development') + self.assertEqual(choices[1]['selected'], False) + self.assertEqual(choices[1]['query_string'], '?department__code__exact=DEV') + + self.assertEqual(choices[2]['display'], 'Design') + self.assertEqual(choices[2]['selected'], False) + self.assertEqual(choices[2]['query_string'], '?department__code__exact=DSN') + + # Filter by Department=='Development' -------------------------------- + + request = self.request_factory.get('/', {'department__code__exact': 'DEV'}) + changelist = self.get_changelist(request, Employee, modeladmin) + + # Make sure the correct queryset is returned + queryset = changelist.get_query_set(request) + self.assertEqual(list(queryset), [self.john]) + + filterspec = changelist.get_filters(request)[0][-1] + self.assertEqual(force_text(filterspec.title), 'department') + choices = list(filterspec.choices(changelist)) + + self.assertEqual(choices[0]['display'], 'All') + self.assertEqual(choices[0]['selected'], False) + self.assertEqual(choices[0]['query_string'], '?') + + self.assertEqual(choices[1]['display'], 'Development') + self.assertEqual(choices[1]['selected'], True) + self.assertEqual(choices[1]['query_string'], '?department__code__exact=DEV') + + self.assertEqual(choices[2]['display'], 'Design') + self.assertEqual(choices[2]['selected'], False) + self.assertEqual(choices[2]['query_string'], '?department__code__exact=DSN') diff --git a/tests/admin_inlines/__init__.py b/tests/admin_inlines/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_inlines/admin.py b/tests/admin_inlines/admin.py new file mode 100644 index 0000000000..44671d0ac4 --- /dev/null +++ b/tests/admin_inlines/admin.py @@ -0,0 +1,153 @@ +from __future__ import absolute_import + +from django.contrib import admin +from django import forms + +from .models import * + +site = admin.AdminSite(name="admin") + + +class BookInline(admin.TabularInline): + model = Author.books.through + + +class AuthorAdmin(admin.ModelAdmin): + inlines = [BookInline] + + +class InnerInline(admin.StackedInline): + model = Inner + can_delete = False + readonly_fields = ('readonly',) # For bug #13174 tests. + + +class HolderAdmin(admin.ModelAdmin): + + class Media: + js = ('my_awesome_admin_scripts.js',) + + +class ReadOnlyInlineInline(admin.TabularInline): + model = ReadOnlyInline + readonly_fields = ['name'] + + +class InnerInline2(admin.StackedInline): + model = Inner2 + + class Media: + js = ('my_awesome_inline_scripts.js',) + + +class InnerInline3(admin.StackedInline): + model = Inner3 + + class Media: + js = ('my_awesome_inline_scripts.js',) + + +class TitleForm(forms.ModelForm): + + def clean(self): + cleaned_data = self.cleaned_data + title1 = cleaned_data.get("title1") + title2 = cleaned_data.get("title2") + if title1 != title2: + raise forms.ValidationError("The two titles must be the same") + return cleaned_data + + +class TitleInline(admin.TabularInline): + model = Title + form = TitleForm + extra = 1 + + +class Inner4StackedInline(admin.StackedInline): + model = Inner4Stacked + + +class Inner4TabularInline(admin.TabularInline): + model = Inner4Tabular + + +class Holder4Admin(admin.ModelAdmin): + inlines = [Inner4StackedInline, Inner4TabularInline] + + +class InlineWeakness(admin.TabularInline): + model = ShoppingWeakness + extra = 1 + + +class QuestionInline(admin.TabularInline): + model = Question + readonly_fields=['call_me'] + + def call_me(self, obj): + return 'Callable in QuestionInline' + + +class PollAdmin(admin.ModelAdmin): + inlines = [QuestionInline] + + def call_me(self, obj): + return 'Callable in PollAdmin' + + +class ChapterInline(admin.TabularInline): + model = Chapter + readonly_fields=['call_me'] + + def call_me(self, obj): + return 'Callable in ChapterInline' + + +class NovelAdmin(admin.ModelAdmin): + inlines = [ChapterInline] + + +class ConsigliereInline(admin.TabularInline): + model = Consigliere + + +class SottoCapoInline(admin.TabularInline): + model = SottoCapo + + +class ProfileInline(admin.TabularInline): + model = Profile + extra = 1 + + +# admin for #18433 +class ChildModel1Inline(admin.TabularInline): + model = ChildModel1 + + +class ChildModel2Inline(admin.StackedInline): + model = ChildModel2 + +# admin for #19524 +class SightingInline(admin.TabularInline): + model = Sighting + +site.register(TitleCollection, inlines=[TitleInline]) +# Test bug #12561 and #12778 +# only ModelAdmin media +site.register(Holder, HolderAdmin, inlines=[InnerInline]) +# ModelAdmin and Inline media +site.register(Holder2, HolderAdmin, inlines=[InnerInline2]) +# only Inline media +site.register(Holder3, inlines=[InnerInline3]) + +site.register(Poll, PollAdmin) +site.register(Novel, NovelAdmin) +site.register(Fashionista, inlines=[InlineWeakness]) +site.register(Holder4, Holder4Admin) +site.register(Author, AuthorAdmin) +site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline, ReadOnlyInlineInline]) +site.register(ProfileCollection, inlines=[ProfileInline]) +site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline]) +site.register(ExtraTerrestrial, inlines=[SightingInline]) diff --git a/tests/admin_inlines/fixtures/admin-views-users.xml b/tests/admin_inlines/fixtures/admin-views-users.xml new file mode 100644 index 0000000000..aba8f4aace --- /dev/null +++ b/tests/admin_inlines/fixtures/admin-views-users.xml @@ -0,0 +1,17 @@ + + + + super + Super + User + super@example.com + sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158 + True + True + True + 2007-05-30 13:20:10 + 2007-05-30 13:20:10 + + + + diff --git a/tests/admin_inlines/models.py b/tests/admin_inlines/models.py new file mode 100644 index 0000000000..31f5ecc46c --- /dev/null +++ b/tests/admin_inlines/models.py @@ -0,0 +1,198 @@ +""" +Testing of admin inline formsets. + +""" +from __future__ import unicode_literals + +from django.db import models +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes import generic +from django.utils.encoding import python_2_unicode_compatible + + +@python_2_unicode_compatible +class Parent(models.Model): + name = models.CharField(max_length=50) + + def __str__(self): + return self.name + + +@python_2_unicode_compatible +class Teacher(models.Model): + name = models.CharField(max_length=50) + + def __str__(self): + return self.name + + +@python_2_unicode_compatible +class Child(models.Model): + name = models.CharField(max_length=50) + teacher = models.ForeignKey(Teacher) + + content_type = models.ForeignKey(ContentType) + object_id = models.PositiveIntegerField() + parent = generic.GenericForeignKey() + + def __str__(self): + return 'I am %s, a child of %s' % (self.name, self.parent) + + +class Book(models.Model): + name = models.CharField(max_length=50) + + +class Author(models.Model): + name = models.CharField(max_length=50) + books = models.ManyToManyField(Book) + + +class Holder(models.Model): + dummy = models.IntegerField() + + +class Inner(models.Model): + dummy = models.IntegerField() + holder = models.ForeignKey(Holder) + readonly = models.CharField("Inner readonly label", max_length=1) + + def get_absolute_url(self): + return '/inner/' + + +class Holder2(models.Model): + dummy = models.IntegerField() + + +class Inner2(models.Model): + dummy = models.IntegerField() + holder = models.ForeignKey(Holder2) + +class Holder3(models.Model): + dummy = models.IntegerField() + + +class Inner3(models.Model): + dummy = models.IntegerField() + holder = models.ForeignKey(Holder3) + +# Models for ticket #8190 + +class Holder4(models.Model): + dummy = models.IntegerField() + +class Inner4Stacked(models.Model): + dummy = models.IntegerField(help_text="Awesome stacked help text is awesome.") + holder = models.ForeignKey(Holder4) + +class Inner4Tabular(models.Model): + dummy = models.IntegerField(help_text="Awesome tabular help text is awesome.") + holder = models.ForeignKey(Holder4) + +# Models for #12749 + +class Person(models.Model): + firstname = models.CharField(max_length=15) + +class OutfitItem(models.Model): + name = models.CharField(max_length=15) + +class Fashionista(models.Model): + person = models.OneToOneField(Person, primary_key=True) + weaknesses = models.ManyToManyField(OutfitItem, through='ShoppingWeakness', blank=True) + +class ShoppingWeakness(models.Model): + fashionista = models.ForeignKey(Fashionista) + item = models.ForeignKey(OutfitItem) + +# Models for #13510 + +class TitleCollection(models.Model): + pass + +class Title(models.Model): + collection = models.ForeignKey(TitleCollection, blank=True, null=True) + title1 = models.CharField(max_length=100) + title2 = models.CharField(max_length=100) + +# Models for #15424 + +class Poll(models.Model): + name = models.CharField(max_length=40) + +class Question(models.Model): + poll = models.ForeignKey(Poll) + +class Novel(models.Model): + name = models.CharField(max_length=40) + +class Chapter(models.Model): + novel = models.ForeignKey(Novel) + +# Models for #16838 + +class CapoFamiglia(models.Model): + name = models.CharField(max_length=100) + + +class Consigliere(models.Model): + name = models.CharField(max_length=100, help_text='Help text for Consigliere') + capo_famiglia = models.ForeignKey(CapoFamiglia, related_name='+') + + +class SottoCapo(models.Model): + name = models.CharField(max_length=100) + capo_famiglia = models.ForeignKey(CapoFamiglia, related_name='+') + + +class ReadOnlyInline(models.Model): + name = models.CharField(max_length=100, help_text='Help text for ReadOnlyInline') + capo_famiglia = models.ForeignKey(CapoFamiglia) + + +# Models for #18433 + +class ParentModelWithCustomPk(models.Model): + my_own_pk = models.CharField(max_length=100, primary_key=True) + name = models.CharField(max_length=100) + + +class ChildModel1(models.Model): + my_own_pk = models.CharField(max_length=100, primary_key=True) + name = models.CharField(max_length=100) + parent = models.ForeignKey(ParentModelWithCustomPk) + + def get_absolute_url(self): + return '/child_model1/' + + +class ChildModel2(models.Model): + my_own_pk = models.CharField(max_length=100, primary_key=True) + name = models.CharField(max_length=100) + parent = models.ForeignKey(ParentModelWithCustomPk) + + def get_absolute_url(self): + return '/child_model2/' + +# Models for #19524 + +class LifeForm(models.Model): + pass + +class ExtraTerrestrial(LifeForm): + name = models.CharField(max_length=100) + +class Sighting(models.Model): + et = models.ForeignKey(ExtraTerrestrial) + place = models.CharField(max_length=100) + +# Other models + +class ProfileCollection(models.Model): + pass + +class Profile(models.Model): + collection = models.ForeignKey(ProfileCollection, blank=True, null=True) + first_name = models.CharField(max_length=100) + last_name = models.CharField(max_length=100) diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py new file mode 100644 index 0000000000..7d00ea40de --- /dev/null +++ b/tests/admin_inlines/tests.py @@ -0,0 +1,617 @@ +from __future__ import absolute_import, unicode_literals + +from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase +from django.contrib.admin.helpers import InlineAdminForm +from django.contrib.auth.models import User, Permission +from django.contrib.contenttypes.models import ContentType +from django.test import TestCase +from django.test.utils import override_settings + +# local test models +from .admin import InnerInline, TitleInline, site +from .models import (Holder, Inner, Holder2, Inner2, Holder3, Inner3, Person, + OutfitItem, Fashionista, Teacher, Parent, Child, Author, Book, Profile, + ProfileCollection, ParentModelWithCustomPk, ChildModel1, ChildModel2, + Sighting, Title) + + +@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) +class TestInline(TestCase): + urls = "regressiontests.admin_inlines.urls" + fixtures = ['admin-views-users.xml'] + + def setUp(self): + holder = Holder(dummy=13) + holder.save() + Inner(dummy=42, holder=holder).save() + self.change_url = '/admin/admin_inlines/holder/%i/' % holder.id + + result = self.client.login(username='super', password='secret') + self.assertEqual(result, True) + + def tearDown(self): + self.client.logout() + + def test_can_delete(self): + """ + can_delete should be passed to inlineformset factory. + """ + response = self.client.get(self.change_url) + inner_formset = response.context['inline_admin_formsets'][0].formset + expected = InnerInline.can_delete + actual = inner_formset.can_delete + self.assertEqual(expected, actual, 'can_delete must be equal') + + def test_readonly_stacked_inline_label(self): + """Bug #13174.""" + holder = Holder.objects.create(dummy=42) + inner = Inner.objects.create(holder=holder, dummy=42, readonly='') + response = self.client.get('/admin/admin_inlines/holder/%i/' + % holder.id) + self.assertContains(response, '') + + def test_many_to_many_inlines(self): + "Autogenerated many-to-many inlines are displayed correctly (#13407)" + response = self.client.get('/admin/admin_inlines/author/add/') + # The heading for the m2m inline block uses the right text + self.assertContains(response, '

Author-book relationships

') + # The "add another" label is correct + self.assertContains(response, 'Add another Author-Book Relationship') + # The '+' is dropped from the autogenerated form prefix (Author_books+) + self.assertContains(response, 'id="id_Author_books-TOTAL_FORMS"') + + def test_inline_primary(self): + person = Person.objects.create(firstname='Imelda') + item = OutfitItem.objects.create(name='Shoes') + # Imelda likes shoes, but can't cary her own bags. + data = { + 'shoppingweakness_set-TOTAL_FORMS': 1, + 'shoppingweakness_set-INITIAL_FORMS': 0, + 'shoppingweakness_set-MAX_NUM_FORMS': 0, + '_save': 'Save', + 'person': person.id, + 'max_weight': 0, + 'shoppingweakness_set-0-item': item.id, + } + response = self.client.post('/admin/admin_inlines/fashionista/add/', data) + self.assertEqual(response.status_code, 302) + self.assertEqual(len(Fashionista.objects.filter(person__firstname='Imelda')), 1) + + def test_tabular_non_field_errors(self): + """ + Ensure that non_field_errors are displayed correctly, including the + right value for colspan. Refs #13510. + """ + data = { + 'title_set-TOTAL_FORMS': 1, + 'title_set-INITIAL_FORMS': 0, + 'title_set-MAX_NUM_FORMS': 0, + '_save': 'Save', + 'title_set-0-title1': 'a title', + 'title_set-0-title2': 'a different title', + } + response = self.client.post('/admin/admin_inlines/titlecollection/add/', data) + # Here colspan is "4": two fields (title1 and title2), one hidden field and the delete checkbock. + self.assertContains(response, '
  • The two titles must be the same
') + + def test_no_parent_callable_lookup(self): + """Admin inline `readonly_field` shouldn't invoke parent ModelAdmin callable""" + # Identically named callable isn't present in the parent ModelAdmin, + # rendering of the add view shouldn't explode + response = self.client.get('/admin/admin_inlines/novel/add/') + self.assertEqual(response.status_code, 200) + # View should have the child inlines section + self.assertContains(response, '
') + + def test_callable_lookup(self): + """Admin inline should invoke local callable when its name is listed in readonly_fields""" + response = self.client.get('/admin/admin_inlines/poll/add/') + self.assertEqual(response.status_code, 200) + # Add parent object view should have the child inlines section + self.assertContains(response, '
') + # The right callabe should be used for the inline readonly_fields + # column cells + self.assertContains(response, '

Callable in QuestionInline

') + + def test_help_text(self): + """ + Ensure that the inlines' model field help texts are displayed when + using both the stacked and tabular layouts. + Ref #8190. + """ + response = self.client.get('/admin/admin_inlines/holder4/add/') + self.assertContains(response, '

Awesome stacked help text is awesome.

', 4) + self.assertContains(response, '(Awesome tabular help text is awesome.)', 1) + # ReadOnly fields + response = self.client.get('/admin/admin_inlines/capofamiglia/add/') + self.assertContains(response, '(Help text for ReadOnlyInline)', 1) + + + def test_non_related_name_inline(self): + """ + Ensure that multiple inlines with related_name='+' have correct form + prefixes. Bug #16838. + """ + response = self.client.get('/admin/admin_inlines/capofamiglia/add/') + + self.assertContains(response, + '', html=True) + self.assertContains(response, + '', html=True) + self.assertContains(response, + '', html=True) + + self.assertContains(response, + '', html=True) + self.assertContains(response, + '', html=True) + self.assertContains(response, + '', html=True) + + @override_settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True) + def test_localize_pk_shortcut(self): + """ + Ensure that the "View on Site" link is correct for locales that use + thousand separators + """ + holder = Holder.objects.create(pk=123456789, dummy=42) + inner = Inner.objects.create(pk=987654321, holder=holder, dummy=42, readonly='') + response = self.client.get('/admin/admin_inlines/holder/%i/' % holder.id) + inner_shortcut = 'r/%s/%s/'%(ContentType.objects.get_for_model(inner).pk, inner.pk) + self.assertContains(response, inner_shortcut) + + def test_custom_pk_shortcut(self): + """ + Ensure that the "View on Site" link is correct for models with a + custom primary key field. Bug #18433. + """ + parent = ParentModelWithCustomPk.objects.create(my_own_pk="foo", name="Foo") + child1 = ChildModel1.objects.create(my_own_pk="bar", name="Bar", parent=parent) + child2 = ChildModel2.objects.create(my_own_pk="baz", name="Baz", parent=parent) + response = self.client.get('/admin/admin_inlines/parentmodelwithcustompk/foo/') + child1_shortcut = 'r/%s/%s/'%(ContentType.objects.get_for_model(child1).pk, child1.pk) + child2_shortcut = 'r/%s/%s/'%(ContentType.objects.get_for_model(child2).pk, child2.pk) + self.assertContains(response, child1_shortcut) + self.assertContains(response, child2_shortcut) + + def test_create_inlines_on_inherited_model(self): + """ + Ensure that an object can be created with inlines when it inherits + another class. Bug #19524. + """ + data = { + 'name': 'Martian', + 'sighting_set-TOTAL_FORMS': 1, + 'sighting_set-INITIAL_FORMS': 0, + 'sighting_set-MAX_NUM_FORMS': 0, + 'sighting_set-0-place': 'Zone 51', + '_save': 'Save', + } + response = self.client.post('/admin/admin_inlines/extraterrestrial/add/', data) + self.assertEqual(response.status_code, 302) + self.assertEqual(Sighting.objects.filter(et__name='Martian').count(), 1) + + +@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) +class TestInlineMedia(TestCase): + urls = "regressiontests.admin_inlines.urls" + fixtures = ['admin-views-users.xml'] + + def setUp(self): + + result = self.client.login(username='super', password='secret') + self.assertEqual(result, True) + + def tearDown(self): + self.client.logout() + + def test_inline_media_only_base(self): + holder = Holder(dummy=13) + holder.save() + Inner(dummy=42, holder=holder).save() + change_url = '/admin/admin_inlines/holder/%i/' % holder.id + response = self.client.get(change_url) + self.assertContains(response, 'my_awesome_admin_scripts.js') + + def test_inline_media_only_inline(self): + holder = Holder3(dummy=13) + holder.save() + Inner3(dummy=42, holder=holder).save() + change_url = '/admin/admin_inlines/holder3/%i/' % holder.id + response = self.client.get(change_url) + self.assertContains(response, 'my_awesome_inline_scripts.js') + + def test_all_inline_media(self): + holder = Holder2(dummy=13) + holder.save() + Inner2(dummy=42, holder=holder).save() + change_url = '/admin/admin_inlines/holder2/%i/' % holder.id + response = self.client.get(change_url) + self.assertContains(response, 'my_awesome_admin_scripts.js') + self.assertContains(response, 'my_awesome_inline_scripts.js') + +class TestInlineAdminForm(TestCase): + urls = "regressiontests.admin_inlines.urls" + + def test_immutable_content_type(self): + """Regression for #9362 + The problem depends only on InlineAdminForm and its "original" + argument, so we can safely set the other arguments to None/{}. We just + need to check that the content_type argument of Child isn't altered by + the internals of the inline form.""" + + sally = Teacher.objects.create(name='Sally') + john = Parent.objects.create(name='John') + joe = Child.objects.create(name='Joe', teacher=sally, parent=john) + + iaf = InlineAdminForm(None, None, {}, {}, joe) + parent_ct = ContentType.objects.get_for_model(Parent) + self.assertEqual(iaf.original.content_type, parent_ct) + +class TestInlinePermissions(TestCase): + """ + Make sure the admin respects permissions for objects that are edited + inline. Refs #8060. + + """ + urls = "regressiontests.admin_inlines.urls" + + def setUp(self): + self.user = User(username='admin') + self.user.is_staff = True + self.user.is_active = True + self.user.set_password('secret') + self.user.save() + + self.author_ct = ContentType.objects.get_for_model(Author) + self.holder_ct = ContentType.objects.get_for_model(Holder2) + self.book_ct = ContentType.objects.get_for_model(Book) + self.inner_ct = ContentType.objects.get_for_model(Inner2) + + # User always has permissions to add and change Authors, and Holders, + # the main (parent) models of the inlines. Permissions on the inlines + # vary per test. + permission = Permission.objects.get(codename='add_author', content_type=self.author_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='change_author', content_type=self.author_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='add_holder2', content_type=self.holder_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='change_holder2', content_type=self.holder_ct) + self.user.user_permissions.add(permission) + + author = Author.objects.create(pk=1, name='The Author') + book = author.books.create(name='The inline Book') + self.author_change_url = '/admin/admin_inlines/author/%i/' % author.id + # Get the ID of the automatically created intermediate model for thw Author-Book m2m + author_book_auto_m2m_intermediate = Author.books.through.objects.get(author=author, book=book) + self.author_book_auto_m2m_intermediate_id = author_book_auto_m2m_intermediate.pk + + holder = Holder2.objects.create(dummy=13) + inner2 = Inner2.objects.create(dummy=42, holder=holder) + self.holder_change_url = '/admin/admin_inlines/holder2/%i/' % holder.id + self.inner2_id = inner2.id + + self.assertEqual( + self.client.login(username='admin', password='secret'), + True) + + def tearDown(self): + self.client.logout() + + def test_inline_add_m2m_noperm(self): + response = self.client.get('/admin/admin_inlines/author/add/') + # No change permission on books, so no inline + self.assertNotContains(response, '

Author-book relationships

') + self.assertNotContains(response, 'Add another Author-Book Relationship') + self.assertNotContains(response, 'id="id_Author_books-TOTAL_FORMS"') + + def test_inline_add_fk_noperm(self): + response = self.client.get('/admin/admin_inlines/holder2/add/') + # No permissions on Inner2s, so no inline + self.assertNotContains(response, '

Inner2s

') + self.assertNotContains(response, 'Add another Inner2') + self.assertNotContains(response, 'id="id_inner2_set-TOTAL_FORMS"') + + def test_inline_change_m2m_noperm(self): + response = self.client.get(self.author_change_url) + # No change permission on books, so no inline + self.assertNotContains(response, '

Author-book relationships

') + self.assertNotContains(response, 'Add another Author-Book Relationship') + self.assertNotContains(response, 'id="id_Author_books-TOTAL_FORMS"') + + def test_inline_change_fk_noperm(self): + response = self.client.get(self.holder_change_url) + # No permissions on Inner2s, so no inline + self.assertNotContains(response, '

Inner2s

') + self.assertNotContains(response, 'Add another Inner2') + self.assertNotContains(response, 'id="id_inner2_set-TOTAL_FORMS"') + + def test_inline_add_m2m_add_perm(self): + permission = Permission.objects.get(codename='add_book', content_type=self.book_ct) + self.user.user_permissions.add(permission) + response = self.client.get('/admin/admin_inlines/author/add/') + # No change permission on Books, so no inline + self.assertNotContains(response, '

Author-book relationships

') + self.assertNotContains(response, 'Add another Author-Book Relationship') + self.assertNotContains(response, 'id="id_Author_books-TOTAL_FORMS"') + + def test_inline_add_fk_add_perm(self): + permission = Permission.objects.get(codename='add_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + response = self.client.get('/admin/admin_inlines/holder2/add/') + # Add permission on inner2s, so we get the inline + self.assertContains(response, '

Inner2s

') + self.assertContains(response, 'Add another Inner2') + self.assertContains(response, '', html=True) + + def test_inline_change_m2m_add_perm(self): + permission = Permission.objects.get(codename='add_book', content_type=self.book_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.author_change_url) + # No change permission on books, so no inline + self.assertNotContains(response, '

Author-book relationships

') + self.assertNotContains(response, 'Add another Author-Book Relationship') + self.assertNotContains(response, 'id="id_Author_books-TOTAL_FORMS"') + self.assertNotContains(response, 'id="id_Author_books-0-DELETE"') + + def test_inline_change_m2m_change_perm(self): + permission = Permission.objects.get(codename='change_book', content_type=self.book_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.author_change_url) + # We have change perm on books, so we can add/change/delete inlines + self.assertContains(response, '

Author-book relationships

') + self.assertContains(response, 'Add another Author-Book Relationship') + self.assertContains(response, '', html=True) + self.assertContains(response, '' % self.author_book_auto_m2m_intermediate_id, html=True) + self.assertContains(response, 'id="id_Author_books-0-DELETE"') + + def test_inline_change_fk_add_perm(self): + permission = Permission.objects.get(codename='add_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.holder_change_url) + # Add permission on inner2s, so we can add but not modify existing + self.assertContains(response, '

Inner2s

') + self.assertContains(response, 'Add another Inner2') + # 3 extra forms only, not the existing instance form + self.assertContains(response, '', html=True) + self.assertNotContains(response, '' % self.inner2_id, html=True) + + def test_inline_change_fk_change_perm(self): + permission = Permission.objects.get(codename='change_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.holder_change_url) + # Change permission on inner2s, so we can change existing but not add new + self.assertContains(response, '

Inner2s

') + # Just the one form for existing instances + self.assertContains(response, '', html=True) + self.assertContains(response, '' % self.inner2_id, html=True) + # max-num 0 means we can't add new ones + self.assertContains(response, '', html=True) + + def test_inline_change_fk_add_change_perm(self): + permission = Permission.objects.get(codename='add_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='change_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.holder_change_url) + # Add/change perm, so we can add new and change existing + self.assertContains(response, '

Inner2s

') + # One form for existing instance and three extra for new + self.assertContains(response, '', html=True) + self.assertContains(response, '' % self.inner2_id, html=True) + + def test_inline_change_fk_change_del_perm(self): + permission = Permission.objects.get(codename='change_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='delete_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.holder_change_url) + # Change/delete perm on inner2s, so we can change/delete existing + self.assertContains(response, '

Inner2s

') + # One form for existing instance only, no new + self.assertContains(response, '', html=True) + self.assertContains(response, '' % self.inner2_id, html=True) + self.assertContains(response, 'id="id_inner2_set-0-DELETE"') + + + def test_inline_change_fk_all_perms(self): + permission = Permission.objects.get(codename='add_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='change_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + permission = Permission.objects.get(codename='delete_inner2', content_type=self.inner_ct) + self.user.user_permissions.add(permission) + response = self.client.get(self.holder_change_url) + # All perms on inner2s, so we can add/change/delete + self.assertContains(response, '

Inner2s

') + # One form for existing instance only, three for new + self.assertContains(response, '', html=True) + self.assertContains(response, '' % self.inner2_id, html=True) + self.assertContains(response, 'id="id_inner2_set-0-DELETE"') + + +@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',)) +class SeleniumFirefoxTests(AdminSeleniumWebDriverTestCase): + webdriver_class = 'selenium.webdriver.firefox.webdriver.WebDriver' + fixtures = ['admin-views-users.xml'] + urls = "regressiontests.admin_inlines.urls" + + def test_add_stackeds(self): + """ + Ensure that the "Add another XXX" link correctly adds items to the + stacked formset. + """ + self.admin_login(username='super', password='secret') + self.selenium.get('%s%s' % (self.live_server_url, + '/admin/admin_inlines/holder4/add/')) + + inline_id = '#inner4stacked_set-group' + rows_length = lambda: len(self.selenium.find_elements_by_css_selector( + '%s .dynamic-inner4stacked_set' % inline_id)) + self.assertEqual(rows_length(), 3) + + add_button = self.selenium.find_element_by_link_text( + 'Add another Inner4 Stacked') + add_button.click() + + self.assertEqual(rows_length(), 4) + + def test_delete_stackeds(self): + self.admin_login(username='super', password='secret') + self.selenium.get('%s%s' % (self.live_server_url, + '/admin/admin_inlines/holder4/add/')) + + inline_id = '#inner4stacked_set-group' + rows_length = lambda: len(self.selenium.find_elements_by_css_selector( + '%s .dynamic-inner4stacked_set' % inline_id)) + self.assertEqual(rows_length(), 3) + + add_button = self.selenium.find_element_by_link_text( + 'Add another Inner4 Stacked') + add_button.click() + add_button.click() + + self.assertEqual(rows_length(), 5, msg="sanity check") + for delete_link in self.selenium.find_elements_by_css_selector( + '%s .inline-deletelink' % inline_id): + delete_link.click() + self.assertEqual(rows_length(), 3) + + def test_add_inlines(self): + """ + Ensure that the "Add another XXX" link correctly adds items to the + inline form. + """ + from selenium.common.exceptions import TimeoutException + self.admin_login(username='super', password='secret') + self.selenium.get('%s%s' % (self.live_server_url, + '/admin/admin_inlines/profilecollection/add/')) + + # Check that there's only one inline to start with and that it has the + # correct ID. + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')), 1) + self.assertEqual(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')[0].get_attribute('id'), + 'profile_set-0') + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set#profile_set-0 input[name=profile_set-0-first_name]')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set#profile_set-0 input[name=profile_set-0-last_name]')), 1) + + # Add an inline + self.selenium.find_element_by_link_text('Add another Profile').click() + + # Check that the inline has been added, that it has the right id, and + # that it contains the right fields. + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')), 2) + self.assertEqual(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')[1].get_attribute('id'), 'profile_set-1') + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set#profile_set-1 input[name=profile_set-1-first_name]')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set#profile_set-1 input[name=profile_set-1-last_name]')), 1) + + # Let's add another one to be sure + self.selenium.find_element_by_link_text('Add another Profile').click() + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')), 3) + self.assertEqual(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set')[2].get_attribute('id'), 'profile_set-2') + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set#profile_set-2 input[name=profile_set-2-first_name]')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '.dynamic-profile_set#profile_set-2 input[name=profile_set-2-last_name]')), 1) + + # Enter some data and click 'Save' + self.selenium.find_element_by_name('profile_set-0-first_name').send_keys('0 first name 1') + self.selenium.find_element_by_name('profile_set-0-last_name').send_keys('0 last name 2') + self.selenium.find_element_by_name('profile_set-1-first_name').send_keys('1 first name 1') + self.selenium.find_element_by_name('profile_set-1-last_name').send_keys('1 last name 2') + self.selenium.find_element_by_name('profile_set-2-first_name').send_keys('2 first name 1') + self.selenium.find_element_by_name('profile_set-2-last_name').send_keys('2 last name 2') + + self.selenium.find_element_by_xpath('//input[@value="Save"]').click() + self.wait_page_loaded() + + # Check that the objects have been created in the database + self.assertEqual(ProfileCollection.objects.all().count(), 1) + self.assertEqual(Profile.objects.all().count(), 3) + + def test_delete_inlines(self): + self.admin_login(username='super', password='secret') + self.selenium.get('%s%s' % (self.live_server_url, + '/admin/admin_inlines/profilecollection/add/')) + + # Add a few inlines + self.selenium.find_element_by_link_text('Add another Profile').click() + self.selenium.find_element_by_link_text('Add another Profile').click() + self.selenium.find_element_by_link_text('Add another Profile').click() + self.selenium.find_element_by_link_text('Add another Profile').click() + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '#profile_set-group table tr.dynamic-profile_set')), 5) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-0')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-1')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-2')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-3')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-4')), 1) + + # Click on a few delete buttons + self.selenium.find_element_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-1 td.delete a').click() + self.selenium.find_element_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-2 td.delete a').click() + # Verify that they're gone and that the IDs have been re-sequenced + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + '#profile_set-group table tr.dynamic-profile_set')), 3) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-0')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-1')), 1) + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + 'form#profilecollection_form tr.dynamic-profile_set#profile_set-2')), 1) + + def test_alternating_rows(self): + self.admin_login(username='super', password='secret') + self.selenium.get('%s%s' % (self.live_server_url, + '/admin/admin_inlines/profilecollection/add/')) + + # Add a few inlines + self.selenium.find_element_by_link_text('Add another Profile').click() + self.selenium.find_element_by_link_text('Add another Profile').click() + + row_selector = 'form#profilecollection_form tr.dynamic-profile_set' + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + "%s.row1" % row_selector)), 2, msg="Expect two row1 styled rows") + self.assertEqual(len(self.selenium.find_elements_by_css_selector( + "%s.row2" % row_selector)), 1, msg="Expect one row2 styled row") + + +class SeleniumChromeTests(SeleniumFirefoxTests): + webdriver_class = 'selenium.webdriver.chrome.webdriver.WebDriver' + +class SeleniumIETests(SeleniumFirefoxTests): + webdriver_class = 'selenium.webdriver.ie.webdriver.WebDriver' diff --git a/tests/admin_inlines/urls.py b/tests/admin_inlines/urls.py new file mode 100644 index 0000000000..cf18ef97cf --- /dev/null +++ b/tests/admin_inlines/urls.py @@ -0,0 +1,10 @@ +from __future__ import absolute_import + +from django.conf.urls import patterns, include + +from . import admin + + +urlpatterns = patterns('', + (r'^admin/', include(admin.site.urls)), +) diff --git a/tests/admin_ordering/__init__.py b/tests/admin_ordering/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_ordering/models.py b/tests/admin_ordering/models.py new file mode 100644 index 0000000000..195b3c3694 --- /dev/null +++ b/tests/admin_ordering/models.py @@ -0,0 +1,35 @@ +# coding: utf-8 +from django.contrib import admin +from django.db import models + + +class Band(models.Model): + name = models.CharField(max_length=100) + bio = models.TextField() + rank = models.IntegerField() + + class Meta: + ordering = ('name',) + +class Song(models.Model): + band = models.ForeignKey(Band) + name = models.CharField(max_length=100) + duration = models.IntegerField() + + class Meta: + ordering = ('name',) + +class SongInlineDefaultOrdering(admin.StackedInline): + model = Song + +class SongInlineNewOrdering(admin.StackedInline): + model = Song + ordering = ('duration', ) + +class DynOrderingBandAdmin(admin.ModelAdmin): + + def get_ordering(self, request): + if request.user.is_superuser: + return ['rank'] + else: + return ['name'] diff --git a/tests/admin_ordering/tests.py b/tests/admin_ordering/tests.py new file mode 100644 index 0000000000..faae834f93 --- /dev/null +++ b/tests/admin_ordering/tests.py @@ -0,0 +1,106 @@ +from __future__ import absolute_import, unicode_literals + +from django.test import TestCase, RequestFactory +from django.contrib.admin.options import ModelAdmin +from django.contrib.auth.models import User + +from .models import (Band, Song, SongInlineDefaultOrdering, + SongInlineNewOrdering, DynOrderingBandAdmin) + + +class MockRequest(object): + pass + +class MockSuperUser(object): + def has_perm(self, perm): + return True + +request = MockRequest() +request.user = MockSuperUser() + + +class TestAdminOrdering(TestCase): + """ + Let's make sure that ModelAdmin.queryset uses the ordering we define in + ModelAdmin rather that ordering defined in the model's inner Meta + class. + """ + + def setUp(self): + self.request_factory = RequestFactory() + b1 = Band(name='Aerosmith', bio='', rank=3) + b1.save() + b2 = Band(name='Radiohead', bio='', rank=1) + b2.save() + b3 = Band(name='Van Halen', bio='', rank=2) + b3.save() + + def test_default_ordering(self): + """ + The default ordering should be by name, as specified in the inner Meta + class. + """ + ma = ModelAdmin(Band, None) + names = [b.name for b in ma.queryset(request)] + self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names) + + def test_specified_ordering(self): + """ + Let's use a custom ModelAdmin that changes the ordering, and make sure + it actually changes. + """ + class BandAdmin(ModelAdmin): + ordering = ('rank',) # default ordering is ('name',) + ma = BandAdmin(Band, None) + names = [b.name for b in ma.queryset(request)] + self.assertEqual(['Radiohead', 'Van Halen', 'Aerosmith'], names) + + def test_dynamic_ordering(self): + """ + Let's use a custom ModelAdmin that changes the ordering dinamically. + """ + super_user = User.objects.create(username='admin', is_superuser=True) + other_user = User.objects.create(username='other') + request = self.request_factory.get('/') + request.user = super_user + ma = DynOrderingBandAdmin(Band, None) + names = [b.name for b in ma.queryset(request)] + self.assertEqual(['Radiohead', 'Van Halen', 'Aerosmith'], names) + request.user = other_user + names = [b.name for b in ma.queryset(request)] + self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names) + + +class TestInlineModelAdminOrdering(TestCase): + """ + Let's make sure that InlineModelAdmin.queryset uses the ordering we define + in InlineModelAdmin. + """ + + def setUp(self): + b = Band(name='Aerosmith', bio='', rank=3) + b.save() + self.b = b + s1 = Song(band=b, name='Pink', duration=235) + s1.save() + s2 = Song(band=b, name='Dude (Looks Like a Lady)', duration=264) + s2.save() + s3 = Song(band=b, name='Jaded', duration=214) + s3.save() + + def test_default_ordering(self): + """ + The default ordering should be by name, as specified in the inner Meta + class. + """ + inline = SongInlineDefaultOrdering(self.b, None) + names = [s.name for s in inline.queryset(request)] + self.assertEqual(['Dude (Looks Like a Lady)', 'Jaded', 'Pink'], names) + + def test_specified_ordering(self): + """ + Let's check with ordering set to something different than the default. + """ + inline = SongInlineNewOrdering(self.b, None) + names = [s.name for s in inline.queryset(request)] + self.assertEqual(['Jaded', 'Pink', 'Dude (Looks Like a Lady)'], names) diff --git a/tests/admin_registration/__init__.py b/tests/admin_registration/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_registration/models.py b/tests/admin_registration/models.py new file mode 100644 index 0000000000..c6f42fd1f4 --- /dev/null +++ b/tests/admin_registration/models.py @@ -0,0 +1,16 @@ +""" +Tests for various ways of registering models with the admin site. +""" + +from django.db import models + + +class Person(models.Model): + name = models.CharField(max_length=200) + +class Location(models.Model): + class Meta: + abstract = True + +class Place(Location): + name = models.CharField(max_length=200) diff --git a/tests/admin_registration/tests.py b/tests/admin_registration/tests.py new file mode 100644 index 0000000000..1b2d291691 --- /dev/null +++ b/tests/admin_registration/tests.py @@ -0,0 +1,64 @@ +from __future__ import absolute_import + +from django.contrib import admin +from django.core.exceptions import ImproperlyConfigured +from django.test import TestCase + +from .models import Person, Place, Location + + +class NameAdmin(admin.ModelAdmin): + list_display = ['name'] + save_on_top = True + +class TestRegistration(TestCase): + def setUp(self): + self.site = admin.AdminSite() + + def test_bare_registration(self): + self.site.register(Person) + self.assertTrue( + isinstance(self.site._registry[Person], admin.options.ModelAdmin) + ) + + def test_registration_with_model_admin(self): + self.site.register(Person, NameAdmin) + self.assertTrue( + isinstance(self.site._registry[Person], NameAdmin) + ) + + def test_prevent_double_registration(self): + self.site.register(Person) + self.assertRaises(admin.sites.AlreadyRegistered, + self.site.register, + Person) + + def test_registration_with_star_star_options(self): + self.site.register(Person, search_fields=['name']) + self.assertEqual(self.site._registry[Person].search_fields, ['name']) + + def test_star_star_overrides(self): + self.site.register(Person, NameAdmin, + search_fields=["name"], list_display=['__str__']) + self.assertEqual(self.site._registry[Person].search_fields, ['name']) + self.assertEqual(self.site._registry[Person].list_display, + ['__str__']) + self.assertTrue(self.site._registry[Person].save_on_top) + + def test_iterable_registration(self): + self.site.register([Person, Place], search_fields=['name']) + self.assertTrue( + isinstance(self.site._registry[Person], admin.options.ModelAdmin) + ) + self.assertEqual(self.site._registry[Person].search_fields, ['name']) + self.assertTrue( + isinstance(self.site._registry[Place], admin.options.ModelAdmin) + ) + self.assertEqual(self.site._registry[Place].search_fields, ['name']) + + def test_abstract_model(self): + """ + Exception is raised when trying to register an abstract model. + Refs #12004. + """ + self.assertRaises(ImproperlyConfigured, self.site.register, Location) diff --git a/tests/admin_scripts/__init__.py b/tests/admin_scripts/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/app_with_import/__init__.py b/tests/admin_scripts/app_with_import/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/app_with_import/models.py b/tests/admin_scripts/app_with_import/models.py new file mode 100644 index 0000000000..17a892bd17 --- /dev/null +++ b/tests/admin_scripts/app_with_import/models.py @@ -0,0 +1,8 @@ +from django.db import models +from django.contrib.comments.models import Comment + + +# Regression for #13368. This is an example of a model +# that imports a class that has an abstract base class. +class CommentScore(models.Model): + comment = models.OneToOneField(Comment, primary_key=True) diff --git a/tests/admin_scripts/broken_app/__init__.py b/tests/admin_scripts/broken_app/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/broken_app/models.py b/tests/admin_scripts/broken_app/models.py new file mode 100644 index 0000000000..f37f1efc11 --- /dev/null +++ b/tests/admin_scripts/broken_app/models.py @@ -0,0 +1 @@ +from django.db import modelz diff --git a/tests/admin_scripts/complex_app/__init__.py b/tests/admin_scripts/complex_app/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/complex_app/admin/__init__.py b/tests/admin_scripts/complex_app/admin/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/complex_app/admin/foo.py b/tests/admin_scripts/complex_app/admin/foo.py new file mode 100644 index 0000000000..1ed704a66b --- /dev/null +++ b/tests/admin_scripts/complex_app/admin/foo.py @@ -0,0 +1,8 @@ +from __future__ import absolute_import + +from django.contrib import admin + +from ..models.foo import Foo + + +admin.site.register(Foo) diff --git a/tests/admin_scripts/complex_app/models/__init__.py b/tests/admin_scripts/complex_app/models/__init__.py new file mode 100644 index 0000000000..7b647e74b1 --- /dev/null +++ b/tests/admin_scripts/complex_app/models/__init__.py @@ -0,0 +1,4 @@ +from .bar import Bar +from .foo import Foo + +__all__ = ['Foo', 'Bar'] diff --git a/tests/admin_scripts/complex_app/models/bar.py b/tests/admin_scripts/complex_app/models/bar.py new file mode 100644 index 0000000000..15956f7a50 --- /dev/null +++ b/tests/admin_scripts/complex_app/models/bar.py @@ -0,0 +1,11 @@ +from __future__ import absolute_import + +from django.db import models + +from ..admin import foo + + +class Bar(models.Model): + name = models.CharField(max_length=5) + class Meta: + app_label = 'complex_app' diff --git a/tests/admin_scripts/complex_app/models/foo.py b/tests/admin_scripts/complex_app/models/foo.py new file mode 100644 index 0000000000..914cf3b8b5 --- /dev/null +++ b/tests/admin_scripts/complex_app/models/foo.py @@ -0,0 +1,7 @@ +from django.db import models + + +class Foo(models.Model): + name = models.CharField(max_length=5) + class Meta: + app_label = 'complex_app' diff --git a/tests/admin_scripts/custom_templates/app_template/__init__.py b/tests/admin_scripts/custom_templates/app_template/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/custom_templates/app_template/api.py b/tests/admin_scripts/custom_templates/app_template/api.py new file mode 100644 index 0000000000..439d935f73 --- /dev/null +++ b/tests/admin_scripts/custom_templates/app_template/api.py @@ -0,0 +1 @@ +# your API code \ No newline at end of file diff --git a/tests/admin_scripts/custom_templates/app_template/models.py b/tests/admin_scripts/custom_templates/app_template/models.py new file mode 100644 index 0000000000..92be216cfc --- /dev/null +++ b/tests/admin_scripts/custom_templates/app_template/models.py @@ -0,0 +1 @@ +# whatever \ No newline at end of file diff --git a/tests/admin_scripts/custom_templates/project_template.tgz b/tests/admin_scripts/custom_templates/project_template.tgz new file mode 100644 index 0000000000..2a181c9faa Binary files /dev/null and b/tests/admin_scripts/custom_templates/project_template.tgz differ diff --git a/tests/admin_scripts/custom_templates/project_template/additional_dir/Procfile b/tests/admin_scripts/custom_templates/project_template/additional_dir/Procfile new file mode 100644 index 0000000000..032f0bcd72 --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/additional_dir/Procfile @@ -0,0 +1 @@ +# some file for {{ project_name }} test project \ No newline at end of file diff --git a/tests/admin_scripts/custom_templates/project_template/additional_dir/additional_file.py b/tests/admin_scripts/custom_templates/project_template/additional_dir/additional_file.py new file mode 100644 index 0000000000..032f0bcd72 --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/additional_dir/additional_file.py @@ -0,0 +1 @@ +# some file for {{ project_name }} test project \ No newline at end of file diff --git a/tests/admin_scripts/custom_templates/project_template/additional_dir/extra.py b/tests/admin_scripts/custom_templates/project_template/additional_dir/extra.py new file mode 100644 index 0000000000..6b553f190f --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/additional_dir/extra.py @@ -0,0 +1 @@ +# this file uses the {{ extra }} variable diff --git a/tests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt b/tests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt new file mode 100644 index 0000000000..032f0bcd72 --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/additional_dir/requirements.txt @@ -0,0 +1 @@ +# some file for {{ project_name }} test project \ No newline at end of file diff --git a/tests/admin_scripts/custom_templates/project_template/manage.py b/tests/admin_scripts/custom_templates/project_template/manage.py new file mode 100755 index 0000000000..d9843c433f --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/manage.py @@ -0,0 +1,6 @@ +# The manage.py of the {{ project_name }} test project + +# template context: +project_name = '{{ project_name }}' +project_directory = '{{ project_directory }}' +secret_key = '{{ secret_key }}' diff --git a/tests/admin_scripts/custom_templates/project_template/project_name/__init__.py b/tests/admin_scripts/custom_templates/project_template/project_name/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/custom_templates/project_template/project_name/settings.py b/tests/admin_scripts/custom_templates/project_template/project_name/settings.py new file mode 100644 index 0000000000..ddc216c829 --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/project_name/settings.py @@ -0,0 +1 @@ +# Django settings for {{ project_name }} test project. diff --git a/tests/admin_scripts/custom_templates/project_template/ticket-18091-non-ascii-template.txt b/tests/admin_scripts/custom_templates/project_template/ticket-18091-non-ascii-template.txt new file mode 100644 index 0000000000..873eaded88 --- /dev/null +++ b/tests/admin_scripts/custom_templates/project_template/ticket-18091-non-ascii-template.txt @@ -0,0 +1,2 @@ +Some non-ASCII text for testing ticket #18091: +üäö € diff --git a/tests/admin_scripts/custom_templates/project_template/ticket-19397-binary-file.ico b/tests/admin_scripts/custom_templates/project_template/ticket-19397-binary-file.ico new file mode 100644 index 0000000000..1db49645b5 Binary files /dev/null and b/tests/admin_scripts/custom_templates/project_template/ticket-19397-binary-file.ico differ diff --git a/tests/admin_scripts/management/__init__.py b/tests/admin_scripts/management/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/management/commands/__init__.py b/tests/admin_scripts/management/commands/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/admin_scripts/management/commands/app_command.py b/tests/admin_scripts/management/commands/app_command.py new file mode 100644 index 0000000000..d26df12642 --- /dev/null +++ b/tests/admin_scripts/management/commands/app_command.py @@ -0,0 +1,11 @@ +from django.core.management.base import AppCommand + + +class Command(AppCommand): + help = 'Test Application-based commands' + requires_model_validation = False + args = '[appname ...]' + + def handle_app(self, app, **options): + print('EXECUTE:AppCommand app=%s, options=%s' % (app, sorted(options.items()))) + diff --git a/tests/admin_scripts/management/commands/base_command.py b/tests/admin_scripts/management/commands/base_command.py new file mode 100644 index 0000000000..2701f32a05 --- /dev/null +++ b/tests/admin_scripts/management/commands/base_command.py @@ -0,0 +1,17 @@ +from optparse import make_option + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('--option_a','-a', action='store', dest='option_a', default='1'), + make_option('--option_b','-b', action='store', dest='option_b', default='2'), + make_option('--option_c','-c', action='store', dest='option_c', default='3'), + ) + help = 'Test basic commands' + requires_model_validation = False + args = '[labels ...]' + + def handle(self, *labels, **options): + print('EXECUTE:BaseCommand labels=%s, options=%s' % (labels, sorted(options.items()))) diff --git a/tests/admin_scripts/management/commands/custom_startproject.py b/tests/admin_scripts/management/commands/custom_startproject.py new file mode 100644 index 0000000000..80c6d6b805 --- /dev/null +++ b/tests/admin_scripts/management/commands/custom_startproject.py @@ -0,0 +1,11 @@ +from optparse import make_option + +from django.core.management.commands.startproject import Command as BaseCommand + + +class Command(BaseCommand): + option_list = BaseCommand.option_list + ( + make_option('--extra', + action='store', dest='extra', + help='An arbitrary extra value passed to the context'), + ) diff --git a/tests/admin_scripts/management/commands/label_command.py b/tests/admin_scripts/management/commands/label_command.py new file mode 100644 index 0000000000..3bce1305bc --- /dev/null +++ b/tests/admin_scripts/management/commands/label_command.py @@ -0,0 +1,10 @@ +from django.core.management.base import LabelCommand + + +class Command(LabelCommand): + help = "Test Label-based commands" + requires_model_validation = False + args = '