package model.asn1; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.*; public class UTF8StringTest { private static final String[] UTF8_CHARS = new String[] { new String(new byte[]{ -16, -97, -113, -77, -17, -72, -113, -30, -128, -115, -30, -102, -89, -17, -72, -113 }, StandardCharsets.UTF_8), new String(new byte[]{ -16, -97, -112, -79 }, StandardCharsets.UTF_8) }; @Test void testAcceptedString() throws ParseException { final ASN1String string = new UTF8String(PrintableString.TAG, null, "0123456789abCdExYz '()+,-./:=?*@" + String.join("", UTF8_CHARS)); assertEquals("0123456789abCdExYz '()+,-./:=?*@" + String.join("", UTF8_CHARS), string.getString()); } @Test void testEncode() throws ParseException { assertArrayEquals( new Byte[]{ -16, -97, -113, -77, -17, -72, -113, -30, -128, -115, -30, -102, -89, -17, -72, -113, -16, -97, -112, -79 }, new UTF8String(UTF8String.TAG, null, UTF8_CHARS[0] + UTF8_CHARS[1]) .encodeValueDER()); assertArrayEquals( new Byte[] { 0x0C, 6, // Tag - Length 0x68, 0x69, // Value -16, -97, -112, -79 }, new UTF8String(UTF8String.TAG, null, "hi" + UTF8_CHARS[1]).encodeDER()); } @Test void testParse() throws ParseException { assertEquals(UTF8_CHARS[0], new UTF8String(new BytesReader(new Byte[]{ 0x0C, 16, -16, -97, -113, -77, -17, -72, -113, -30, -128, -115, -30, -102, -89, -17, -72, -113 }), false).getString()); assertEquals("", new UTF8String(new BytesReader(new Byte[]{ 0x0C, 0, '1', '2', '3' }), false) .getString()); } @Test void testParseFail() { // EOF assertThrows(ParseException.class, () -> new UTF8String(new BytesReader(new Byte[]{ 0x0C, 1 }), false)); } }