123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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 02110-1301, USA.
- */
- package org.sonar.api.test;
-
- import org.apache.commons.io.FileUtils;
- import org.apache.commons.io.IOUtils;
- import org.apache.maven.model.Model;
- import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
- import org.apache.maven.project.MavenProject;
- import org.sonar.api.batch.maven.MavenUtils;
- import org.sonar.api.resources.InputFile;
- import org.sonar.api.resources.Language;
- import org.sonar.api.resources.Project;
- import org.sonar.api.resources.ProjectFileSystem;
- import org.sonar.api.resources.Resource;
- import org.sonar.api.scan.filesystem.PathResolver;
- import org.sonar.api.utils.SonarException;
-
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import java.nio.charset.Charset;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
-
- import static org.mockito.Mockito.mock;
- import static org.mockito.Mockito.when;
-
- public final class MavenTestUtils {
-
- public static MavenProject loadPom(Class clazz, String path) {
- String fullpath = "/" + clazz.getName().replaceAll("\\.", "/") + "/" + path;
- return loadPom(fullpath);
- }
-
- public static MavenProject loadPom(String pomUrlInClasspath) {
- FileReader fileReader = null;
- try {
- File pomFile = new File(MavenTestUtils.class.getResource(pomUrlInClasspath).toURI());
- MavenXpp3Reader pomReader = new MavenXpp3Reader();
- fileReader = new FileReader(pomFile);
- Model model = pomReader.read(fileReader);
- MavenProject project = new MavenProject(model);
- project.setFile(pomFile);
- project.getBuild().setDirectory(pomFile.getParentFile().getPath());
- project.addCompileSourceRoot(pomFile.getParentFile().getPath() + "/src/main/java");
- project.addTestCompileSourceRoot(pomFile.getParentFile().getPath() + "/src/test/java");
- return project;
- } catch (Exception e) {
- throw new SonarException("Failed to read Maven project file : " + pomUrlInClasspath, e);
-
- } finally {
- IOUtils.closeQuietly(fileReader);
- }
- }
-
- public static Project loadProjectFromPom(Class clazz, String path) {
- MavenProject pom = loadPom(clazz, path);
- Project project = new Project(pom.getGroupId() + ":" + pom.getArtifactId())
- .setPom(pom);
- // configuration.setProperty("sonar.java.source", MavenUtils.getJavaSourceVersion(pom));
- // configuration.setProperty("sonar.java.target", MavenUtils.getJavaVersion(pom));
- // configuration.setProperty(CoreProperties.ENCODING_PROPERTY, MavenUtils.getSourceEncoding(pom));
-
- project.setFileSystem(new MavenModuleFileSystem(pom));
- return project;
- }
-
- public static MavenProject mockPom(String packaging) {
- MavenProject mavenProject = mock(MavenProject.class);
- when(mavenProject.getPackaging()).thenReturn(packaging);
- return mavenProject;
- }
-
- static class MavenModuleFileSystem implements ProjectFileSystem {
- private MavenProject pom;
-
- MavenModuleFileSystem(MavenProject pom) {
- this.pom = pom;
- }
-
- public Charset getSourceCharset() {
- return Charset.forName(MavenUtils.getSourceEncoding(pom));
- }
-
- public File getBasedir() {
- return pom.getBasedir();
- }
-
- public File getBuildDir() {
- return new File(pom.getBuild().getDirectory());
- }
-
- public File getBuildOutputDir() {
- return new File(pom.getBuild().getOutputDirectory());
- }
-
- public List<File> getSourceDirs() {
- return Arrays.asList(new File(pom.getBuild().getSourceDirectory()));
- }
-
- public ProjectFileSystem addSourceDir(File dir) {
- throw new UnsupportedOperationException();
- }
-
- public List<File> getTestDirs() {
- return null;
- }
-
- public ProjectFileSystem addTestDir(File dir) {
- throw new UnsupportedOperationException();
- }
-
- public File getReportOutputDir() {
- return null;
- }
-
- public File getSonarWorkingDirectory() {
- File dir = new File(getBuildDir(), "sonar");
- try {
- FileUtils.forceMkdir(dir);
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- return dir;
- }
-
- public File resolvePath(String path) {
- return new PathResolver().relativeFile(getBasedir(), path);
- }
-
- public List<File> getSourceFiles(Language... langs) {
- return new ArrayList(FileUtils.listFiles(getSourceDirs().get(0), new String[] {"java"}, true));
- }
-
- public List<File> getJavaSourceFiles() {
- return getSourceFiles();
- }
-
- public boolean hasJavaSourceFiles() {
- return !getJavaSourceFiles().isEmpty();
- }
-
- public List<File> getTestFiles(Language... langs) {
- return new ArrayList(FileUtils.listFiles(getTestDirs().get(0), new String[] {"java"}, true));
- }
-
- public boolean hasTestFiles(Language lang) {
- return !getTestFiles(lang).isEmpty();
- }
-
- public File writeToWorkingDirectory(String content, String fileName) throws IOException {
- throw new UnsupportedOperationException();
- }
-
- public File getFileFromBuildDirectory(String filename) {
- throw new UnsupportedOperationException();
- }
-
- public Resource toResource(File file) {
- throw new UnsupportedOperationException();
- }
-
- public List<InputFile> mainFiles(String... langs) {
- throw new UnsupportedOperationException();
- }
-
- public List<InputFile> testFiles(String... langs) {
- throw new UnsupportedOperationException();
- }
- }
- }
|