summaryrefslogtreecommitdiffstats
path: root/src/net/gcdc/asn1/test/UperEncodeEnumExtensionTest.java
blob: c0988399dbf413621e382621ddfe97b377d4f0a6 (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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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.HasExtensionMarker;
import net.gcdc.asn1.datatypes.IsExtension;
import net.gcdc.asn1.datatypes.Sequence;

import net.gcdc.asn1.uper.UperEncoder;

import org.junit.Test;


public class UperEncodeEnumExtensionTest {

    /*** Example from the Standard on UPER.
    <pre>
    World-Schema DEFINITIONS AUTOMATIC TAGS ::= 
    BEGIN
    TestRecord ::= [APPLICATION 0] IMPLICIT SEQUENCE {
            value EnumType DEFAULT value2
    }

    EnumType ::= ENUMERATED {	
		value1 (0),
		value2 (1)
		,...
    }	                                  
    END
    </pre>	
     */
    @Sequence
    public static class TestRecord {
    	
    	@Asn1Optional EnumType value = EnumType.value1;
        public TestRecord() {}
        public void setValue(EnumType value) {
        	this.value = value;
        }
    }
    
    
    /*** Example from the Standard on UPER.
    TestRecord ::= [APPLICATION 0] IMPLICIT SEQUENCE {
           value EnumType DEFAULT value2,
    }

    EnumType			::= ENUMERATED {	
		value1 (0),
		value2 (1)
		,...
		value3 (2)
	 }		
    */
   @Sequence
   public static class TestRecordExtended {
   	
   	@Asn1Optional EnumTypeExtended value = EnumTypeExtended.value3;
    
   	public TestRecordExtended() {}
       
    public void setValue(EnumTypeExtended value) {
    	this.value = value;
    }
       
       
   }
   
   @HasExtensionMarker
   public enum EnumType {
		value1("value1"),
		value2("value2");
			
		public String text;

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

    
   @HasExtensionMarker
    public enum EnumTypeExtended {
		value1("value1"),
		value2("value2"),
		
		@IsExtension
		value3("value3");

		public String text;

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



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

        TestRecordExtended record = new TestRecordExtended();
        record.setValue(EnumTypeExtended.value3);
        byte[] encoded = UperEncoder.encode(record);
        String hex = UperEncoder.hexStringFromBytes(encoded);
        UperEncoder.logger.log(Level.FINEST,String.format("Enum value3: data hex: %s", hex));
        assertEquals("C000", hex);
    }
    
    @Test public void testExtensionDecoding() throws IllegalArgumentException, IllegalAccessException {

        TestRecordExtended record = new TestRecordExtended();
        record.setValue(EnumTypeExtended.value3);
        byte[] encoded = UperEncoder.encode(record);
        String hex = UperEncoder.hexStringFromBytes(encoded);
        UperEncoder.logger.log(Level.FINEST,String.format("Enum value3: data hex: %s", hex));
        assertEquals("C000", hex);
        
        TestRecordExtended result = UperEncoder.decode(encoded, TestRecordExtended.class);
        assertEquals(result.value,EnumTypeExtended.value3);
    }
 
    @Test public void testUnknownExtensionDecoding() throws IllegalArgumentException, IllegalAccessException {

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