public function testConstraintFields()
{
$allFields = AddressField::getAll();
$nameFields = [AddressField::GIVEN_NAME, AddressField::FAMILY_NAME];
$this->constraint->fields = array_diff($allFields, $nameFields);
$address = new Address();
$address = $address->withCountryCode('CN')->withAdministrativeArea('Beijing Shi')->withLocality('Xicheng Qu')->withPostalCode('123456')->withAddressLine1('Yitiao Lu');
$this->validator->validate($address, $this->constraint);
$this->assertNoViolation();
$this->constraint->fields = array_diff($allFields, [AddressField::POSTAL_CODE]);
$address = $address->withPostalCode('INVALID')->withGivenName('John')->withFamilyName('Smith');
$this->validator->validate($address, $this->constraint);
$this->assertNoViolation();
$this->constraint->fields = array_diff($allFields, [AddressField::ADMINISTRATIVE_AREA]);
$address = $address->withAdministrativeArea('INVALID')->withPostalCode('123456');
$this->validator->validate($address, $this->constraint);
$this->assertNoViolation();
$address = $address->withAdministrativeArea('Beijing Shi')->withLocality('INVALID');
$this->validator->validate($address, $this->constraint);
$this->assertNoViolation();
}