@Test(expected = NullPointerException.class) public void does_not_allow_null_chunk() throws ParseException { Predicate<Node> predicate = n -> true; FileContentReplace fileContentReplace = new FileContentReplace(predicate, n -> null); ByteArrayOutputStream newDump = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDump); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume(TestUtil.openResource("dumps/add_file.dump"), fileContentReplace); }
@Test public void if_no_match_then_no_change() throws ParseException, IOException { Predicate<Node> predicate = n -> false; FileContentReplace fileContentReplace = new FileContentReplace(predicate, n -> null); ByteArrayOutputStream newDump = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDump); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume(TestUtil.openResource("dumps/add_file.dump"), fileContentReplace); TestUtil.assertEqualStreams( TestUtil.openResource("dumps/add_file.dump"), new ByteArrayInputStream(newDump.toByteArray())); }
@Test public void tracks_copied_file_across_one_copy() throws ParseException, IOException { Predicate<Node> nodeMatcher = n -> n.getRevision().get().getNumber() == 1 && "README.txt".equals(n.get(NodeHeader.PATH)); FileContentReplace fileContentReplace = new FileContentReplace(nodeMatcher, n -> new ContentChunkImpl("new content\n".getBytes())); ByteArrayOutputStream newDumpStream = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDumpStream); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume(TestUtil.openResource("dumps/svn_copy_file.dump"), fileContentReplace); TestUtil.assertEqualStreams( TestUtil.openResource("dumps/svn_copy_file_new_content.dump"), new ByteArrayInputStream(newDumpStream.toByteArray())); }
@Test public void handle_multiple_matches_across_simple_copies() throws ParseException, IOException { Predicate<Node> nodeMatcher = n -> n.get(NodeHeader.PATH).endsWith("README.txt"); FileContentReplace fileContentReplace = new FileContentReplace( nodeMatcher, FileContentReplace.chunkFromString("this text is different\n")); ByteArrayOutputStream newDumpStream = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDumpStream); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume(TestUtil.openResource("dumps/simple_copy.dump"), fileContentReplace); TestUtil.assertEqualStreams( TestUtil.openResource("dumps/simple_copy2.dump"), new ByteArrayInputStream(newDumpStream.toByteArray())); }
@Test public void tracks_copied_file_across_many_copies() throws ParseException, IOException { FileContentReplace fileContentReplace = FileContentReplace.createFCR( 1, "add", "README.txt", n -> new ContentChunkImpl("new content\n".getBytes())); ByteArrayOutputStream newDumpStream = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDumpStream); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume( TestUtil.openResource("dumps/svn_copy_file_many_times.dump"), fileContentReplace); TestUtil.assertEqualStreams( TestUtil.openResource("dumps/svn_copy_file_many_times_new_content.dump"), new ByteArrayInputStream(newDumpStream.toByteArray())); }
@Test public void does_not_change_a_change_and_copied_file() throws ParseException, IOException { Predicate<Node> nodeMatcher = n -> false; FileContentReplace fileContentReplace = new FileContentReplace( nodeMatcher, n -> new ContentChunkImpl("i replaced the content\n".getBytes())); ByteArrayOutputStream newDumpStream = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDumpStream); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume( TestUtil.openResource("dumps/add_and_change_copy_delete.dump"), fileContentReplace); TestUtil.assertEqualStreams( TestUtil.openResource("dumps/add_and_change_copy_delete.dump"), new ByteArrayInputStream(newDumpStream.toByteArray())); }
@Test public void tracks_node_in_directory_external_tok() throws ParseException, IOException { FileContentReplace fileContentReplace = FileContentReplace.createFCR( 2, "add", "dir1/dir2/dir3/README.txt", n -> new ContentChunkImpl("new content\n".getBytes())); ByteArrayOutputStream newDumpStream = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDumpStream); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume( TestUtil.openResource("dumps/add_file_in_directory.before.dump"), fileContentReplace); InputStream dumpWithNewContent = TestUtil.openResource("dumps/add_file_in_directory.after.dump"); InputStream dumpCreatedByFileContentReplace = new ByteArrayInputStream(newDumpStream.toByteArray()); TestUtil.assertEqualStreams(dumpWithNewContent, dumpCreatedByFileContentReplace); }
@Test public void tracks_node_in_directory() throws ParseException, IOException { Predicate<Node> nodeMatcher = n -> n.getRevision().get().getNumber() == 2 && "dir1/dir2/dir3/README.txt".equals(n.get(NodeHeader.PATH)); FileContentReplace fileContentReplace = new FileContentReplace(nodeMatcher, n -> new ContentChunkImpl("new content\n".getBytes())); ByteArrayOutputStream newDumpStream = new ByteArrayOutputStream(); RepositoryWriter svnDumpWriter = new SvnDumpWriter(); svnDumpWriter.writeTo(newDumpStream); fileContentReplace.continueTo(svnDumpWriter); SvnDumpParser.consume( TestUtil.openResource("dumps/add_file_in_directory.before.dump"), fileContentReplace); InputStream dumpWithNewContent = TestUtil.openResource("dumps/add_file_in_directory.after.dump"); InputStream dumpCreatedByFileContentReplace = new ByteArrayInputStream(newDumpStream.toByteArray()); TestUtil.assertEqualStreams(dumpWithNewContent, dumpCreatedByFileContentReplace); }