<?xml version="1.0" ?>

<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">

  <namespace prefix="custom">Symfony\Component\Validator\Tests\Fixtures\</namespace>

  <class name="Symfony\Component\Validator\Tests\Fixtures\Entity">

    <group-sequence>
       <value>Foo</value>
       <value>Entity</value>
    </group-sequence>

    <!-- CLASS CONSTRAINTS -->

    <!-- Custom constraint -->
    <constraint name="Symfony\Component\Validator\Tests\Fixtures\ConstraintA" />

    <!-- Custom constraint with namespace abbreviation-->
    <constraint name="custom:ConstraintB" />

    <!-- Callbacks -->
    <constraint name="Callback">validateMe</constraint>

    <constraint name="Callback">validateMeStatic</constraint>

    <constraint name="Callback">
        <value>Symfony\Component\Validator\Tests\Fixtures\CallbackClass</value>
        <value>callback</value>
    </constraint>

    <!-- Traverse with boolean default option -->
    <constraint name="Traverse">
        false
    </constraint>

    <!-- PROPERTY CONSTRAINTS -->

    <property name="firstName">

      <!-- Constraint without value -->
      <constraint name="NotNull" />

      <!-- Constraint with single value -->
      <constraint name="Range">
         <option name="min">3</option>
      </constraint>

      <!-- Constraint with multiple values -->
      <constraint name="Choice">
        <value>A</value>
        <value>B</value>
      </constraint>

      <!-- Constraint with child constraints -->
      <constraint name="All">
        <constraint name="NotNull" />
        <constraint name="Range">
           <option name="min">3</option>
        </constraint>

      </constraint>

      <!-- Option with child constraints -->
      <constraint name="All">
        <option name="constraints">
          <constraint name="NotNull" />
          <constraint name="Range">
             <option name="min">3</option>
          </constraint>
        </option>
      </constraint>

      <!-- Value with child constraints -->
      <constraint name="Collection">
        <option name="fields">
          <value key="foo">
            <constraint name="NotNull" />
            <constraint name="Range">
               <option name="min">3</option>
            </constraint>
          </value>
          <value key="bar">
            <constraint name="Range">
               <option name="min">5</option>
            </constraint>
          </value>
        </option>
      </constraint>

      <!-- Constraint with options -->
      <constraint name="Choice">
        <!-- Option with single value -->
        <option name="message"> Must be one of %choices% </option>
        <!-- Option with multiple values -->
        <option name="choices">
          <value>A</value>
          <value>B</value>
        </option>
      </constraint>
    </property>

    <!-- GETTER CONSTRAINTS -->

    <getter property="lastName">
      <constraint name="NotNull" />
    </getter>
    <getter property="valid">
      <constraint name="IsTrue" />
    </getter>
    <getter property="permissions">
      <constraint name="IsTrue" />
    </getter>
  </class>

  <class name="Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity">

    <!-- GROUP SEQUENCE PROVIDER -->
    <group-sequence-provider />

  </class>
</constraint-mapping>
