/* * 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]); } } }