From 08f87390d465e70eca4bfd416411f8a7b82ef521 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 13 Jun 2012 14:13:42 +0200 Subject: [PATCH] added unit test for hg browse command --- .../repository/TempSCMContextProvider.java | 142 +++++++++++++++ .../spi/AbstractHgCommandTestBase.java | 12 +- .../repository/spi/HgBrowseCommandTest.java | 165 ++++++++++++++++++ .../services/sonia.scm.SCMContextProvider | 1 + 4 files changed, 315 insertions(+), 5 deletions(-) create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/TempSCMContextProvider.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/resources/META-INF/services/sonia.scm.SCMContextProvider diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/TempSCMContextProvider.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/TempSCMContextProvider.java new file mode 100644 index 0000000000..f36bf66c83 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/TempSCMContextProvider.java @@ -0,0 +1,142 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.SCMContextProvider; +import sonia.scm.Stage; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; +import java.io.IOException; + +/** + * + * @author Sebastian Sdorra + */ +public class TempSCMContextProvider implements SCMContextProvider +{ + + /** + * Method description + * + * + * @throws IOException + */ + @Override + public void close() throws IOException + { + + // do nothing + } + + /** + * Method description + * + */ + @Override + public void init() + { + + // do nothing + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + public File getBaseDirectory() + { + return baseDirectory; + } + + /** + * Method description + * + * + * @return + */ + @Override + public Stage getStage() + { + return Stage.DEVELOPMENT; + } + + /** + * Method description + * + * + * @return + */ + @Override + public Throwable getStartupError() + { + return null; + } + + /** + * Method description + * + * + * @return + */ + @Override + public String getVersion() + { + return "UNIT-Test"; + } + + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param baseDirectory + */ + public void setBaseDirectory(File baseDirectory) + { + this.baseDirectory = baseDirectory; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private File baseDirectory; +} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java index 53e9101a0d..3cf98402dd 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java @@ -36,12 +36,12 @@ package sonia.scm.repository.spi; import org.junit.Assume; import org.junit.Before; -import sonia.scm.SCMContextProvider; +import sonia.scm.SCMContext; import sonia.scm.io.FileSystem; import sonia.scm.repository.HgContextProvider; import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.TempSCMContextProvider; import sonia.scm.store.MemoryStoreFactory; -import sonia.scm.util.MockUtil; import static org.mockito.Mockito.*; @@ -67,13 +67,15 @@ public class AbstractHgCommandTestBase extends ZippedRepositoryTestBase public void initHgHandler() throws IOException { File folder = tempFolder.newFolder(); + TempSCMContextProvider context = + (TempSCMContextProvider) SCMContext.getContext(); + + context.setBaseDirectory(folder); + FileSystem fileSystem = mock(FileSystem.class); this.handler = new HgRepositoryHandler(new MemoryStoreFactory(), fileSystem, new HgContextProvider()); - - SCMContextProvider context = MockUtil.getSCMContextProvider(folder); - this.handler.init(context); // skip tests if hg not in path diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java new file mode 100644 index 0000000000..055d456221 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBrowseCommandTest.java @@ -0,0 +1,165 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository.spi; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.junit.Test; + +import sonia.scm.repository.BrowserResult; +import sonia.scm.repository.FileObject; +import sonia.scm.repository.HgContext; +import sonia.scm.repository.RepositoryException; + +import static org.junit.Assert.*; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.IOException; + +import java.util.List; + +/** + * + * @author Sebastian Sdorra + */ +public class HgBrowseCommandTest extends AbstractHgCommandTestBase +{ + + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test + public void testBrowse() throws IOException, RepositoryException + { + BrowserResult result = new HgBrowseCommand( + handler, new HgContext(), repository, + repositoryDirectory).getBrowserResult( + new BrowseCommandRequest()); + + assertNotNull(result); + + List foList = result.getFiles(); + + assertNotNull(foList); + assertFalse(foList.isEmpty()); + assertEquals(4, foList.size()); + + FileObject a = null; + FileObject c = null; + + for (FileObject f : foList) + { + if ("a.txt".equals(f.getName())) + { + a = f; + } + else if ("c".equals(f.getName())) + { + c = f; + } + } + + assertNotNull(a); + assertFalse(a.isDirectory()); + assertEquals("a.txt", a.getName()); + assertEquals("a.txt", a.getPath()); + assertEquals("added new line for blame", a.getDescription()); + assertTrue(a.getLength() > 0); + checkDate(a.getLastModified()); + assertNotNull(c); + assertTrue(c.isDirectory()); + assertEquals("c", c.getName()); + assertEquals("c", c.getPath()); + } + + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test + public void testBrowseSubDirectory() throws IOException, RepositoryException + { + BrowseCommandRequest request = new BrowseCommandRequest(); + + request.setPath("c"); + + BrowserResult result = new HgBrowseCommand(handler, new HgContext(), + repository, + repositoryDirectory).getBrowserResult(request); + + assertNotNull(result); + + List foList = result.getFiles(); + + assertNotNull(foList); + assertFalse(foList.isEmpty()); + assertEquals(2, foList.size()); + + FileObject d = null; + FileObject e = null; + + for (FileObject f : foList) + { + if ("d.txt".equals(f.getName())) + { + d = f; + } + else if ("e.txt".equals(f.getName())) + { + e = f; + } + } + + assertNotNull(d); + assertFalse(d.isDirectory()); + assertEquals("d.txt", d.getName()); + assertEquals("c/d.txt", d.getPath()); + assertEquals("added file d and e in folder c", d.getDescription()); + assertTrue(d.getLength() > 0); + checkDate(d.getLastModified()); + assertNotNull(e); + assertFalse(e.isDirectory()); + assertEquals("e.txt", e.getName()); + assertEquals("c/e.txt", e.getPath()); + assertEquals("added file d and e in folder c", e.getDescription()); + assertTrue(e.getLength() > 0); + checkDate(e.getLastModified()); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/test/resources/META-INF/services/sonia.scm.SCMContextProvider b/scm-plugins/scm-hg-plugin/src/test/resources/META-INF/services/sonia.scm.SCMContextProvider new file mode 100644 index 0000000000..64643da7e5 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/resources/META-INF/services/sonia.scm.SCMContextProvider @@ -0,0 +1 @@ +sonia.scm.repository.TempSCMContextProvider \ No newline at end of file