/* Copyright 2016 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.dec;
|
|
import static org.junit.Assert.assertEquals;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.nio.ByteBuffer;
|
import java.nio.channels.FileChannel;
|
import org.junit.Test;
|
import org.junit.runner.RunWith;
|
import org.junit.runners.JUnit4;
|
|
/**
|
* Tests for {@link Dictionary}.
|
*/
|
@RunWith(JUnit4.class)
|
public class SetDictionaryTest {
|
|
/** See {@link SynthTest} */
|
private static final byte[] BASE_DICT_WORD = {
|
(byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,
|
(byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,
|
(byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,
|
(byte) 0x1b, (byte) 0x41, (byte) 0x02
|
};
|
|
/** See {@link SynthTest} */
|
private static final byte[] ONE_COMMAND = {
|
(byte) 0x1b, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80,
|
(byte) 0xe3, (byte) 0xb4, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x5b,
|
(byte) 0x26, (byte) 0x31, (byte) 0x40, (byte) 0x02, (byte) 0x00, (byte) 0xe0, (byte) 0x4e,
|
(byte) 0x1b, (byte) 0x11, (byte) 0x86, (byte) 0x02
|
};
|
|
@Test
|
public void testSetDictionary() throws IOException {
|
byte[] buffer = new byte[16];
|
BrotliInputStream decoder;
|
|
// No dictionary set; still decoding should succeed, if no dictionary entries are used.
|
decoder = new BrotliInputStream(new ByteArrayInputStream(ONE_COMMAND));
|
assertEquals(3, decoder.read(buffer, 0, buffer.length));
|
assertEquals("aaa", new String(buffer, 0, 3, "US-ASCII"));
|
decoder.close();
|
|
// Decoding of dictionary item must fail.
|
decoder = new BrotliInputStream(new ByteArrayInputStream(BASE_DICT_WORD));
|
boolean decodingFailed = false;
|
try {
|
decoder.read(buffer, 0, buffer.length);
|
} catch (IOException ex) {
|
decodingFailed = true;
|
}
|
assertEquals(true, decodingFailed);
|
decoder.close();
|
|
// Load dictionary data.
|
FileChannel dictionaryChannel =
|
new FileInputStream(System.getProperty("RFC_DICTIONARY")).getChannel();
|
ByteBuffer dictionary = dictionaryChannel.map(FileChannel.MapMode.READ_ONLY, 0, 122784).load();
|
Dictionary.setData(dictionary);
|
|
// Retry decoding of dictionary item.
|
decoder = new BrotliInputStream(new ByteArrayInputStream(BASE_DICT_WORD));
|
assertEquals(4, decoder.read(buffer, 0, buffer.length));
|
assertEquals("time", new String(buffer, 0, 4, "US-ASCII"));
|
decoder.close();
|
}
|
}
|