/* Copyright 2017 Google Inc. All Rights Reserved.
|
|
Distributed under MIT license.
|
See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
|
*/
|
|
package org.brotli.wrapper.dec;
|
|
import static org.junit.Assert.assertEquals;
|
|
import org.brotli.integration.BrotliJniTestBase;
|
import org.brotli.integration.BundleHelper;
|
import java.io.ByteArrayInputStream;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.util.List;
|
import junit.framework.TestCase;
|
import junit.framework.TestSuite;
|
import org.junit.runner.RunWith;
|
import org.junit.runners.AllTests;
|
|
/** Tests for {@link org.brotli.wrapper.dec.BrotliInputStream}. */
|
@RunWith(AllTests.class)
|
public class BrotliInputStreamTest extends BrotliJniTestBase {
|
|
static InputStream getBundle() throws IOException {
|
return new FileInputStream(System.getProperty("TEST_BUNDLE"));
|
}
|
|
/** Creates a test suite. */
|
public static TestSuite suite() throws IOException {
|
TestSuite suite = new TestSuite();
|
InputStream bundle = getBundle();
|
try {
|
List<String> entries = BundleHelper.listEntries(bundle);
|
for (String entry : entries) {
|
suite.addTest(new StreamTestCase(entry));
|
}
|
} finally {
|
bundle.close();
|
}
|
return suite;
|
}
|
|
/** Test case with a unique name. */
|
static class StreamTestCase extends TestCase {
|
final String entryName;
|
StreamTestCase(String entryName) {
|
super("BrotliInputStreamTest." + entryName);
|
this.entryName = entryName;
|
}
|
|
@Override
|
protected void runTest() throws Throwable {
|
BrotliInputStreamTest.run(entryName);
|
}
|
}
|
|
private static void run(String entryName) throws Throwable {
|
InputStream bundle = getBundle();
|
byte[] compressed;
|
try {
|
compressed = BundleHelper.readEntry(bundle, entryName);
|
} finally {
|
bundle.close();
|
}
|
if (compressed == null) {
|
throw new RuntimeException("Can't read bundle entry: " + entryName);
|
}
|
|
InputStream src = new ByteArrayInputStream(compressed);
|
InputStream decoder = new BrotliInputStream(src);
|
long crc;
|
try {
|
crc = BundleHelper.fingerprintStream(decoder);
|
} finally {
|
decoder.close();
|
}
|
assertEquals(BundleHelper.getExpectedFingerprint(entryName), crc);
|
}
|
}
|