summaryrefslogtreecommitdiffstats
path: root/src/test/java/org/uic/barcode/asn1/test/UperEncodeEnumTest.java
blob: d1d2d8281ee934980791783b89be86f4d392c60f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package org.uic.barcode.asn1.test;

import static org.junit.Assert.assertEquals;

import java.util.logging.Level;

import org.junit.Test;
import org.uic.barcode.asn1.datatypes.Asn1Default;
import org.uic.barcode.asn1.datatypes.Asn1Optional;
import org.uic.barcode.asn1.datatypes.FieldOrder;
import org.uic.barcode.asn1.datatypes.Sequence;
import org.uic.barcode.asn1.uper.UperEncoder;


public class UperEncodeEnumTest {

    /**
     * Example from the Standard on UPER.
     <pre>
     TestRecord ::= [APPLICATION 0] IMPLICIT SEQUENCE {
            value EnumType DEFAULT value2,
     }

     EnumType			::= ENUMERATED {	
		value1 (0),
		value2 (1)
		,...
	 }		
     </pre>
     */
    @Sequence
    public static class TestRecord {
    	
    	@FieldOrder(order = 0)
    	@Asn1Default(value="value2")
    	@Asn1Optional EnumType value = EnumType.value2;
    	
    	
        public TestRecord() {}

        public TestRecord(EnumType value) {
        	this.value = value;
        }
    }
    
    public enum EnumType {
		value1("value1"),
		value2("value2"),
		value3("value3"),
		value4("value4"),
		value5("value5"),
		value6("value6"),
		value7("value7"),
		value8("value8"),
		value9("value9"),
		value10("value10"),
		value11("value11"),
		value12("value12"),
		value13("value13"),
		value14("value14"),
		value15("value15"),
		value16("value16"),
		value17("value17"),
		value18("value18"),
		value19("value19"),
		value20("value20"),
		value21("value21"),
		value22("value22");
		
		
		public String text;

		EnumType(String text) {
			this.text = text;
		}
		
		public String toString(){
			return text;
		}		
    }



    @Test public void testNonDefaultValue() throws IllegalArgumentException, IllegalAccessException {

        TestRecord record = new TestRecord(EnumType.value4);
        byte[] encoded = UperEncoder.encode(record);
        String hex = UperEncoder.hexStringFromBytes(encoded);
        UperEncoder.logger.log(Level.FINEST,String.format("Enum value4: data hex: %s", hex));
        assertEquals("8C", hex);
    }
    
    @Test public void testDefaultValue() throws IllegalArgumentException, IllegalAccessException {

        TestRecord record = new TestRecord(EnumType.value2);
        byte[] encoded = UperEncoder.encode(record);
        String hex = UperEncoder.hexStringFromBytes(encoded);
        UperEncoder.logger.log(Level.FINEST,String.format("Enum value2: data hex: %s", hex));
        assertEquals("00", UperEncoder.hexStringFromBytes(encoded));
    }    
    
    @Test public void testDecodeNonDefaultValue() throws IllegalArgumentException, IllegalAccessException {

        TestRecord record = new TestRecord(EnumType.value4);
        byte[] encoded = UperEncoder.encode(record);
        String hex = UperEncoder.hexStringFromBytes(encoded);
        UperEncoder.logger.log(Level.FINEST,String.format("Enum value4: data hex: %s", hex));
        assertEquals("8C", hex);
        
        TestRecord result = UperEncoder.decode(encoded, TestRecord.class);
        assertEquals(result.value,EnumType.value4);
    }
    
    @Test public void testDecodeDefaultValue() throws IllegalArgumentException, IllegalAccessException {

        TestRecord record = new TestRecord(EnumType.value2);
        byte[] encoded = UperEncoder.encode(record);
        String hex = UperEncoder.hexStringFromBytes(encoded);
        UperEncoder.logger.log(Level.FINEST,String.format("Enum value2: data hex: %s", hex));
        assertEquals("00", UperEncoder.hexStringFromBytes(encoded));
        
        TestRecord result = UperEncoder.decode(encoded, TestRecord.class);
        assertEquals(result.value,EnumType.value2);
    }     

}