### Question:
StepErrorMeta extends ChangedFlag implements XMLInterface, Cloneable { public RowMetaInterface getErrorRowMeta( long nrErrors, String errorDescriptions, String fieldNames, String errorCodes ) { RowMetaInterface row = new RowMeta(); String nrErr = variables.environmentSubstitute( getNrErrorsValuename() ); if ( !Utils.isEmpty( nrErr ) ) { ValueMetaInterface v = new ValueMetaInteger( nrErr ); v.setLength( 3 ); row.addValueMeta( v ); } String errDesc = variables.environmentSubstitute( getErrorDescriptionsValuename() ); if ( !Utils.isEmpty( errDesc ) ) { ValueMetaInterface v = new ValueMetaString( errDesc ); row.addValueMeta( v ); } String errFields = variables.environmentSubstitute( getErrorFieldsValuename() ); if ( !Utils.isEmpty( errFields ) ) { ValueMetaInterface v = new ValueMetaString( errFields ); row.addValueMeta( v ); } String errCodes = variables.environmentSubstitute( getErrorCodesValuename() ); if ( !Utils.isEmpty( errCodes ) ) { ValueMetaInterface v = new ValueMetaString( errCodes ); row.addValueMeta( v ); } return row; } StepErrorMeta( VariableSpace space, StepMeta sourceStep );  StepErrorMeta( VariableSpace space, StepMeta sourceStep, StepMeta targetStep );  StepErrorMeta( VariableSpace space, StepMeta sourceStep, StepMeta targetStep, String nrErrorsValuename,
    String errorDescriptionsValuename, String errorFieldsValuename, String errorCodesValuename );  StepErrorMeta( VariableSpace variables, Node node, List<StepMeta> steps ); @Override StepErrorMeta clone(); @Override String getXML(); String getErrorCodesValuename(); void setErrorCodesValuename( String errorCodesValuename ); String getErrorDescriptionsValuename(); void setErrorDescriptionsValuename( String errorDescriptionsValuename ); String getErrorFieldsValuename(); void setErrorFieldsValuename( String errorFieldsValuename ); String getNrErrorsValuename(); void setNrErrorsValuename( String nrErrorsValuename ); StepMeta getTargetStep(); void setTargetStep( StepMeta targetStep ); StepMeta getSourceStep(); void setSourceStep( StepMeta sourceStep ); boolean isEnabled(); void setEnabled( boolean enabled ); RowMetaInterface getErrorFields(); RowMetaInterface getErrorRowMeta( long nrErrors, String errorDescriptions, String fieldNames,
    String errorCodes ); void addErrorRowData( Object[] row, int startIndex, long nrErrors, String errorDescriptions,
    String fieldNames, String errorCodes ); String getMaxErrors(); void setMaxErrors( String maxErrors ); String getMaxPercentErrors(); void setMaxPercentErrors( String maxPercentErrors ); String getMinPercentRows(); void setMinPercentRows( String minRowsForPercent ); static final String XML_ERROR_TAG; static final String XML_SOURCE_STEP_TAG; static final String XML_TARGET_STEP_TAG; }### Answer:
@Test public void testGetErrorRowMeta() { VariableSpace vars = new Variables(); vars.setVariable( "VarNumberErrors", "nbrErrors" ); vars.setVariable( "VarErrorDescription", "errorDescription" ); vars.setVariable( "VarErrorFields", "errorFields" ); vars.setVariable( "VarErrorCodes", "errorCodes" ); StepErrorMeta testObject = new StepErrorMeta( vars, new StepMeta(), new StepMeta(), "${VarNumberErrors}", "${VarErrorDescription}", "${VarErrorFields}", "${VarErrorCodes}" ); RowMetaInterface result = testObject.getErrorRowMeta( 10, "some data was bad", "factId", "BAD131" ); assertNotNull( result ); assertEquals( 4, result.size() ); assertEquals( ValueMetaInterface.TYPE_INTEGER, result.getValueMeta( 0 ).getType() ); assertEquals( "nbrErrors", result.getValueMeta( 0 ).getName() ); assertEquals( ValueMetaInterface.TYPE_STRING, result.getValueMeta( 1 ).getType() ); assertEquals( "errorDescription", result.getValueMeta( 1 ).getName() ); assertEquals( ValueMetaInterface.TYPE_STRING, result.getValueMeta( 2 ).getType() ); assertEquals( "errorFields", result.getValueMeta( 2 ).getName() ); assertEquals( ValueMetaInterface.TYPE_STRING, result.getValueMeta( 3 ).getType() ); assertEquals( "errorCodes", result.getValueMeta( 3 ).getName() ); }