/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 opennlp.tools.cmdline; import java.nio.charset.Charset; import java.util.Collection; import org.junit.Assert; import org.junit.Test; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.EncodingParameter; public class ArgumentParserTest { interface ZeroMethods { } @Test(expected = IllegalArgumentException.class) public void testZeroMethods() { ArgumentParser.createUsage(ZeroMethods.class); } interface InvalidMethodName { String invalidMethodName(); } @Test(expected = IllegalArgumentException.class) public void testInvalidMethodName() { ArgumentParser.createUsage(InvalidMethodName.class); } interface InvalidReturnType { Exception getTest(); } @Test(expected = IllegalArgumentException.class) public void testInvalidReturnType() { ArgumentParser.createUsage(InvalidReturnType.class); } interface SimpleArguments extends AllOptionalArguments { @ParameterDescription(valueName = "charset", description = "a charset encoding") String getEncoding(); @OptionalParameter Integer getCutoff(); } interface AllOptionalArguments { @ParameterDescription(valueName = "num") @OptionalParameter(defaultValue = "100") Integer getIterations(); @ParameterDescription(valueName = "true|false") @OptionalParameter(defaultValue = "true") Boolean getAlphaNumOpt(); } @Test public void testSimpleArguments() { String argsString = "-encoding UTF-8 -alphaNumOpt false"; SimpleArguments args = ArgumentParser.parse(argsString.split(" "), SimpleArguments.class); Assert.assertEquals("UTF-8", args.getEncoding()); Assert.assertEquals(Integer.valueOf(100), args.getIterations()); Assert.assertEquals(null, args.getCutoff()); Assert.assertEquals(false, args.getAlphaNumOpt()); } @Test(expected = IllegalArgumentException.class) public void testSimpleArgumentsMissingEncoding() { String argsString = "-alphaNumOpt false"; Assert.assertFalse(ArgumentParser.validateArguments(argsString.split(" "), SimpleArguments.class)); ArgumentParser.parse(argsString.split(" "), SimpleArguments.class); } @Test public void testAllOptionalArgumentsOneArgument() { String argsString = "-alphaNumOpt false"; Assert.assertTrue(ArgumentParser.validateArguments(argsString.split(" "), AllOptionalArguments.class)); ArgumentParser.parse(argsString.split(" "), AllOptionalArguments.class); } @Test public void testAllOptionalArgumentsZeroArguments() { String[] args = {}; Assert.assertTrue(ArgumentParser.validateArguments(args, AllOptionalArguments.class)); ArgumentParser.parse(args, AllOptionalArguments.class); } @Test(expected = IllegalArgumentException.class) public void testAllOptionalArgumentsExtraArgument() { String argsString = "-encoding UTF-8"; Assert.assertFalse(ArgumentParser.validateArguments(argsString.split(" "), AllOptionalArguments.class)); ArgumentParser.parse(argsString.split(" "), AllOptionalArguments.class); } @Test public void testSimpleArgumentsUsage() { String[] arguments = new String[] {"-encoding charset", "[-iterations num]", "[-alphaNumOpt true|false]"}; String usage = ArgumentParser.createUsage(SimpleArguments.class); int expectedLength = 2; for (String arg : arguments) { Assert.assertTrue(usage.contains(arg)); expectedLength += arg.length(); } Assert.assertTrue(usage.contains("a charset encoding")); Assert.assertTrue(expectedLength < usage.length()); } interface ExtendsEncodingParameter extends EncodingParameter { @ParameterDescription(valueName = "value") String getSomething(); } @Test public void testDefaultEncodingParameter() { String[] args = "-something aValue".split(" "); Assert.assertTrue(ArgumentParser.validateArguments(args, ExtendsEncodingParameter.class)); ExtendsEncodingParameter params = ArgumentParser.parse(args, ExtendsEncodingParameter.class); Assert.assertEquals(Charset.defaultCharset(), params.getEncoding()); } @Test public void testSetEncodingParameter() { Collection<Charset> availableCharset = Charset.availableCharsets().values(); String notTheDefaultCharset = "UTF-8"; for (Charset charset : availableCharset) { if (!charset.equals(Charset.defaultCharset())) { notTheDefaultCharset = charset.name(); break; } } String[] args = ("-something aValue -encoding " + notTheDefaultCharset).split(" "); Assert.assertTrue(ArgumentParser.validateArguments(args, ExtendsEncodingParameter.class)); ExtendsEncodingParameter params = ArgumentParser.parse(args, ExtendsEncodingParameter.class); Assert.assertEquals(Charset.forName(notTheDefaultCharset), params.getEncoding()); } }