1+ package com .igormaznitsa .jbbp ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+ import static org .junit .jupiter .api .Assertions .assertSame ;
5+ import static org .junit .jupiter .api .Assertions .assertThrows ;
6+
7+ import com .igormaznitsa .jbbp .model .JBBPFieldArrayByte ;
8+ import java .io .ByteArrayInputStream ;
9+ import java .util .concurrent .atomic .AtomicInteger ;
10+ import org .junit .jupiter .api .Test ;
11+
12+ class JBBPParserExpressionArraySizeControllerTest {
13+
14+ @ Test
15+ public void testGetterAndSetter () {
16+ final JBBPParserExpressionArraySizeController controller =
17+ (parser , expressionEvaluator , fieldInfo , calculatedArraySize ) -> 0 ;
18+ final JBBPParser parser = JBBPParser .prepare ("ubyte len; byte [len*2] a;" )
19+ .setExpressionArraySizeController (controller );
20+ assertSame (controller , parser .getExpressionArraySizeController ());
21+ }
22+
23+ @ Test
24+ public void testNoChangeSize () throws Exception {
25+ final AtomicInteger calls = new AtomicInteger ();
26+ final JBBPParser parser =
27+ JBBPParser .prepare ("ubyte len; byte [len*2] a;" ).setExpressionArraySizeController (
28+ (parser1 , expressionEvaluator , fieldInfo , calculatedArraySize ) -> {
29+ calls .incrementAndGet ();
30+ assertEquals ("a" , fieldInfo .getFieldName ());
31+ assertEquals (4 , calculatedArraySize );
32+ return calculatedArraySize ;
33+ });
34+ parser .parse (new ByteArrayInputStream (new byte [] {2 , 1 , 2 , 3 , 4 }));
35+ assertEquals (1 , calls .get ());
36+ }
37+
38+ @ Test
39+ public void testThrowException () {
40+ final JBBPParser parser =
41+ JBBPParser .prepare ("ubyte len; byte [len*2] a;" ).setExpressionArraySizeController (
42+ (parser1 , expressionEvaluator , fieldInfo , calculatedArraySize ) -> {
43+ assertEquals ("a" , fieldInfo .getFieldName ());
44+ if (calculatedArraySize > 2 ) {
45+ throw new IllegalArgumentException ();
46+ }
47+ return calculatedArraySize ;
48+ });
49+ assertThrows (IllegalArgumentException .class ,
50+ () -> parser .parse (new ByteArrayInputStream (new byte [] {2 , 1 , 2 , 3 , 4 })));
51+ }
52+
53+ @ Test
54+ public void testChangeSize () throws Exception {
55+ final JBBPParser parser =
56+ JBBPParser .prepare ("ubyte len; byte [len*2] a;" ).setExpressionArraySizeController (
57+ (parser1 , expressionEvaluator , fieldInfo , calculatedArraySize ) -> {
58+ assertEquals ("a" , fieldInfo .getFieldName ());
59+ return calculatedArraySize - 1 ;
60+ });
61+ assertEquals (3 , parser .parse (new ByteArrayInputStream (new byte [] {2 , 1 , 2 , 3 , 4 }))
62+ .findFieldForNameAndType ("a" ,
63+ JBBPFieldArrayByte .class ).size ());
64+ }
65+ }
0 commit comments