| // Copyright 2016 Google Inc. All rights reserved. |
| // |
| // Licensed 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.google.archivepatcher.shared; |
| |
| import org.junit.After; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| import java.io.DataInputStream; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.io.RandomAccessFile; |
| |
| /** |
| * Tests for {@link RandomAccessFileOutputStream}. |
| */ |
| @RunWith(JUnit4.class) |
| @SuppressWarnings("javadoc") |
| public class RandomAccessFileOutputStreamTest { |
| /** |
| * The object under test. |
| */ |
| private RandomAccessFileOutputStream stream = null; |
| |
| /** |
| * Test data written to the file. |
| */ |
| private byte[] testData = null; |
| |
| /** |
| * The temp file. |
| */ |
| private File tempFile = null; |
| |
| @Before |
| public void setup() throws IOException { |
| testData = new byte[128]; |
| for (int x = 0; x < 128; x++) { |
| testData[x] = (byte) x; |
| } |
| tempFile = File.createTempFile("ra-fost", "tmp"); |
| tempFile.deleteOnExit(); |
| } |
| |
| @After |
| public void tearDown() { |
| try { |
| stream.close(); |
| } catch (Exception ignored) { |
| // Nothing to do |
| } |
| try { |
| tempFile.delete(); |
| } catch (Exception ignored) { |
| // Nothing to do |
| } |
| } |
| |
| @Test |
| public void testCreateAndSize() throws IOException { |
| stream = new RandomAccessFileOutputStream(tempFile, 11L); |
| Assert.assertEquals(11, tempFile.length()); |
| } |
| |
| @Test(expected = IOException.class) |
| public void testCreateAndFailToSize() throws IOException { |
| stream = |
| new RandomAccessFileOutputStream(tempFile, 11L) { |
| @Override |
| protected RandomAccessFile getRandomAccessFile(File file) throws IOException { |
| return new RandomAccessFile(file, "rw") { |
| @Override |
| public void setLength(long newLength) throws IOException { |
| // Do nothing, to trigger failure case in the constructor. |
| } |
| }; |
| } |
| }; |
| } |
| |
| @Test |
| public void testWrite() throws IOException { |
| stream = new RandomAccessFileOutputStream(tempFile, 1L); |
| stream.write(7); |
| stream.flush(); |
| stream.close(); |
| FileInputStream in = null; |
| try { |
| in = new FileInputStream(tempFile); |
| Assert.assertEquals(7, in.read()); |
| } finally { |
| try { |
| in.close(); |
| } catch (Exception ignored) { |
| // Nothing |
| } |
| } |
| } |
| |
| @Test |
| public void testWriteArray() throws IOException { |
| stream = new RandomAccessFileOutputStream(tempFile, 1L); |
| stream.write(testData, 0, testData.length); |
| stream.flush(); |
| stream.close(); |
| FileInputStream in = null; |
| DataInputStream dataIn = null; |
| try { |
| in = new FileInputStream(tempFile); |
| dataIn = new DataInputStream(in); |
| byte[] actual = new byte[testData.length]; |
| dataIn.readFully(actual); |
| Assert.assertArrayEquals(testData, actual); |
| } finally { |
| if (dataIn != null) { |
| try { |
| dataIn.close(); |
| } catch (Exception ignored) { |
| // Nothing |
| } |
| } |
| if (in != null) { |
| try { |
| in.close(); |
| } catch (Exception ignored) { |
| // Nothing |
| } |
| } |
| } |
| } |
| } |