package org.tmatesoft.svn.test; import java.io.File; import org.junit.Assert; import org.junit.Assume; import org.junit.Test; import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNStatusType; import org.tmatesoft.svn.core.wc2.SvnGetStatus; import org.tmatesoft.svn.core.wc2.SvnMarkReplaced; import org.tmatesoft.svn.core.wc2.SvnOperationFactory; import org.tmatesoft.svn.core.wc2.SvnStatus; import org.tmatesoft.svn.core.wc2.SvnTarget; public class MarkReplacedTest { @Test public void testMarkDirectoryReplaced() throws Exception { final TestOptions options = TestOptions.getInstance(); final SvnOperationFactory svnOperationFactory = new SvnOperationFactory(); final Sandbox sandbox = Sandbox.createWithCleanup(getTestName() + ".testMarkDirectoryReplaced", options); try { final SVNURL url = sandbox.createSvnRepository(); final CommitBuilder commitBuilder = new CommitBuilder(url); commitBuilder.addFile("directory/file"); commitBuilder.commit(); final WorkingCopy workingCopy = sandbox.checkoutNewWorkingCopy(url, SVNRevision.HEAD.getNumber()); final File workingCopyDirectory = workingCopy.getWorkingCopyDirectory(); final File directory = new File(workingCopyDirectory, "directory"); final File file = new File(directory, "file"); markReplaced(svnOperationFactory, directory); Assert.assertEquals(SVNStatusType.STATUS_REPLACED, getStatus(svnOperationFactory, directory)); assertEqualsAny(SVNStatusType.STATUS_REPLACED, SVNStatusType.STATUS_ADDED, getStatus(svnOperationFactory, file)); //now markReplaced should simply do nothing, but shouldn't fail markReplaced(svnOperationFactory, directory); Assert.assertEquals(SVNStatusType.STATUS_REPLACED, getStatus(svnOperationFactory, directory)); assertEqualsAny(SVNStatusType.STATUS_REPLACED, SVNStatusType.STATUS_ADDED, getStatus(svnOperationFactory, file)); } finally { sandbox.dispose(); svnOperationFactory.dispose(); } } @Test public void testMarkFileReplaced() throws Exception { final TestOptions options = TestOptions.getInstance(); final SvnOperationFactory svnOperationFactory = new SvnOperationFactory(); final Sandbox sandbox = Sandbox.createWithCleanup(getTestName() + ".testMarkFileReplaced", options); try { final SVNURL url = sandbox.createSvnRepository(); final CommitBuilder commitBuilder = new CommitBuilder(url); commitBuilder.addFile("directory/file"); commitBuilder.commit(); final WorkingCopy workingCopy = sandbox.checkoutNewWorkingCopy(url, SVNRevision.HEAD.getNumber()); final File workingCopyDirectory = workingCopy.getWorkingCopyDirectory(); final File directory = new File(workingCopyDirectory, "directory"); final File file = new File(directory, "file"); markReplaced(svnOperationFactory, file); Assert.assertEquals(SVNStatusType.STATUS_REPLACED, getStatus(svnOperationFactory, file)); Assert.assertEquals(SVNStatusType.STATUS_NORMAL, getStatus(svnOperationFactory, directory)); //now markReplaced should simply do nothing, but shouldn't fail markReplaced(svnOperationFactory, file); Assert.assertEquals(SVNStatusType.STATUS_REPLACED, getStatus(svnOperationFactory, file)); Assert.assertEquals(SVNStatusType.STATUS_NORMAL, getStatus(svnOperationFactory, directory)); } finally { sandbox.dispose(); svnOperationFactory.dispose(); } } @Test public void testMarkRootReplacedFails() throws Exception { Assume.assumeTrue(TestUtil.isNewWorkingCopyTest()); final TestOptions options = TestOptions.getInstance(); final SvnOperationFactory svnOperationFactory = new SvnOperationFactory(); final Sandbox sandbox = Sandbox.createWithCleanup(getTestName() + ".testMarkRootReplacedFails", options); try { final SVNURL url = sandbox.createSvnRepository(); final CommitBuilder commitBuilder = new CommitBuilder(url); commitBuilder.addFile("directory/file"); commitBuilder.commit(); final WorkingCopy workingCopy = sandbox.checkoutNewWorkingCopy(url, SVNRevision.HEAD.getNumber()); final File workingCopyDirectory = workingCopy.getWorkingCopyDirectory(); final File directory = new File(workingCopyDirectory, "directory"); final File file = new File(directory, "file"); try { markReplaced(svnOperationFactory, workingCopyDirectory); Assert.fail("An exception should be thrown"); } catch (SVNException e) { Assert.assertEquals(SVNErrorCode.WC_PATH_UNEXPECTED_STATUS, e.getErrorMessage().getErrorCode()); //expected } Assert.assertEquals(SVNStatusType.STATUS_NORMAL, getStatus(svnOperationFactory, workingCopyDirectory)); Assert.assertEquals(SVNStatusType.STATUS_NORMAL, getStatus(svnOperationFactory, directory)); Assert.assertEquals(SVNStatusType.STATUS_NORMAL, getStatus(svnOperationFactory, file)); } finally { sandbox.dispose(); svnOperationFactory.dispose(); } } private void assertEqualsAny(SVNStatusType expected1, SVNStatusType expected2, SVNStatusType actual) { Assert.assertTrue(expected1 == actual || expected2 == actual); } private SVNStatusType getStatus(SvnOperationFactory svnOperationFactory, File file) throws SVNException { final SvnGetStatus getStatus = svnOperationFactory.createGetStatus(); getStatus.setSingleTarget(SvnTarget.fromFile(file)); getStatus.setRemote(false); getStatus.setReportAll(true); getStatus.setReportExternals(false); getStatus.setReportIgnored(true); final SvnStatus status = getStatus.run(); Assert.assertNotNull(status); return status.getNodeStatus(); } private void markReplaced(SvnOperationFactory svnOperationFactory, File file) throws SVNException { final SvnMarkReplaced markReplaced = svnOperationFactory.createMarkReplaced(); markReplaced.setSingleTarget(SvnTarget.fromFile(file)); markReplaced.run(); } private String getTestName() { return "MarkReplacedTest"; } }