/* * Copyright 2012-2016 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; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.Collections; import java.util.Map; import org.junit.After; import org.junit.Test; import org.springframework.boot.ansi.AnsiOutput; import org.springframework.boot.ansi.AnsiOutput.Enabled; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; import org.springframework.mock.env.MockEnvironment; import static org.assertj.core.api.Assertions.assertThat; /** * Tests for {@link ResourceBanner}. * * @author Phillip Webb * @author Vedran Pavic */ public class ResourceBannerTests { @After public void reset() { AnsiOutput.setEnabled(Enabled.DETECT); } @Test public void renderVersions() throws Exception { Resource resource = new ByteArrayResource( "banner ${a} ${spring-boot.version} ${application.version}".getBytes()); String banner = printBanner(resource, "10.2", "2.0", null); assertThat(banner).startsWith("banner 1 10.2 2.0"); } @Test public void renderWithoutVersions() throws Exception { Resource resource = new ByteArrayResource( "banner ${a} ${spring-boot.version} ${application.version}".getBytes()); String banner = printBanner(resource, null, null, null); assertThat(banner).startsWith("banner 1 "); } @Test public void renderFormattedVersions() throws Exception { Resource resource = new ByteArrayResource( "banner ${a}${spring-boot.formatted-version}${application.formatted-version}" .getBytes()); String banner = printBanner(resource, "10.2", "2.0", null); assertThat(banner).startsWith("banner 1 (v10.2) (v2.0)"); } @Test public void renderWithoutFormattedVersions() throws Exception { Resource resource = new ByteArrayResource( "banner ${a}${spring-boot.formatted-version}${application.formatted-version}" .getBytes()); String banner = printBanner(resource, null, null, null); assertThat(banner).startsWith("banner 1"); } @Test public void renderWithColors() throws Exception { Resource resource = new ByteArrayResource( "${Ansi.RED}This is red.${Ansi.NORMAL}".getBytes()); AnsiOutput.setEnabled(AnsiOutput.Enabled.ALWAYS); String banner = printBanner(resource, null, null, null); assertThat(banner).startsWith("\u001B[31mThis is red.\u001B[0m"); } @Test public void renderWithColorsButDisabled() throws Exception { Resource resource = new ByteArrayResource( "${Ansi.RED}This is red.${Ansi.NORMAL}".getBytes()); AnsiOutput.setEnabled(AnsiOutput.Enabled.NEVER); String banner = printBanner(resource, null, null, null); assertThat(banner).startsWith("This is red."); } @Test public void renderWithTitle() throws Exception { Resource resource = new ByteArrayResource( "banner ${application.title} ${a}".getBytes()); String banner = printBanner(resource, null, null, "title"); assertThat(banner).startsWith("banner title 1"); } @Test public void renderWithoutTitle() throws Exception { Resource resource = new ByteArrayResource( "banner ${application.title} ${a}".getBytes()); String banner = printBanner(resource, null, null, null); assertThat(banner).startsWith("banner 1"); } private String printBanner(Resource resource, String bootVersion, String applicationVersion, String applicationTitle) { ResourceBanner banner = new MockResourceBanner(resource, bootVersion, applicationVersion, applicationTitle); ConfigurableEnvironment environment = new MockEnvironment(); Map<String, Object> source = Collections.<String, Object>singletonMap("a", "1"); environment.getPropertySources().addLast(new MapPropertySource("map", source)); ByteArrayOutputStream out = new ByteArrayOutputStream(); banner.printBanner(environment, getClass(), new PrintStream(out)); return out.toString(); } private static class MockResourceBanner extends ResourceBanner { private final String bootVersion; private final String applicationVersion; private final String applicationTitle; MockResourceBanner(Resource resource, String bootVersion, String applicationVersion, String applicationTitle) { super(resource); this.bootVersion = bootVersion; this.applicationVersion = applicationVersion; this.applicationTitle = applicationTitle; } @Override protected String getBootVersion() { return this.bootVersion; } @Override protected String getApplicationVersion(Class<?> sourceClass) { return this.applicationVersion; } @Override protected String getApplicationTitle(Class<?> sourceClass) { return this.applicationTitle; } } }