public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepinfo, RowMetaInterface prev,
      String[] input, String[] output, RowMetaInterface info, VariableSpace space, Repository repository,
      IMetaStore metaStore ) {
    CheckResult cr;

    // Check output fields
    if ( prev != null && prev.size() > 0 ) {
      cr =
          new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString( PKG,
              "XMLOutputMeta.CheckResult.FieldsReceived", "" + prev.size() ), stepinfo );
      remarks.add( cr );

      String error_message = "";
      boolean error_found = false;

      // Starting from selected fields in ...
      for ( int i = 0; i < outputFields.length; i++ ) {
        int idx = prev.indexOfValue( outputFields[i].getFieldName() );
        if ( idx < 0 ) {
          error_message += "\t\t" + outputFields[i].getFieldName() + Const.CR;
          error_found = true;
        }
      }
      if ( error_found ) {
        error_message = BaseMessages.getString( PKG, "XMLOutputMeta.CheckResult.FieldsNotFound", error_message );
        cr = new CheckResult( CheckResultInterface.TYPE_RESULT_ERROR, error_message, stepinfo );
        remarks.add( cr );
      } else {
        cr =
            new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString( PKG,
                "XMLOutputMeta.CheckResult.AllFieldsFound" ), stepinfo );
        remarks.add( cr );
      }
    }

    // See if we have input streams leading to this step!
    if ( input.length > 0 ) {
      cr =
          new CheckResult( CheckResultInterface.TYPE_RESULT_OK, BaseMessages.getString( PKG,
              "XMLOutputMeta.CheckResult.ExpectedInputOk" ), stepinfo );
      remarks.add( cr );
    } else {
      cr =
          new CheckResult( CheckResultInterface.TYPE_RESULT_ERROR, BaseMessages.getString( PKG,
              "XMLOutputMeta.CheckResult.ExpectedInputError" ), stepinfo );
      remarks.add( cr );
    }

    cr =
        new CheckResult( CheckResultInterface.TYPE_RESULT_COMMENT, BaseMessages.getString( PKG,
            "XMLOutputMeta.CheckResult.FilesNotChecked" ), stepinfo );
    remarks.add( cr );
  }
@Test
  public void testCheck() throws Exception {
    XMLOutputMeta xmlOutputMeta = new XMLOutputMeta();
    xmlOutputMeta.setDefault();
    TransMeta transMeta = mock( TransMeta.class );
    StepMeta stepInfo = mock( StepMeta.class );
    RowMetaInterface prev = mock( RowMetaInterface.class );
    Repository repos = mock( Repository.class );
    IMetaStore metastore = mock( IMetaStore.class );
    RowMetaInterface info = mock( RowMetaInterface.class );
    ArrayList<CheckResultInterface> remarks = new ArrayList<>();
    xmlOutputMeta.check( remarks, transMeta, stepInfo, prev, new String[] { "input" }, new String[] { "output" }, info,
        new Variables(), repos, metastore );
    assertEquals( 2, remarks.size() );
    assertEquals( "Step is receiving info from other steps.", remarks.get( 0 ).getText() );
    assertEquals( "File specifications are not checked.", remarks.get( 1 ).getText() );

    XMLField xmlField = new XMLField();
    xmlField.setFieldName( "aField" );
    xmlField.setType( 1 );
    xmlField.setLength( 10 );
    xmlField.setPrecision( 3 );
    xmlOutputMeta.setOutputFields( new XMLField[] { xmlField } );
    when( prev.size() ).thenReturn( 1 );
    remarks.clear();
    xmlOutputMeta.check( remarks, transMeta, stepInfo, prev, new String[] { "input" }, new String[] { "output" }, info,
        new Variables(), repos, metastore );
    assertEquals( 4, remarks.size() );
    assertEquals( "Step is connected to previous one, receiving 1 fields", remarks.get( 0 ).getText() );
    assertEquals( "All output fields are found in the input stream.", remarks.get( 1 ).getText() );
    assertEquals( "Step is receiving info from other steps.", remarks.get( 2 ).getText() );
    assertEquals( "File specifications are not checked.", remarks.get( 3 ).getText() );

  }