/*
* 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 com.tom_roush.pdfbox.io;
import junit.framework.TestCase;
import java.io.File;
import java.io.IOException;
/**
* This is a unit test for RandomAccessOutputStream.
*
* @author Fredrik Kjellberg
*/
public class TestRandomAccessOutputStream extends TestCase
{
private final File testResultsDir = new File("target/test-output");
@Override
protected void setUp() throws Exception
{
super.setUp();
testResultsDir.mkdirs();
}
public void testWrite() throws IOException
{
RandomAccessOutputStream out;
byte[] buffer;
File file = new File(testResultsDir, "raf-outputstream.bin");
file.delete();
RandomAccessFile raFile = new RandomAccessFile(file, "rw");
// Test single byte writes
buffer = createDataSequence(16, 10);
out = new RandomAccessOutputStream(raFile);
for (byte b : buffer)
{
out.write(b);
}
assertEquals(16, raFile.length());
assertEquals(16, raFile.getPosition());
out.close();
// Test no write
out = new RandomAccessOutputStream(raFile);
assertEquals(16, raFile.length());
assertEquals(16, raFile.getPosition());
out.close();
// Test buffer writes
buffer = createDataSequence(8, 30);
out = new RandomAccessOutputStream(raFile);
out.write(buffer);
assertEquals(24, raFile.length());
assertEquals(24, raFile.getPosition());
out.close();
// Test partial buffer writes
buffer = createDataSequence(16, 50);
out = new RandomAccessOutputStream(raFile);
out.write(buffer, 8, 4);
out.write(buffer, 4, 2);
assertEquals(30, raFile.length());
assertEquals(30, raFile.getPosition());
out.close();
// Verify written data
buffer = new byte[(int) raFile.length()];
raFile.seek(0);
assertEquals(buffer.length, raFile.read(buffer, 0, buffer.length));
assertEquals(10, buffer[0]);
assertEquals(11, buffer[1]);
assertEquals(25, buffer[15]);
assertEquals(30, buffer[16]);
assertEquals(31, buffer[17]);
assertEquals(37, buffer[23]);
assertEquals(58, buffer[24]);
assertEquals(59, buffer[25]);
assertEquals(60, buffer[26]);
assertEquals(61, buffer[27]);
assertEquals(54, buffer[28]);
assertEquals(55, buffer[29]);
// Cleanup
raFile.close();
file.delete();
}
protected byte[] createDataSequence(int length, int firstByteValue)
{
byte[] buffer = new byte[length];
for (int i = 0; i < buffer.length; i++)
{
buffer[i] = (byte) (firstByteValue + i);
}
return buffer;
}
}