--- old/test/jdk/java/lang/System/ClearProperty.java 2018-11-08 11:59:11.110791305 -0500 +++ /dev/null 2018-10-26 14:16:15.468074222 -0400 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2018, 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. - */ - -/* - * @test - * @bug 4463345 - * @summary Simple test of System.clearProperty - * @run main/othervm ClearProperty - */ - -public class ClearProperty { - public static void main(String [] argv) throws Exception { - clearTest(); - paramTest(); - } - - static void clearTest() throws Exception { - System.setProperty("blah", "blech"); - if (!System.getProperty("blah").equals("blech")) - throw new RuntimeException("Clear test failed 1"); - System.clearProperty("blah"); - if (System.getProperty("blah") != null) - throw new RuntimeException("Clear test failed 2"); - } - - static void paramTest() throws Exception { - try { - System.clearProperty(null); - throw new RuntimeException("Param test failed"); - } catch (NullPointerException npe) { - // Correct result - } - try { - System.clearProperty(""); - throw new RuntimeException("Param test failed"); - } catch (IllegalArgumentException iae) { - // Correct result - } - } -} --- /dev/null 2018-10-26 14:16:15.468074222 -0400 +++ new/test/jdk/java/lang/System/PropertyTest.java 2018-11-08 11:59:10.858790056 -0500 @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2018, 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. + */ + +import java.lang.System; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.Properties; +import java.util.stream.Collectors; + +import org.testng.Assert; +import org.testng.IMethodInstance; +import org.testng.IMethodInterceptor; +import org.testng.TestListenerAdapter; +import org.testng.TestNG; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + + +/* + * @test + * @bug 4463345 4244670 8030781 + * @summary Simple test of System getProperty, setProperty, clearProperty, + * getProperties, and setProperties + * @run testng/othervm PropertyTest + */ + +@Test +public class PropertyTest { + + @DataProvider(name = "requiredProperties") + static Object[][] requiredProperties() { + return new Object[][]{ + {"java.version"}, + {"java.version.date"}, + {"java.vendor"}, + {"java.vendor.url"}, + {"java.home"}, + {"java.vm.specification.version"}, + {"java.vm.specification.vendor"}, + {"java.vm.specification.name"}, + {"java.vm.version"}, + {"java.vm.vendor"}, + {"java.vm.name"}, + {"java.specification.version"}, + {"java.specification.vendor"}, + {"java.specification.name"}, + {"java.class.version"}, + {"java.class.path"}, + {"java.library.path"}, + {"java.io.tmpdir"}, + {"os.arch"}, + {"os.version"}, + {"file.separator"}, + {"path.separator"}, + {"line.separator"}, + {"user.name"}, + {"user.home"}, + {"user.dir"}, + {"java.runtime.version"}, + {"java.runtime.name"}, + }; + } + + @Test + static void getTest() { + System.setProperty("blah", "blech"); + Assert.assertEquals(System.getProperty("blah"), "blech"); + + try { + System.getProperty(null); + Assert.fail("Failed: expected NullPointerException"); + } catch (NullPointerException npe) { + // Correct result + } + try { + System.getProperty(""); + Assert.fail("Failed: expected IllegalArgumentException"); + } catch (IllegalArgumentException iae) { + // Correct result + } + } + + @Test + static void clearTest() { + System.setProperty("blah", "blech"); + Assert.assertEquals(System.getProperty("blah"), "blech"); + + System.clearProperty("blah"); + Assert.assertNull(System.getProperty("blah")); + + try { + System.clearProperty(null); + Assert.fail("Failed: expected NullPointerException"); + } catch (NullPointerException npe) { + // Correct result + } + try { + System.clearProperty(""); + Assert.fail("Failed: expected IllegalArgumentException"); + } catch (IllegalArgumentException iae) { + // Correct result + } + } + + @Test + static void setTest() { + System.setProperty("blah", "blech"); + Assert.assertEquals(System.getProperty("blah"), "blech"); + + System.setProperty("blah", ""); + Assert.assertEquals(System.getProperty("blah"), ""); + + try { + System.setProperty(null, null); + Assert.fail("Failed: expected NullPointerException"); + } catch (NullPointerException npe) { + // Correct result + } + + try { + System.setProperty("blah", null); + Assert.fail("Failed: expected NullPointerException"); + } catch (NullPointerException npe) { + // Correct result + } + + try { + System.setProperty(null, "blech"); + Assert.fail("Failed: expected NullPointerException"); + } catch (NullPointerException npe) { + // Correct result + } + + try { + System.setProperty("", "blech"); + Assert.fail("Failed: expected IllegalArgumentException"); + } catch (IllegalArgumentException iae) { + // Correct result + } + try { + System.setProperty("", ""); + Assert.fail("Failed: expected IllegalArgumentException"); + } catch (IllegalArgumentException iae) { + // Correct result + } + } + + @Test + static void replaceSetProperties() { + Properties oldProps = System.getProperties(); + Properties newProps = new Properties(); + oldProps.forEach( (k,v) -> newProps.put(k,v)); + System.setProperties(newProps); + + Assert.assertSame(System.getProperties(), newProps, + "getProperties not the same as setProperties"); + + final String KEY = "blah"; + final String VALUE = "blech"; + + // Set via Property instance; get via System methods + newProps.setProperty(KEY, VALUE); + Assert.assertEquals(System.getProperty(KEY), VALUE, KEY); + + String s = (String)newProps.remove(KEY); + Assert.assertEquals(s, VALUE); + Assert.assertNull(System.getProperty(KEY), KEY); + + // Set via System methods; Get via Property instance; + System.setProperty(KEY, VALUE); + Assert.assertEquals(newProps.getProperty(KEY), VALUE); + + String t = System.clearProperty(KEY); + Assert.assertEquals(t, VALUE, KEY); + Assert.assertNull(newProps.getProperty(KEY), KEY); + } + + @Test + static void setNullProperties() { + Properties oldProps = System.getProperties(); + Properties savedProps = new Properties(); + oldProps.forEach((k,v) -> { + if (v == null) { + throw new RuntimeException("null value, key: " + k); + } + savedProps.put(k,v); + }); + + // Re-initialize properties + System.setProperties(null); + + Properties newProps = System.getProperties(); + Object[][] propnames = requiredProperties(); + for (Object[] p : propnames) { + String name = (String)p[0]; + Assert.assertEquals(System.getProperty(name), savedProps.getProperty(name), name); + + Assert.assertEquals(newProps.getProperty(name), savedProps.getProperty(name), name); + } + } + + // Verify all the required properties have values from System.getProperty and + // System.getProperties() + @Test(dataProvider = "requiredProperties") + static void checkRequiredProperties(String name) { + Assert.assertNotNull(System.getProperty(name), name); + + Properties props = System.getProperties(); + Assert.assertNotNull(props.getProperty(name), name); + } + + @SuppressWarnings("raw_types") + @Test(enabled=false) + public static void main(String[] args) { + TestListenerAdapter tla = new TestListenerAdapter(); + + Class[] testclass = {PropertyTest.class}; + TestNG testng = new TestNG(); + testng.setTestClasses(testclass); + testng.addListener(tla); + if (args.length > 0) { + IMethodInterceptor intercept = (m, c) -> { + List x = m.stream() + .filter(m1 -> m1.getMethod().getMethodName().contains(args[0])) + .collect(Collectors.toList()); + return x; + }; + testng.setMethodInterceptor(intercept); + } + testng.run(); + tla.getPassedTests() + .stream().forEach(t -> System.out.printf("Passed: %s%s%n", t.getName(), + List.of(t.getParameters()))); + tla.getFailedTests() + .stream().forEach(t -> System.out.printf("Failed: %s%s%n", t.getName(), + List.of(t.getParameters()))); + } +}