BlueM\Validation\AnnotationReader
 [x] Get all of a properties validation annotations
 [x] Get the value of a specific validation annotation

BlueM\Validation\Constraint\AbstractEmptyConstraint
 [x] Null is regarded as blank
 [x] A string containing only whitespace is not regarded as blank
 [x] Zero is not regarded as blank
 [x] An empty string is regarded as blank
 [x] An empty array is regarded as blank
 [x] A literal value without dollar prefix throws an exception
 [x] A reference to a property throws an exception if there is no such property
 [x] A reference to an existing property returns the propertys value
 [x] A reference to a collection item throws an exception if the given collection is not an array
 [x] A reference to a collection item throws an exception if there is no collection item with that name
 [x] A reference to a collection item returns the collection items value

BlueM\Validation\Constraint\AbstractLimitConstraint
 [x] A literal value is returned unmodified
 [x] A reference to a property throws an exception if there is no such property
 [x] A reference to an existing property returns the propertys value
 [x] A reference to a collection item throws an exception if the given collection is not an array
 [x] A reference to a collection item throws an exception if there is no collection item with that name
 [x] A reference to a collection item returns the items value

BlueM\Validation\Constraint\Blank
 [x] The class does not skip empty values
 [x] A value which passes validation is returned unmodified
 [x] If true is passed as the constraint condition it is ignored
 [x] If the value is blank the validation passes regardless of the condition
 [x] If the condition is invalid an exception is thrown
 [x] A value must be blank if the reference value of a positive condition is not blank
 [x] A value passes validation if the reference value of a positive condition is blank
 [x] A value must be blank if the reference value of a negative condition is blank
 [x] A value passes validation if the reference value of a negative condition is not blank

BlueM\Validation\Constraint\Decimalplaces
 [x] The constructor throws an exception if an invalud number of decimal places is given
 [x] A float is returned unmodified if it has no more than the maximum number of decimal places
 [x] Trailing zeros are ignored when checking the maximum number of decimal places
 [x] A value which is not a float throws an exception
 [x] Checking a float which more than the maximum number of decimal places throws an exception

BlueM\Validation\Constraint\Mandatory
 [x] The class does not skip empty values
 [x] Checking null throws a constraint exception
 [x] Checking an empty string throws a constraint exception
 [x] Checking an empty array throws a constraint exception
 [x] A string which is not empty is returned unmodified
 [x] An array which is not empty is returned unmodified

BlueM\Validation\Constraint\Maxlength
 [x] The constructor throws an exception if the maximum length is smaller than 1
 [x] A string is returned unmodified if not longer than the maximum length
 [x] Checking a string which is longer than the maximum length throws an exception

BlueM\Validation\Constraint\Maximum
 [x] The constructor throws an exception if the argument is not a scalar
 [x] A string is returned unmodified if it equals the maximum
 [x] A string is returned unmodified if it is smaller than the maximum
 [x] An integer is returned unmodified if it equals the maximum
 [x] An integer is returned unmodified if it is smaller than the maximum
 [x] A float is returned unmodified if it equals the maximum
 [x] A float is returned unmodified if it is smaller than the maximum
 [x] A string which is larger than the maximum throws an exception
 [x] An integer which is larger than the maximum throws an exception
 [x] A float which is larger than the maximum throws an exception
 [x] Another propertys value can be used as maximum

BlueM\Validation\Constraint\Minlength
 [x] The constructor throws an exception if the minimum length is smaller than 1
 [x] A string is returned unmodified if not shorter than the minimum length
 [x] Checking a string which is shorter than the minimum length throws an exception

BlueM\Validation\Constraint\Minimum
 [x] The constructor throws an exception if the argument is not a scalar
 [x] A string is returned unmodified if it equals the minimum
 [x] A string is returned unmodified if it is larger than the minimum
 [x] An integer is returned unmodified if it equals the minimum
 [x] An integer is returned unmodified if it is larger than the minimum
 [x] A float is returned unmodified if it equals the minimum
 [x] A float is returned unmodified if it is larger than the minimum
 [x] A string which is smaller than the minimum throws an exception
 [x] An integer which is smaller than the minimum throws an exception
 [x] A float which is smaller than the minimum throws an exception
 [x] Another propertys value can be used as minimum

BlueM\Validation\Constraint\Pattern
 [x] The constructor throws an exception if the pattern is not a string
 [x] A value matching the pattern is returned unmodified
 [x] A value which does not match the pattern throws an exception
 [x] Trying to set the exception code to a non integer throws an exception
 [x] A value which does not match the pattern throws an exception with a custom error message

BlueM\Validation\Constraint\Scalar
 [x] A scalar value is returned unmodified
 [x] Null is returned unmodified
 [x] A value which is neither a scalar not null throws an exception

BlueM\Validation\Constraint\Valuelist
 [x] The constructor throws an exception if the value list is not given as a string
 [x] The constructor accepts the value list as an array
 [x] The constructor accepts the value list as a whitespace separated string
 [x] An exception is thrown if the value list contains less than two items
 [x] A value which is in the valuelist is returned unmodified
 [x] A value which isnot in the valuelist throws an exception

