Index: pdfbox/src/test/java/org/apache/pdfbox/TestAll.java
===================================================================
--- pdfbox/src/test/java/org/apache/pdfbox/TestAll.java	(revision 1476591)
+++ pdfbox/src/test/java/org/apache/pdfbox/TestAll.java	(working copy)
@@ -26,6 +26,7 @@
 import org.apache.pdfbox.filter.TestFilters;
 import org.apache.pdfbox.io.TestIOUtils;
 import org.apache.pdfbox.io.TestRandomAccessBuffer;
+import org.apache.pdfbox.io.TestRandomAccessFileInputStream;
 import org.apache.pdfbox.io.ccitt.TestCCITTFaxG31DDecodeInputStream;
 import org.apache.pdfbox.io.ccitt.TestPackedBitArray;
 import org.apache.pdfbox.pdmodel.TestFDF;
@@ -94,6 +95,7 @@
 
         suite.addTestSuite( TestIOUtils.class );
         suite.addTestSuite( TestRandomAccessBuffer.class );
+        suite.addTestSuite( TestRandomAccessFileInputStream.class );
         suite.addTestSuite( TestImageIOUtils.class );
         suite.addTestSuite( TestPackedBitArray.class );
         suite.addTestSuite( TestCCITTFaxG31DDecodeInputStream.class );
Index: pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessFileInputStream.java
===================================================================
--- pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessFileInputStream.java	(revision 0)
+++ pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessFileInputStream.java	(working copy)
@@ -0,0 +1,183 @@
+/*
+ * 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.pdfbox.io;
+
+import java.io.File;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+public class TestRandomAccessFileInputStream extends TestCase
+{
+    private File testResultsDir = new File("target/test-output");
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        testResultsDir.mkdirs();
+    }
+
+    public void testRead() throws IOException
+    {
+        RandomAccessFileInputStream in;
+        byte buffer[];
+
+        File file = new File(testResultsDir, "raf-inputstream.bin");
+
+        // Create a data sequence and write to the file
+        byte data[] = new byte[100];
+        for (int i = 0; i < data.length; i++)
+        {
+            data[i] = (byte) i;
+        }
+
+        RandomAccessFile raFile = new RandomAccessFile(file, "rw");
+        raFile.write(data, 0, data.length);
+
+        // Test single byte reads
+        in = new RandomAccessFileInputStream(raFile, 5, 4);
+        assertEquals(4, in.available());
+        assertEquals(5, in.read());
+        assertEquals(3, in.available());
+        assertEquals(6, in.read());
+        assertEquals(2, in.available());
+        assertEquals(7, in.read());
+        assertEquals(1, in.available());
+        assertEquals(8, in.read());
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition());
+        assertEquals(-1, in.read());
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition());
+        in.close();
+
+        // Test single byte reads at EOF
+        in = new RandomAccessFileInputStream(raFile, 98, 10);
+        assertEquals(10, in.available());
+        assertEquals(98, in.read());
+        assertEquals(9, in.available());
+        assertEquals(99, in.read());
+        assertEquals(8, in.available());
+        assertEquals(100, raFile.getPosition());
+        assertEquals(-1, in.read());
+        assertEquals(7, in.available()); // TODO Is this correct? Keep at 8 or return 0?
+        assertEquals(100, raFile.getPosition());
+        in.close();
+
+        // Test buffer reads
+        in = new RandomAccessFileInputStream(raFile, 5, 4);
+        assertEquals(4, in.available());
+        buffer = new byte[4];
+        assertEquals(4, in.read(buffer));
+        assertEquals(5, buffer[0]);
+        assertEquals(6, buffer[1]);
+        assertEquals(7, buffer[2]);
+        assertEquals(8, buffer[3]);
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition());
+        assertEquals(-1, in.read(buffer));
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition());
+        in.close();
+
+        // Test buffer reads at EOF
+        in = new RandomAccessFileInputStream(raFile, 98, 10);
+        assertEquals(10, in.available());
+        buffer = new byte[4];
+        assertEquals(2, in.read(buffer));
+        assertEquals(98, buffer[0]);
+        assertEquals(99, buffer[1]);
+        assertEquals(8, in.available());
+        assertEquals(100, raFile.getPosition());
+        assertEquals(-1, in.read(buffer));
+        assertEquals(8, in.available()); // TODO Is this correct? Keep at 8 or return 0?
+        assertEquals(100, raFile.getPosition());
+        in.close();
+
+        // Test partial buffer reads
+        in = new RandomAccessFileInputStream(raFile, 5, 4);
+        assertEquals(4, in.available());
+        buffer = new byte[10];
+        assertEquals(4, in.read(buffer, 2, 6));
+        assertEquals(0, buffer[0]);
+        assertEquals(0, buffer[1]);
+        assertEquals(5, buffer[2]);
+        assertEquals(6, buffer[3]);
+        assertEquals(7, buffer[4]);
+        assertEquals(8, buffer[5]);
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition());
+        assertEquals(-1, in.read(buffer, 2, 6));
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition());
+        in.close();
+
+        // Test mixed reads
+        in = new RandomAccessFileInputStream(raFile, 5, 4);
+        buffer = new byte[2];
+        assertEquals(5, in.read());
+        assertEquals(2, in.read(buffer));
+        assertEquals(6, buffer[0]);
+        assertEquals(7, buffer[1]);
+        assertEquals(8, in.read());
+        assertEquals(-1, in.read());
+        in.close();
+
+        // Test skip
+        in = new RandomAccessFileInputStream(raFile, 5, 10);
+        assertEquals(5, in.read());
+        assertEquals(9, in.available());
+        assertEquals(2, in.skip(2));
+        assertEquals(7, in.available());
+        assertEquals(8, in.read());
+        assertEquals(6, in.available());
+        assertEquals(9, raFile.getPosition());
+        assertEquals(6, in.skip(15));
+        assertEquals(0, in.available());
+        assertEquals(-1, in.read());
+        assertEquals(0, in.available());
+        assertEquals(9, raFile.getPosition()); // TODO Is this correct? Should be 15?
+        in.close();
+
+        // Test skip at EOF
+        in = new RandomAccessFileInputStream(raFile, 98, 6);
+        assertEquals(98, in.read());
+        assertEquals(5, in.available());
+        assertEquals(1, in.skip(1));
+        assertEquals(4, in.available());
+        assertEquals(-1, in.read());
+        assertEquals(3, in.available()); // TODO Is this correct? Should be 4 or 0?
+        assertEquals(100, raFile.getPosition());
+        in.close();
+
+        // Test skip at EOF
+        in = new RandomAccessFileInputStream(raFile, 98, 6);
+        assertEquals(98, in.read());
+        assertEquals(5, in.available());
+        assertEquals(5, in.skip(10)); // TODO Is this correct? Should be 1?
+        assertEquals(0, in.available());
+        assertEquals(-1, in.read());
+        assertEquals(0, in.available());
+        assertEquals(99, raFile.getPosition()); // TODO Is this correct? Should be 100?
+        in.close();
+
+        // Cleanup
+        raFile.close();
+        file.delete();
+    }
+}

Property changes on: pdfbox/src/test/java/org/apache/pdfbox/io/TestRandomAccessFileInputStream.java
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
