Skip to content

Commit

Permalink
added tests, improved generator methods
Browse files Browse the repository at this point in the history
  • Loading branch information
zambrovski committed Nov 14, 2024
1 parent 5602406 commit 0bd078e
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,9 @@ public <T> T generate(ProjectDescription description, ProjectAssetGenerator<T> p
* @param description the description of the project to generate
* @return a list of candidate configurations
*/
@SuppressWarnings("deprecation")

protected List<String> getCandidateProjectGenerationConfigurations(ProjectDescription description) {
List<String> candidates = SpringFactoriesLoader.loadFactoryNames(ProjectGenerationConfiguration.class,
getClass().getClassLoader());
List<String> candidates = getProjectGenerationConfigurationFactoryNames();
ProjectGenerationConfigurationTypeFilter filter = getProjectGenerationConfigurationExclusionFilter();
return candidates.stream().filter((candidate) -> {
Class<?> type = this.resolveClass(candidate);
Expand All @@ -144,6 +143,12 @@ private Class<?> resolveClass(String candidate) {
}
}

@SuppressWarnings("deprecation")
List<String> getProjectGenerationConfigurationFactoryNames() {
return SpringFactoriesLoader.loadFactoryNames(ProjectGenerationConfiguration.class,
getClass().getClassLoader());
}

ProjectGenerationConfigurationTypeFilter getProjectGenerationConfigurationExclusionFilter() {
List<ProjectGenerationConfigurationTypeFilter> filters = SpringFactoriesLoader
.loadFactories(ProjectGenerationConfigurationTypeFilter.class, getClass().getClassLoader());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.project.contributor.TestProjectGenerationConfiguration;
import io.spring.initializr.generator.project.contributor.TestProjectGenerationConfiguration2;
import org.assertj.core.util.Lists;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.mockito.InOrder;
Expand Down Expand Up @@ -196,6 +198,37 @@ protected List<String> getCandidateProjectGenerationConfigurations(
verify(description).getBuildSystem();
}

@Test
void loadAndConstructProjectGenerationTypeExclusionFilter() {
ProjectGenerator generator = new ProjectGenerator(mockContextInitializr());
ProjectGenerationConfigurationTypeFilter filter = generator.getProjectGenerationConfigurationExclusionFilter();
assertThat(filter).isNotNull();
assertThat(filter.match(TestProjectGenerationConfiguration.class)).isTrue();
assertThat(filter.match(TestProjectGenerationConfiguration2.class)).isTrue();
assertThat(filter.match(Integer.class)).isFalse();
}

@Test
void filterProjectContributorsCorrectly(@TempDir Path projectDir) {
ProjectDescription description = mock(ProjectDescription.class);
given(description.getArtifactId()).willReturn("test-custom-contributor");
given(description.getBuildSystem()).willReturn(new MavenBuildSystem());
ProjectGenerator generator = new ProjectGenerator(mockContextInitializr()) {
@Override
List<String> getProjectGenerationConfigurationFactoryNames() {
return Lists.list(TestProjectGenerationConfiguration.class.getName(),
TestProjectGenerationConfiguration2.class.getName());
}

@Override
ProjectGenerationConfigurationTypeFilter getProjectGenerationConfigurationExclusionFilter() {
return TestProjectGenerationConfiguration2.class::equals;
}
};
List<String> candidates = generator.getCandidateProjectGenerationConfigurations(description);
assertThat(candidates).containsOnly(TestProjectGenerationConfiguration.class.getCanonicalName());
}

@SuppressWarnings("unchecked")
private Consumer<ProjectGenerationContext> mockContextInitializr() {
return mock(Consumer.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.spring.initializr.generator.project.contributor;

import io.spring.initializr.generator.project.ProjectGenerationConfiguration;

/**
* Test contributor.
*/
@ProjectGenerationConfiguration
public class TestProjectGenerationConfiguration2 {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.spring.initializr.generator.project.contributor;

import io.spring.initializr.generator.project.ProjectGenerationConfigurationTypeFilter;

public class TestProjectGenerationConfiguration2ExcludingTypeFilter
implements ProjectGenerationConfigurationTypeFilter {

@Override
public boolean match(Class<?> type) {
return TestProjectGenerationConfiguration2.class.equals(type);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.spring.initializr.generator.project.contributor;

import io.spring.initializr.generator.project.ProjectGenerationConfigurationTypeFilter;

public class TestProjectGenerationConfigurationExcludingTypeFilter implements ProjectGenerationConfigurationTypeFilter {

@Override
public boolean match(Class<?> type) {
return TestProjectGenerationConfiguration.class.equals(type);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
io.spring.initializr.generator.project.ProjectGenerationConfigurationTypeFilter=\
io.spring.initializr.generator.project.contributor.TestProjectGenerationConfigurationExcludingTypeFilter,\
io.spring.initializr.generator.project.contributor.TestProjectGenerationConfiguration2ExcludingTypeFilter

0 comments on commit 0bd078e

Please sign in to comment.