BlueM\Validation\Constraint
 [x] By default a constraint skips checking of blank values

BlueM\Validation\I18n\De
 [x] Get the strings

BlueM\Validation\I18n\En
 [x] Get the strings

BlueM\Validation\I18n
 [x] The constructor saves custom strings passed as argument
 [x] Get the thousands separator
 [x] Get the decimal separator
 [x] Get the date input format
 [x] Only upon first call to string method the strings are loaded
 [x] The localization string is returned if there is no translation
 [x] The translation is returned if there is a translation
 [x] The placeholder value is inserted into the translation if present

Bluem\Validation\InvalidCollectionArgumentException
 [x] The constructor saves the array of errors given as second argument
 [x] getErrors returns the errors

BlueM\Validation\Transformer\AddHTTPScheme
 [x] Null is returned unmodified
 [x] An empty string is returned unmodified
 [x] A string including scheme is returned unmodified
 [x] A string without scheme and w w w is returned unmodified
 [x] A string without scheme that starts with www is prefixed with http scheme
 [x] A string without scheme that starts with uppercase www is prefixed with http scheme

BlueM\Validation\Transformer\Bool
 [x] A non empty string is transformed to true
 [x] A non zero number is transformed to true
 [x] A not empty array is transformed to true
 [x] An empty string is transformed to false
 [x] Zero is transformed to false
 [x] An empty array is transformed to false

BlueM\Validation\Transformer\Date
 [x] Passing null returns null
 [x] Passing an empty string returns null
 [x] A date in ymd format is parsed correctly
 [x] A date in english format is parsed correctly
 [x] A date in german format is parsed correctly
 [x] A date with two digits as year is accepted and parsed correctly
 [x] A future date with two digits as year is regarded as invalid
 [x] A date that does not match the input format is regarded as invalid
 [x] An invalid date is regarded as invalid

BlueM\Validation\Transformer\Float
 [x] An empty decimal separator is not accepted
 [x] A positive integer is regarded as valid
 [x] A negative integer is regarded as valid
 [x] A minus without digits is regarded as invalid
 [x] A positive float is regarded as valid
 [x] A negative float is regarded as valid
 [x] A positive float with thousands separator is regarded as valid
 [x] A negative float with thousands separator is regarded as valid
 [x] A number containing a character is regarded as invalid
 [x] A number with a trailing character is regarded as invalid
 [x] A number with a character after the decimal separator is regarded as invalid
 [x] A float in german localization is regarded as valid
 [x] A float is regarded as valid when no thousands separator is defined
 [x] Zero is regarded as valid
 [x] Passing null returns null
 [x] Passing an empty string returns null

BlueM\Validation\Transformer\HourMinute
 [x] Passing null returns null
 [x] Passing an empty string returns null
 [x] An hour without minutes without period is parsed correctly
 [x] An hour without minutes but with period is parsed correctly
 [x] A 24 hour time with period is not accepted
 [x] A hour without minutes but with period is not accepted if the language does not accept a period
 [x] An hour with minutes without period is parsed correctly when separated by colon
 [x] An hour with minutes without period is parsed correctly when separated by period
 [x] An hour without minutes but with separated is not accepted
 [x] An hour above 59 is not accepted
 [x] A minute above 59 is not accepted

BlueM\Validation\Transformer\Integer
 [x] A positive integer is regarded as valid
 [x] A negative integer is regarded as valid
 [x] A minus without digits is regarded as invalid
 [x] A positive integer with thousands separator is regarded as valid
 [x] A negative integer with thousands separator is regarded as valid
 [x] A integer with a trailing character is regarded as invalid
 [x] An integer in german localization is regarded as valid
 [x] Zero is regarded as valid
 [x] Passing null returns null
 [x] Passing an empty string returns null
 [x] A float is regarded as valid if it does not have fraction digits
 [x] A float is regarded as inv valid

BlueM\Validation\Transformer\Month
 [x] Null is returned as null
 [x] An empty string is returned as null
 [x] A month in yyyymm format with hyphen as separator is regarded as valid
 [x] A month in yyyymm format with space as separator is regarded as valid
 [x] A month in yyyymm format with dot as separator is regarded as valid
 [x] A month in yyyymm format with slash as separator is regarded as valid
 [x] A month in mmyyyy format with hyphen as separator is regarded as valid
 [x] A month in mmyyyy format with space as separator is regarded as valid
 [x] A month in mmyyyy format with dot as separator is regarded as valid
 [x] A month in mmyyyy format with slash as separator is regarded as valid
 [x] A month in myyyy format is regarded as valid
 [x] A month in yyyym format is regarded as valid
 [x] A month smaller than 1 is regarded as invalid
 [x] A month greater than 12 is regarded as invalid
 [x] A year smaller than 1900 is regarded as invalid
 [x] A year greater than 2100 is regarded as invalid
 [x] A month with a two digit year is regarded as invalid
 [x] A literal month name is regarded as invalid

BlueM\Validation\Transformer\NormalizeReturn
 [x] The transformation

