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 tests.api.java.io; 19 20import java.io.IOException; 21import java.io.LineNumberReader; 22import java.io.Reader; 23import java.io.StringReader; 24 25import dalvik.annotation.TestLevel; 26import dalvik.annotation.TestTargetClass; 27import dalvik.annotation.TestTargetNew; 28 29@TestTargetClass(LineNumberReader.class) 30public class LineNumberReaderTest extends junit.framework.TestCase { 31 32 String text = "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n"; 33 34 LineNumberReader lnr; 35 36 /** 37 * @tests java.io.LineNumberReader#LineNumberReader(java.io.Reader) 38 */ 39 @TestTargetNew( 40 level = TestLevel.COMPLETE, 41 notes = "", 42 method = "LineNumberReader", 43 args = {java.io.Reader.class, int.class} 44 ) 45 public void test_ConstructorLjava_io_Reader() { 46 // Test for method java.io.LineNumberReader(java.io.Reader) 47 lnr = new LineNumberReader(new StringReader(text), 4092); 48 assertEquals("Failed to create reader", 0, lnr.getLineNumber()); 49 } 50 51 /** 52 * @tests java.io.LineNumberReader#LineNumberReader(java.io.Reader, int) 53 */ 54 @TestTargetNew( 55 level = TestLevel.COMPLETE, 56 notes = "", 57 method = "LineNumberReader", 58 args = {java.io.Reader.class} 59 ) 60 public void test_ConstructorLjava_io_ReaderI() { 61 // Test for method java.io.LineNumberReader(java.io.Reader, int) 62 lnr = new LineNumberReader(new StringReader(text)); 63 assertEquals("Failed to create reader", 0, lnr.getLineNumber()); 64 } 65 66 /** 67 * @tests java.io.LineNumberReader#getLineNumber() 68 */ 69 @TestTargetNew( 70 level = TestLevel.COMPLETE, 71 notes = "", 72 method = "getLineNumber", 73 args = {} 74 ) 75 public void test_getLineNumber() { 76 // Test for method int java.io.LineNumberReader.getLineNumber() 77 lnr = new LineNumberReader(new StringReader(text)); 78 assertEquals("Returned incorrect line number--expected 0, got ", 0, lnr 79 .getLineNumber()); 80 try { 81 lnr.readLine(); 82 lnr.readLine(); 83 } catch (IOException e) { 84 fail("Exception during getLineNumberTest: " + e.toString()); 85 } 86 assertTrue("Returned incorrect line number--expected 2, got: " 87 + lnr.getLineNumber(), lnr.getLineNumber() == 2); 88 } 89 90 /** 91 * @tests java.io.LineNumberReader#mark(int) 92 */ 93 @TestTargetNew( 94 level = TestLevel.COMPLETE, 95 method = "mark", 96 args = {int.class} 97 ) 98 public void test_markI() throws IOException { 99 lnr = new LineNumberReader(new StringReader(text)); 100 String line; 101 lnr.skip(80); 102 lnr.mark(100); 103 line = lnr.readLine(); 104 lnr.reset(); 105 assertTrue("Test 1: Failed to return to marked position.", 106 line.equals(lnr.readLine())); 107 108 lnr.close(); 109 try { 110 lnr.mark(42); 111 fail("Test 2: IOException expected."); 112 } catch (IOException e) { 113 // Expected. 114 } 115 116 // The spec does not say the mark has to be invalidated 117 } 118 119 /** 120 * @tests java.io.LineNumberReader#read() 121 */ 122 @TestTargetNew( 123 level = TestLevel.COMPLETE, 124 method = "read", 125 args = {} 126 ) 127 public void test_read() throws IOException { 128 lnr = new LineNumberReader(new StringReader(text)); 129 130 int c = lnr.read(); 131 assertEquals("Test 1: Read returned incorrect character;", 132 '0', c); 133 lnr.read(); 134 assertEquals("Test 2: Read failed to increase the line number;", 135 1, lnr.getLineNumber()); 136 137 lnr.close(); 138 try { 139 lnr.read(); 140 fail("Test 3: IOException expected."); 141 } catch (IOException e) { 142 // Expected. 143 } 144 } 145 146 /** 147 * @tests java.io.LineNumberReader#read(char[], int, int) 148 */ 149 @TestTargetNew( 150 level = TestLevel.PARTIAL_COMPLETE, 151 method = "read", 152 args = {char[].class, int.class, int.class} 153 ) 154 public void test_read$CII() throws IOException { 155 lnr = new LineNumberReader(new StringReader(text)); 156 char[] c = new char[100]; 157 lnr.read(c, 0, 4); 158 assertTrue("Test 1: Read returned incorrect characters.", "0\n1\n" 159 .equals(new String(c, 0, 4))); 160 assertEquals("Test 2: Read failed to inc lineNumber", 161 2, lnr.getLineNumber()); 162 163 lnr.close(); 164 try { 165 lnr.read(c, 0, 4); 166 fail("Test 3: IOException expected."); 167 } catch (IOException e) { 168 // Expected. 169 } 170 } 171 172 /** 173 * @tests java.io.LineNumberReader#read(char[], int, int) 174 */ 175 @TestTargetNew( 176 level = TestLevel.PARTIAL_COMPLETE, 177 method = "read", 178 args = {char[].class, int.class, int.class} 179 ) 180 public void test_read$CII_Exception() throws IOException { 181 lnr = new LineNumberReader(new StringReader(text)); 182 char[] c = new char[10]; 183 184 try { 185 lnr.read(c, -1, 1); 186 fail("IndexOutOfBoundsException expected."); 187 } catch (IndexOutOfBoundsException e) { 188 // Expected. 189 } 190 191 try { 192 lnr.read(c, 0, -1); 193 fail("IndexOutOfBoundsException expected."); 194 } catch (IndexOutOfBoundsException e) { 195 // Expected. 196 } 197 198 try { 199 lnr.read(c, 10, 1); 200 fail("IndexOutOfBoundsException expected."); 201 } catch (IndexOutOfBoundsException e) { 202 // Expected. 203 } 204 } 205 206 /** 207 * @tests java.io.LineNumberReader#readLine() 208 */ 209 @TestTargetNew( 210 level = TestLevel.COMPLETE, 211 method = "readLine", 212 args = {} 213 ) 214 public void test_readLine() throws IOException { 215 lnr = new LineNumberReader(new StringReader(text)); 216 assertEquals("Returned incorrect line number", 0, lnr.getLineNumber()); 217 String line = null; 218 lnr.readLine(); 219 line = lnr.readLine(); 220 assertEquals("Test 1: Returned incorrect string;", "1", line); 221 assertTrue("Test 2: Returned incorrect line number:" + lnr.getLineNumber(), 222 lnr.getLineNumber() == 2); 223 224 lnr.close(); 225 try { 226 lnr.readLine(); 227 fail("Test 3: IOException expected."); 228 } catch (IOException e) { 229 // Expected. 230 } 231 } 232 233 /** 234 * @tests java.io.LineNumberReader#reset() 235 */ 236 @TestTargetNew( 237 level = TestLevel.COMPLETE, 238 method = "reset", 239 args = {} 240 ) 241 public void test_reset() throws IOException { 242 lnr = new LineNumberReader(new StringReader(text)); 243 assertEquals("Test 1: Returned incorrect line number;", 244 0, lnr.getLineNumber()); 245 String line = null; 246 lnr.mark(100); 247 lnr.readLine(); 248 lnr.reset(); 249 line = lnr.readLine(); 250 assertEquals("Test 2: Failed to reset reader", "0", line); 251 252 lnr.mark(100); 253 lnr.close(); 254 try { 255 lnr.reset(); 256 fail("Test 3: IOException expected."); 257 } catch (IOException e) { 258 // Expected. 259 } 260 } 261 262 public void testReadLineSourceThrows() throws IOException { 263 lnr = new LineNumberReader(new Reader() { 264 private StringReader delegate = new StringReader("hello\nworld"); 265 private int calls = 0; 266 @Override public void close() throws IOException {} 267 @Override public int read(char[] buf, int offset, int len) throws IOException { 268 if (calls++ < 2) { 269 throw new IOException(); 270 } else { 271 return delegate.read(buf, offset, len); 272 } 273 } 274 }); 275 276 assertEquals(0, lnr.getLineNumber()); 277 try { 278 lnr.readLine(); 279 fail(); 280 } catch (IOException expected) { 281 } 282 283 assertEquals(0, lnr.getLineNumber()); 284 try { 285 lnr.readLine(); 286 fail(); 287 } catch (IOException expected) { 288 } 289 290 assertEquals(0, lnr.getLineNumber()); 291 assertEquals("hello", lnr.readLine()); 292 assertEquals(1, lnr.getLineNumber()); 293 assertEquals("world", lnr.readLine()); 294 assertEquals(2, lnr.getLineNumber()); 295 } 296 297 public void testGetLineNumberAfterEnd() throws IOException { 298 lnr = new LineNumberReader(new StringReader("hello\nworld")); 299 assertEquals(0, lnr.getLineNumber()); 300 assertEquals("hello", lnr.readLine()); 301 assertEquals(1, lnr.getLineNumber()); 302 assertEquals("world", lnr.readLine()); 303 assertEquals(2, lnr.getLineNumber()); 304 assertEquals(null, lnr.readLine()); 305 assertEquals(2, lnr.getLineNumber()); 306 assertEquals(null, lnr.readLine()); 307 assertEquals(2, lnr.getLineNumber()); 308 } 309 310 /** 311 * @tests java.io.LineNumberReader#setLineNumber(int) 312 */ 313 @TestTargetNew( 314 level = TestLevel.COMPLETE, 315 notes = "", 316 method = "setLineNumber", 317 args = {int.class} 318 ) 319 public void test_setLineNumberI() { 320 // Test for method void java.io.LineNumberReader.setLineNumber(int) 321 lnr = new LineNumberReader(new StringReader(text)); 322 lnr.setLineNumber(1001); 323 assertEquals("set incorrect line number", 1001, lnr.getLineNumber()); 324 } 325 326 /** 327 * @tests java.io.LineNumberReader#skip(long) 328 */ 329 @TestTargetNew( 330 level = TestLevel.COMPLETE, 331 method = "skip", 332 args = {long.class} 333 ) 334 public void test_skipJ() throws IOException { 335 lnr = new LineNumberReader(new StringReader(text)); 336 char[] c = new char[100]; 337 long skipped = lnr.skip(80); 338 assertEquals("Test 1: Incorrect number of characters skipped;", 339 80, skipped); 340 lnr.read(c, 0, 100); 341 assertTrue("Test 2: Failed to skip to correct position.", 342 text.substring(80, 180).equals(new String(c, 0, c.length))); 343 344 try { 345 lnr.skip(-1); 346 fail("Test 3: IllegalArgumentException expected."); 347 } catch (IllegalArgumentException e) { 348 // Expected. 349 } 350 351 lnr.close(); 352 try { 353 lnr.skip(1); 354 fail("Test 4: IOException expected."); 355 } catch (IOException e) { 356 // Expected. 357 } 358 } 359} 360