@Test
  public void testFromAccumulateCompositePatternMissingValuesWithExistingFrom() throws Exception {
    FactPattern pattern1 = new FactPattern("Person");
    SingleFieldConstraint constraint1 = new SingleFieldConstraint("name");
    constraint1.setOperator("==");
    pattern1.addConstraint(constraint1);

    FactPattern pattern2 = new FactPattern("Address");
    SingleFieldConstraint constraint2 = new SingleFieldConstraint("street");
    constraint2.setOperator("!=");
    pattern2.addConstraint(constraint2);

    FromAccumulateCompositeFactPattern fromAccumulateCompositeFactPattern =
        new FromAccumulateCompositeFactPattern();
    fromAccumulateCompositeFactPattern.setSourcePattern(pattern1);
    fromAccumulateCompositeFactPattern.setFactPattern(pattern2);
    fromAccumulateCompositeFactPattern.setInitCode("int i = 0");
    fromAccumulateCompositeFactPattern.setActionCode(" i++;");
    fromAccumulateCompositeFactPattern.setReverseCode("i--;");
    fromAccumulateCompositeFactPattern.setResultCode("return i");

    model.lhs = new IPattern[] {fromAccumulateCompositeFactPattern};

    assertFalse(validator.isValid());
    assertEquals(2, validator.getErrors().size());

    verify(constants, never()).WhenUsingFromTheSourceNeedsToBeSet();
    verify(constants)
        .FactType0HasAField1ThatHasAnOperatorSetButNoValuePleaseAddAValueOrRemoveTheOperator(
            "Person", "name");
    verify(constants)
        .FactType0HasAField1ThatHasAnOperatorSetButNoValuePleaseAddAValueOrRemoveTheOperator(
            "Address", "street");
  }
  @Test
  public void testFromAccumulateCompositePatternMissingValues2() throws Exception {
    FactPattern pattern1 = new FactPattern("Person");

    FactPattern pattern2 = new FactPattern("Address");

    FromAccumulateCompositeFactPattern fromAccumulateCompositeFactPattern =
        new FromAccumulateCompositeFactPattern();
    fromAccumulateCompositeFactPattern.setSourcePattern(pattern1);
    fromAccumulateCompositeFactPattern.setFactPattern(pattern2);
    fromAccumulateCompositeFactPattern.setFunction("");
    fromAccumulateCompositeFactPattern.setReverseCode("");
    fromAccumulateCompositeFactPattern.setInitCode("");
    fromAccumulateCompositeFactPattern.setActionCode("");
    fromAccumulateCompositeFactPattern.setResultCode("");

    model.lhs = new IPattern[] {fromAccumulateCompositeFactPattern};

    assertFalse(validator.isValid());
    assertEquals(1, validator.getErrors().size());

    verify(constants).WhenUsingFromTheSourceNeedsToBeSet();
  }