Browse Source

SONAR-6658 Drop validation on sonar.libraries and sonar.binaries

tags/5.2-RC1
Duarte Meneses 8 years ago
parent
commit
1dd1cd5c65
24 changed files with 87 additions and 650 deletions
  1. 0
    2
      sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
  2. 0
    27
      sonar-batch/src/main/java/org/sonar/batch/scan/ProjectReactorBuilder.java
  3. 10
    4
      sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java
  4. 0
    17
      sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleFileSystemInitializer.java
  5. 24
    30
      sonar-batch/src/test/java/org/sonar/batch/scan/DeprecatedProjectReactorBuilderTest.java
  6. 15
    68
      sonar-batch/src/test/java/org/sonar/batch/scan/ProjectReactorBuilderTest.java
  7. 3
    4
      sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java
  8. 2
    5
      sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ModuleFileSystemInitializerTest.java
  9. 0
    1
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-binary-dir/module1/src/Fake.java
  10. 0
    9
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-binary-dir/sonar-project.properties
  11. 0
    1
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-lib/module1/src/Fake.java
  12. 0
    9
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-lib/sonar-project.properties
  13. 0
    3
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/lib/Fake.class
  14. 0
    7
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sonar-project.properties
  15. 0
    3
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sources/Fake.java
  16. 0
    7
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-binary/sonar-project.properties
  17. 0
    1
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-binary/sources/Fake.java
  18. 0
    7
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-lib/sonar-project.properties
  19. 0
    1
      sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-lib/sources/Fake.java
  20. 0
    90
      sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java
  21. 0
    245
      sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java
  22. 1
    8
      sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/ModuleFileSystem.java
  23. 2
    2
      sonar-plugin-api/src/test/java/org/sonar/api/batch/bootstrap/ProjectBuilderTest.java
  24. 30
    99
      sonar-plugin-api/src/test/java/org/sonar/api/batch/bootstrap/ProjectDefinitionTest.java

+ 0
- 2
sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java View File

