/* * Copyright 2012-2017 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 * * http://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 org.springframework.boot.devtools.restart.server; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; /** * Tests for {@link DefaultSourceFolderUrlFilter}. * * @author Phillip Webb */ public class DefaultSourceFolderUrlFilterTests { private static final String SOURCE_ROOT = "/Users/me/code/some-root/"; private static final List<String> COMMON_POSTFIXES; static { List<String> postfixes = new ArrayList<>(); postfixes.add(".jar"); postfixes.add("-1.3.0.jar"); postfixes.add("-1.3.0-SNAPSHOT.jar"); postfixes.add("-1.3.0.BUILD-SNAPSHOT.jar"); postfixes.add("-1.3.0.M1.jar"); postfixes.add("-1.3.0.RC1.jar"); postfixes.add("-1.3.0.RELEASE.jar"); postfixes.add("-1.3.0.Final.jar"); postfixes.add("-1.3.0.GA.jar"); postfixes.add("-1.3.0.0.0.0.jar"); COMMON_POSTFIXES = Collections.unmodifiableList(postfixes); } private DefaultSourceFolderUrlFilter filter = new DefaultSourceFolderUrlFilter(); @Test public void mavenSourceFolder() throws Exception { doTest("my-module/target/classes/"); } @Test public void gradleEclipseSourceFolder() throws Exception { doTest("my-module/bin/"); } @Test public void unusualSourceFolder() throws Exception { doTest("my-module/something/quite/quite/mad/"); } @Test public void skippedProjects() throws Exception { String sourceFolder = "/Users/me/code/spring-boot-samples/" + "spring-boot-sample-devtools"; URL jarUrl = new URL("jar:file:/Users/me/tmp/" + "spring-boot-sample-devtools-1.3.0.BUILD-SNAPSHOT.jar!/"); assertThat(this.filter.isMatch(sourceFolder, jarUrl)).isTrue(); URL nestedJarUrl = new URL("jar:file:/Users/me/tmp/" + "spring-boot-sample-devtools-1.3.0.BUILD-SNAPSHOT.jar!/" + "lib/spring-boot-1.3.0.BUILD-SNAPSHOT.jar!/"); assertThat(this.filter.isMatch(sourceFolder, nestedJarUrl)).isFalse(); URL fileUrl = new URL("file:/Users/me/tmp/" + "spring-boot-sample-devtools-1.3.0.BUILD-SNAPSHOT.jar"); assertThat(this.filter.isMatch(sourceFolder, fileUrl)).isTrue(); } private void doTest(String sourcePostfix) throws MalformedURLException { doTest(sourcePostfix, "my-module", true); doTest(sourcePostfix, "my-module-other", false); doTest(sourcePostfix, "my-module-other-again", false); doTest(sourcePostfix, "my-module.other", false); } private void doTest(String sourcePostfix, String moduleRoot, boolean expected) throws MalformedURLException { String sourceFolder = SOURCE_ROOT + sourcePostfix; for (String postfix : COMMON_POSTFIXES) { for (URL url : getUrls(moduleRoot + postfix)) { boolean match = this.filter.isMatch(sourceFolder, url); assertThat(match).as(url + " against " + sourceFolder) .isEqualTo(expected); } } } private List<URL> getUrls(String name) throws MalformedURLException { List<URL> urls = new ArrayList<>(); urls.add(new URL("file:/some/path/" + name)); urls.add(new URL("file:/some/path/" + name + "!/")); for (String postfix : COMMON_POSTFIXES) { urls.add(new URL( "jar:file:/some/path/lib-module" + postfix + "!/lib/" + name)); urls.add(new URL( "jar:file:/some/path/lib-module" + postfix + "!/lib/" + name + "!/")); } return urls; } }