public void testSameAliasWithDifferentClass() {
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/SimpleAction-validation.xml")),
       new ArrayList());
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/SimpleAction-validationAlias-validation.xml")),
       new ArrayList());
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/test/SimpleAction2-validation.xml")),
       new ArrayList());
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/test/SimpleAction2-validationAlias-validation.xml")),
       new ArrayList());
   actionValidatorManager.getValidators(SimpleAction.class, alias);
   actionValidatorManager.getValidators(SimpleAction2.class, alias);
   mockValidatorFileParser.verify();
 }
 /**
  * Test to verify WW-3850.
  *
  * @since 2.3.5
  */
 public void testBuildsValidatorsForClassError() {
   // for this test we need to have a file manager with reloadingConfigs to true
   container.getInstance(FileManagerFactory.class).getFileManager().setReloadingConfigs(true);
   // no validator found, but no check on file since it is not in cache
   actionValidatorManager.getValidators(List.class, null);
   // this second call will try reload a not existing file
   // and causes a NPE (see WW-3850)
   try {
     actionValidatorManager.getValidators(List.class, null);
   } catch (Exception e) {
     fail("Exception occurred " + e);
   }
 }
 public void testGetValidatorsFromInterface() {
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/SimpleAction-validation.xml")),
       new ArrayList());
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/SimpleAction-validationAlias-validation.xml")),
       new ArrayList());
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/test/DataAware-validation.xml")),
       new ArrayList());
   mockValidatorFileParser.expectAndReturn(
       "parseActionValidatorConfigs",
       C.args(
           C.IS_NOT_NULL,
           C.IS_NOT_NULL,
           C.eq("com/opensymphony/xwork2/test/DataAware-validationAlias-validation.xml")),
       new ArrayList());
   actionValidatorManager.getValidators(SimpleAction3.class, alias);
   mockValidatorFileParser.verify();
 }
  @Override
  protected void setUp() throws Exception {
    actionValidatorManager = new DefaultActionValidatorManager();
    super.setUp();
    mockValidatorFileParser = new Mock(ValidatorFileParser.class);
    actionValidatorManager.setValidatorFileParser(
        (ValidatorFileParser) mockValidatorFileParser.proxy());

    mockValidatorFactory = new Mock(ValidatorFactory.class);
    actionValidatorManager.setValidatorFactory((ValidatorFactory) mockValidatorFactory.proxy());

    stubValueStack = new StubValueStack();
    ActionContext.setContext(new ActionContext(new HashMap<String, Object>()));
    ActionContext.getContext().setValueStack(stubValueStack);

    DefaultFileManagerFactory factory = new DefaultFileManagerFactory();
    factory.setContainer(container);
    factory.setFileManager(new DefaultFileManager());
    actionValidatorManager.setFileManagerFactory(factory);
  }
 public void testBuildsValidatorsForAliasError() {
   boolean pass = false;
   try {
     mockValidatorFileParser.expectAndReturn(
         "parseActionValidatorConfigs",
         C.args(
             C.IS_NOT_NULL,
             C.IS_NOT_NULL,
             C.eq("com/opensymphony/xwork2/TestBean-validation.xml")),
         new ArrayList());
     mockValidatorFileParser.expectAndThrow(
         "parseActionValidatorConfigs",
         C.args(
             C.IS_NOT_NULL,
             C.IS_NOT_NULL,
             C.eq("com/opensymphony/xwork2/TestBean-badtest-validation.xml")),
         new ConfigurationException());
     List validatorList = actionValidatorManager.getValidators(TestBean.class, "badtest");
   } catch (XWorkException ex) {
     pass = true;
   }
   mockValidatorFileParser.verify();
   assertTrue("Didn't throw exception on load failure", pass);
 }
  public void testValidate() throws Exception {
    /* MockAction.class */
    // reference number
    ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
    final RequiredStringValidator referenceNumberRequiredStringValidator =
        new RequiredStringValidator();
    referenceNumberRequiredStringValidator.setFieldName("referenceNumber");
    referenceNumberRequiredStringValidator.setDefaultMessage("Reference number is required");
    referenceNumberRequiredStringValidator.setValueStack(stack);

    // order
    final RequiredFieldValidator orderRequiredValidator = new RequiredFieldValidator();
    orderRequiredValidator.setFieldName("order");
    orderRequiredValidator.setDefaultMessage("Order is required");
    orderRequiredValidator.setValueStack(stack);

    // customer
    final RequiredFieldValidator customerRequiredValidator = new RequiredFieldValidator();
    customerRequiredValidator.setFieldName("customer");
    customerRequiredValidator.setDefaultMessage("Customer is required");
    customerRequiredValidator.setValueStack(stack);
    final VisitorFieldValidator customerVisitorValidator = new VisitorFieldValidator();
    customerVisitorValidator.setAppendPrefix(true);
    customerVisitorValidator.setFieldName("customer");
    customerVisitorValidator.setValueStack(stack);

    /* Customer.class */
    // customer -> name
    final RequiredStringValidator customerNameRequiredStringValidator =
        new RequiredStringValidator();
    customerNameRequiredStringValidator.setFieldName("name");
    customerNameRequiredStringValidator.setDefaultMessage("Name is required");
    customerNameRequiredStringValidator.setValueStack(stack);

    // customer -> age
    final RequiredFieldValidator customerAgeRequiredValidator = new RequiredFieldValidator();
    customerAgeRequiredValidator.setFieldName("age");
    customerAgeRequiredValidator.setDefaultMessage("Age is required");
    customerAgeRequiredValidator.setValueStack(stack);

    // customer -> Address
    final RequiredFieldValidator customerAddressRequiredFieldValidator =
        new RequiredFieldValidator();
    customerAddressRequiredFieldValidator.setFieldName("address");
    customerAddressRequiredFieldValidator.setDefaultMessage("Address is required");
    customerAddressRequiredFieldValidator.setValueStack(stack);

    final VisitorFieldValidator customerAddressVisitorFieldValidator = new VisitorFieldValidator();
    customerAddressVisitorFieldValidator.setFieldName("address");
    customerAddressVisitorFieldValidator.setAppendPrefix(true);
    // customerAddressVisitorFieldValidator.setDefaultMessage("");
    customerAddressVisitorFieldValidator.setValueStack(stack);

    /* Address.class */
    // customer -> Address -> street
    final RequiredStringValidator customerAddressStreetRequiredFieldValidator =
        new RequiredStringValidator();
    customerAddressStreetRequiredFieldValidator.setFieldName("street");
    customerAddressStreetRequiredFieldValidator.setDefaultMessage("Street is required");
    customerAddressStreetRequiredFieldValidator.setShortCircuit(true);
    customerAddressStreetRequiredFieldValidator.setValueStack(stack);

    final RequiredStringValidator customerAddressStreetRequiredFieldValidator2 =
        new RequiredStringValidator();
    customerAddressStreetRequiredFieldValidator2.setFieldName("street");
    customerAddressStreetRequiredFieldValidator2.setDefaultMessage("Street is required 2");
    customerAddressStreetRequiredFieldValidator2.setShortCircuit(true);
    customerAddressStreetRequiredFieldValidator2.setValueStack(stack);

    // customer -> Address -> pobox
    final RequiredStringValidator customerAddressPoboxRequiredFieldValidator =
        new RequiredStringValidator();
    customerAddressPoboxRequiredFieldValidator.setFieldName("pobox");
    customerAddressPoboxRequiredFieldValidator.setDefaultMessage("PO Box is required");
    customerAddressPoboxRequiredFieldValidator.setShortCircuit(false);
    customerAddressPoboxRequiredFieldValidator.setValueStack(stack);

    final RequiredStringValidator customerAddressPoboxRequiredFieldValidator2 =
        new RequiredStringValidator();
    customerAddressPoboxRequiredFieldValidator2.setFieldName("pobox");
    customerAddressPoboxRequiredFieldValidator2.setDefaultMessage("PO Box is required 2");
    customerAddressPoboxRequiredFieldValidator2.setShortCircuit(false);
    customerAddressPoboxRequiredFieldValidator2.setValueStack(stack);

    final List<Validator> validatorsForMockAction =
        new ArrayList<Validator>() {
          {
            add(referenceNumberRequiredStringValidator);
            add(orderRequiredValidator);
            add(customerRequiredValidator);
            add(customerVisitorValidator);
          }
        };

    final List<Validator> validatorsForCustomer =
        new ArrayList<Validator>() {
          {
            add(customerNameRequiredStringValidator);
            add(customerAgeRequiredValidator);
            add(customerAddressRequiredFieldValidator);
            add(customerAddressVisitorFieldValidator);
          }
        };

    final List<Validator> validatorsForAddress =
        new ArrayList<Validator>() {
          {
            add(customerAddressStreetRequiredFieldValidator);
            add(customerAddressStreetRequiredFieldValidator2);
            add(customerAddressPoboxRequiredFieldValidator);
            add(customerAddressPoboxRequiredFieldValidator2);
          }
        };

    DefaultActionValidatorManager validatorManager =
        new DefaultActionValidatorManager() {
          @Override
          public List<Validator> getValidators(Class clazz, String context, String method) {
            if (clazz.isAssignableFrom(MockAction.class)) {
              return validatorsForMockAction;
            } else if (clazz.isAssignableFrom(Customer.class)) {
              return validatorsForCustomer;
            } else if (clazz.isAssignableFrom(Address.class)) {
              return validatorsForAddress;
            }
            return Collections.emptyList();
          }
        };
    customerVisitorValidator.setActionValidatorManager(validatorManager);
    customerAddressVisitorFieldValidator.setActionValidatorManager(validatorManager);

    MockAction action = new MockAction();
    stack.push(action);
    validatorManager.validate(action, "ctx");

    assertFalse(action.hasActionErrors());
    assertFalse(action.hasActionMessages());
    assertTrue(action.hasFieldErrors());
    assertTrue(action.getFieldErrors().containsKey("referenceNumber"));
    assertEquals((action.getFieldErrors().get("referenceNumber")).size(), 1);
    assertTrue(action.getFieldErrors().containsKey("order"));
    assertEquals((action.getFieldErrors().get("order")).size(), 1);
    assertTrue(action.getFieldErrors().containsKey("customer.name"));
    assertEquals((action.getFieldErrors().get("customer.name")).size(), 1);
    assertTrue(action.getFieldErrors().containsKey("customer.age"));
    assertEquals((action.getFieldErrors().get("customer.age")).size(), 1);
    assertTrue(action.getFieldErrors().containsKey("customer.address.street"));
    assertEquals((action.getFieldErrors().get("customer.address.street")).size(), 1);
    assertTrue(action.getFieldErrors().containsKey("customer.address.pobox"));
    assertEquals((action.getFieldErrors().get("customer.address.pobox")).size(), 2);
  }
 public void testBuildValidatorKey() {
   String validatorKey =
       DefaultActionValidatorManager.buildValidatorKey(SimpleAction.class, alias);
   assertEquals(SimpleAction.class.getName() + "/" + alias, validatorKey);
 }