1..145 # __construct ok 1 - __construct() creates an empty validator schema ok 2 - __construct() creates an empty widget form schema ok 3 - __construct() can take an array of default values as its first argument ok 4 - __construct() takes a CSRF secret as its second argument ok 5 - __construct() takes a CSRF secret as its second argument ok 6 - __construct() can disable the CSRF protection by passing false as the second argument ok 7 - __construct() uses CSRF protection if null is passed as the second argument and it's enabled globally # ->getOption() ->setOption() ok 8 - __construct takes an option array as its second argument ok 9 - ->setOption() changes the value of an option # ->setDefault() ->getDefault() ->hasDefault() ->setDefaults() ->getDefaults() ok 10 - setDefaults() sets the form default values ok 11 - setDefault() sets a default value ok 12 - hasDefault() returns true if the form has a default value for the given field ok 13 - hasDefault() returns false if the form does not have a default value for the given field ok 14 - getDefault() returns a default value for a given field ok 15 - getDefault() returns null if the form does not have a default value for a given field ok 16 - ->getDefaults() keeps the CSRF token default value ok 17 - ->setDefaults() does not set the CSRF token if CSRF is disabled # ->getName() ok 18 - ->getName() returns null if the name format is not an array ok 19 - ->getName() returns the name under which user data can be retrieved # ::enableCSRFProtection() ::disableCSRFProtection() ok 20 - ::enableCSRFProtection() enabled CSRF protection for all future forms ok 21 - ::disableCSRFProtection() disables CSRF protection for all future forms ok 22 - ::enableCSRFProtection() enabled CSRF protection for all future forms ok 23 - ::disableCSRFProtection() disables CSRF protection for all future forms ok 24 - ->isCSRFProtected() returns true if the form is CSRF protected ok 25 - ::enableCSRFProtection() can take a secret argument # ::getCSRFFieldName() ::setCSRFFieldName() ok 26 - ::setCSRFFieldName() changes the CSRF token field name ok 27 - ::getCSRFFieldName() returns the CSRF token field name # ->isMultipart() ok 28 - ->isMultipart() returns false if the form does not need a multipart form ok 29 - ->isMultipart() returns true if the form needs a multipart form # ->setValidators() ->setValidatorSchema() ->getValidatorSchema() ->setValidator() ->getValidator() ok 30 - ->setValidatorSchema() sets the current validator schema ok 31 - ->setValidators() sets field validators ok 32 - ->setValidators() sets field validators ok 33 - ->setValidator() sets a validator for a field # ->setWidgets() ->setWidgetSchema() ->getWidgetSchema() ok 34 - ->setWidgetSchema() sets the current widget schema ok 35 - ->setWidgets() sets field widgets ok 36 - ->setWidgets() sets field widgets ok 37 - ->setWidget() sets a widget for a field # ArrayAccess interface ok 38 - sfForm implements the ArrayAccess interface ok 39 - sfForm implements the ArrayAccess interface ok 40 - sfForm ArrayAccess implementation does not permit to set a form field ok 41 - sfForm implements the ArrayAccess interface ok 42 - sfForm implements the ArrayAccess interface ok 43 - sfForm ArrayAccess implementation removes form defaults ok 44 - sfForm ArrayAccess implementation removes the widget and the validator ok 45 - sfForm ArrayAccess implementation removes the widget and the validator ok 46 - sfForm ArrayAccess implementation throws a LogicException if the form field does not exist ok 47 - sfForm ArrayAccess implementation removes embedded forms ok 48 - sfForm ArrayAccess implementation removes bound values ok 49 - sfForm ArrayAccess implementation removes tainted values # Countable interface ok 50 - sfForm implements the Countable interface # Iterator interface ok 51 - sfForm implements the Iterator interface ok 52 - sfForm implements the Iterator interface ok 53 - sfForm implements the Iterator interface # ->bind() ->isValid() ->getValues() ->isBound() ->getErrorSchema() ok 54 - ->isBound() returns false if the form is not bound ok 55 - ->getValues() returns an empty array if the form is not bound ok 56 - ->isValid() returns false if the form is not bound ok 57 - ->hasErrors() returns false if the form is not bound ok 58 - ->getValue() returns null if the form is not bound ok 59 - ->isBound() returns true if the form is bound ok 60 - ->getValues() returns an array of cleaned values if the form is bound ok 61 - ->isValid() returns true if the form passes the validation ok 62 - ->hasErrors() returns false if the form passes the validation ok 63 - ->getValue() returns the cleaned value for a field name if the form is bound ok 64 - ->getValue() returns null when non-existant param is requested ok 65 - ->isValid() returns false if the form does not pass the validation ok 66 - ->isValid() returns true if the form does not pass the validation ok 67 - ->getValues() returns an empty array if the form does not pass the validation ok 68 - ->getErrorSchema() returns an error schema object with all errors # bind when field names are numeric ok 69 - ->bind() behaves correctly when field names are numeric # bind with files ok 70 - ->bind() behaves correctly with files ok 71 - ->bind() second argument is mandatory if the form is multipart # bind with files in embed form ok 72 - ->bind() behaves correctly with files in embed form # ->renderGlobalErrors() ok 73 - ->renderGlobalErrors() renders global errors as an HTML list # ->render() ok 74 - ->__toString() renders the form as HTML ok 75 - ->render() renders the form as HTML ok 76 - ->offsetGet() returns a sfFormField ok 77 - ->offsetGet() returns a sfFormField ok 78 - ->offsetGet() returns a sfFormField ok 79 - ->__toString() renders the form as HTML ok 80 - ->render() renders the form as HTML ok 81 - ->offsetGet() returns a sfFormField ok 82 - ->offsetGet() returns a sfFormField ok 83 - ->offsetGet() returns a sfFormField # ->renderUsing() ok 84 - renderUsing() renders the widget schema using the given form formatter ok 85 - renderUsing() does not persist form formatter name for the current form instance ok 86 - renderUsing() renders a custom form formatter ok 87 - renderUsing() throws an exception if formatter name does not exist # ->renderHiddenFields() ok 88 - renderHiddenFields() renders all hidden fields, no visible fields ok 89 - renderHiddenFields() does not modify the form fields # ->embedForm() ok 90 - ->embedForm() embeds the validator schema ok 91 - ->embedForm() embeds the widget schema ok 92 - ->embedForm() merges default values from the embedded form ok 93 - ->embedForm() removes the CSRF token for the embedded form ok 94 - ->embedForm() removes the CSRF token for the embedded form ok 95 - ->embedForm() changes the name format to reflect the embedding ok 96 - ->embedForm() changes the name format to reflect the embedding ok 97 - ->embedForm() generates a correct id in embedded form fields ok 98 - ->embedForm() generates a correct label id correctly in embedded form fields ok 99 - ->embedForm() generates a correct id in embedded form fields ok 100 - ->embedForm() generates a correct label id correctly in embedded form fields # ->embedFormForEach() ok 101 - ->embedFormForEach() embeds the validator schema ok 102 - ->embedFormForEach() embeds the widget schema ok 103 - ->embedFormForEach() merges default values from the embedded forms ok 104 - ->embedFormForEach() removes the CSRF token for the embedded forms ok 105 - ->embedFormForEach() removes the CSRF token for the embedded forms ok 106 - ->embedFormForEach() embeds the validator schema ok 107 - ->embedFormForEach() embeds the widget schema ok 108 - ->embedFormForEach() merges default values from the embedded forms ok 109 - ->embedFormForEach() removes the CSRF token for the embedded forms ok 110 - ->embedFormForEach() removes the CSRF token for the embedded forms ok 111 - ->embedFormForEach() changes the name format to reflect the embedding # bind too many values for embedded forms ok 112 - sfFormFieldSchema is given an error schema when an extra embedded form is bound ok 113 - sfFormFieldSchema renders when an extra embedded form is bound # ->getEmbeddedForms() ok 114 - ->getEmbeddedForms() returns the embedded forms ok 115 - ->getEmbeddedForms() returns the embedded forms # ::convertFileInformation() ok 116 - ::convertFileInformation() converts $_FILES to be coherent with $_GET and $_POST naming convention ok 117 - ::convertFileInformation() converts $_FILES to be coherent with $_GET and $_POST naming convention ok 118 - ::convertFileInformation() only changes the input array if needed ok 119 - ::convertFileInformation() converts $_FILES to be coherent with $_GET and $_POST naming convention ok 120 - ::convertFileInformation() converts $_FILES to be coherent with $_GET and $_POST naming convention # ->renderFormTag() ok 121 - ->renderFormTag() renders the form tag ok 122 - ->renderFormTag() adds a hidden input tag if the method is not GET or POST ok 123 - ->renderFormTag() adds the enctype attribute if the form is multipart # __clone() ok 124 - __clone() clones the validator schema ok 125 - __clone() clones the validator schema ok 126 - __clone() clones the widget schema ok 127 - __clone() clones the widget schema ok 128 - __clone() clones the error schema ok 129 - __clone() clones the error schema # mergeForm() ok 130 - mergeForm() merges a widget form schema ok 131 - mergeForm() merges a validator schema ok 132 - mergeForms() merges the correct widgets ok 133 - mergeForms() merges the correct validators ok 134 - mergeForm() merges labels correctly ok 135 - mergeForm() merges helps correctly ok 136 - mergeForm() overrides original form widget ok 137 - mergeForm() overrides original form validator ok 138 - mergeForm() merges pre validator ok 139 - mergeForm() merges post validator ok 140 - mergeForm() disallows merging already bound forms ok 141 - mergeForm() merges errors after having been bound ok 142 - iterating on form takes in account ->moveField() operations. ok 143 - mergeForm() merges fields in the correct order # ->getJavaScripts() ->getStylesheets() ok 144 - ->getJavaScripts() returns the stylesheets of all widgets ok 145 - ->getStylesheets() returns the JavaScripts of all widgets Looks like everything went fine.