@@ -22,7 +22,6 @@ package org.sonar.batch.scan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.InstantiationStrategy;
import org.sonar.api.batch.ProjectClasspath;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.internal.FileMetadata;
import org.sonar.api.batch.rule.CheckFactory;
@@ -134,7 +133,6 @@ public class ModuleScanContainer extends ComponentContainer {
DefaultModuleFileSystem.class,
ModuleFileSystemInitializer.class,
ProjectFileSystemAdapter.class,
ProjectClasspath.class,
QProfileVerifier.class,

SensorOptimizer.class,

+ 0
- 27
sonar-batch/src/main/java/org/sonar/batch/scan/ProjectReactorBuilder.java View File

@@ -81,8 +81,6 @@ public class ProjectReactorBuilder {
*/
private static final String PROPERTY_SOURCES = "sonar.sources";
private static final String PROPERTY_TESTS = "sonar.tests";
private static final String PROPERTY_BINARIES = "sonar.binaries";
private static final String PROPERTY_LIBRARIES = "sonar.libraries";

/**
* Array of all mandatory properties required for a project without child.
@@ -344,22 +342,9 @@ public class ProjectReactorBuilder {
if (!props.containsKey(PROPERTY_MODULES)) {
// SONARPLUGINS-2285 Not an aggregator project so we can validate that paths are correct if defined

// We need to resolve patterns that may have been used in "sonar.libraries"
for (String pattern : getListFromProperty(props, PROPERTY_LIBRARIES)) {
File[] files = getLibraries(baseDir, pattern);
if (files == null || files.length == 0) {
LOG.error(MessageFormat.format(INVALID_VALUE_OF_X_FOR_Y, PROPERTY_LIBRARIES, projectId));
throw new IllegalStateException("No files nor directories matching '" + pattern + "' in directory " + baseDir);
}
}

// Check sonar.tests
String[] testPaths = getListFromProperty(props, PROPERTY_TESTS);
checkExistenceOfPaths(projectId, baseDir, testPaths, PROPERTY_TESTS);

// Check sonar.binaries
String[] binDirs = getListFromProperty(props, PROPERTY_BINARIES);
checkExistenceOfDirectories(projectId, baseDir, binDirs, PROPERTY_BINARIES);
}
}

@@ -384,16 +369,6 @@ public class ProjectReactorBuilder {
// We need to check the existence of source directories
String[] sourcePaths = getListFromProperty(properties, PROPERTY_SOURCES);
checkExistenceOfPaths(project.getKey(), project.getBaseDir(), sourcePaths, PROPERTY_SOURCES);

// And we need to resolve patterns that may have been used in "sonar.libraries"
List<String> libPaths = Lists.newArrayList();
for (String pattern : getListFromProperty(properties, PROPERTY_LIBRARIES)) {
for (File file : getLibraries(project.getBaseDir(), pattern)) {
libPaths.add(file.getAbsolutePath());
}
}
properties.remove(PROPERTY_LIBRARIES);
properties.put(PROPERTY_LIBRARIES, StringUtils.join(libPaths, ","));
}

@VisibleForTesting
@@ -414,8 +389,6 @@ public class ProjectReactorBuilder {
// "aggregator" project must not have the following properties:
properties.remove(PROPERTY_SOURCES);
properties.remove(PROPERTY_TESTS);
properties.remove(PROPERTY_BINARIES);
properties.remove(PROPERTY_LIBRARIES);
}

@VisibleForTesting

+ 10
- 4
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystem.java View File

@@ -19,19 +19,26 @@
*/
package org.sonar.batch.scan.filesystem;

import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;

import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.annotation.CheckForNull;
import javax.annotation.Nullable;

import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.FilePredicate;
@@ -46,6 +53,7 @@ import org.sonar.api.utils.MessageException;
* @since 3.5
*/
public class DefaultModuleFileSystem extends DefaultFileSystem implements ModuleFileSystem {
private static final Logger LOG = Loggers.get(DefaultModuleFileSystem.class);

private final String moduleKey;
private final FileIndexer indexer;
@@ -54,7 +62,6 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
private File buildDir;
private List<File> sourceDirsOrFiles = Lists.newArrayList();
private List<File> testDirsOrFiles = Lists.newArrayList();
private List<File> binaryDirs = Lists.newArrayList();
private ComponentIndexer componentIndexer;
private boolean initialized;

@@ -69,7 +76,6 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
this.buildDir = initializer.buildDir();
this.sourceDirsOrFiles = initializer.sources();
this.testDirsOrFiles = initializer.tests();
this.binaryDirs = initializer.binaryDirs();
}

@VisibleForTesting
@@ -84,7 +90,6 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module
this.buildDir = initializer.buildDir();
this.sourceDirsOrFiles = initializer.sources();
this.testDirsOrFiles = initializer.tests();
this.binaryDirs = initializer.binaryDirs();
}

public boolean isInitialized() {
@@ -131,7 +136,8 @@ public class DefaultModuleFileSystem extends DefaultFileSystem implements Module

@Override
public List<File> binaryDirs() {
return binaryDirs;
LOG.warn("ModuleFileSystem#binaryDirs() is deprecated and will always return an empty list");
return new LinkedList<>();
}

@Override

+ 0
- 17
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleFileSystemInitializer.java View File

@@ -42,13 +42,11 @@ public class ModuleFileSystemInitializer {
private File buildDir;
private List<File> sourceDirsOrFiles = Lists.newArrayList();
private List<File> testDirsOrFiles = Lists.newArrayList();
private List<File> binaryDirs = Lists.newArrayList();

public ModuleFileSystemInitializer(ProjectDefinition module, TempFolder tempUtils, PathResolver pathResolver) {
baseDir = module.getBaseDir();
buildDir = module.getBuildDir();
initWorkingDir(module, tempUtils);
initBinaryDirs(module, pathResolver);
initSources(module, pathResolver);
initTests(module, pathResolver);
}
@@ -84,13 +82,6 @@ public class ModuleFileSystemInitializer {
}
}

private void initBinaryDirs(ProjectDefinition module, PathResolver pathResolver) {
for (String path : module.getBinaries()) {
File dir = pathResolver.relativeFile(module.getBaseDir(), path);
binaryDirs.add(dir);
}
}

File baseDir() {
return baseDir;
}
@@ -111,12 +102,4 @@ public class ModuleFileSystemInitializer {
List<File> tests() {
return testDirsOrFiles;
}

/**
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
List<File> binaryDirs() {
return binaryDirs;
}
}

+ 24
- 30
sonar-batch/src/test/java/org/sonar/batch/scan/DeprecatedProjectReactorBuilderTest.java View File

@@ -52,12 +52,11 @@ public class DeprecatedProjectReactorBuilderTest {
assertThat(rootProject.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(rootProject.getDescription()).isEqualTo("Description of Foo Project");
// root project must not contain some properties - even if they are defined in the root properties file
assertThat(rootProject.getSourceDirs().contains("sources")).isFalse();
assertThat(rootProject.getTestDirs().contains("tests")).isFalse();
assertThat(rootProject.getBinaries().contains("target/classes")).isFalse();
assertThat(rootProject.sources().contains("sources")).isFalse();
assertThat(rootProject.tests().contains("tests")).isFalse();
// and module properties must have been cleaned
assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
assertThat(rootProject.properties().get("module1.sonar.projectKey")).isNull();
assertThat(rootProject.properties().get("module2.sonar.projectKey")).isNull();

// CHECK MODULES
List<ProjectDefinition> modules = rootProject.getSubProjects();
@@ -71,12 +70,11 @@ public class DeprecatedProjectReactorBuilderTest {
assertThat(module1.getVersion()).isEqualTo("1.0-SNAPSHOT");
// Description should not be inherited from parent if not set
assertThat(module1.getDescription()).isEqualTo("Description of Module 1");
assertThat(module1.getSourceDirs()).contains("sources");
assertThat(module1.getTestDirs()).contains("tests");
assertThat(module1.getBinaries()).contains("target/classes");
assertThat(module1.sources()).contains("sources");
assertThat(module1.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
assertThat(module1.properties().get("module1.sonar.projectKey")).isNull();
assertThat(module1.properties().get("module2.sonar.projectKey")).isNull();

// Module 2
ProjectDefinition module2 = modules.get(1);
@@ -85,12 +83,11 @@ public class DeprecatedProjectReactorBuilderTest {
assertThat(module2.getName()).isEqualTo("Foo Module 2");
assertThat(module2.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(module2.getDescription()).isEqualTo("Description of Module 2");
assertThat(module2.getSourceDirs()).contains("src");
assertThat(module2.getTestDirs()).contains("tests");
assertThat(module2.getBinaries()).contains("target/classes");
assertThat(module2.sources()).contains("src");
assertThat(module2.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
assertThat(module2.properties().get("module1.sonar.projectKey")).isNull();
assertThat(module2.properties().get("module2.sonar.projectKey")).isNull();
}

@Test
@@ -103,12 +100,11 @@ public class DeprecatedProjectReactorBuilderTest {
assertThat(rootProject.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(rootProject.getDescription()).isEqualTo("Description of Foo Project");
// root project must not contain some properties - even if they are defined in the root properties file
assertThat(rootProject.getSourceDirs().contains("sources")).isFalse();
assertThat(rootProject.getTestDirs().contains("tests")).isFalse();
assertThat(rootProject.getBinaries().contains("target/classes")).isFalse();
assertThat(rootProject.sources().contains("sources")).isFalse();
assertThat(rootProject.tests().contains("tests")).isFalse();
// and module properties must have been cleaned
assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
assertThat(rootProject.properties().get("module1.sonar.projectKey")).isNull();
assertThat(rootProject.properties().get("module2.sonar.projectKey")).isNull();

// CHECK MODULES
List<ProjectDefinition> modules = rootProject.getSubProjects();
@@ -122,12 +118,11 @@ public class DeprecatedProjectReactorBuilderTest {
assertThat(module1.getVersion()).isEqualTo("1.0-SNAPSHOT");
// Description should not be inherited from parent if not set
assertThat(module1.getDescription()).isNull();
assertThat(module1.getSourceDirs()).contains("sources");
assertThat(module1.getTestDirs()).contains("tests");
assertThat(module1.getBinaries()).contains("target/classes");
assertThat(module1.sources()).contains("sources");
assertThat(module1.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
assertThat(module1.properties().get("module1.sonar.projectKey")).isNull();
assertThat(module1.properties().get("module2.sonar.projectKey")).isNull();

// Module 2
ProjectDefinition module2 = modules.get(1);
@@ -136,12 +131,11 @@ public class DeprecatedProjectReactorBuilderTest {
assertThat(module2.getName()).isEqualTo("Foo Module 2");
assertThat(module2.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(module2.getDescription()).isEqualTo("Description of Module 2");
assertThat(module2.getSourceDirs()).contains("src");
assertThat(module2.getTestDirs()).contains("tests");
assertThat(module2.getBinaries()).contains("target/classes");
assertThat(module2.sources()).contains("src");
assertThat(module2.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
assertThat(module2.properties().get("module1.sonar.projectKey")).isNull();
assertThat(module2.properties().get("module2.sonar.projectKey")).isNull();
}

@Test

+ 15
- 68
sonar-batch/src/test/java/org/sonar/batch/scan/ProjectReactorBuilderTest.java View File

@@ -52,9 +52,7 @@ public class ProjectReactorBuilderTest {
assertThat(projectDefinition.getName()).isEqualTo("Foo Project");
assertThat(projectDefinition.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(projectDefinition.getDescription()).isEqualTo("Description of Foo Project");
assertThat(projectDefinition.getSourceDirs()).contains("sources");
assertThat(projectDefinition.getLibraries()).contains(TestUtils.getResource(this.getClass(), "simple-project/libs/lib2.txt").getAbsolutePath(),
TestUtils.getResource(this.getClass(), "simple-project/libs/lib2.txt").getAbsolutePath());
assertThat(projectDefinition.sources()).contains("sources");
}

@Test
@@ -96,9 +94,8 @@ public class ProjectReactorBuilderTest {
assertThat(rootProject.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(rootProject.getDescription()).isEqualTo("Description of Foo Project");
// root project must not contain some properties - even if they are defined in the root properties file
assertThat(rootProject.getSourceDirs().contains("sources")).isFalse();
assertThat(rootProject.getTestDirs().contains("tests")).isFalse();
assertThat(rootProject.getBinaries().contains("target/classes")).isFalse();
assertThat(rootProject.sources().contains("sources")).isFalse();
assertThat(rootProject.tests().contains("tests")).isFalse();
// and module properties must have been cleaned
assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
@@ -120,9 +117,8 @@ public class ProjectReactorBuilderTest {
assertThat(module1.getVersion()).isEqualTo("1.0-SNAPSHOT");
// Description should not be inherited from parent if not set
assertThat(module1.getDescription()).isNull();
assertThat(module1.getSourceDirs()).contains("sources");
assertThat(module1.getTestDirs()).contains("tests");
assertThat(module1.getBinaries()).contains("target/classes");
assertThat(module1.sources()).contains("sources");
assertThat(module1.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
@@ -139,9 +135,8 @@ public class ProjectReactorBuilderTest {
assertThat(module2.getName()).isEqualTo("Foo Module 2");
assertThat(module2.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(module2.getDescription()).isEqualTo("Description of Module 2");
assertThat(module2.getSourceDirs()).contains("src");
assertThat(module2.getTestDirs()).contains("tests");
assertThat(module2.getBinaries()).contains("target/classes");
assertThat(module2.sources()).contains("src");
assertThat(module2.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module2.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module2.getProperties().getProperty("module2.sonar.projectKey")).isNull();
@@ -188,7 +183,7 @@ public class ProjectReactorBuilderTest {
// Module 1
ProjectDefinition module1 = modules.get(0);
assertThat(module1.getBaseDir().getCanonicalFile()).isEqualTo(TestUtils.getResource(this.getClass(), "multi-language-definitions-all-in-root"));
assertThat(module1.getSourceDirs()).contains("src/main/java");
assertThat(module1.sources()).contains("src/main/java");
// and module properties must have been cleaned
assertThat(module1.getWorkDir().getCanonicalFile())
.isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-language-definitions-all-in-root"), ".sonar/example_java-module"));
@@ -196,7 +191,7 @@ public class ProjectReactorBuilderTest {
// Module 2
ProjectDefinition module2 = modules.get(1);
assertThat(module2.getBaseDir().getCanonicalFile()).isEqualTo(TestUtils.getResource(this.getClass(), "multi-language-definitions-all-in-root"));
assertThat(module2.getSourceDirs()).contains("src/main/groovy");
assertThat(module2.sources()).contains("src/main/groovy");
// and module properties must have been cleaned
assertThat(module2.getWorkDir().getCanonicalFile())
.isEqualTo(new File(TestUtils.getResource(this.getClass(), "multi-language-definitions-all-in-root"), ".sonar/example_groovy-module"));
@@ -242,33 +237,6 @@ public class ProjectReactorBuilderTest {
loadProjectDefinition("simple-project-with-unexisting-test-dir");
}

@Test
public void shouldFailIfExplicitUnexistingBinaryFolder() {
thrown.expect(IllegalStateException.class);
thrown.expectMessage("The folder 'bin' does not exist for 'com.foo.project' (base directory = "
+ TestUtils.getResource(this.getClass(), "simple-project-with-unexisting-binary").getAbsolutePath());

loadProjectDefinition("simple-project-with-unexisting-binary");
}

@Test
public void shouldFailIfExplicitUnmatchingLibFolder() {
thrown.expect(IllegalStateException.class);
thrown.expectMessage("No files nor directories matching 'libs/*.txt' in directory "
+ TestUtils.getResource(this.getClass(), "simple-project-with-unexisting-lib").getAbsolutePath());

loadProjectDefinition("simple-project-with-unexisting-lib");
}

@Test
public void shouldGetLibDirectory() {
ProjectDefinition def = loadProjectDefinition("simple-project-with-lib-dir");
assertThat(def.getLibraries()).hasSize(1);
File libDir = new File(def.getLibraries().get(0));
assertThat(libDir).isDirectory().exists();
assertThat(libDir.getName()).isEqualTo("lib");
}

@Test
public void shouldFailIfExplicitUnexistingTestFolderOnModule() {
thrown.expect(IllegalStateException.class);
@@ -278,24 +246,6 @@ public class ProjectReactorBuilderTest {
loadProjectDefinition("multi-module-with-explicit-unexisting-test-dir");
}

@Test
public void shouldFailIfExplicitUnexistingBinaryFolderOnModule() {
thrown.expect(IllegalStateException.class);
thrown.expectMessage("The folder 'bin' does not exist for 'module1' (base directory = "
+ TestUtils.getResource(this.getClass(), "multi-module-with-explicit-unexisting-binary-dir").getAbsolutePath() + File.separator + "module1)");

loadProjectDefinition("multi-module-with-explicit-unexisting-binary-dir");
}

@Test
public void shouldFailIfExplicitUnmatchingLibFolderOnModule() {
thrown.expect(IllegalStateException.class);
thrown.expectMessage("No files nor directories matching 'lib/*.jar' in directory "
+ TestUtils.getResource(this.getClass(), "multi-module-with-explicit-unexisting-lib").getAbsolutePath() + File.separator + "module1");

loadProjectDefinition("multi-module-with-explicit-unexisting-lib");
}

@Test
public void multiModuleProperties() {
ProjectDefinition projectDefinition = loadProjectDefinition("big-multi-module-definitions-all-in-root");
@@ -583,9 +533,8 @@ public class ProjectReactorBuilderTest {
assertThat(rootProject.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(rootProject.getDescription()).isEqualTo("Description of Foo Project");
// root project must not contain some properties - even if they are defined in the root properties file
assertThat(rootProject.getSourceDirs().contains("sources")).isFalse();
assertThat(rootProject.getTestDirs().contains("tests")).isFalse();
assertThat(rootProject.getBinaries().contains("target/classes")).isFalse();
assertThat(rootProject.sources().contains("sources")).isFalse();
assertThat(rootProject.tests().contains("tests")).isFalse();
// and module properties must have been cleaned
assertThat(rootProject.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(rootProject.getProperties().getProperty("module2.sonar.projectKey")).isNull();
@@ -607,9 +556,8 @@ public class ProjectReactorBuilderTest {
assertThat(module1.getVersion()).isEqualTo("1.0-SNAPSHOT");
// Description should not be inherited from parent if not set
assertThat(module1.getDescription()).isNull();
assertThat(module1.getSourceDirs()).contains("sources");
assertThat(module1.getTestDirs()).contains("tests");
assertThat(module1.getBinaries()).contains("target/classes");
assertThat(module1.sources()).contains("sources");
assertThat(module1.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module1.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module1.getProperties().getProperty("module2.sonar.projectKey")).isNull();
@@ -626,9 +574,8 @@ public class ProjectReactorBuilderTest {
assertThat(module1Feature.getName()).isEqualTo("Foo Module 1 Feature");
assertThat(module1Feature.getVersion()).isEqualTo("1.0-SNAPSHOT");
assertThat(module1Feature.getDescription()).isEqualTo("Description of Module 1 Feature");
assertThat(module1Feature.getSourceDirs()).contains("src");
assertThat(module1Feature.getTestDirs()).contains("tests");
assertThat(module1Feature.getBinaries()).contains("target/classes");
assertThat(module1Feature.sources()).contains("src");
assertThat(module1Feature.tests()).contains("tests");
// and module properties must have been cleaned
assertThat(module1Feature.getProperties().getProperty("module1.sonar.projectKey")).isNull();
assertThat(module1Feature.getProperties().getProperty("module2.sonar.projectKey")).isNull();

+ 3
- 4
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/DefaultModuleFileSystemTest.java View File

@@ -82,7 +82,7 @@ public class DefaultModuleFileSystemTest {
DefaultModuleFileSystem fs = new DefaultModuleFileSystem(moduleInputFileCache,
new Project("foo"), settings, fileIndexer, initializer, componentIndexer);

assertThat(fs.sourceCharset()).isEqualTo(Charset.defaultCharset());
assertThat(fs.encoding()).isEqualTo(Charset.defaultCharset());
assertThat(fs.isDefaultJvmEncoding()).isTrue();
}

@@ -93,7 +93,7 @@ public class DefaultModuleFileSystemTest {
new Project("foo"), settings, fileIndexer, initializer, componentIndexer);

assertThat(fs.encoding()).isEqualTo(Charset.forName("Cp1124"));
assertThat(fs.sourceCharset()).isEqualTo(Charset.forName("Cp1124"));
assertThat(fs.encoding()).isEqualTo(Charset.forName("Cp1124"));

// This test fails when default Java encoding is "IBM AIX Ukraine". Sorry for that.
assertThat(fs.isDefaultJvmEncoding()).isFalse();
@@ -109,7 +109,6 @@ public class DefaultModuleFileSystemTest {
when(initializer.baseDir()).thenReturn(basedir);
when(initializer.buildDir()).thenReturn(buildDir);
when(initializer.workingDir()).thenReturn(workingDir);
when(initializer.binaryDirs()).thenReturn(Arrays.asList(new File(basedir, "target/classes")));
File javaSrc = new File(basedir, "src/main/java");
javaSrc.mkdirs();
File groovySrc = new File(basedir, "src/main/groovy");
@@ -127,7 +126,7 @@ public class DefaultModuleFileSystemTest {
assertThat(fs.buildDir().getCanonicalPath()).isEqualTo(buildDir.getCanonicalPath());
assertThat(fs.sourceDirs()).hasSize(2);
assertThat(fs.testDirs()).hasSize(1);
assertThat(fs.binaryDirs()).hasSize(1);
assertThat(fs.binaryDirs()).hasSize(0);
}

@Test

+ 2
- 5
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/ModuleFileSystemInitializerTest.java View File

@@ -69,9 +69,8 @@ public class ModuleFileSystemInitializerTest {
ProjectDefinition project = ProjectDefinition.create()
.setBaseDir(baseDir)
.setBuildDir(buildDir)
.addSourceDirs("src/main/java", "src/main/unknown")
.addTestDirs("src/test/java", "src/test/unknown")
.addBinaryDir("target/classes");
.addSources("src/main/java", "src/main/unknown")
.addTests("src/test/java", "src/test/unknown");

ModuleFileSystemInitializer initializer = new ModuleFileSystemInitializer(project, mock(TempFolder.class), pathResolver);

@@ -81,8 +80,6 @@ public class ModuleFileSystemInitializerTest {
assertThat(path(initializer.sources().get(0))).endsWith("src/main/java");
assertThat(initializer.tests()).hasSize(1);
assertThat(path(initializer.tests().get(0))).endsWith("src/test/java");
assertThat(initializer.binaryDirs()).hasSize(1);
assertThat(path(initializer.binaryDirs().get(0))).endsWith("target/classes");
}

private String path(File f) throws IOException {

+ 0
- 1
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-binary-dir/module1/src/Fake.java View File

@@ -1 +0,0 @@


+ 0
- 9
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-binary-dir/sonar-project.properties View File

@@ -1,9 +0,0 @@
sonar.projectKey=com.foo.project
sonar.projectName=Foo Project
sonar.projectVersion=1.0-SNAPSHOT
sonar.projectDescription=Description of Foo Project

sonar.sources=src

sonar.modules=module1
module1.sonar.binaries=bin

+ 0
- 1
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-lib/module1/src/Fake.java View File

@@ -1 +0,0 @@


+ 0
- 9
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/multi-module-with-explicit-unexisting-lib/sonar-project.properties View File

@@ -1,9 +0,0 @@
sonar.projectKey=com.foo.project
sonar.projectName=Foo Project
sonar.projectVersion=1.0-SNAPSHOT
sonar.projectDescription=Description of Foo Project

sonar.sources=src

sonar.modules=module1
module1.sonar.libraries=lib/*.jar

+ 0
- 3
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/lib/Fake.class View File

@@ -1,3 +0,0 @@
package org.sonar.runner.batch.ProjectReactorBuilderTest.simple

Fake

+ 0
- 7
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sonar-project.properties View File

@@ -1,7 +0,0 @@
sonar.projectKey=com.foo.project
sonar.projectName=Foo Project
sonar.projectVersion=1.0-SNAPSHOT
sonar.projectDescription=Description of Foo Project

sonar.sources=sources
sonar.libraries=lib

+ 0
- 3
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sources/Fake.java View File

@@ -1,3 +0,0 @@
package org.sonar.runner.batch.ProjectReactorBuilderTest.simple;

class Fake {}

+ 0
- 7
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-binary/sonar-project.properties View File

@@ -1,7 +0,0 @@
sonar.projectKey=com.foo.project
sonar.projectName=Foo Project
sonar.projectVersion=1.0-SNAPSHOT
sonar.projectDescription=Description of Foo Project

sonar.sources=sources
sonar.binaries=bin

+ 0
- 1
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-binary/sources/Fake.java View File

@@ -1 +0,0 @@
class Fake {}

+ 0
- 7
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-lib/sonar-project.properties View File

@@ -1,7 +0,0 @@
sonar.projectKey=com.foo.project
sonar.projectName=Foo Project
sonar.projectVersion=1.0-SNAPSHOT
sonar.projectDescription=Description of Foo Project

sonar.sources=sources
sonar.libraries=libs/*.txt

+ 0
- 1
sonar-batch/src/test/resources/org/sonar/batch/scan/ProjectReactorBuilderTest/simple-project-with-unexisting-lib/sources/Fake.java View File

@@ -1 +0,0 @@
class Fake {}

+ 0
- 90
sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java View File

@@ -1,90 +0,0 @@
/*
* 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.batch;

import com.google.common.collect.Lists;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import org.sonar.api.BatchComponent;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.resources.ProjectFileSystem;
import org.sonar.api.utils.SonarException;

/**
* @since 2.2
* @deprecated since 4.5 this is some Java specific stuff that should by handled by SQ Java plugin
*/
@Deprecated
public class ProjectClasspath implements BatchComponent {

private final ProjectDefinition def;
private final ProjectFileSystem projectFileSystem;
private List<File> elements;
private URLClassLoader classloader;

public ProjectClasspath(ProjectDefinition def, ProjectFileSystem projectFileSystem) {
this.def = def;
this.projectFileSystem = projectFileSystem;
}

public URLClassLoader getClassloader() {
if (classloader == null) {
classloader = createClassLoader();
}
return classloader;
}

/**
* bytecode directory + JARs (dependencies)
*/
public List<File> getElements() {
if (elements == null) {
elements = createElements();
}
return elements;
}

protected URLClassLoader createClassLoader() {
try {
List<URL> urls = Lists.newArrayList();
for (File file : getElements()) {
urls.add(file.toURI().toURL());
}
return new URLClassLoader(urls.toArray(new URL[urls.size()]), null);

} catch (MalformedURLException e) {
throw new SonarException("Fail to create the project classloader. Classpath element is unvalid.", e);
}
}

protected List<File> createElements() {
List<File> elements = Lists.newArrayList();
for (String path : def.getBinaries()) {
elements.add(projectFileSystem.resolvePath(path));
}
for (String path : def.getLibraries()) {
elements.add(projectFileSystem.resolvePath(path));
}
return elements;
}
}

+ 0
- 245
sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectDefinition.java View File

@@ -42,38 +42,8 @@ import org.sonar.api.CoreProperties;
public class ProjectDefinition {

public static final String SOURCES_PROPERTY = "sonar.sources";
/**
* @deprecated since 4.5 use {@link #SOURCES_PROPERTY}
*/
@Deprecated
public static final String SOURCE_DIRS_PROPERTY = SOURCES_PROPERTY;
/**
* @deprecated since 4.5 use {@link #SOURCES_PROPERTY}
*/
@Deprecated
public static final String SOURCE_FILES_PROPERTY = "sonar.sourceFiles";

public static final String TESTS_PROPERTY = "sonar.tests";
/**
* @deprecated since 4.5 use {@link #TESTS_PROPERTY}
*/
@Deprecated
public static final String TEST_DIRS_PROPERTY = TESTS_PROPERTY;
/**
* @deprecated since 4.5 use {@link #TESTS_PROPERTY}
*/
@Deprecated
public static final String TEST_FILES_PROPERTY = "sonar.testFiles";
/**
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public static final String BINARIES_PROPERTY = "sonar.binaries";
/**
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public static final String LIBRARIES_PROPERTY = "sonar.libraries";
public static final String BUILD_DIR_PROPERTY = "sonar.buildDir";

private static final char SEPARATOR = ',';
@@ -256,14 +226,6 @@ public class ProjectDefinition {
return trim(StringUtils.split(sources, SEPARATOR));
}

/**
* @deprecated since 4.5 use {@link #sources()}
*/
@Deprecated
public List<String> getSourceDirs() {
return sources();
}

/**
* @param paths paths to file or directory with main sources.
* They can be absolute or relative to project base directory.
@@ -275,14 +237,6 @@ public class ProjectDefinition {
return this;
}

/**
* @deprecated since 4.5 use {@link #addSources(String...)}
*/
@Deprecated
public ProjectDefinition addSourceDirs(String... paths) {
return addSources(paths);
}

public ProjectDefinition addSources(File... fileOrDirs) {
for (File fileOrDir : fileOrDirs) {
addSources(fileOrDir.getAbsolutePath());
@@ -290,40 +244,16 @@ public class ProjectDefinition {
return this;
}

/**
* @deprecated since 4.5 use {@link #addSources(File...)}
*/
@Deprecated
public ProjectDefinition addSourceDirs(File... dirs) {
return addSources(dirs);
}

public ProjectDefinition resetSources() {
properties.remove(SOURCES_PROPERTY);
return this;
}

/**
* @deprecated since 4.5 use {@link #resetSources()}
*/
@Deprecated
public ProjectDefinition resetSourceDirs() {
return resetSources();
}

public ProjectDefinition setSources(String... paths) {
resetSources();
return addSources(paths);
}

/**
* @deprecated since 4.5 use {@link #setSources(String...)}
*/
@Deprecated
public ProjectDefinition setSourceDirs(String... paths) {
return setSources(paths);
}

public ProjectDefinition setSources(File... filesOrDirs) {
resetSources();
for (File fileOrDir : filesOrDirs) {
@@ -332,65 +262,11 @@ public class ProjectDefinition {
return this;
}

/**
* @deprecated since 4.5 use {@link #setSources(File...)}
*/
@Deprecated
public ProjectDefinition setSourceDirs(File... dirs) {
resetSourceDirs();
for (File dir : dirs) {
addSourceDirs(dir.getAbsolutePath());
}
return this;
}

/**
* @deprecated since 4.5 use {@link #addSources(File...)}
*/
@Deprecated
public ProjectDefinition addSourceFiles(String... paths) {
// Hack for visual studio project builder that used to add baseDir first as source dir
List<String> sourceDirs = getSourceDirs();
if (sourceDirs.size() == 1 && isDirectory(sourceDirs.get(0))) {
resetSources();
}
return addSources(paths);
}

/**
* @deprecated since 4.5 use {@link #addSources(File...)}
*/
@Deprecated
public ProjectDefinition addSourceFiles(File... files) {
// Hack for visual studio project builder that used to add baseDir first as source dir
List<String> sourceDirs = getSourceDirs();
if (sourceDirs.size() == 1 && isDirectory(sourceDirs.get(0))) {
resetSources();
}
return addSources(files);
}

/**
* @deprecated since 4.5 use {@link #sources()}
*/
@Deprecated
public List<String> getSourceFiles() {
return sources();
}

public List<String> tests() {
String sources = (String) ObjectUtils.defaultIfNull(properties.get(TESTS_PROPERTY), "");
return trim(StringUtils.split(sources, SEPARATOR));
}

/**
* @deprecated since 4.5 use {@link #tests()}
*/
@Deprecated
public List<String> getTestDirs() {
return tests();
}

/**
* @param paths path to files or directories with test sources.
* It can be absolute or relative to project directory.
@@ -402,14 +278,6 @@ public class ProjectDefinition {
return this;
}

/**
* @deprecated since 4.5 use {@link #addTests(String...)}
*/
@Deprecated
public ProjectDefinition addTestDirs(String... paths) {
return addTests(paths);
}

public ProjectDefinition addTests(File... fileOrDirs) {
for (File fileOrDir : fileOrDirs) {
addTests(fileOrDir.getAbsolutePath());
@@ -417,27 +285,11 @@ public class ProjectDefinition {
return this;
}

/**
* @deprecated since 4.5 use {@link #addTests(File...)}
*/
@Deprecated
public ProjectDefinition addTestDirs(File... dirs) {
return addTests(dirs);
}

public ProjectDefinition setTests(String... paths) {
resetTests();
return addTests(paths);
}

/**
* @deprecated since 4.5 use {@link #setTests(String...)}
*/
@Deprecated
public ProjectDefinition setTestDirs(String... paths) {
return setTests(paths);
}

public ProjectDefinition setTests(File... fileOrDirs) {
resetTests();
for (File dir : fileOrDirs) {
@@ -459,103 +311,6 @@ public class ProjectDefinition {
return this;
}

/**
* @deprecated since 4.5 use {@link #resetTests()}
*/
@Deprecated
public ProjectDefinition resetTestDirs() {
return resetTests();
}

/**
* @deprecated since 4.5 use {@link #addTests(String...)}
*/
@Deprecated
public ProjectDefinition addTestFiles(String... paths) {
// Hack for visual studio project builder that used to add baseDir first as test dir
List<String> testDirs = getTestDirs();
if (testDirs.size() == 1 && isDirectory(testDirs.get(0))) {
resetTests();
}
return addTests(paths);
}

private boolean isDirectory(String relativeOrAbsoluteDir) {
File file = new File(relativeOrAbsoluteDir);
if (!file.isAbsolute()) {
file = new File(baseDir, relativeOrAbsoluteDir);
}
return file.isDirectory();
}

/**
* @deprecated since 4.5 use {@link #addTests(File...)}
*/
@Deprecated
public ProjectDefinition addTestFiles(File... files) {
// Hack for visual studio project builder that used to add baseDir first as test dir
List<String> testDirs = getTestDirs();
if (testDirs.size() == 1 && isDirectory(testDirs.get(0))) {
resetTests();
}
return addTests(files);
}

/**
* @deprecated since 4.5 use {@link #tests()}
*/
@Deprecated
public List<String> getTestFiles() {
return tests();
}

/**
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public List<String> getBinaries() {
String sources = (String) ObjectUtils.defaultIfNull(properties.get(BINARIES_PROPERTY), "");
return trim(StringUtils.split(sources, SEPARATOR));
}

/**
* @param path path to directory with compiled source. In case of Java this is directory with class files.
* It can be absolute or relative to project directory.
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public ProjectDefinition addBinaryDir(String path) {
appendProperty(BINARIES_PROPERTY, path);
return this;
}

/**
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public ProjectDefinition addBinaryDir(File f) {
return addBinaryDir(f.getAbsolutePath());
}

/**
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public List<String> getLibraries() {
String sources = (String) ObjectUtils.defaultIfNull(properties.get(LIBRARIES_PROPERTY), "");
return trim(StringUtils.split(sources, SEPARATOR));
}

/**
* @param path path to file with third-party library. In case of Java this is path to jar file.
* It can be absolute or relative to project directory.
* @deprecated since 4.5.1 use SonarQube Java specific API
*/
@Deprecated
public void addLibrary(String path) {
appendProperty(LIBRARIES_PROPERTY, path);
}

/**
* Adds an extension, which would be available in PicoContainer during analysis of this project.
*

+ 1
- 8
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/ModuleFileSystem.java View File

@@ -63,14 +63,7 @@ public interface ModuleFileSystem {
List<File> testDirs();

/**
* Optional directories that contain the compiled sources, for example java bytecode.
* Note that :
* <ul>
* <li>Maven projects have only a single binary directory, which is generally ${project.basedir}/target/classes</li>
* <li>Binary directories can be empty</li>
* <li>Test binary directories are not supported yet.</li>
* </ul>
* @deprecated since 4.2 sonar.binaries will be converted to java specific property
* @deprecated since 4.2 - returns always empty list
*/
List<File> binaryDirs();


+ 2
- 2
sonar-plugin-api/src/test/java/org/sonar/api/batch/bootstrap/ProjectBuilderTest.java View File

@@ -43,7 +43,7 @@ public class ProjectBuilderTest {
ProjectDefinition root = projectReactor.getRoot();
assertThat(root.getName(), is("Name changed by plugin"));
assertThat(root.getSubProjects().size(), is(1));
assertThat(root.getSubProjects().get(0).getSourceDirs(), hasItem("src"));
assertThat(root.getSubProjects().get(0).sources(), hasItem("src"));
}

final static class ProjectBuilderSample extends ProjectBuilder {
@@ -68,7 +68,7 @@ public class ProjectBuilderTest {
subProject.setKey("groupId:parentProjectId");
subProject.setVersion(root.getVersion());
subProject.setName("Sub Project");
subProject.setSourceDirs("src");
subProject.setSources("src");
root.addSubProject(subProject);
}
}

+ 30
- 99
sonar-plugin-api/src/test/java/org/sonar/api/batch/bootstrap/ProjectDefinitionTest.java View File

@@ -25,11 +25,9 @@ import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertThat;
@@ -81,10 +79,8 @@ public class ProjectDefinitionTest {
@Test
public void testDefaultValues() {
ProjectDefinition def = ProjectDefinition.create();
assertThat(def.getSourceDirs().size(), is(0));
assertThat(def.getTestDirs().size(), is(0));
assertThat(def.getBinaries().size(), is(0));
assertThat(def.getLibraries().size(), is(0));
assertThat(def.sources().size(), is(0));
assertThat(def.tests().size(), is(0));
}

/**
@@ -93,54 +89,43 @@ public class ProjectDefinitionTest {
@Test
public void shouldTrimPaths() {
ProjectDefinition def = ProjectDefinition.create();
def.setProperty(ProjectDefinition.SOURCE_DIRS_PROPERTY, "src1, src2 , with whitespace");
def.setProperty(ProjectDefinition.TEST_DIRS_PROPERTY, "test1, test2 , with whitespace");
def.setProperty(ProjectDefinition.BINARIES_PROPERTY, "bin1, bin2 , with whitespace");
def.setProperty(ProjectDefinition.LIBRARIES_PROPERTY, "lib1, lib2 , with whitespace");

assertFiles(def.getSourceDirs(), "src1", "src2", "with whitespace");
assertFiles(def.getTestDirs(), "test1", "test2", "with whitespace");
assertFiles(def.getBinaries(), "bin1", "bin2", "with whitespace");
assertFiles(def.getLibraries(), "lib1", "lib2", "with whitespace");
def.setProperty(ProjectDefinition.SOURCES_PROPERTY, "src1, src2 , with whitespace");
def.setProperty(ProjectDefinition.TESTS_PROPERTY, "test1, test2 , with whitespace");


assertFiles(def.sources(), "src1", "src2", "with whitespace");
assertFiles(def.tests(), "test1", "test2", "with whitespace");
}

@Test
public void shouldAddDirectoriesAsPath() {
ProjectDefinition def = ProjectDefinition.create();
def.addSourceDirs("src/main/java", "src/main/java2");
def.addTestDirs("src/test/java");
def.addTestDirs("src/test/java2");
def.addBinaryDir("target/classes");
def.addBinaryDir("target/classes2");
def.addLibrary("junit.jar");
def.addLibrary("mockito.jar");

assertFiles(def.getSourceDirs(), "src/main/java", "src/main/java2");
assertFiles(def.getTestDirs(), "src/test/java", "src/test/java2");
assertFiles(def.getBinaries(), "target/classes", "target/classes2");
assertFiles(def.getLibraries(), "junit.jar", "mockito.jar");
def.addSources("src/main/java", "src/main/java2");
def.addTests("src/test/java");
def.addTests("src/test/java2");

assertFiles(def.sources(), "src/main/java", "src/main/java2");
assertFiles(def.tests(), "src/test/java", "src/test/java2");
}

@Test
public void shouldAddDirectories() {
ProjectDefinition def = ProjectDefinition.create();
def.addSourceDirs(new File("src/main/java"), new File("src/main/java2"));
def.addTestDirs(new File("src/test/java"), new File("src/test/java2"));
def.addBinaryDir(new File("target/classes"));
def.addSources(new File("src/main/java"), new File("src/main/java2"));
def.addTests(new File("src/test/java"), new File("src/test/java2"));

assertThat(def.getSourceDirs().size(), is(2));
assertThat(def.getTestDirs().size(), is(2));
assertThat(def.getBinaries().size(), is(1));
assertThat(def.sources().size(), is(2));
assertThat(def.tests().size(), is(2));
}

@Test
public void shouldAddFiles() {
ProjectDefinition def = ProjectDefinition.create();
def.addSourceFiles("src/main/java/foo/Bar.java", "src/main/java/hello/World.java");
def.addTestFiles("src/test/java/foo/BarTest.java", "src/test/java/hello/WorldTest.java");
def.addSources("src/main/java/foo/Bar.java", "src/main/java/hello/World.java");
def.addTests("src/test/java/foo/BarTest.java", "src/test/java/hello/WorldTest.java");

assertFiles(def.getSourceFiles(), "src/main/java/foo/Bar.java", "src/main/java/hello/World.java");
assertFiles(def.getTestFiles(), "src/test/java/foo/BarTest.java", "src/test/java/hello/WorldTest.java");
assertFiles(def.sources(), "src/main/java/foo/Bar.java", "src/main/java/hello/World.java");
assertFiles(def.tests(), "src/test/java/foo/BarTest.java", "src/test/java/hello/WorldTest.java");
}

@Test
@@ -159,75 +144,21 @@ public class ProjectDefinitionTest {
@Test
public void shouldResetSourceDirs() {
ProjectDefinition root = ProjectDefinition.create();
root.addSourceDirs("src", "src2/main");
assertThat(root.getSourceDirs().size(), is(2));
root.addSources("src", "src2/main");
assertThat(root.sources().size(), is(2));

root.resetSourceDirs();
assertThat(root.getSourceDirs().size(), is(0));
root.resetSources();
assertThat(root.sources().size(), is(0));
}

@Test
public void shouldResetTestDirs() {
ProjectDefinition root = ProjectDefinition.create();
root.addTestDirs("src", "src2/test");
assertThat(root.getTestDirs().size(), is(2));

root.resetTestDirs();
assertThat(root.getTestDirs().size(), is(0));
}

@Test
public void shouldResetSourceDirsWhenUsindDeprecatedMethod() throws IOException {
File baseDir = temp.newFolder();
ProjectDefinition root = ProjectDefinition.create().setBaseDir(baseDir);
File src = new File(baseDir, "src");
src.mkdir();
root.addSourceDirs("src");
assertThat(root.getSourceDirs()).containsOnly("src");

root.addSourceFiles("foo.java");
assertThat(root.getSourceDirs()).containsOnly("foo.java");
}
root.addTests("src", "src2/test");
assertThat(root.tests().size(), is(2));

@Test
public void shouldResetTestDirsWhenUsindDeprecatedMethod() throws IOException {
File baseDir = temp.newFolder();
ProjectDefinition root = ProjectDefinition.create().setBaseDir(baseDir);
File test = new File(baseDir, "test");
test.mkdir();
root.addTestDirs("test");
assertThat(root.getTestDirs()).containsOnly("test");

root.addTestFiles("fooTest.java");
assertThat(root.getTestDirs()).containsOnly("fooTest.java");
}

@Test
public void shouldResetSourceDirsWhenUsindDeprecatedFileMethod() throws IOException {
File baseDir = temp.newFolder();
ProjectDefinition root = ProjectDefinition.create().setBaseDir(baseDir);
File src = new File(baseDir, "src");
src.mkdir();
root.addSourceDirs("src");
assertThat(root.getSourceDirs()).containsOnly("src");

File file = new File(src, "foo.java");
root.addSourceFiles(file);
assertThat(root.getSourceDirs()).containsOnly(file.getAbsolutePath());
}

@Test
public void shouldResetTestDirsWhenUsindDeprecatedFileMethod() throws IOException {
File baseDir = temp.newFolder();
ProjectDefinition root = ProjectDefinition.create().setBaseDir(baseDir);
File test = new File(baseDir, "test");
test.mkdir();
root.addTestDirs("test");
assertThat(root.getTestDirs()).containsOnly("test");

File file = new File(test, "fooTest.java");
root.addTestFiles(file);
assertThat(root.getTestDirs()).containsOnly(file.getAbsolutePath());
root.resetTests();
assertThat(root.tests().size(), is(0));
}

private static void assertFiles(List<String> paths, String... values) {

Loading…
Cancel
Save