< prev index next >

test/jdk/java/io/InputStream/Skip.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 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. --- 1,7 ---- /* ! * Copyright (c) 1997, 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.
*** 21,39 **** * questions. */ /* @test ! @bug 4016710 ! @summary check for correct implementation of InputStream.skip */ import java.io.*; public class Skip{ private static void dotest(InputStream in , int curpos , long total , long toskip , long expected) throws Exception { --- 21,41 ---- * questions. */ /* @test ! @bug 4016710 6516099 ! @summary check for correct implementation of InputStream.skip{NBytes} */ import java.io.*; public class Skip{ + private static final int EOF = -1; + private static void dotest(InputStream in , int curpos , long total , long toskip , long expected) throws Exception {
*** 59,68 **** --- 61,108 ---- throw new RuntimeException("Unexpected "+e+" is thrown!"); } } + private static void dotestExact(MyInputStream in , int curpos , + long total , long toskip) + throws Exception + { + + try { + + System.err.println("\n\nCurrently at pos = " + curpos + + "\nTotal bytes in the Stream = " + total + + "\nNumber of bytes to skip = " + toskip); + + try { + long pos = in.position(); + assert pos == curpos : pos + " != " + curpos; + in.skipNBytes(toskip); + if (in.position() != pos + (toskip < 0 ? 0 : toskip)) { + throw new RuntimeException((in.position() - pos) + + " bytes skipped; expected " + toskip); + } + } catch (EOFException eofe) { + if (!(toskip > 0 && + (curpos == EOF || (curpos + toskip > total)))) { + throw new RuntimeException("Unexpected EOFException", eofe); + } + + System.err.println("Caught expected EOFException"); + + return; + } + + } catch (IOException e) { + System.err.println("IOException is thrown - possible result"); + } catch (Throwable e) { + throw new RuntimeException("Unexpected "+e+" is thrown!"); + } + + } + public static void main( String argv[] ) throws Exception { MyInputStream in = new MyInputStream(11); /* test for negative skip */
*** 70,82 **** /* check for skip beyond EOF starting from before EOF */ dotest(in, 0, 11, 20, 11); /* check for skip after EOF */ ! dotest(in, -1, 11, 20, 0); in = new MyInputStream(9000); /* check for skip equal to the read chunk size in InputStream.java */ dotest(in, 0, 9000, 2048, 2048); /* check for skip greater than the read chunk size in InputStream.java */ dotest(in, 2048, 9000, 5000, 5000); --- 110,123 ---- /* check for skip beyond EOF starting from before EOF */ dotest(in, 0, 11, 20, 11); /* check for skip after EOF */ ! dotest(in, EOF, 11, 20, 0); in = new MyInputStream(9000); + /* check for skip equal to the read chunk size in InputStream.java */ dotest(in, 0, 9000, 2048, 2048); /* check for skip greater than the read chunk size in InputStream.java */ dotest(in, 2048, 9000, 5000, 5000);
*** 96,126 **** * long toskip = total - (long)6; * in = new MyInputStream(total); * dotest(in, 0, total, toskip, toskip); */ } } class MyInputStream extends InputStream { ! private int readctr = 0; private long endoffile; public MyInputStream(long endoffile) { this.endoffile = endoffile; } public int read() { if (readctr == endoffile) { ! return -1; } else { readctr++; return 0; } } public int available() { return 0; } } --- 137,189 ---- * long toskip = total - (long)6; * in = new MyInputStream(total); * dotest(in, 0, total, toskip, toskip); */ + /* tests for skipping an exact number of bytes */ + + in = new MyInputStream(11); + + /* test for negative skip */ + dotestExact(in, 0, 11, -23); + + /* test for zero skip */ + dotestExact(in, 0, 11, 0); + + /* test for skip before EOF */ + dotestExact(in, 0, 11, 5); + + /* check for skip beyond EOF starting from before EOF */ + dotestExact(in, 5, 11, 7); + + /* check for skip from / after EOF */ + dotestExact(in, EOF, 11, 1); } } class MyInputStream extends InputStream { ! private static final int EOF = -1; ! ! private long readctr = 0; private long endoffile; public MyInputStream(long endoffile) { this.endoffile = endoffile; } public int read() { if (readctr == endoffile) { ! return EOF; } else { readctr++; return 0; } } public int available() { return 0; } + + public long position() { return readctr; } }
< prev index next >