--- /dev/null 2015-05-25 15:53:01.485006041 +0300 +++ new/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/DoubleJVMOption.java 2015-05-28 16:19:35.509156765 +0300 @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package optionsvalidation; + +import java.util.ArrayList; +import java.util.List; + +public class DoubleJVMOption extends JVMOption { + + /** + * Additional double values to test + */ + private static final double ADDITIONAL_TEST_DOUBLE_NEGATIVE = -1.5; + private static final double ADDITIONAL_TEST_DOUBLE_ZERO = 0.0; + private static final double ADDITIONAL_TEST_DOUBLE_POSITIVE = 1.75; + + /** + * Mininum option value + */ + private double min; + /** + * Maximum option value + */ + private double max; + + /** + * Initialize double option with passed name + * + * @param name Name of the option + */ + DoubleJVMOption(String name) { + this.name = name; + } + + /** + * Initialize double option with passed name, min and max values + * + * @param name Name of the option + * @param min Minimum value of the option + * @param max Maximum value of the option + */ + public DoubleJVMOption(String name, double min, double max) { + this(name); + this.min = min; + this.max = max; + } + + /** + * Set new minimum option value + * + * @param min New minimum value + */ + @Override + void setMin(String min) { + this.min = new Double(min); + } + + /** + * Get string with minimum value of the option + * + * @return String with minimum value of the option + */ + @Override + String getMin() { + return String.format("%f", min); + } + + /** + * Set new maximum option value + * + * @param max New maximum value + */ + @Override + void setMax(String max) { + this.max = new Double(max); + } + + /** + * Get string with maximum value of the option + * + * @return String with maximum value of the option + */ + @Override + String getMax() { + return String.format("%f", max); + } + + /** + * Return list of strings with valid option values which used for testing + * using jcmd, attach and etc. + * + * @return List of strings which contain valid values for option + */ + @Override + protected List getValidValues() { + List validValues = new ArrayList<>(); + + validValues.add(String.format("%f", min)); + validValues.add(String.format("%f", max)); + + if ((Double.compare(min, ADDITIONAL_TEST_DOUBLE_NEGATIVE) < 0) && + (Double.compare(max, ADDITIONAL_TEST_DOUBLE_NEGATIVE) > 0)) { + validValues.add(String.format("%f", ADDITIONAL_TEST_DOUBLE_NEGATIVE)); + } + + if ((Double.compare(min, ADDITIONAL_TEST_DOUBLE_ZERO) < 0) && + (Double.compare(max, ADDITIONAL_TEST_DOUBLE_ZERO) > 0)) { + validValues.add(String.format("%f", ADDITIONAL_TEST_DOUBLE_ZERO)); + } + + if ((Double.compare(min, ADDITIONAL_TEST_DOUBLE_POSITIVE) < 0) && + (Double.compare(max, ADDITIONAL_TEST_DOUBLE_POSITIVE) > 0)) { + validValues.add(String.format("%f", ADDITIONAL_TEST_DOUBLE_POSITIVE)); + } + + return validValues; + } + + /** + * Return list of strings with invalid option values which used for testing + * using jcmd, attach and etc. + * + * @return List of strings which contain invalid values for option + */ + @Override + protected List getInvalidValues() { + List invalidValues = new ArrayList<>(); + + if (Double.compare(min, Double.MIN_VALUE) != 0) { + if ((Double.compare(min, 0.0) > 0) + && (Double.isNaN(min * 0.999) == false)) { + invalidValues.add(String.format("%f", min * 0.999)); + } else if ((Double.compare(min, 0.0) < 0) + && (Double.isNaN(min * 1.001) == false)) { + invalidValues.add(String.format("%f", min * 1.001)); + } + } + + if (Double.compare(max, Double.MAX_VALUE) != 0) { + if ((Double.compare(max, 0.0) > 0) + && (Double.isNaN(max * 1.001) == false)) { + invalidValues.add(String.format("%f", max * 1.001)); + } else if ((Double.compare(max, 0.0) < 0) + && (Double.isNaN(max * 0.999) == false)) { + invalidValues.add(String.format("%f", max * 0.999)); + } + } + + return invalidValues; + } + + /** + * Return expected error message for option with value "value" when it used + * on command line with passed value + * + * @param value Option value + * @return Expected error message + */ + @Override + protected String getErrorMessageCommandLine(String value) { + String errorMsg; + + if (withRange) { + /* Option have defined range in VM */ + errorMsg = "is outside the allowed range"; + } else { + errorMsg = ""; + } + + return errorMsg; + } +}