1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package org.apache.harmony.luni.tests.java.io; 19 20import java.io.IOException; 21import java.io.StringReader; 22 23public class StringReaderTest extends junit.framework.TestCase { 24 25 String testString = "This is a test string"; 26 27 StringReader sr; 28 29 /** 30 * @tests java.io.StringReader#StringReader(java.lang.String) 31 */ 32 public void test_ConstructorLjava_lang_String() { 33 // Test for method java.io.StringReader(java.lang.String) 34 assertTrue("Used in tests", true); 35 } 36 37 /** 38 * @tests java.io.StringReader#close() 39 */ 40 public void test_close() throws Exception { 41 // Test for method void java.io.StringReader.close() 42 try { 43 sr = new StringReader(testString); 44 sr.close(); 45 char[] buf = new char[10]; 46 sr.read(buf, 0, 2); 47 fail("Close failed"); 48 } catch (java.io.IOException e) { 49 return; 50 } 51 } 52 53 /** 54 * @tests java.io.StringReader#mark(int) 55 */ 56 public void test_markI() throws Exception { 57 // Test for method void java.io.StringReader.mark(int) 58 sr = new StringReader(testString); 59 sr.skip(5); 60 sr.mark(0); 61 sr.skip(5); 62 sr.reset(); 63 char[] buf = new char[10]; 64 sr.read(buf, 0, 2); 65 assertTrue("Failed to return to mark", new String(buf, 0, 2) 66 .equals(testString.substring(5, 7))); 67 } 68 69 /** 70 * @tests java.io.StringReader#markSupported() 71 */ 72 public void test_markSupported() { 73 // Test for method boolean java.io.StringReader.markSupported() 74 75 sr = new StringReader(testString); 76 assertTrue("markSupported returned false", sr.markSupported()); 77 } 78 79 /** 80 * @tests java.io.StringReader#read() 81 */ 82 public void test_read() throws Exception { 83 // Test for method int java.io.StringReader.read() 84 sr = new StringReader(testString); 85 int r = sr.read(); 86 assertEquals("Failed to read char", 'T', r); 87 sr = new StringReader(new String(new char[] { '\u8765' })); 88 assertTrue("Wrong double byte char", sr.read() == '\u8765'); 89 } 90 91 /** 92 * @tests java.io.StringReader#read(char[], int, int) 93 */ 94 public void test_read$CII() throws Exception { 95 // Test for method int java.io.StringReader.read(char [], int, int) 96 sr = new StringReader(testString); 97 char[] buf = new char[testString.length()]; 98 int r = sr.read(buf, 0, testString.length()); 99 assertTrue("Failed to read chars", r == testString.length()); 100 assertTrue("Read chars incorrectly", new String(buf, 0, r) 101 .equals(testString)); 102 } 103 104 /** 105 * @tests java.io.StringReader#ready() 106 */ 107 public void test_ready() throws Exception { 108 // Test for method boolean java.io.StringReader.ready() 109 sr = new StringReader(testString); 110 assertTrue("Steam not ready", sr.ready()); 111 sr.close(); 112 int r = 0; 113 try { 114 sr.ready(); 115 } catch (IOException e) { 116 r = 1; 117 } 118 assertEquals("Expected IOException not thrown in read()", 1, r); 119 } 120 121 /** 122 * @tests java.io.StringReader#reset() 123 */ 124 public void test_reset() throws Exception { 125 // Test for method void java.io.StringReader.reset() 126 sr = new StringReader(testString); 127 sr.skip(5); 128 sr.mark(0); 129 sr.skip(5); 130 sr.reset(); 131 char[] buf = new char[10]; 132 sr.read(buf, 0, 2); 133 assertTrue("Failed to reset properly", new String(buf, 0, 2) 134 .equals(testString.substring(5, 7))); 135 } 136 137 /** 138 * @tests java.io.StringReader#skip(long) 139 */ 140 public void test_skipJ() throws Exception { 141 // Test for method long java.io.StringReader.skip(long) 142 sr = new StringReader(testString); 143 sr.skip(5); 144 char[] buf = new char[10]; 145 sr.read(buf, 0, 2); 146 assertTrue("Failed to skip properly", new String(buf, 0, 2) 147 .equals(testString.substring(5, 7))); 148 } 149 150 // Regression test for HARMONY-5077 151 static boolean finish = false; 152 153 public void test_synchronization() { 154 String anything = "Hello world"; 155 final StringReader sr = new StringReader(anything); 156 Thread other = new Thread(new Runnable() { 157 public void run() { 158 sr.close(); 159 finish = true; 160 }; 161 }); 162 163 synchronized (anything) { 164 other.start(); 165 while (!finish) { 166 Thread.yield(); 167 } 168 } 169 } 170} 171