From 4f0fbe1b09333806cce76b75214e98c7684766e0 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 5 Apr 2016 20:20:51 +0000 Subject: Add tests documenting the way rc-options are combined Note that this patch does not change any semantics, it just adds tests. In this way, we have a machine-checkable (hence up to date) documentation of the semantics of how rc options are handled. In particular, our semantics is that - options get collected from all rc files, - more specific options take precedence over less specific ones, and - for equally specific options, the most specific rc file takes precedence. -- Change-Id: I6abadd15eb02a2f952debc3b005668e04dccd62a Reviewed-on: https://bazel-review.googlesource.com/#/c/3241 MOS_MIGRATED_REVID=119083139 --- .../BlazeCommandDispatcherRcoptionsTest.java | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'src/test/java/com') diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java index 000f79d42b..854f25e918 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcherRcoptionsTest.java @@ -49,6 +49,9 @@ public class BlazeCommandDispatcherRcoptionsTest { public static class FooOptions extends OptionsBase { @Option(name = "numoption", defaultValue = "0") public int numOption; + + @Option(name = "stringoption", defaultValue = "[unspecified]") + public String stringOption; } @Command( @@ -71,9 +74,33 @@ public class BlazeCommandDispatcherRcoptionsTest { public void editOptions(CommandEnvironment env, OptionsParser optionsParser) {} } + @Command( + name = "reportall", + options = {FooOptions.class}, + shortDescription = "", + help = "" + ) + private static class ReportAllCommand implements BlazeCommand { + + @Override + public ExitCode exec(CommandEnvironment env, OptionsProvider options) + throws ShutdownBlazeServerException { + FooOptions fooOptions = options.getOptions(FooOptions.class); + env.getReporter() + .getOutErr() + .printOut("" + fooOptions.numOption + " " + fooOptions.stringOption); + return ExitCode.SUCCESS; + } + + @Override + public void editOptions(CommandEnvironment env, OptionsParser optionsParser) {} + } + + private final Scratch scratch = new Scratch(); private final RecordingOutErr outErr = new RecordingOutErr(); private final ReportNumCommand reportNum = new ReportNumCommand(); + private final ReportAllCommand reportAll = new ReportAllCommand(); private BlazeRuntime runtime; @Before @@ -139,4 +166,81 @@ public class BlazeCommandDispatcherRcoptionsTest { String out = outErr.outAsLatin1(); assertEquals("Specific options should dominate common options", "42", out); } + + @Test + public void testOptionsComined() throws Exception { + List blazercOpts = + ImmutableList.of( + "--rc_source=/etc/bazelrc", + "--default_override=0:common=--stringoption=foo", + "--rc_source=/home/jrluser/.blazerc", + "--default_override=1:common=--numoption=99"); + + BlazeCommandDispatcher dispatch = new BlazeCommandDispatcher(runtime, reportNum, reportAll); + List cmdLine = Lists.newArrayList("reportall"); + cmdLine.addAll(blazercOpts); + + dispatch.exec(cmdLine, outErr); + String out = outErr.outAsLatin1(); + assertEquals("Options should get accumulated over different rc files", "99 foo", out); + } + + @Test + public void testOptionsCominedWithOverride() throws Exception { + List blazercOpts = + ImmutableList.of( + "--rc_source=/etc/bazelrc", + "--default_override=0:common=--stringoption=foo", + "--default_override=0:common=--numoption=42", + "--rc_source=/home/jrluser/.blazerc", + "--default_override=1:common=--numoption=99"); + + BlazeCommandDispatcher dispatch = new BlazeCommandDispatcher(runtime, reportNum, reportAll); + List cmdLine = Lists.newArrayList("reportall"); + cmdLine.addAll(blazercOpts); + + dispatch.exec(cmdLine, outErr); + String out = outErr.outAsLatin1(); + assertEquals("The more specific rc-file should override", "99 foo", out); + } + + @Test + public void testOptionsCominedWithOverrideOtherName() throws Exception { + List blazercOpts = + ImmutableList.of( + "--rc_source=/home/jrluser/.blazerc", + "--default_override=0:common=--stringoption=foo", + "--default_override=0:common=--numoption=42", + "--rc_source=/etc/bazelrc", + "--default_override=1:common=--numoption=99"); + + BlazeCommandDispatcher dispatch = new BlazeCommandDispatcher(runtime, reportNum, reportAll); + List cmdLine = Lists.newArrayList("reportall"); + cmdLine.addAll(blazercOpts); + + dispatch.exec(cmdLine, outErr); + String out = outErr.outAsLatin1(); + assertEquals("The more specific rc-file should override irrespective of name", "99 foo", out); + } + + @Test + public void testOptionsCominedWithSpecificOverride() throws Exception { + List blazercOpts = + ImmutableList.of( + "--rc_source=/home/jrluser/.blazerc", + "--default_override=0:common=--stringoption=foo", + "--default_override=0:reportall=--numoption=42", + "--rc_source=/etc/bazelrc", + "--default_override=1:common=--stringoption=bar", + "--default_override=1:common=--numoption=99"); + + BlazeCommandDispatcher dispatch = new BlazeCommandDispatcher(runtime, reportNum, reportAll); + List cmdLine = Lists.newArrayList("reportall"); + cmdLine.addAll(blazercOpts); + + dispatch.exec(cmdLine, outErr); + String out = outErr.outAsLatin1(); + assertEquals( + "The more specific option should override, irrespecitve of source file", "42 bar", out); + } } -- cgit v1.2.3