django1/tests
Aymeric Augustin 6d52f6f8e6 Fixed #23831 -- Supported strings escaped by third-party libs in Django.
Refs #7261 -- Made strings escaped by Django usable in third-party libs.

The changes in mark_safe and mark_for_escaping are straightforward. The
more tricky part is to handle correctly objects that implement __html__.

Historically escape() has escaped SafeData. Even if that doesn't seem a
good behavior, changing it would create security concerns. Therefore
support for __html__() was only added to conditional_escape() where this
concern doesn't exist.

Then using conditional_escape() instead of escape() in the Django
template engine makes it understand data escaped by other libraries.

Template filter |escape accounts for __html__() when it's available.
|force_escape forces the use of Django's HTML escaping implementation.

Here's why the change in render_value_in_context() is safe. Before Django
1.7 conditional_escape() was implemented as follows:

    if isinstance(text, SafeData):
        return text
    else:
        return escape(text)

render_value_in_context() never called escape() on SafeData. Therefore
replacing escape() with conditional_escape() doesn't change the
autoescaping logic as it was originally intended.

This change should be backported to Django 1.7 because it corrects a
feature added in Django 1.7.

Thanks mitsuhiko for the report.
2014-12-27 18:02:34 +01:00
..
absolute_url_overrides Fixed #11775 -- Made ABSOLUTE_URL_OVERRIDES work with models that don't define get_absolute_url(). 2014-09-09 11:05:31 -04:00
admin_autodiscover Fixed #22979 -- Moved bug* tests 2014-07-26 21:05:49 -04:00
admin_changelist Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
admin_checks Fixed #23497 -- Made admin system checks run for custom AdminSites. 2014-12-17 09:11:46 -05:00
admin_custom_urls Fixed #23995 -- Removed unnecessary calls to self.client.logout() in tests. 2014-12-16 09:12:46 -05:00
admin_docs Fixed #5405 -- Added admindocs support for reStructured text in model docstrings 2014-11-03 15:30:46 -05:00
admin_filters Fixed #23616 - Fixed generic relations in ModelAdmin.list_filter. 2014-10-10 12:10:32 -04:00
admin_inlines Fixed #23995 -- Removed unnecessary calls to self.client.logout() in tests. 2014-12-16 09:12:46 -05:00
admin_ordering Fixed #13163 -- Added ability to show change links on inline objects in admin. 2014-07-31 08:07:28 -04:00
admin_registration Fixed #13163 -- Added ability to show change links on inline objects in admin. 2014-07-31 08:07:28 -04:00
admin_scripts Removed an unnecessary models file in the admin_scripts tests. 2014-12-26 19:31:54 -05:00
admin_util Removed admin_util test dependency on contrib.sites 2014-12-23 18:43:55 +01:00
admin_validation Silenced all admin validation warnings. 2014-11-28 19:00:08 -05:00
admin_views Fixed #23995 -- Removed unnecessary calls to self.client.logout() in tests. 2014-12-16 09:12:46 -05:00
admin_widgets Fixed #23995 -- Removed unnecessary calls to self.client.logout() in tests. 2014-12-16 09:12:46 -05:00
aggregation Fixed #23941 -- Removed implicit decimal formatting from expressions. 2014-12-12 10:17:48 -05:00
aggregation_regress Fixed #23877 -- aggregation's subquery missed target col 2014-11-27 06:50:08 -05:00
annotations Fixed #10414 -- Made select_related() fail on invalid field names. 2014-12-24 14:54:30 -05:00
app_loading Moved sys.path-extending decorator to django.test.utils and used throughout test suite. 2014-01-25 22:50:40 -07:00
apps Fixed flake8 warning. 2014-10-22 21:21:02 -04:00
backends Replaced DatabaseCreation sql methods by schema editor equivalents 2014-12-23 19:35:01 +01:00
base Renamed AppCache to Apps. 2013-12-24 12:25:17 +01:00
bash_completion Replaced sqlall in some bash_completion/admin_scripts tests. 2014-12-26 18:52:26 -05:00
basic Fixed #21414 -- Removed RelatedObject and deprecated Field.related. 2014-12-23 10:54:25 -05:00
builtin_server Moved ServerHandler helper class to tests. 2014-03-30 20:55:40 -03:00
bulk_create Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
cache Fixed #23968 -- Replaced list comprehension with generators and dict comprehension 2014-12-08 07:58:23 -05:00
check_framework Fixed #23338 -- Added warning when unique=True on ForeigKey 2014-11-27 19:42:30 -05:00
choices Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
commands_sql Fixed #14180 -- Prevented unneeded index creation on MySQL-InnoDB 2014-12-27 12:52:44 +01:00
commands_sql_migrations Fixed #22749: Making SQL management commands migration aware. 2014-06-07 17:18:30 -07:00
conditional_processing Fixed #22461 -- Added if-unmodified-since support to the condition decorator. 2014-12-24 12:33:57 -05:00
contenttypes_tests Replaced router.routers usage with override_settings(DATABASE_ROUTERS); refs #23933. 2014-12-01 11:34:15 -05:00
context_processors Avoided rewrapping Contexts in render_to_response. 2014-11-22 17:58:38 +01:00
createsuperuser Made testing of stdout and stderr more consistent. 2014-10-22 09:25:50 +07:00
csrf_tests Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
custom_columns Fixed typos using https://github.com/vlajos/misspell_fixer 2014-11-03 20:59:30 -05:00
custom_lookups Fixed #23893: Added tzinfo to constant datetime in unit test 2014-12-16 02:54:59 -07:00
custom_managers Fixed #23822 -- Added support for serializing model managers in migration 2014-12-15 08:34:15 -05:00
custom_methods Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
custom_migration_operations Fixed #23844 -- Used topological sort for migration operation dependency resolution. 2014-11-20 12:49:49 -05:00
custom_pk Refs #18586 -- Split custom_pk test. 2014-12-11 17:13:24 -05:00
datatypes Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
dates Fixed #23867 -- removed DateQuerySet hacks 2014-11-26 17:49:25 -05:00
datetimes Split tests.basic.ModelTests in several tests; refs #18586. 2014-06-25 15:39:56 -04:00
db_functions Fixed #23753 -- Added a suite of SQL Functions 2014-12-27 15:27:27 +11:00
db_typecasts Removed superfluous models.py files. 2013-12-17 11:16:48 +01:00
dbshell Fixed #22646: Added support for the MySQL ssl-ca option to dbshell. 2014-08-13 18:29:42 -04:00
decorators Fixed #23923 -- Promoted Django's deprecation warnings to errors in runtests.py 2014-11-29 10:27:04 -05:00
defer Fixed #901 -- Added Model.refresh_from_db() method 2014-11-28 06:54:00 -05:00
defer_regress Avoided creation of deferred model from another deferred model 2014-08-12 14:58:10 +03:00
delete Fixed #23812 -- Changed django.utils.six.moves.xrange imports to range 2014-12-13 12:45:58 -05:00
delete_regress Fixed #22308 -- Regression from 0f956085. 2014-03-22 21:35:46 +01:00
deprecation Refs #23947 -- Worked around a bug in Python that prevents deprecation warnings from appearing in tests. 2014-12-06 14:46:01 -05:00
dispatch Removed unnecessary directory in dispatch tests. 2014-07-07 19:21:47 -04:00
distinct_on_fields Split ignores_nulls_in_unique_constraints feature. 2014-05-08 22:11:20 +02:00
empty Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
expressions Fixed #2443 -- Added DurationField. 2014-12-20 18:28:29 +00:00
extra_regress Fixed many typos in comments and docstrings. 2014-03-03 07:38:09 -05:00
field_deconstruction Revert "Fixed #23455 -- Forced related_name to be a unicode string during deconstruction." 2014-12-12 12:50:39 -07:00
field_defaults Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
field_subclassing Fixed #901 -- Added Model.refresh_from_db() method 2014-11-28 06:54:00 -05:00
file_storage Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
file_uploads Fixed #23968 -- Replaced list comprehension with generators and dict comprehension 2014-12-08 07:58:23 -05:00
files Fixed #23888 -- Fixed crash in File.__repr__() when name contains unicode. 2014-11-24 15:54:57 -05:00
fixtures Fixed #23651 -- Isolated non-existent fixture tests 2014-10-15 09:17:44 +02:00
fixtures_migration Fixed #20392 -- Added TestCase.setUpTestData() 2014-12-03 10:37:04 -05:00
fixtures_model_package Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
fixtures_regress Removed unneeded null param to ManyToManyField 2014-12-23 19:01:03 +01:00
force_insert_update Fixed all E251 violations 2013-11-03 10:17:58 -08:00
foreign_object Ensured foreign_object tests reset language properly. 2014-12-02 07:31:52 -05:00
forms_tests Fixed #2443 -- Added DurationField. 2014-12-20 18:28:29 +00:00
from_db_value Fixed #18757, #14462, #21565 -- Reworked database-python type conversions 2014-09-03 20:36:03 +01:00
generic_inline_admin Fixed #23995 -- Removed unnecessary calls to self.client.logout() in tests. 2014-12-16 09:12:46 -05:00
generic_relations Fixed flake8 warning. 2014-10-08 18:10:50 -04:00
generic_relations_regress Fixed #24002 -- GenericRelation filtering targets related model's pk 2014-12-17 10:04:52 +02:00
generic_views Refs #23943 -- Removed an invalid generic_views test. 2014-12-12 16:14:10 -05:00
get_earliest_or_latest Fixed #23555 -- Avoided suppressing IndexError in QuerySet.first() and .last() 2014-10-08 14:28:38 -04:00
get_object_or_404 Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
get_or_create Fixed misplaced test case. 2014-10-08 05:11:09 +07:00
handlers Fixed #23887 -- Returned Bad Request for multipart parsing fails 2014-11-22 14:23:37 +01:00
http_utils Fixed flake8 warning. 2014-08-18 13:44:10 -04:00
httpwrappers Fixed #23730 -- Moved support for SimpleCookie HIGHEST_PROTOCOL pickling to http.cookie. 2014-11-12 19:04:45 +01:00
i18n Fixed #23788 (2) -- Improved gettext version checker 2014-12-18 16:06:33 +01:00
indexes Fixed #14180 -- Prevented unneeded index creation on MySQL-InnoDB 2014-12-27 12:52:44 +01:00
initial_sql_regress Fixed #3214 -- Stopped parsing SQL with regex. 2014-04-26 17:46:23 +02:00
inline_formsets Harmonized some PEP 0263 coding preambles 2014-05-15 19:58:41 +02:00
inspectdb Fixed #23679 -- Fixed null introspection for char/text fields 2014-10-20 22:37:19 +02:00
introspection Refs #23947 -- Fixed introspection test that had a side effect. 2014-12-06 13:00:25 -05:00
invalid_models_tests Fixed #23801 -- Added warning when max_length is used with IntegerField 2014-11-26 18:41:54 -05:00
known_related_objects Replaced set([foo, ...]) by {foo, ...} literals. Refs PR 3282. 2014-09-29 00:01:38 +07:00
logging_tests Fixed #23923 -- Promoted Django's deprecation warnings to errors in runtests.py 2014-11-29 10:27:04 -05:00
lookup Replaced set([foo, ...]) by {foo, ...} literals. Refs PR 3282. 2014-09-29 00:01:38 +07:00
m2m_and_m2o Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
m2m_intermediary Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
m2m_multiple Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
m2m_recursive Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
m2m_regress Added a test to ensure bad assignation to M2M doesn't clear data 2014-12-24 14:18:00 +01:00
m2m_signals PEP8 cleanup 2013-11-02 23:50:49 -05:00
m2m_through Fixed #23862 -- Made ManyToManyRel.get_related_field() respect to_field. 2014-11-21 16:02:31 -05:00
m2m_through_regress PEP8 cleanup 2013-11-02 23:50:49 -05:00
m2o_recursive Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
mail Refs #23947 -- Isolated a mail test. 2014-12-06 12:06:06 -05:00
managers_regress Fixed #19774 -- Deprecated the contenttypes.generic module. 2014-01-26 14:42:30 -05:00
many_to_many Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
many_to_one Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
many_to_one_null Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
max_lengths Fixed #20631 -- Increased the default EmailField max_length to 254. 2014-07-04 14:15:00 -04:00
middleware Fixed #23812 -- Changed django.utils.six.moves.xrange imports to range 2014-12-13 12:45:58 -05:00
middleware_exceptions Fixed #14664 -- Logged a warning if MiddlewareNotUsed is raised in DEBUG mode. 2014-11-27 07:55:07 -05:00
migrate_signals Fixed #23975 -- Restored pre_migrate signal if all apps have migrations. 2014-12-16 18:34:25 -05:00
migration_test_data_persistence Fixed #23039: Don't try to serialize unmanaged models in tests 2014-07-21 10:09:31 +01:00
migrations Fixed #24037 -- Prevented data loss possibility when changing Meta.managed. 2014-12-23 14:25:31 -05:00
migrations2 Revert "Fixed #23474 -- Prevented migrating backwards from unapplying the wrong migrations." 2014-09-24 15:49:30 -04:00
model_fields Fixed #2443 -- Added DurationField. 2014-12-20 18:28:29 +00:00
model_forms Fixed #23812 -- Changed django.utils.six.moves.xrange imports to range 2014-12-13 12:45:58 -05:00
model_formsets Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
model_formsets_regress Fixed #23968 -- Replaced list comprehension with generators and dict comprehension 2014-12-08 07:58:23 -05:00
model_inheritance Refs #18586 -- Split up model_inheritance.ModelInheritanceTest 2014-12-03 18:54:47 -05:00
model_inheritance_regress Fixed several typos in Django 2014-05-28 17:39:14 -07:00
model_meta Fixed #21414 -- Removed RelatedObject and deprecated Field.related. 2014-12-23 10:54:25 -05:00
model_options Replaced DatabaseCreation sql methods by schema editor equivalents 2014-12-23 19:35:01 +01:00
model_package Removed model_package test dependency on contrib.sites 2014-12-23 18:10:07 +01:00
model_permalink Fixed #23276 -- Deprecated passing views as strings to url(). 2014-08-12 13:15:40 -04:00
model_regress Fixed refs #24007 test on Windows. 2014-12-19 14:11:17 -05:00
model_validation Fixed #23338 -- Added warning when unique=True on ForeigKey 2014-11-27 19:42:30 -05:00
modeladmin Refs #23947 -- Made a modeladmin test cleanup after itself. 2014-12-05 16:19:59 -05:00
multiple_database Removed an incorrect docstring in tests/multiple_database/tests.py. 2014-12-01 11:37:08 -05:00
mutually_referential Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
nested_foreign_keys Fixed #22909 -- Removed camelCasing in some tests. 2014-07-07 19:08:42 -04:00
no_models Renamed AppCache to Apps. 2013-12-24 12:25:17 +01:00
null_fk Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
null_fk_ordering Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
null_queries Fixed #16187 -- refactored ORM lookup system 2014-01-18 11:46:19 +02:00
one_to_one Fixed #21414 -- Removed RelatedObject and deprecated Field.related. 2014-12-23 10:54:25 -05:00
or_lookups Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
order_with_respect_to Refs #18586 -- Split up order_with_respect_to tests 2014-12-04 11:05:26 -05:00
ordering Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
pagination Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
postgres_tests Fixed #24034 -- Don't always overwrite deconstruct path. 2014-12-21 17:31:50 +01:00
prefetch_related Fixed #23968 -- Replaced list comprehension with generators and dict comprehension 2014-12-08 07:58:23 -05:00
project_template Added a test to verify headers set by default middleware; refs #23939. 2014-12-03 13:47:23 -05:00
properties Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
proxy_model_inheritance Removed unneeded override_system_checks 2014-10-21 20:54:32 +02:00
proxy_models Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
queries Refs #23947 -- Fixed queries test execution order dependency. 2014-12-15 12:25:55 -05:00
queryset_pickle Complemented pickle test for ValuesQuerySet with related field 2014-12-24 14:58:32 +01:00
raw_query Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
requests Fixed #12098 -- Simplified HttpRequest.__repr__(). 2014-11-20 08:45:11 -05:00
requirements Fixed #23289 -- Added mock as a test dependency. 2014-12-01 16:08:25 -05:00
reserved_names Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
resolve_url Fixed #22384 -- Deprecated reversing URLs by dotted path. 2014-06-03 07:30:14 -04:00
responses Fixed #23977 -- Added setdefault() method to HttpResponse 2014-12-11 13:56:56 -05:00
reverse_lookup Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
save_delete_hooks Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
schema Fixed refs #23987 test on Oracle. 2014-12-15 18:15:55 -05:00
select_for_update Replaced router.routers usage with override_settings(DATABASE_ROUTERS); refs #23933. 2014-12-01 11:34:15 -05:00
select_related Fixed #10414 -- Made select_related() fail on invalid field names. 2014-12-24 14:54:30 -05:00
select_related_onetoone Fixed #10414 -- Made select_related() fail on invalid field names. 2014-12-24 14:54:30 -05:00
select_related_regress Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
serializers Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
serializers_regress Added a new GeoJSON serialization format for GeoDjango 2014-11-15 18:07:18 +01:00
servers Fixed #23930 -- Added copies of captured_std* managers from CPython's test.support. 2014-11-29 11:21:58 -05:00
settings_tests Fixed #23957 -- Started deprecation toward requiring session verification. 2014-12-05 07:37:34 -05:00
shortcuts Deprecated dirs argument to override TEMPLATE_DIRS. 2014-11-23 09:29:33 +01:00
signals Added a test for model pre/post_init signals. 2014-11-21 10:39:37 -05:00
signed_cookies_tests Fixed #23792 -- Added test.utils.freeze_time() context manager. 2014-12-22 07:46:40 -05:00
signing Fixed #23792 -- Added test.utils.freeze_time() context manager. 2014-12-22 07:46:40 -05:00
sites_framework Added migration for site test app depending on contrib.sites 2014-12-23 19:01:33 +01:00
staticfiles_tests Refs #23947 -- Prevented staticfiles tests from having side effects. 2014-12-09 11:17:05 -05:00
str Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
string_lookup Fixing E302 Errors 2013-11-02 23:48:47 -05:00
swappable_models Added a missing import and removed an unneeded import 2013-12-24 08:35:13 -08:00
syndication_tests Cleanup cache in contrib.sites to prevent test interference -- refs #11505 2014-12-11 15:56:54 -05:00
template_tests Fixed #16028 -- Moved defaultfilters tests into template_tests. 2014-12-16 14:45:19 -05:00
templates Fixed #17890 -- Added an extra_context parameter to AdminSite.password_change(). 2014-11-29 10:31:09 -05:00
test_client Corrected deprecation warnings for RedirectView; refs #21587. 2014-11-28 17:59:55 -05:00
test_client_regress Corrected deprecation warnings for RedirectView; refs #21587. 2014-11-28 17:59:55 -05:00
test_discovery_sample Made a doctest compatible with Python 2 2014-10-23 11:16:17 +02:00
test_discovery_sample2 Fixed #23742 -- Added an option to reverse tests order. 2014-11-24 19:24:11 -05:00
test_exceptions Reduced reduce() usage; refs #23796. 2014-11-20 14:31:14 -05:00
test_runner Fixed #23289 -- Added mock as a test dependency. 2014-12-01 16:08:25 -05:00
test_runner_deprecation_app Avoided changing raw DeprecationWarning filter behavior 2014-03-08 11:13:48 +01:00
test_utils Fixed typo in test_utils comment. 2014-12-24 07:10:34 -05:00
timezones Optimized make_aware/naive by removing redundant checks. Refs #22625. 2014-05-16 23:12:59 +02:00
transactions Removed numbering from the models.py header of some test packages. 2014-09-24 17:28:56 +07:00
unmanaged_models Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
update Fixed #21612 -- Made QuerySet.update() respect to_field 2014-11-16 15:44:13 +01:00
update_only_fields Fixed typos using https://github.com/vlajos/misspell_fixer 2014-11-03 20:59:30 -05:00
urlpatterns_reverse Fixed #23923 -- Promoted Django's deprecation warnings to errors in runtests.py 2014-11-29 10:27:04 -05:00
user_commands Fixed #23930 -- Added copies of captured_std* managers from CPython's test.support. 2014-11-29 11:21:58 -05:00
utils_tests Fixed #23831 -- Supported strings escaped by third-party libs in Django. 2014-12-27 18:02:34 +01:00
validation Fixed typos using https://github.com/vlajos/misspell_fixer 2014-11-03 20:59:30 -05:00
validators Refactored URLValidator tests by moving URLs to text files. 2014-11-03 13:02:11 -05:00
version Fixed #22378 -- Updated \d to [0-9]+ in urlpatterns of docs and tests. 2014-04-16 20:36:29 -04:00
view_tests Fixed selenium test failure of JavascriptI18nTests. 2014-12-01 16:42:48 -05:00
wsgi Fixed #23620 -- Used more specific assertions in the Django test suite. 2014-11-03 11:56:37 -05:00
.coveragerc Removed nonexistent module django.test._doctest from coveragerc. 2014-11-19 06:01:39 -05:00
README.rst Fixed #23289 -- Added mock as a test dependency. 2014-12-01 16:08:25 -05:00
runtests.py Fixed #23289 -- Added mock as a test dependency. 2014-12-01 16:08:25 -05:00
test_sqlite.py
urls.py Fixed #22218 -- Deprecated django.conf.urls.patterns. 2014-04-03 07:28:10 -04:00

README.rst

To run the test suite::

    $ cd tests
    $ pip install -r requirements/py3.txt  # or py2.txt
    $ PYTHONPATH=..:$PYTHONPATH ./runtests.py

For more information about the test suite, see
https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/.