Add some more smarts around --debug

--verbose seems to be only for CLI logging (so really only
for dependency resolution). --debug is interpreted by SpringApplication
but up to now has been extracted and deleted from the command line
by the CommandRunner. This change makes --debug set a System property
*and* pass it down to the application (if used with -- separator).

Fixes gh-266
This commit is contained in:
Dave Syer
2014-01-24 12:35:25 +00:00
parent 607b371706
commit c5584b490a
4 changed files with 79 additions and 6 deletions

View File

@@ -0,0 +1,52 @@
/*
* Copyright 2012-2013 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.cli;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.boot.cli.command.run.RunCommand;
import org.springframework.boot.cli.util.OutputCapture;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* @author Dave Syer
*/
public class CommandRunnerIntegrationTests {
@Rule
public OutputCapture output = new OutputCapture();
@Test
public void debugAddsAutoconfigReport() {
CommandRunner runner = new CommandRunner("spring");
runner.addCommand(new RunCommand());
// -d counts as "debug" for the spring command, but not for the
// LoggingApplicationListener
runner.runAndHandleErrors("run", "samples/app.groovy", "-d");
assertTrue(this.output.toString().contains("Negative matches:"));
}
@Test
public void debugSwitchedOffForAppArgs() {
CommandRunner runner = new CommandRunner("spring");
runner.addCommand(new RunCommand());
runner.runAndHandleErrors("run", "samples/app.groovy", "--", "-d");
assertFalse(this.output.toString().contains("Negative matches:"));
}
}

View File

@@ -29,6 +29,7 @@ import org.mockito.MockitoAnnotations;
import org.springframework.boot.cli.command.Command;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.willThrow;
@@ -63,6 +64,7 @@ public class CommandRunnerTests {
@After
public void close() {
Thread.currentThread().setContextClassLoader(this.loader);
System.clearProperty("debug");
}
@Before
@@ -115,6 +117,15 @@ public class CommandRunnerTests {
this.commandRunner.run("missing");
}
@Test
public void appArguments() throws Exception {
this.commandRunner.runAndHandleErrors("command", "--", "--debug", "bar");
verify(this.regularCommand).run("--", "--debug", "bar");
// When handled by the command itself it shouldn't cause the system property to be
// set
assertEquals(null, System.getProperty("debug"));
}
@Test
public void handlesSuccess() throws Exception {
int status = this.commandRunner.runAndHandleErrors("command");
@@ -150,6 +161,7 @@ public class CommandRunnerTests {
public void handlesExceptionWithDashD() throws Exception {
willThrow(new RuntimeException()).given(this.regularCommand).run();
int status = this.commandRunner.runAndHandleErrors("command", "-d");
assertEquals("true", System.getProperty("debug"));
assertThat(status, equalTo(1));
assertThat(this.calls, equalTo((Set<Call>) EnumSet.of(Call.ERROR_MESSAGE,
Call.PRINT_STACK_TRACE)));
@@ -159,6 +171,7 @@ public class CommandRunnerTests {
public void handlesExceptionWithDashDashDebug() throws Exception {
willThrow(new RuntimeException()).given(this.regularCommand).run();
int status = this.commandRunner.runAndHandleErrors("command", "--debug");
assertEquals("true", System.getProperty("debug"));
assertThat(status, equalTo(1));
assertThat(this.calls, equalTo((Set<Call>) EnumSet.of(Call.ERROR_MESSAGE,
Call.PRINT_STACK_TRACE)));