diff options
Diffstat (limited to 'src/test/java/com/google/devtools/common/options/OptionsParserTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/common/options/OptionsParserTest.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java index 0bb8a15758..910e59e15f 100644 --- a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java +++ b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java @@ -1024,4 +1024,99 @@ public class OptionsParserTest { result = parser.getOptions(LongValueExample.class); assertEquals(100, result.longval); } + + public static class OldNameExample extends OptionsBase { + @Option(name = "new_name", + oldName = "old_name", + defaultValue = "defaultValue") + public String flag; + } + + @Test + public void testOldName() throws OptionsParsingException { + OptionsParser parser = newOptionsParser(OldNameExample.class); + parser.parse("--old_name=foo"); + OldNameExample result = parser.getOptions(OldNameExample.class); + assertEquals("foo", result.flag); + assertThat(parser.getWarnings()).contains( + "Option 'old_name' is deprecated: Use --new_name instead"); + + // Should also work by its new name. + parser = newOptionsParser(OldNameExample.class); + parser.parse("--new_name=foo"); + result = parser.getOptions(OldNameExample.class); + assertEquals("foo", result.flag); + } + + @Test + public void testOldNameCanonicalization() throws Exception { + assertEquals( + Arrays.asList("--new_name=foo"), canonicalize(OldNameExample.class, "--old_name=foo")); + } + + public static class OldNameConflictExample extends OptionsBase { + @Option(name = "new_name", + oldName = "old_name", + defaultValue = "defaultValue") + public String flag1; + + @Option(name = "old_name", + defaultValue = "defaultValue") + public String flag2; + } + + @Test + public void testOldNameConflict() { + try { + newOptionsParser(OldNameConflictExample.class); + fail("old_name should conflict with the flag already named old_name"); + } catch (DuplicateOptionDeclarationException e) { + // expected + } + } + + public static class WrapperOptionExample extends OptionsBase { + @Option(name = "wrapper", + defaultValue = "null", + wrapperOption = true) + public Void wrapperOption; + + @Option(name = "flag1", defaultValue = "false") + public boolean flag1; + + @Option(name = "flag2", defaultValue = "42") + public int flag2; + + @Option(name = "flag3", defaultValue = "foo") + public String flag3; + } + + @Test + public void testWrapperOption() throws OptionsParsingException { + OptionsParser parser = newOptionsParser(WrapperOptionExample.class); + parser.parse("--wrapper=--flag1=true", "--wrapper=--flag2=87", "--wrapper=--flag3=bar"); + WrapperOptionExample result = parser.getOptions(WrapperOptionExample.class); + assertEquals(true, result.flag1); + assertEquals(87, result.flag2); + assertEquals("bar", result.flag3); + } + + @Test + public void testInvalidWrapperOptionFormat() { + OptionsParser parser = newOptionsParser(WrapperOptionExample.class); + try { + parser.parse("--wrapper=foo"); + fail(); + } catch (OptionsParsingException e) { + // Check that the message looks like it's suggesting the correct format. + assertThat(e.getMessage()).contains("--foo"); + } + } + + @Test + public void testWrapperCanonicalization() throws OptionsParsingException { + List<String> canonicalized = canonicalize(WrapperOptionExample.class, + "--wrapper=--flag1=true", "--wrapper=--flag2=87", "--wrapper=--flag3=bar"); + assertEquals(Arrays.asList("--flag1=true", "--flag2=87", "--flag3=bar"), canonicalized); + } } |