/*
* 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 org.apache.harmony.tests.java.lang;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Map;
import java.util.Properties;
public class SystemTest extends junit.framework.TestCase {
static boolean flag = false;
static boolean ranFinalize = false;
/**
* java.lang.System#setIn(java.io.InputStream)
*/
public void test_setInLjava_io_InputStream() {
InputStream orgIn = System.in;
InputStream in = new ByteArrayInputStream(new byte[0]);
System.setIn(in);
assertTrue("in not set", System.in == in);
System.setIn(orgIn);
}
/**
* java.lang.System#setOut(java.io.PrintStream)
*/
public void test_setOutLjava_io_PrintStream() {
PrintStream orgOut = System.out;
PrintStream out = new PrintStream(new ByteArrayOutputStream());
System.setOut(out);
assertTrue("out not set", System.out == out);
System.setOut(orgOut);
}
/**
* java.lang.System#setErr(java.io.PrintStream)
*/
public void test_setErrLjava_io_PrintStream() {
PrintStream orgErr = System.err;
PrintStream err = new PrintStream(new ByteArrayOutputStream());
System.setErr(err);
assertTrue("err not set", System.err == err);
System.setErr(orgErr);
}
/**
* java.lang.System#arraycopy(java.lang.Object, int,
*java.lang.Object, int, int)
*/
public void test_arraycopyLjava_lang_ObjectILjava_lang_ObjectII() {
// Test for method void java.lang.System.arraycopy(java.lang.Object,
// int, java.lang.Object, int, int)
Integer a[] = new Integer[20];
Integer b[] = new Integer[20];
int i = 0;
while (i < a.length) {
a[i] = new Integer(i);
++i;
}
System.arraycopy(a, 0, b, 0, a.length);
for (i = 0; i < a.length; i++)
assertTrue("Copied elements incorrectly", a[i].equals(b[i]));
/* Non primitive array types don't need to be identical */
String[] source1 = new String[] { "element1" };
Object[] dest1 = new Object[1];
System.arraycopy(source1, 0, dest1, 0, dest1.length);
assertTrue("Invalid copy 1", dest1[0] == source1[0]);
char[][] source = new char[][] { { 'H', 'e', 'l', 'l', 'o' },
{ 'W', 'o', 'r', 'l', 'd' } };
char[][] dest = new char[2][];
System.arraycopy(source, 0, dest, 0, dest.length);
assertTrue("Invalid copy 2", dest[0] == source[0]
&& dest[1] == source[1]);
}
/**
* java.lang.System#currentTimeMillis()
*/
public void test_currentTimeMillis() {
// Test for method long java.lang.System.currentTimeMillis()
long firstRead = System.currentTimeMillis();
try {
Thread.sleep(150);
} catch (InterruptedException e) {
}
long secondRead = System.currentTimeMillis();
assertTrue("Incorrect times returned: " + firstRead + ", "
+ secondRead, firstRead < secondRead);
}
/**
* java.lang.System#exit(int)
*/
public void test_exitI() {
// Test for method void java.lang.System.exit(int)
// Tested in destructive test: Test_System_Exit ???
}
/**
* java.lang.System#getProperties()
*/
public void test_getProperties() {
// Test for method java.util.Properties java.lang.System.getProperties()
Properties p = System.getProperties();
// Ensure spec'ed properties are non-null. See System.getProperties()
// spec.
String[] props = { "java.version", "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.name", "java.specification.vendor",
"java.specification.name", "java.class.version",
"java.class.path", "java.ext.dirs", "os.name", "os.arch",
"os.version", "file.separator", "path.separator",
"line.separator", "user.name", "user.home", "user.dir", };
for (int i = 0; i < props.length; i++) {
assertNotNull(props[i], System.getProperty(props[i]));
}
}
/**
* java.lang.System#getProperty(java.lang.String)
*/
public void test_getPropertyLjava_lang_String() {
// Test for method java.lang.String
// java.lang.System.getProperty(java.lang.String)
boolean is8859_1 = true;
String encoding = System.getProperty("file.encoding");
byte[] bytes = new byte[128];
char[] chars = new char[128];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) (i + 128);
chars[i] = (char) (i + 128);
}
String charResult = new String(bytes);
byte[] byteResult = new String(chars).getBytes();
if (charResult.length() == 128 && byteResult.length == 128) {
for (int i = 0; i < bytes.length; i++) {
if (charResult.charAt(i) != (char) (i + 128)
|| byteResult[i] != (byte) (i + 128))
is8859_1 = false;
}
} else
is8859_1 = false;
String[] possibles = new String[] { "ISO8859_1", "8859_1", "ISO8859-1",
"ISO-8859-1", "ISO_8859-1", "ISO_8859-1:1978", "ISO-IR-100",
"LATIN1", "CSISOLATIN1" };
boolean found8859_1 = false;
for (int i = 0; i < possibles.length; i++) {
if (possibles[i].equals(encoding)) {
found8859_1 = true;
break;
}
}
assertTrue("Wrong encoding: " + encoding, !is8859_1 || found8859_1);
}
/**
* java.lang.System#getProperty(java.lang.String)
* Tests that there are no extra path separator in boot class path.
* Regression test for HARMONY-3298
*/
public void test_getProperty_bootClassPath() {
String bootClassPath = System.getProperty("org.apache.harmony.boot.class.path");
if (bootClassPath == null) {
bootClassPath = System.getProperty("sun.boot.class.path");
}
if (bootClassPath != null
&& (bootClassPath.indexOf(File.pathSeparator + File.pathSeparator) >= 0)) {
fail("Boot class path contains extra path separator: " + bootClassPath);
}
}
/**
* java.lang.System#getProperty(java.lang.String, java.lang.String)
*/
public void test_getPropertyLjava_lang_StringLjava_lang_String() {
// Test for method java.lang.String
// java.lang.System.getProperty(java.lang.String, java.lang.String)
assertTrue(!System.getProperty("java.version", "99999").equals("99999"));
assertEquals("Failed to return correct property value", "bogus", System
.getProperty("bogus.prop", "bogus"));
}
/**
* java.lang.System#setProperty(java.lang.String, java.lang.String)
*/
public void test_setPropertyLjava_lang_StringLjava_lang_String() {
// Test for method java.lang.String
// java.lang.System.setProperty(java.lang.String, java.lang.String)
assertNull("Failed to return null", System.setProperty("testing",
"value1"));
assertTrue("Failed to return old value", System.setProperty("testing",
"value2") == "value1");
assertTrue("Failed to find value",
System.getProperty("testing") == "value2");
boolean exception = false;
try {
System.setProperty("", "default");
} catch (IllegalArgumentException e) {
exception = true;
}
assertTrue("Expected IllegalArgumentException", exception);
}
/**
* java.lang.System#getSecurityManager()
*/
public void test_getSecurityManager() {
// Test for method java.lang.SecurityManager
// java.lang.System.getSecurityManager()
assertNull("Returned incorrect SecurityManager", System
.getSecurityManager());
}
/**
* java.lang.System#identityHashCode(java.lang.Object)
*/
public void test_identityHashCodeLjava_lang_Object() {
// Test for method int
// java.lang.System.identityHashCode(java.lang.Object)
Object o = new Object();
String s = "Gabba";
assertEquals("Nonzero returned for null",
0, System.identityHashCode(null));
assertTrue("Nonequal has returned for Object", System
.identityHashCode(o) == o.hashCode());
assertTrue("Same as usual hash returned for String", System
.identityHashCode(s) != s.hashCode());
}
/**
* java.lang.System#runFinalization()
*/
public void test_runFinalization() {
// Test for method void java.lang.System.runFinalization()
flag = true;
createInstance();
int count = 10;
// the gc below likely bogosifies the test, but will have to do for
// the moment
while (!ranFinalize && count-- > 0) {
System.gc();
System.runFinalization();
}
assertTrue("Failed to run finalization", ranFinalize);
}
/**
* java.lang.System#runFinalizersOnExit(boolean)
*/
@SuppressWarnings("deprecation")
public void test_runFinalizersOnExitZ() {
// Can we call the method at least?
System.runFinalizersOnExit(false);
}
/**
* java.lang.System#setProperties(java.util.Properties)
*/
public void test_setPropertiesLjava_util_Properties() {
// Test for method void
// java.lang.System.setProperties(java.util.Properties)
Properties orgProps = System.getProperties();
java.util.Properties tProps = new java.util.Properties();
tProps.put("test.prop", "this is a test property");
tProps.put("bogus.prop", "bogus");
System.setProperties(tProps);
try {
assertEquals("Failed to set properties", "this is a test property", System.getProperties()
.getProperty("test.prop"));
} finally {
// restore the original properties
System.setProperties(orgProps);
}
}
//Regression Test for Harmony-2356
public void testEnvUnmodifiable() {
Map map = System.getenv();
try {
map.containsKey(null);
fail("Should throw NullPointerExcepiton.");
} catch (NullPointerException e) {
// expected
}
try {
map.containsKey(new Integer(10));
fail("Should throw ClassCastException.");
} catch (ClassCastException e) {
// expected
}
try {
map.containsValue(null);
fail("Should throw NullPointerExcepiton.");
} catch (NullPointerException e) {
// expected
}
try {
map.containsValue(new Integer(10));
fail("Should throw ClassCastException.");
} catch (ClassCastException e) {
// expected
}
try {
map.get(null);
fail("Should throw NullPointerExcepiton.");
} catch (NullPointerException e) {
// expected
}
try {
map.get(new Integer(10));
fail("Should throw ClassCastException.");
} catch (ClassCastException e) {
// expected
}
try {
map.put(null, "AAA");
fail("Should throw UnsupportedOperationExcepiton.");
} catch (UnsupportedOperationException e) {
// expected
}
try {
map.put("AAA", new Integer(10));
fail("Should throw UnsupportedOperationException.");
} catch (UnsupportedOperationException e) {
// expected
}
try {
map.put("AAA", "BBB");
fail("Should throw UnsupportedOperationException.");
} catch (UnsupportedOperationException e) {
// expected
}
try {
map.clear();
fail("Should throw UnsupportedOperationException.");
} catch (UnsupportedOperationException e) {
// expected
}
try {
map.remove(null);
// Android isn't as strict about requiring this exception; no modification takes place anyway
// fail("Should throw UnsupportedOperationException.");
} catch (UnsupportedOperationException expected) {
}
}
@Override
protected void setUp() {
flag = false;
ranFinalize = false;
}
protected SystemTest createInstance() {
return new SystemTest("FT");
}
@Override
protected void finalize() {
if (flag)
ranFinalize = true;
}
public SystemTest() {
}
public SystemTest(String name) {
super(name);
}
}