mirror of
https://github.com/google/brotli.git
synced 2024-09-19 14:19:59 +00:00
add synth test for metadata block
PiperOrigin-RevId: 548120163
This commit is contained in:
parent
de52bc7ce0
commit
c2848d5537
@ -8,6 +8,7 @@ package org.brotli.dec;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
@ -2640,6 +2641,41 @@ public class SynthTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPeculiarWrap() {
|
||||||
|
byte[] compressed = {
|
||||||
|
(byte) 0x21, (byte) 0xfc, (byte) 0x1f, (byte) 0x00, (byte) 0x00, (byte) 0xa1, (byte) 0x12,
|
||||||
|
(byte) 0x82, (byte) 0x04, (byte) 0x60, (byte) 0x1d, (byte) 0x00, (byte) 0xca, (byte) 0xfe,
|
||||||
|
(byte) 0xba, (byte) 0xbe, (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef, (byte) 0x21,
|
||||||
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x4e,
|
||||||
|
(byte) 0xdb, (byte) 0x00, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65, (byte) 0x12,
|
||||||
|
(byte) 0x03, (byte) 0x24, (byte) 0x00, (byte) 0x00, (byte) 0xee, (byte) 0xb4, (byte) 0x91,
|
||||||
|
(byte) 0x61, (byte) 0x68, (byte) 0x64, (byte) 0x0c
|
||||||
|
};
|
||||||
|
checkSynth(
|
||||||
|
/*
|
||||||
|
* main_header: 10
|
||||||
|
* // See ZeroCostCommand
|
||||||
|
* metablock_header_begin: 0, 0, 2048, 0
|
||||||
|
* metablock_header_trivial_context
|
||||||
|
* huffman_simple: 0,1,256, 42
|
||||||
|
* huffman_simple: 0,1,704, 130
|
||||||
|
* huffman_simple: 0,1,64, 0
|
||||||
|
* // Metadata block; at least 8 bytes long
|
||||||
|
* bits: "0", "11", "0", "01", "00000111"
|
||||||
|
* byte_boundary
|
||||||
|
* bits: "11001010", "11111110", "10111010", "10111110"
|
||||||
|
* bits: "11011110", "10101101", "10111110", "11101111"
|
||||||
|
* metablock_header_easy: 3, 1
|
||||||
|
* command_easy: 0, "abc", 0
|
||||||
|
*/
|
||||||
|
compressed,
|
||||||
|
true,
|
||||||
|
times(512, "left")
|
||||||
|
+ "abc"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSimplePrefix() {
|
public void testSimplePrefix() {
|
||||||
byte[] compressed = {
|
byte[] compressed = {
|
||||||
@ -2712,9 +2748,9 @@ public class SynthTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DISABLED: Java decoder does not tolerate extra input after the brotli stream.
|
|
||||||
@Test
|
@Test
|
||||||
public void testSimplePrefixPlusExtraData() {
|
public void testSimplePrefixPlusExtraData() {
|
||||||
|
assumeTrue(false);
|
||||||
byte[] compressed = {
|
byte[] compressed = {
|
||||||
(byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,
|
(byte) 0x1b, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0xa0, (byte) 0xc3, (byte) 0xc4,
|
||||||
(byte) 0xc6, (byte) 0xc8, (byte) 0x02, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,
|
(byte) 0xc6, (byte) 0xc8, (byte) 0x02, (byte) 0x00, (byte) 0x70, (byte) 0xb0, (byte) 0x65,
|
||||||
@ -2722,12 +2758,23 @@ public class SynthTest {
|
|||||||
(byte) 0x51, (byte) 0xa0, (byte) 0x1d, (byte) 0x55, (byte) 0xaa
|
(byte) 0x51, (byte) 0xa0, (byte) 0x1d, (byte) 0x55, (byte) 0xaa
|
||||||
};
|
};
|
||||||
checkSynth(
|
checkSynth(
|
||||||
|
/*
|
||||||
|
* main_header
|
||||||
|
* metablock_header_begin: 1, 0, 4, 0
|
||||||
|
* metablock_header_trivial_context
|
||||||
|
* huffman_simple: 1,4,256, 97,98,99,100 // ASCII codes for a, b, c, d
|
||||||
|
* huffman_fixed: 704
|
||||||
|
* huffman_fixed: 64
|
||||||
|
* command_inscopy_easy: 4, 0
|
||||||
|
* command_literal_bits: 0, 10, 110, 111 // a, b, c, d
|
||||||
|
* byte_boundary
|
||||||
|
* bits: "01010101", "10101010"
|
||||||
|
*/
|
||||||
compressed,
|
compressed,
|
||||||
true,
|
true,
|
||||||
"abcd"
|
"abcd"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testStressReadDistanceExtraBits() {
|
public void testStressReadDistanceExtraBits() {
|
||||||
|
@ -1988,6 +1988,37 @@ testOneInsert() {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testPeculiarWrap() {
|
||||||
|
const compressed = [
|
||||||
|
0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,
|
||||||
|
0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,
|
||||||
|
0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c
|
||||||
|
];
|
||||||
|
checkSynth(
|
||||||
|
/*
|
||||||
|
* main_header: 10
|
||||||
|
* // See ZeroCostCommand
|
||||||
|
* metablock_header_begin: 0, 0, 2048, 0
|
||||||
|
* metablock_header_trivial_context
|
||||||
|
* huffman_simple: 0,1,256, 42
|
||||||
|
* huffman_simple: 0,1,704, 130
|
||||||
|
* huffman_simple: 0,1,64, 0
|
||||||
|
* // Metadata block; at least 8 bytes long
|
||||||
|
* bits: "0", "11", "0", "01", "00000111"
|
||||||
|
* byte_boundary
|
||||||
|
* bits: "11001010", "11111110", "10111010", "10111110"
|
||||||
|
* bits: "11011110", "10101101", "10111110", "11101111"
|
||||||
|
* metablock_header_easy: 3, 1
|
||||||
|
* command_easy: 0, "abc", 0
|
||||||
|
*/
|
||||||
|
compressed,
|
||||||
|
true,
|
||||||
|
times(512, 'left')
|
||||||
|
+ 'abc'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
testSimplePrefix() {
|
testSimplePrefix() {
|
||||||
const compressed = [
|
const compressed = [
|
||||||
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
||||||
@ -2053,8 +2084,7 @@ testSimplePrefixOutOfRangeSymbols() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
testSimplePrefixPlusExtraData() {
|
testSimplePrefixPlusExtraData() {
|
||||||
// SKIP: JS decoder does not tolerate extra input after the brotli stream.
|
if (pending) pending(); else return;
|
||||||
if ({}.toString() == {}) return; // same as 'if (true) return'
|
|
||||||
const compressed = [
|
const compressed = [
|
||||||
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
||||||
0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
|
0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
|
||||||
|
@ -1978,6 +1978,37 @@ testOneInsert() {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testPeculiarWrap() {
|
||||||
|
const compressed = [
|
||||||
|
0x21, 0xfc, 0x1f, 0x00, 0x00, 0xa1, 0x12, 0x82, 0x04, 0x60, 0x1d, 0x00,
|
||||||
|
0xca, 0xfe, 0xba, 0xbe, 0xde, 0xad, 0xbe, 0xef, 0x21, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0, 0x65, 0x12, 0x03,
|
||||||
|
0x24, 0x00, 0x00, 0xee, 0xb4, 0x91, 0x61, 0x68, 0x64, 0x0c
|
||||||
|
];
|
||||||
|
checkSynth(
|
||||||
|
/*
|
||||||
|
* main_header: 10
|
||||||
|
* // See ZeroCostCommand
|
||||||
|
* metablock_header_begin: 0, 0, 2048, 0
|
||||||
|
* metablock_header_trivial_context
|
||||||
|
* huffman_simple: 0,1,256, 42
|
||||||
|
* huffman_simple: 0,1,704, 130
|
||||||
|
* huffman_simple: 0,1,64, 0
|
||||||
|
* // Metadata block; at least 8 bytes long
|
||||||
|
* bits: "0", "11", "0", "01", "00000111"
|
||||||
|
* byte_boundary
|
||||||
|
* bits: "11001010", "11111110", "10111010", "10111110"
|
||||||
|
* bits: "11011110", "10101101", "10111110", "11101111"
|
||||||
|
* metablock_header_easy: 3, 1
|
||||||
|
* command_easy: 0, "abc", 0
|
||||||
|
*/
|
||||||
|
compressed,
|
||||||
|
true,
|
||||||
|
times(512, 'left')
|
||||||
|
+ 'abc'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
testSimplePrefix() {
|
testSimplePrefix() {
|
||||||
const compressed = [
|
const compressed = [
|
||||||
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
||||||
@ -2043,8 +2074,7 @@ testSimplePrefixOutOfRangeSymbols() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
testSimplePrefixPlusExtraData() {
|
testSimplePrefixPlusExtraData() {
|
||||||
// SKIP: JS decoder does not tolerate extra input after the brotli stream.
|
if (pending) pending(); else return;
|
||||||
if (2 * 2 === 4) return;
|
|
||||||
const compressed = [
|
const compressed = [
|
||||||
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
0x1b, 0x03, 0x00, 0x00, 0xa0, 0xc3, 0xc4, 0xc6, 0xc8, 0x02, 0x00, 0x70,
|
||||||
0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
|
0xb0, 0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x51, 0xa0, 0x1d,
|
||||||
|
@ -3,6 +3,8 @@ goog.require('goog.testing.asserts');
|
|||||||
goog.require('goog.testing.jsunit');
|
goog.require('goog.testing.jsunit');
|
||||||
|
|
||||||
let test_case_;
|
let test_case_;
|
||||||
|
/** @type{?function(): void} */
|
||||||
|
let pending = null;
|
||||||
|
|
||||||
function describe(caseName, callback) {
|
function describe(caseName, callback) {
|
||||||
test_case_ = new goog.testing.TestCase(caseName);
|
test_case_ = new goog.testing.TestCase(caseName);
|
||||||
|
Loading…
Reference in New Issue
Block a user