package net.gcdc.asn1.test; import static org.junit.Assert.assertEquals; import java.util.logging.Level; import net.gcdc.asn1.datatypes.Asn1Optional; import net.gcdc.asn1.datatypes.CharacterRestriction; import net.gcdc.asn1.datatypes.FieldOrder; import net.gcdc.asn1.datatypes.RestrictedString; import net.gcdc.asn1.datatypes.Sequence; import net.gcdc.asn1.uper.UperEncoder; import org.junit.Test; public class UperEncodeStringLengthTest { /** * Example from the Standard on UPER.
        World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
        BEGIN
        TestRecord ::= [APPLICATION 0] IMPLICIT SEQUENCE {
            testString1 UTF8String OPTIONAL
         }                                   
        END
        
        value TestRecord ::= {
  			testString1 "A"
		}

    
*/ @Sequence public static class TestRecord { @FieldOrder(order = 0) @RestrictedString(CharacterRestriction.UTF8String) @Asn1Optional() String valueUtf8; public TestRecord() { } public TestRecord(String utf8) { this.valueUtf8 = utf8; } } @Test public void testEncode1() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("A"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("80A080",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode63() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("123456789012345678901234567890123456789012345678901234567890123"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("9F9899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C9818991980",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode64() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("1234567890123456789012345678901234567890123456789012345678901234"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("A01899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A00",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode65() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("12345678901234567890123456789012345678901234567890123456789012345"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("A09899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A80",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode126() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("BF1899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C9818" + "99199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C98189919" + "9A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A" + "9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B00",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode127() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("BF9899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C9818" + "99199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C98189919" + "9A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A" + "9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B" + "80",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode128() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("C0401899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C98" + "1899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899" + "199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A" + "1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B" + "1B9C00",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } @Test public void testEncode129() throws IllegalArgumentException, IllegalAccessException { TestRecord record = new TestRecord("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"); byte[] encoded = UperEncoder.encode(record); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); assertEquals("C0409899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C98" + "1899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899" + "199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A" + "1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B1B9C1C981899199A1A9B" + "1B9C1C80",hex); TestRecord result = UperEncoder.decode(encoded, TestRecord.class); assertEquals(record.valueUtf8,result.valueUtf8); } }