### Question:
StringsCutStepAnalyzer extends StepAnalyzer<StringCutMeta> { @Override public Set<ComponentDerivationRecord> getChangeRecords( StringCutMeta meta ) throws MetaverseAnalyzerException { Set<ComponentDerivationRecord> changeRecords = new HashSet<>(); for ( int i = 0; i < meta.getFieldInStream().length; i++ ) { String fieldInString = meta.getFieldInStream()[i]; String fieldOutString = meta.getFieldOutStream()[i]; if ( fieldOutString == null || fieldOutString.length() < 1 ) { fieldOutString = fieldInString; } ComponentDerivationRecord changeRecord = new ComponentDerivationRecord( fieldInString, fieldOutString, ChangeType.DATA ); String changeOperation = fieldInString + " -> [ substring [ " + meta.getCutFrom()[i] + ", " + meta.getCutTo()[i] + " ] ] -> " + fieldOutString; changeRecord.addOperation( new Operation( Operation.CALC_CATEGORY, ChangeType.DATA, DictionaryConst.PROPERTY_TRANSFORMS, changeOperation ) ); changeRecords.add( changeRecord ); } return changeRecords; }  @Override Set<Class<? extends BaseStepMeta>> getSupportedSteps(); @Override Set<ComponentDerivationRecord> getChangeRecords( StringCutMeta meta );  }### Answer:
@Test public void testGetChangeRecords() throws Exception { Set<ComponentDerivationRecord> changeRecords = analyzer.getChangeRecords( stringsCutMeta ); assertEquals( changeRecords.size(), 3 ); List<String> inFields = Arrays.asList( stringsCutMeta.getFieldInStream() ); for ( ComponentDerivationRecord change : changeRecords ) { assertTrue( inFields.contains( change.getOriginalEntityName() ) ); assertEquals( 1, change.getOperations( ChangeType.DATA ).size() ); assertNull( change.getOperations( ChangeType.METADATA ) ); } }