/* * .NET tools :: Commons * Copyright (C) 2010 Jose Chillan, Alexandre Victoor and SonarSource * dev@sonar.codehaus.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ package org.sonar.dotnet.tools.commons.utils; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.File; import java.util.Collection; import org.junit.Before; import org.junit.Test; import org.sonar.dotnet.tools.commons.visualstudio.VisualStudioProject; import org.sonar.dotnet.tools.commons.visualstudio.VisualStudioSolution; import org.sonar.test.TestUtils; public class FileFinderTest { private VisualStudioSolution solution; private VisualStudioProject project; @Before public void setUp() { solution = mock(VisualStudioSolution.class); project = mock(VisualStudioProject.class); File solutionDir = TestUtils.getResource("/solution/Example"); File projectDir = TestUtils.getResource("/solution/Example/Example.Core"); when(solution.getSolutionDir()).thenReturn(solutionDir); when(project.getDirectory()).thenReturn(projectDir); } @Test public void testFindFiles() { Collection<File> result = FileFinder.findFiles(solution, project, "Model\\SubType.cs"); assertEquals(1, result.size()); File csFile = result.iterator().next(); assertTrue(csFile.exists()); assertEquals("SubType.cs", csFile.getName()); } @Test public void testFindSubDirectories() { Collection<File> result = FileFinder.findDirectories(solution, project, "**/*"); assertFalse(result.isEmpty()); for (File file : result) { assertTrue(file.exists()); assertTrue(file.isDirectory()); } } @Test public void testFindSubDirectoriesWithNull() { Collection<File> result = FileFinder.findDirectories(solution, project, (String[])null); assertNotNull(result); assertTrue(result.isEmpty()); } @Test public void testFindAbsoluteFile() { File expectedCsFile = TestUtils.getResource("/solution/MessyTestSolution/MessyTestApplication/Program.cs"); Collection<File> result = FileFinder.findFiles(solution, project, expectedCsFile.getAbsolutePath()); assertEquals(1, result.size()); File csFile = result.iterator().next(); assertTrue(csFile.exists()); assertEquals("Program.cs", csFile.getName()); } @Test public void testFindAbsoluteFileWithPatternOutsideSolution() { File outsideDir = TestUtils.getResource("/solution/BlankSilverlightSolution"); String pattern = outsideDir.getAbsolutePath() + "/**/*Info.cs"; Collection<File> result = FileFinder.findFiles(solution, project, pattern); assertEquals(2, result.size()); File csFile = result.iterator().next(); assertTrue(csFile.exists()); assertEquals("AssemblyInfo.cs", csFile.getName()); } @Test public void testFindRelativeFileWithPatternOutsideSolution() { String pattern = "../../BlankSilverlightSolution/**/*Info.cs"; Collection<File> result = FileFinder.findFiles(solution, project, pattern); assertEquals(2, result.size()); File csFile = result.iterator().next(); assertTrue(csFile.exists()); assertEquals("AssemblyInfo.cs", csFile.getName()); } @Test public void testFindFilesWithBadPattern() { Collection<File> result = FileFinder.findFiles(solution, project, "../toto/**/*.cs"); assertNotNull(result); assertTrue(result.isEmpty()); } @Test public void testFindFilesWithPattern() { Collection<File> result = FileFinder.findFiles(solution, project, "**/*.cs"); assertEquals(6, result.size()); for (File file : result) { assertTrue(file.exists()); } } @Test public void testFindFilesWithMultiplePatterns() { Collection<File> result = FileFinder.findFiles(solution, project, "S*.cs;**/*Money.cs"); assertEquals(3, result.size()); for (File file : result) { assertTrue(file.exists()); } } @Test public void testPatternWithSubstitution() { Collection<File> result = FileFinder.findFiles(solution, project, "$(SolutionDir)/Example.Core/*.cs"); assertEquals(4, result.size()); for (File file : result) { assertTrue(file.exists()); } } @Test public void testPatternWithSubstitutionOutsideSolution() { Collection<File> result = FileFinder.findFiles(solution, project, "$(SolutionDir)/../BlankSilverlightSolution/**/*Info.cs"); assertEquals(2, result.size()); File csFile = result.iterator().next(); assertTrue(csFile.exists()); assertEquals("AssemblyInfo.cs", csFile.getName()); } }