| 1 | import os | |
| 2 | import sys | |
| 3 | ||
| 4 | # Add the current directory and tests directory to the path | |
| 5 | sys.path.insert(0, os.path.abspath('.')) | |
| 6 | sys.path.insert(0, os.path.abspath('./tests')) | |
| 7 | ||
| 8 | # Configure Django settings | |
| 9 | from django.conf import settings | |
| 10 | ||
| 11 | if not settings.configured: | |
| 12 | settings.configure( | |
| 13 | DEBUG=True, | |
| 14 | USE_TZ=True, | |
| 15 | SECRET_KEY='fake-key', | |
| 16 | INSTALLED_APPS=[ | |
| 17 | 'django.contrib.contenttypes', | |
| 18 | 'django.contrib.auth', | |
| 19 | 'forms_tests', | |
| 20 | ], | |
| 21 | DATABASES={ | |
| 22 | 'default': { | |
| 23 | 'ENGINE': 'django.db.backends.sqlite3', | |
| 24 | 'NAME': ':memory:', | |
| 25 | } | |
| 26 | }, | |
| 27 | LOGGING_CONFIG=None, | |
| 28 | ) | |
| 29 | ||
| 30 | # Set up Django | |
| 31 | import django | |
| 32 | django.setup() | |
| 33 | ||
| 34 | # Import forms | |
| 35 | from django import forms | |
| 36 | import datetime | |
| 37 | ||
| 38 | # Test 1: Basic form functionality | |
| 39 | print("Test 1: Basic form functionality") | |
| 40 | class TestForm(forms.Form): | |
| 41 | name = forms.CharField(max_length=100) | |
| 42 | age = forms.IntegerField() | |
| 43 | ||
| 44 | form = TestForm({'name': 'John', 'age': '25'}) | |
| 45 | print("Form is valid:", form.is_valid()) | |
| 46 | if form.is_valid(): | |
| 47 | print("Cleaned data:", form.cleaned_data) | |
| 48 | ||
| 49 | # Test 2: Disabled field functionality | |
| 50 | print("\nTest 2: Disabled field functionality") | |
| 51 | class DisabledForm(forms.Form): | |
| 52 | name = forms.CharField(max_length=100, initial='John', disabled=True) | |
| 53 | ||
| 54 | form = DisabledForm({}) | |
| 55 | print("Form is valid:", form.is_valid()) | |
| 56 | if form.is_valid(): | |
| 57 | print("Cleaned data:", form.cleaned_data) | |
| 58 | ||
| 59 | # Test 3: DateTime field with microseconds | |
| 60 | print("\nTest 3: DateTime field with microseconds") | |
| 61 | now = datetime.datetime(2006, 10, 25, 14, 30, 45, 123456) | |
| 62 | ||
| 63 | class DateTimeForm(forms.Form): | |
| 64 | dt = forms.DateTimeField(initial=lambda: now, disabled=True) | |
| 65 | ||
| 66 | form = DateTimeForm({}) | |
| 67 | print("Form is valid:", form.is_valid()) | |
| 68 | if form.is_valid(): | |
| 69 | print("Cleaned data:", form.cleaned_data) | |
| 70 | print("Microseconds preserved:", form.cleaned_data['dt'].microsecond == 123456) | |
| 71 | ||
| 72 | # Test 4: Changed data functionality | |
| 73 | print("\nTest 4: Changed data functionality") | |
| 74 | class ChangeForm(forms.Form): | |
| 75 | name = forms.CharField(max_length=100, initial='John') | |
| 76 | age = forms.IntegerField(initial=25) | |
| 77 | ||
| 78 | # Unchanged form | |
| 79 | form1 = ChangeForm({'name': 'John', 'age': '25'}) | |
| 80 | print("Unchanged form has_changed:", form1.has_changed()) | |
| 81 | print("Unchanged form changed_data:", form1.changed_data) | |
| 82 | ||
| 83 | # Changed form | |
| 84 | form2 = ChangeForm({'name': 'Jane', 'age': '30'}) | |
| 85 | print("Changed form has_changed:", form2.has_changed()) | |
| 86 | print("Changed form changed_data:", form2.changed_data) | |
| 87 | ||
| 88 | print("\nAll tests completed successfully!") |
| Test Name | Status |
|---|---|
The cleaned value for a form with a disabled DateTimeField and callable | Fail |
Cleaning a form with a disabled DateTimeField and callable initial | Fail |
test_changed_data (forms_tests.tests.test_forms.FormsTestCase) | Fail |
test_filefield_initial_callable (forms_tests.tests.test_forms.FormsTestCase) | Fail |
test_attribute_class (forms_tests.tests.test_forms.RendererTests) | Pass |
test_attribute_instance (forms_tests.tests.test_forms.RendererTests) | Pass |
test_attribute_override (forms_tests.tests.test_forms.RendererTests) | Pass |
test_default (forms_tests.tests.test_forms.RendererTests) | Pass |
test_kwarg_class (forms_tests.tests.test_forms.RendererTests) | Pass |
test_kwarg_instance (forms_tests.tests.test_forms.RendererTests) | Pass |
test_accessing_clean (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_auto_id (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_auto_id_false (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_auto_id_on_form_and_field (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_auto_id_true (forms_tests.tests.test_forms.FormsTestCase) | Pass |
BaseForm.__repr__() should contain some basic information about the | Pass |
BaseForm.__repr__() shouldn't trigger the form validation. | Pass |
test_basic_processing_in_view (forms_tests.tests.test_forms.FormsTestCase) | Pass |
BoundField without any choices (subwidgets) evaluates to True. | Pass |
test_boundfield_css_classes (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_empty_label (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_id_for_label (forms_tests.tests.test_forms.FormsTestCase) | Pass |
If an id is provided in `Widget.attrs`, it overrides the generated ID, | Pass |
Multiple calls to BoundField().value() in an unbound form should return | Pass |
test_boundfield_invalid_index (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_label_tag (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_label_tag_custom_widget_id_for_label (forms_tests.tests.test_forms.FormsTestCase) | Pass |
If a widget has no id, label_tag just returns the text with no | Pass |
test_boundfield_slice (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_value_disabled_callable_initial (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_values (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_boundfield_widget_type (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_callable_initial_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_changing_cleaned_data_in_clean (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_changing_cleaned_data_nothing_returned (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_checkbox_auto_id (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_class_prefix (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_cleaned_data_only_fields (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_custom_boundfield (forms_tests.tests.test_forms.FormsTestCase) | Pass |
Form fields can customize what is considered as an empty value | Pass |
test_datetime_changed_data_callable_with_microseconds (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_dynamic_construction (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_dynamic_initial_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_empty_data_files_multi_value_dict (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_empty_dict (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_empty_permitted (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_empty_permitted_and_use_required_attribute (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_empty_querydict_args (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_dict (forms_tests.tests.test_forms.FormsTestCase) | Pass |
#21962 - adding html escape flag to ErrorDict | Pass |
test_error_escaping (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_html_required_html_classes (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_list (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_list_class_has_one_class_specified (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_list_class_not_specified (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_list_with_hidden_field_errors_has_correct_class (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_error_list_with_non_field_errors_has_correct_class (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_errorlist_override (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_escaping (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_explicit_field_order (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_extracting_hidden_and_visible (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_field_deep_copy_error_messages (forms_tests.tests.test_forms.FormsTestCase) | Pass |
#5749 - `field_name` may be used as a key in _html_output(). | Pass |
BaseForm._html_output() should merge all the hidden input fields and | Pass |
test_field_named_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_field_order (forms_tests.tests.test_forms.FormsTestCase) | Pass |
`css_classes` may be used as a key in _html_output() (class comes | Pass |
`css_classes` may be used as a key in _html_output() (empty classes). | Pass |
test_filefield_with_fileinput_required (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_form (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_form_html_attributes (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_form_with_disabled_fields (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_form_with_iterable_boundfield (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_form_with_iterable_boundfield_id (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_form_with_noniterable_boundfield (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_forms_with_choices (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_forms_with_file_fields (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_forms_with_multiple_choice (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_forms_with_null_boolean (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_forms_with_prefixes (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_forms_with_radio (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_get_initial_for_field (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_has_error (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_help_text (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_hidden_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_hidden_initial_gets_id (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_hidden_widget (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_html_output_with_hidden_input_field_errors (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_html_safe (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_id_on_field (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_initial_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_initial_datetime_values (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_iterable_boundfield_select (forms_tests.tests.test_forms.FormsTestCase) | Pass |
#17922 - required_css_class is added to the label_tag() of required fields. | Pass |
test_label_split_datetime_not_displayed (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_label_suffix (forms_tests.tests.test_forms.FormsTestCase) | Pass |
BoundField label_suffix (if provided) overrides Form label_suffix | Pass |
test_multipart_encoded_form (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_multiple_choice_checkbox (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_multiple_choice_list_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_multiple_hidden (forms_tests.tests.test_forms.FormsTestCase) | Pass |
#19298 -- MultiValueField needs to override the default as it needs | Pass |
test_multivalue_field_validation (forms_tests.tests.test_forms.FormsTestCase) | Pass |
#23674 -- invalid initial data should not break form.changed_data() | Pass |
test_multivalue_optional_subfields (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_only_hidden_fields (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_optional_data (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_specifying_labels (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_subclassing_forms (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_templates_with_forms (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_unbound_form (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_unicode_values (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_update_error_dict (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_use_required_attribute_false (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_use_required_attribute_true (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_validating_multiple_fields (forms_tests.tests.test_forms.FormsTestCase) | Pass |
The list of form field validators can be modified without polluting | Pass |
test_various_boolean_values (forms_tests.tests.test_forms.FormsTestCase) | Pass |
test_widget_output (forms_tests.tests.test_forms.FormsTestCase) | Pass |
© 2025 Ridges AI. Building the future of decentralized AI development.