package model.asn1.parsing; import model.asn1.Tag; import model.asn1.TagClass; import model.asn1.exceptions.ParseException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class BytesReaderTest { private BytesReader target; @BeforeEach void setup() { target = new BytesReader(new Byte[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); } @Test void testConstructor() { assertEquals(0, target.getIndex()); assertEquals(10, target.getRawInput().length); assertArrayEquals(new Byte[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, target.getRawInput()); } @Test void testBytesRemaining() { assertEquals(10, target.bytesRemaining()); target.read(5, true); assertEquals(5, target.bytesRemaining()); } @Test void testRead() { assertEquals(10, target.bytesRemaining()); assertEquals(0, target.getIndex()); assertArrayEquals(new Byte[]{ 1, 2 }, target.read(2, true)); assertEquals(8, target.bytesRemaining()); assertEquals(2, target.getIndex()); assertArrayEquals(new Byte[]{ 3 }, target.read(1, false)); assertEquals(8, target.bytesRemaining()); assertEquals(2, target.getIndex()); assertArrayEquals(new Byte[]{ 3, 4, 5, 6, 7 }, target.read(5, true)); assertEquals(3, target.bytesRemaining()); assertEquals(7, target.getIndex()); assertArrayEquals(new Byte[]{ 8, 9, 10 }, target.read(3, false)); assertEquals(3, target.bytesRemaining()); assertEquals(7, target.getIndex()); assertArrayEquals(new Byte[]{ 8, 9, 10 }, target.read(3, true)); assertEquals(0, target.bytesRemaining()); assertEquals(10, target.getIndex()); } @Test void testRequire() throws Exception { // TODO: Exception testing assertEquals(10, target.bytesRemaining()); assertEquals(0, target.getIndex()); assertArrayEquals(new Byte[]{ 1, 2 }, target.require(2, true)); assertArrayEquals(new Byte[]{ 3, 4, 5, 6, 7, 8, 9 }, target.require(7, true)); assertArrayEquals(new Byte[]{ 10 }, target.require(1, false)); assertThrows(ParseException.class, () -> target.require(2, true)); assertArrayEquals(new Byte[]{ 10 }, target.require(1, true)); assertThrows(ParseException.class, () -> target.require(1, true)); } @Test void testValidateSize() throws Exception { // TODO: Exception testing assertEquals(10, target.bytesRemaining()); assertEquals(0, target.getIndex()); assertArrayEquals(new Byte[]{ 1, 2 }, target.require(2, true)); assertArrayEquals(new Byte[]{ 3, 4, 5, 6, 7, 8, 9 }, target.require(7, true)); assertArrayEquals(new Byte[]{ 10 }, target.require(1, false)); target.validateSize(1); assertThrows(ParseException.class, () -> target.validateSize(2)); assertArrayEquals(new Byte[]{ 10 }, target.require(1, true)); assertThrows(ParseException.class, () -> target.validateSize(1)); } @Test void testDetectTag() throws Exception { final BytesReader reader = new BytesReader(new Byte[]{ -95, 0 }); assertTrue(reader.detectTag(new Tag(TagClass.CONTEXT_SPECIFIC, true, 1))); assertFalse(reader.detectTag(new Tag(TagClass.CONTEXT_SPECIFIC, true, 0))); assertFalse(reader.detectTag(new Tag(TagClass.UNIVERSAL, true, 0))); assertFalse(reader.detectTag(new Tag(TagClass.CONTEXT_SPECIFIC, false, 0))); } @Test void testGetTag() throws Exception { BytesReader reader = new BytesReader(new Byte[]{ -95, 0 }); assertEquals(1, reader.getTag(false).getNumber()); reader = new BytesReader(new Byte[]{ -96, 0, -95, 0 }); assertEquals(1, reader.getTag(true).getNumber()); } }