Package freenet.client.filter

Source Code of freenet.client.filter.BMPFilterTest

package freenet.client.filter;

import junit.framework.TestCase;
import java.io.IOException;
import java.io.InputStream;
import java.io.FileNotFoundException;
import java.io.OutputStream;
import java.util.Arrays;

import freenet.support.api.Bucket;
import freenet.support.io.ArrayBucket;
import freenet.support.io.BucketTools;


public class BMPFilterTest extends TestCase {
  /** File of size less than 54 bytes */
  public void testTooShortImage() throws IOException {
    Bucket input = resourceToBucket("./bmp/small.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Illegal start word (AB instead of BM) */
  public void testIllegalStartWord() throws IOException {
    Bucket input = resourceToBucket("./bmp/one.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid offset i.e. starting address */
  public void testInvalidOffset() throws IOException {
    Bucket input = resourceToBucket("./bmp/two.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid size of bitmap info header */
  public void testInvalidBitmapInfoHeaderSize() throws IOException {
    Bucket input = resourceToBucket("./bmp/three.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Negative image width */
  public void testNegativeImageWidth() throws IOException {
    Bucket input = resourceToBucket("./bmp/four.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid number of planes */
  public void testInvalidNumberOfPlanes() throws IOException {
    Bucket input = resourceToBucket("./bmp/five.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid bit depth */
  public void testInvalidBitDepth() throws IOException {
    Bucket input = resourceToBucket("./bmp/six.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid compression type */
  public void testInvalidCompressionType() throws IOException {
    Bucket input = resourceToBucket("./bmp/seven.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid image data size (i.e. not satisfying fileSize = headerSize + imagedatasize) */
  public void testInvalidImageDataSize() throws IOException {
    Bucket input = resourceToBucket("./bmp/eight.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Invalid image resolution */
  public void testInvalidImageResolution() throws IOException {
    Bucket input = resourceToBucket("./bmp/nine.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** File is shorter than expected */
  public void testNotEnoughImageData() throws IOException {
    Bucket input = resourceToBucket("./bmp/ten.bmp");
    filterImage(input, DataFilterException.class);
  }

  /** Tests valid image */
  public void testValidImage() throws IOException {
    Bucket input = resourceToBucket("./bmp/ok.bmp");
    Bucket output = filterImage(input, null);

    //Filter should return the original
    assertEquals("Input and output should be the same length", input.size(), output.size());
    assertTrue("Input and output are not identical", Arrays.equals(BucketTools.toByteArray(input), BucketTools.toByteArray(output)));
  }

  /** Checks that the image size calculation works for images with padding */
  public void testImageSizeCalculationWithPadding() throws IOException {
    Bucket input = resourceToBucket("./bmp/sizeCalculationWithPadding.bmp");
    Bucket output = filterImage(input, null);

    //Filter should return the original
    assertEquals("Input and output should be the same length", input.size(), output.size());
    assertTrue("Input and output are not identical", Arrays.equals(BucketTools.toByteArray(input), BucketTools.toByteArray(output)));
  }

  /** Checks that the image size calculation works for images without padding */
  public void testImageSizeCalculationWithoutPadding() throws IOException {
    Bucket input = resourceToBucket("./bmp/sizeCalculationWithoutPadding.bmp");
    Bucket output = filterImage(input, null);

    //Filter should return the original
    assertEquals("Input and output should be the same length", input.size(), output.size());
    assertTrue("Input and output are not identical", Arrays.equals(BucketTools.toByteArray(input), BucketTools.toByteArray(output)));
  }

  private Bucket filterImage(Bucket input, Class<? extends Exception> expected) {
    BMPFilter objBMPFilter = new BMPFilter();
    Bucket output = new ArrayBucket();

    InputStream inStream;
    OutputStream outStream;
    try {
      inStream = input.getInputStream();
      outStream = output.getOutputStream();
    } catch (IOException e) {
      e.printStackTrace();
      fail("Caugth unexpected IOException: " + e);
      return null; //Convince the compiler that we won't continue
    }

    try {
      objBMPFilter.readFilter(inStream, outStream, "", null, null);

      if(expected != null) {
        fail("Filter didn't throw expected exception");
      }
    } catch (Exception e) {
      if((expected == null) || (!expected.equals(e.getClass()))) {
        //Exception is not the one we expected
        e.printStackTrace();
        fail("Caugth unexpected exception: " + e.getClass() + ": " + e.getMessage());
      }
    }

    try {
      inStream.close();
      outStream.close();
    } catch(IOException e) {
      e.printStackTrace();
      fail("Caugth unexpected IOException: " + e);
      return null; //Convince the compiler that we won't continue
    }

    return output;
  }

  private Bucket resourceToBucket(String filename) throws IOException {
    InputStream is = getClass().getResourceAsStream(filename);
    if (is == null) throw new FileNotFoundException();
    Bucket ab = new ArrayBucket();
    BucketTools.copyFrom(ab, is, Long.MAX_VALUE);
    return ab;
  }
}
TOP

Related Classes of freenet.client.filter.BMPFilterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.