Skip to content

Commit

Permalink
Refactor ScatteredArchive tests (#24382)
Browse files Browse the repository at this point in the history
* Remove unnecessary code
Forgot to remove it after debugging
Signed-off-by:Ondro Mihalyi <mihalyi@omnifish.ee>

* Refactor ScatteredArchive tests
For better readability
Signed-off-by:Ondro Mihalyi <mihalyi@omnifish.ee>

* Fix checkstyle violations
Signed-off-by:Ondro Mihalyi <mihalyi@omnifish.ee>
  • Loading branch information
OndroMih committed Apr 21, 2023
1 parent 2247cb2 commit 8d0d369
Showing 1 changed file with 77 additions and 37 deletions.
Expand Up @@ -9,25 +9,28 @@
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.hamcrest.Matchers;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.params.converter.ArgumentConversionException;
import org.junit.jupiter.params.converter.ArgumentConverter;
import org.junit.jupiter.params.converter.ConvertWith;

/**
*
* @author ondro
*/
public class ScatteredArchiveTest {

private final String REGEX_COMMA_WITH_SPACE_AROUND = "[ ]*,[ ]*";
private static final String REGEX_COMMA_WITH_SPACE_AROUND = "[ ]*,[ ]*";

public ScatteredArchiveTest() {
}
Expand All @@ -49,51 +52,55 @@ public void addClassPath(File classpath) throws IOException {

@ParameterizedTest
@CsvSource({
"path, '', 1",
"path:path2, '', 2",
"'jakarta.jakarta-api.jar:/folder/path2:/folder/glassfish-embedded-all.jar', '', 1",
"'jakarta.jakarta-api.jar:glassfish-embedded-all.jar', '', 0",
"path, 'path', 0",
"path111:/folder/path222, 'path.*', 0",
"path333:path111:/folder/path222, 'path1.* , path2.*', 1",
"'jakarta.jakarta-api.jar:path2:/some/folder/path3:somepath', 'path.', 1",
"'', '', 0"
})
public void addCurrentClasspathUsingExcludes(String classpath, String excludesList, int expectedElementsInClasspath) {
"path, '', path",
"path:path2, '', 'path,path2'",
"'jakarta.jakarta-api.jar:/folder/path2:/folder/glassfish-embedded-all.jar', '', /folder/path2",
"'jakarta.jakarta-api.jar:glassfish-embedded-all.jar', '', ''",
"path, 'path', ''",
"path111:/folder/path222, path.*, ''",
"path333:path111:/folder/path222, 'path1.* , path2.*', path333",
"jakarta.jakarta-api.jar:path2:/some/folder/path3:somepath, path., somepath",
"'', '', ''"
})
public void addCurrentClasspathUsingExcludes(String classpath,
@ConvertWith(ConvertCSVToArrayOfStrings.class) String[] excludesPatterns,
@ConvertWith(ConvertCSVToListOfFiles.class) List<File> expectedFilesInClasspath) {

// GIVEN
setCurrentClasspath(classpath);
String[] excludesPatterns = excludesList.split(REGEX_COMMA_WITH_SPACE_AROUND);
TestableScatteredArchive archive = new TestableScatteredArchive("test", ScatteredArchive.Type.WAR);

// WHEN
archive.addCurrentClassPath(excludesPatterns);

// THEN
assertAll("classpath",
assertAll("Classpath",
() -> assertThat("Number of classpath elements",
archive.classpathElements, hasSize(expectedElementsInClasspath))
archive.classpathElements, hasSize(expectedFilesInClasspath.size())),
() -> assertThat("Classpath elements", archive.classpathElements, equalTo(expectedFilesInClasspath))
);
}

@ParameterizedTest
@CsvSource({
"path, '', 1",
"path:path2, '', 2",
"'jakarta.jakarta-api.jar:/folder/path2:/folder/glassfish-embedded-all.jar', '0', 2",
"'jakarta.jakarta-api.jar:glassfish-embedded-all.jar', '0,1', 0",
"path, '0', 0",
"path111:/folder/path222, '0,1', 0",
"path111:/folder/path222, '0', 1",
"'jakarta.jakarta-api.jar:path2:/some/folder/path3:somepath', '1,2', 2",
"'', '', 0"
"path, '', path",
"path:path2, '', 'path,path2'",
"'jakarta.jakarta-api.jar:/folder/path2:/folder/glassfish-embedded-all.jar', '0', '/folder/path2,/folder/glassfish-embedded-all.jar'",
"'jakarta.jakarta-api.jar:glassfish-embedded-all.jar', '0,1', ''",
"path, '0', ''",
"path111:/folder/path222, '0,1', ''",
"path111:/folder/path222, '0', /folder/path222",
"'jakarta.jakarta-api.jar:path2:/some/folder/path3:somepath', '1,2', 'jakarta.jakarta-api.jar,somepath'",
"'', '', ''"
})
public void addCurrentClasspathUsingPredicate(String classpath, String excludesIndexes, int expectedElementsInClasspath) {
public void addCurrentClasspathUsingPredicate(String classpath,
@ConvertWith(ConvertCSVToArrayOfStrings.class) String[] excludesIndexes,
@ConvertWith(ConvertCSVToListOfFiles.class) List<File> expectedFilesInClasspath) {

// GIVEN
var cpElements = setCurrentClasspath(classpath);
Predicate<String> exclude = value -> {
return Stream.of(excludesIndexes.split(REGEX_COMMA_WITH_SPACE_AROUND))
return Stream.of(excludesIndexes)
.filter(s -> !s.isBlank())
.map(Integer::valueOf)
.anyMatch(i -> cpElements[i].equals(value));
Expand All @@ -104,14 +111,11 @@ public void addCurrentClasspathUsingPredicate(String classpath, String excludesI
archive.addCurrentClassPath(exclude);

// THEN
try {
assertAll("classpath",
() -> assertThat("Number of classpath elements " + archive.classpathElements,
archive.classpathElements, hasSize(expectedElementsInClasspath))
);
} catch (AssertionError e) {
throw e;
}
assertAll("Classpath",
() -> assertThat("Number of classpath elements",
archive.classpathElements, hasSize(expectedFilesInClasspath.size())),
() -> assertThat("Classpath elements", archive.classpathElements, equalTo(expectedFilesInClasspath))
);
}

private static String[] setCurrentClasspath(String classpath) {
Expand All @@ -120,4 +124,40 @@ private static String[] setCurrentClasspath(String classpath) {
return osSpecificClasspath.split("\\" + File.pathSeparator);
}

private static class ConvertCSVToArrayOfStrings implements ArgumentConverter {

@Override
public Object convert(Object source, ParameterContext context)
throws ArgumentConversionException {
return convertToArrayOfStrings(source);
}

protected String[] convertToArrayOfStrings(Object source) throws IllegalArgumentException {
if (!(source instanceof String)) {
throw new IllegalArgumentException(
"The argument should be a string: " + source);
}
try {
final String sourceString = (String) source;
return !sourceString.isBlank() ? sourceString.split(REGEX_COMMA_WITH_SPACE_AROUND) : new String[0];
} catch (Exception e) {
throw new IllegalArgumentException("Failed to convert value " + source, e);
}
}
}

private static class ConvertCSVToListOfFiles extends ConvertCSVToArrayOfStrings implements ArgumentConverter {

@Override
public Object convert(Object source, ParameterContext context)
throws ArgumentConversionException {
return List.of(this.convertToArrayOfStrings(source)).stream()
.map(File::new)
.collect(Collectors.toList());
}


}


}

0 comments on commit 8d0d369

Please sign in to comment.