AndroidStringDocumentMapper { TextUnitDTO addTextUnitDTOAttributes(TextUnitDTO textUnit) { if (!Strings.isNullOrEmpty(locale)){ textUnit.setTargetLocale(locale); } if (!Strings.isNullOrEmpty(repositoryName)){ textUnit.setRepositoryName(repositoryName); } if (textUnit.getName().contains(assetDelimiter)){ String[] nameParts = textUnit.getName().split(assetDelimiter, 2); if (nameParts.length > 1) { textUnit.setAssetPath(nameParts[0]); textUnit.setName(nameParts[1]); } } return textUnit; } AndroidStringDocumentMapper(String pluralSeparator,
                                       String assetDelimiter,
                                       String locale,
                                       String repositoryName);  AndroidStringDocumentMapper(String pluralSeparator, String assetDelimiter); AndroidStringDocument readFromTextUnits(List<TextUnitDTO> textUnits, boolean useSource); AndroidStringDocument readFromSourceTextUnits(List<TextUnitDTO> textUnits); AndroidStringDocument readFromTargetTextUnits(List<TextUnitDTO> textUnits); List<TextUnitDTO> mapToTextUnits(AndroidStringDocument document); Stream<TextUnitDTO> mapToTextUnitStream(AndroidStringDocument document);  }
@Test public void testAddTextUnitDTOAttributesAssetPathAndName() { mapper = new AndroidStringDocumentMapper("_", null); TextUnitDTO textUnitDTO = new TextUnitDTO(); textUnitDTO.setName("asset_path#@#name_part1"); assertThat(mapper.addTextUnitDTOAttributes(textUnitDTO)) .extracting(TextUnitDTO::getAssetPath, TextUnitDTO::getName) .containsExactly("asset_path", "name_part1"); textUnitDTO.setName("asset_path#@#name_part1#@#name_part2"); assertThat(mapper.addTextUnitDTOAttributes(textUnitDTO)) .extracting(TextUnitDTO::getAssetPath, TextUnitDTO::getName) .containsExactly("asset_path", "name_part1#@#name_part2"); }