blob: 0912a2ca851fa9f1f9c18ba47184794d0a896ff3 [file] [log] [blame]
/*
* Copyright 2014 Google Inc.
*
* 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 com.google.gwt.util.tools;
import junit.framework.TestCase;
/**
* Test for ArgHandlerEnum.
*/
public class ArgHandlerEnumTest extends TestCase {
enum SomeFlags { THIS_FLAG, THAT_FLAG, THAT_OTHER_FLAG, ANOTHER_FLAG }
enum EmptyEnum { }
enum OneOptionEnum { SINGLE_OPTION }
static public Enum<?> optionValue = null;
private abstract class MockArgHandlerEnumBase<T extends Enum<T>> extends ArgHandlerEnum<T> {
public MockArgHandlerEnumBase(Class<T> enumClass) {
super(enumClass);
}
public MockArgHandlerEnumBase(
Class<T> enumClass, T defaultValue, boolean allowAbbraviation) {
super(enumClass, defaultValue, allowAbbraviation);
}
@Override
public String getPurpose() {
return getPurposeString("Set flag:");
}
@Override
public String getTag() {
return "-Xflag";
}
@Override
public boolean isExperimental() {
return true;
}
@Override
public void setValue(T value) {
optionValue = value;
}
}
public void testHandle() {
ArgHandler handler = new MockArgHandlerEnumBase<SomeFlags>(SomeFlags.class) { };
optionValue = null;
int consuemdArguments = handler.handle(new String[] {"-Xflag", "THIS_FLAG"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THIS_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "THAT_FLAG"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THAT_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "ThAt_OtHeR_fLaG"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THAT_OTHER_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "THAT_FLA"}, 0);
assertEquals(-1, consuemdArguments);
assertEquals(SomeFlags.THAT_OTHER_FLAG, optionValue);
}
public void testHandle_default() {
ArgHandler handler = new MockArgHandlerEnumBase<SomeFlags>(
SomeFlags.class, SomeFlags.THAT_OTHER_FLAG, false) { };
optionValue = null;
int consuemdArguments = handler.handle(handler.getDefaultArgs(), 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THAT_OTHER_FLAG, optionValue);
}
public void testHandle_Abbreviations() {
ArgHandler handler = new MockArgHandlerEnumBase<SomeFlags>(SomeFlags.class, null, true) { };
optionValue = null;
int consuemdArguments = handler.handle(new String[] {"-Xflag", "THIS"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THIS_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "THAT"}, 0);
assertEquals(-1, consuemdArguments);
assertEquals(SomeFlags.THIS_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "THAT_O"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THAT_OTHER_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "ThAt_f"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.THAT_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "AN"}, 0);
assertEquals(-1, consuemdArguments);
assertEquals(SomeFlags.THAT_FLAG, optionValue);
consuemdArguments = handler.handle(new String[] {"-Xflag", "ANO"}, 0);
assertEquals(1, consuemdArguments);
assertEquals(SomeFlags.ANOTHER_FLAG, optionValue);
}
public void testGetDefaultTags() {
ArgHandler handler = new MockArgHandlerEnumBase<SomeFlags>(SomeFlags.class) { };
assertNull(handler.getDefaultArgs());
handler =
new MockArgHandlerEnumBase<SomeFlags>(SomeFlags.class, SomeFlags.THAT_FLAG, false) { };
assertContentsEquals(new String[]{"-Xflag", "THAT_FLAG"}, handler.getDefaultArgs());
}
public void testGetPurposeString() {
assertEquals("EXPERIMENTAL: Set flag: THIS_FLAG, THAT_FLAG, THAT_OTHER_FLAG or ANOTHER_FLAG",
new MockArgHandlerEnumBase<SomeFlags>(SomeFlags.class) { }.getPurpose());
}
public void testBadEnums() {
try {
new MockArgHandlerEnumBase<EmptyEnum>(EmptyEnum.class) { };
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
try {
new MockArgHandlerEnumBase<OneOptionEnum>(OneOptionEnum.class) { };
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
}
private <T> void assertContentsEquals(T[] expected, T[] actual) {
assertEquals("Different sizes", expected.length, actual.length);
for (int i = 0; i < expected.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
}