aboutsummaryrefslogtreecommitdiffstats
path: root/lib/asn1/test
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2013-08-30 07:51:02 +0200
committerBjörn Gustavsson <[email protected]>2013-08-30 10:13:17 +0200
commita5c7d1c0ecd8a8b78ae162aeb735501ef49e014b (patch)
tree2f6d38b3fc049f3ee36c59b6c7cbec571c1ec647 /lib/asn1/test
parent9096522efd263f719ab9bc56670406a73ac1d818 (diff)
downloadotp-a5c7d1c0ecd8a8b78ae162aeb735501ef49e014b.tar.gz
otp-a5c7d1c0ecd8a8b78ae162aeb735501ef49e014b.tar.bz2
otp-a5c7d1c0ecd8a8b78ae162aeb735501ef49e014b.zip
BER: Handle multiple optional SEQUENCE fields with table constraints
Diffstat (limited to 'lib/asn1/test')
-rw-r--r--lib/asn1/test/asn1_SUITE_data/InfObj.asn23
-rw-r--r--lib/asn1/test/testInfObj.erl14
2 files changed, 35 insertions, 2 deletions
diff --git a/lib/asn1/test/asn1_SUITE_data/InfObj.asn b/lib/asn1/test/asn1_SUITE_data/InfObj.asn
index ed19c40836..880e81c3b1 100644
--- a/lib/asn1/test/asn1_SUITE_data/InfObj.asn
+++ b/lib/asn1/test/asn1_SUITE_data/InfObj.asn
@@ -232,6 +232,29 @@ DefaultInSeq ::= SEQUENCE {
DEFAULT BOOLEAN:TRUE
}
+-- Test more than one optional typefield table constraint in a SEQUENCE.
+
+MULTIPLE-OPTIONALS ::= CLASS {
+ &id INTEGER UNIQUE,
+ &T1,
+ &T2,
+ &T3
+}
+
+multiple-optionals-1 MULTIPLE-OPTIONALS ::=
+ {&id 1, &T1 INTEGER, &T2 BOOLEAN, &T3 OCTET STRING}
+
+Multiple-Optionals-Set MULTIPLE-OPTIONALS ::= {
+ multiple-optionals-1
+}
+
+Multiple-Optionals ::= SEQUENCE {
+ id MULTIPLE-OPTIONALS.&id ({Multiple-Optionals-Set}),
+ t1 [0] MULTIPLE-OPTIONALS.&T1 ({Multiple-Optionals-Set}{@id}) OPTIONAL,
+ t2 [1] MULTIPLE-OPTIONALS.&T2 ({Multiple-Optionals-Set}{@id}) OPTIONAL,
+ t3 [2] MULTIPLE-OPTIONALS.&T3 ({Multiple-Optionals-Set}{@id}) OPTIONAL
+}
+
END
diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl
index 7241f7b380..76f216fdad 100644
--- a/lib/asn1/test/testInfObj.erl
+++ b/lib/asn1/test/testInfObj.erl
@@ -107,8 +107,18 @@ main(_Erule) ->
roundtrip('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,false}),
roundtrip('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,true}),
{'DefaultInSeq',3,true} =
- enc_dec('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,asn1_DEFAULT}).
-
+ enc_dec('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,asn1_DEFAULT}),
+
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,42,true,"abc"}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,asn1_NOVALUE,true,"abc"}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,42,asn1_NOVALUE,"abc"}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,42,true,asn1_NOVALUE}),
+ roundtrip('InfObj', 'Multiple-Optionals',
+ {'Multiple-Optionals',1,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}).
roundtrip(M, T, V) ->
{ok,Enc} = M:encode(T, V),