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 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)); } }