BlueM\Validation\Transformer\SingleLine
 [x] A multiline string is transformed to a single line
 [x] A singleline string is not modified

BlueM\Validation\Transformer\Trim
 [x] Leading and trailing whitespace is trimmed

BlueM\Validation\Type\Bool
 [x] Creating an instance created the expected instance variables

BlueM\Validation\Type\Collection
 [x] Create an instance
 [x] Perform successful validation
 [x] Perform failing validation

BlueM\Validation\Type\Email
 [x] A valid email address is processed correctly
 [x] A valid email address with more than 254 characters throws an exception
 [x] An invalid email address throws an exception

BlueM\Validation\Type\Float
 [x] A non scalar value throws an exception
 [x] A valid float is processed correctly
 [x] A valid float padded with whitespace is processed correctly
 [x] An invalid float throws an exception

BlueM\Validation\Type\Month
 [x] A valid month with trailing whitespace is processed correctly
 [x] A non scalar value throws an exception

BlueM\Validation\Type\String
 [x] A valid string is processed correctly
 [x] A multiline string is transformed to a single line string
 [x] The string is trimmed
 [x] A non scalar value throws an exception

BlueM\Validation\Type\Text
 [x] A valid text is processed correctly
 [x] Leading and trailing whitespace is trimmed
 [x] Vertical whitespace is normalized
 [x] A non scalar value throws an exception

BlueM\Validation\Type\Url
 [x] A valid http url is processed correctly
 [x] A valid http url with port number is processed correctly
 [x] A valid https url is processed correctly
 [x] The http scheme is added implicitly if missing and the url starts with www
 [x] A valid url with more than 150 characters throws an exception
 [x] An invalid url throws an exception

BlueM\Validation\Type\Xml
 [x] Valid xml is processed correctly
 [x] Leading and trailing whitespace is trimmed
 [x] Vertical whitespace is normalized
 [x] Text which is not wellformed throws an exception
 [x] A non scalar value throws an exception

BlueM\Validation\Type
 [x] Add a constraint
 [x] Add a transformer

BlueM\Validation\ValidationFailedException
 [x] Create a constraint exception and call getters

BlueM\Validation\Validator
 [x] Trying to validate an object throws an exception if a non object is given
 [x] Validate a valid object
 [x] Validate an invalid object
 [x] Trying to validate a property value throws an exception if a non object is given
 [x] Validate a property value
 [x] Validate a property using annotations
 [x] Validate a property using annotations given as argument
 [x] Trying to validate a property throws an exception if argument 1 is not an object
 [x] Trying to validate a value throws an exception if no type is given
 [x] Trying to validate a value throws an exception if an invalid type is given
 [x] Trying to validate an object throws an exception if an invalid constraint is given
 [x] Trying to add a namespace throws an exception if the namespace is not a string
 [x] Trying to add a namespace throws an exception if the namespace has already been registered
 [x] Add a namespace without additional arguments
 [x] Set the i 18n instance
 [x] Add a namespace with additional arguments
 [x] Trying to get a single constraint from an annotation throws an exception if the class is invalid
 [x] Get a single constraint from an annotation
 [x] Get checkable properties

IntegrationTestUsingAnnotations
 [x] A constraint provided by a type can be overriden
 [x] A localized int is accepted when a localized values is allowed
 [x] A localized int is not accepted when a localized values is not allowed
 [x] A localized float is accepted when a localized value is allowed
 [x] A localized float is not accepted when a localized value is not allowed
 [x] A localized date is accepted when a localized value is allowed
 [x] A localized date is not accepted when a localized value is not allowed
 [x] A positive conditional constraint works
 [x] A negative conditional constraint works
 [x] Validating a collection fails if a scalar is given
 [x] A collection must not be empty if declared as mandatory
 [x] A collection must not be null if declared as mandatory
 [x] A collection must not be empty if the mininmum count is set to 1
 [x] A collection must not contain fewer items than the mincount value
 [x] A collection value passes validation if it is valid
 [x] Validating an array collection fails if a scalar is given
 [x] An array collection must not be empty if declared as mandatory
 [x] An array collection must not be null if declared as mandatory
 [x] An array collection must not be empty if the mininmum count is set to 1
 [x] An array collection may be empty if it is not mandatory and does not have a mincount
 [x] An array collection must not contain fewer items than the mincount value
 [x] An array collection fails validation if it contains an invalid value
 [x] An array collection fails validation if a mandatory value is missing
 [x] An array collection fails validation if no constraints are defined for a key
 [x] An array collection value passes validation if it is valid
 [x] An xml string fails validation if is is not wellformed
 [x] An xml string passes validation if it is valid
 [x] An email address passes validation if it is valid
 [x] Validating an object succeeds if all properties are valid
 [x] Validating an objec returns all errors
 [x] Validating a property also validates dependency constraints
 [x] Validating a property uses a label callback

IntegrationTestUsingArrays
 [x] Validating an object succeeds if all properties are valid
 [x] Validating an object returns all validation errors
 [x] Validating a value also validates dependency constraints
 [x] Setting mandatory constraint to false is interpreted correctly

