aboutsummaryrefslogtreecommitdiffstats
path: root/lib/asn1
diff options
context:
space:
mode:
Diffstat (limited to 'lib/asn1')
-rw-r--r--lib/asn1/doc/src/asn1ct.xml9
-rw-r--r--lib/asn1/doc/src/notes.xml60
-rw-r--r--lib/asn1/src/Makefile4
-rw-r--r--lib/asn1/src/asn1ct_check.erl151
-rw-r--r--lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl3
-rw-r--r--lib/asn1/src/asn1ct_constructed_per.erl71
-rw-r--r--lib/asn1/src/asn1ct_gen.erl203
-rw-r--r--lib/asn1/src/asn1ct_imm.erl50
-rw-r--r--lib/asn1/src/asn1ct_parser2.erl8
-rw-r--r--lib/asn1/src/asn1ct_value.erl17
-rw-r--r--lib/asn1/src/asn1rtt_check.erl91
-rw-r--r--lib/asn1/src/asn1rtt_per_common.erl41
-rw-r--r--lib/asn1/src/prepare_templates.erl72
-rw-r--r--lib/asn1/test/Makefile13
-rw-r--r--lib/asn1/test/asn1_SUITE.erl408
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Constraints.py48
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Default.asn3
-rw-r--r--lib/asn1/test/asn1_SUITE_data/PrimStrings.asn18
-rw-r--r--lib/asn1/test/asn1_SUITE_data/UPERDefault.asn18
-rw-r--r--lib/asn1/test/asn1_test_lib.erl179
-rw-r--r--lib/asn1/test/asn1_wrapper.erl49
-rw-r--r--lib/asn1/test/ber_decode_error.erl10
-rw-r--r--lib/asn1/test/choice_extension.erl37
-rw-r--r--lib/asn1/test/h323test.erl86
-rw-r--r--lib/asn1/test/pem_performance.erl37
-rw-r--r--lib/asn1/test/testChoExtension.erl9
-rw-r--r--lib/asn1/test/testChoExternal.erl18
-rw-r--r--lib/asn1/test/testChoOptional.erl99
-rw-r--r--lib/asn1/test/testChoOptionalImplicitTag.erl101
-rw-r--r--lib/asn1/test/testChoPrim.erl106
-rw-r--r--lib/asn1/test/testChoRecursive.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefCho.erl50
-rw-r--r--lib/asn1/test/testChoTypeRefPrim.erl72
-rw-r--r--lib/asn1/test/testChoTypeRefSeq.erl91
-rw-r--r--lib/asn1/test/testChoTypeRefSet.erl92
-rw-r--r--lib/asn1/test/testChoiceIndefinite.erl4
-rw-r--r--lib/asn1/test/testConstraints.erl99
-rw-r--r--lib/asn1/test/testContextSwitchingTypes.erl42
-rw-r--r--lib/asn1/test/testDER.erl34
-rw-r--r--lib/asn1/test/testDeepTConstr.erl4
-rw-r--r--lib/asn1/test/testDef.erl118
-rw-r--r--lib/asn1/test/testDoubleEllipses.erl84
-rw-r--r--lib/asn1/test/testEnumExt.erl12
-rw-r--r--lib/asn1/test/testFragmented.erl4
-rw-r--r--lib/asn1/test/testINSTANCE_OF.erl43
-rw-r--r--lib/asn1/test/testInfObj.erl4
-rw-r--r--lib/asn1/test/testInfObjectClass.erl24
-rw-r--r--lib/asn1/test/testMegaco.erl161
-rw-r--r--lib/asn1/test/testMergeCompile.erl114
-rw-r--r--lib/asn1/test/testNBAPsystem.erl25
-rw-r--r--lib/asn1/test/testOpenTypeImplicitTag.erl19
-rw-r--r--lib/asn1/test/testOpt.erl111
-rw-r--r--lib/asn1/test/testParamBasic.erl64
-rw-r--r--lib/asn1/test/testParameterizedInfObj.erl69
-rw-r--r--lib/asn1/test/testPrim.erl132
-rw-r--r--lib/asn1/test/testPrimExternal.erl105
-rw-r--r--lib/asn1/test/testPrimStrings.erl49
-rw-r--r--lib/asn1/test/testSelectionTypes.erl15
-rw-r--r--lib/asn1/test/testSeq2738.erl19
-rw-r--r--lib/asn1/test/testSeqDefault.erl198
-rw-r--r--lib/asn1/test/testSeqExtension.erl8
-rw-r--r--lib/asn1/test/testSeqExternal.erl131
-rw-r--r--lib/asn1/test/testSeqIndefinite.erl48
-rw-r--r--lib/asn1/test/testSeqOf.erl12
-rw-r--r--lib/asn1/test/testSeqOfCho.erl150
-rw-r--r--lib/asn1/test/testSeqOfExternal.erl188
-rw-r--r--lib/asn1/test/testSeqOfIndefinite.erl78
-rw-r--r--lib/asn1/test/testSeqOfTag.erl185
-rw-r--r--lib/asn1/test/testSeqOptional.erl199
-rw-r--r--lib/asn1/test/testSeqPrim.erl63
-rw-r--r--lib/asn1/test/testSeqSetDefaultVal.erl609
-rw-r--r--lib/asn1/test/testSeqSetIndefinite.erl52
-rw-r--r--lib/asn1/test/testSeqTag.erl86
-rw-r--r--lib/asn1/test/testSeqTypeRefCho.erl21
-rw-r--r--lib/asn1/test/testSeqTypeRefPrim.erl42
-rw-r--r--lib/asn1/test/testSeqTypeRefSeq.erl166
-rw-r--r--lib/asn1/test/testSeqTypeRefSet.erl45
-rw-r--r--lib/asn1/test/testSetDefault.erl76
-rw-r--r--lib/asn1/test/testSetExtension.erl85
-rw-r--r--lib/asn1/test/testSetExternal.erl119
-rw-r--r--lib/asn1/test/testSetIndefinite.erl41
-rw-r--r--lib/asn1/test/testSetOf.erl282
-rw-r--r--lib/asn1/test/testSetOfCho.erl150
-rw-r--r--lib/asn1/test/testSetOfExternal.erl151
-rw-r--r--lib/asn1/test/testSetOfTag.erl185
-rw-r--r--lib/asn1/test/testSetOptional.erl4
-rw-r--r--lib/asn1/test/testSetPrim.erl66
-rw-r--r--lib/asn1/test/testSetTag.erl87
-rw-r--r--lib/asn1/test/testSetTypeRefCho.erl21
-rw-r--r--lib/asn1/test/testSetTypeRefPrim.erl30
-rw-r--r--lib/asn1/test/testSetTypeRefSeq.erl20
-rw-r--r--lib/asn1/test/testSetTypeRefSet.erl163
-rw-r--r--lib/asn1/test/testTCAP.erl52
-rw-r--r--lib/asn1/test/testTimer.erl21
-rw-r--r--lib/asn1/test/testTypeValueNotation.erl22
-rw-r--r--lib/asn1/test/testWSParamClass.erl5
-rw-r--r--lib/asn1/test/testX420.erl24
-rw-r--r--lib/asn1/test/test_driver_load.erl45
-rw-r--r--lib/asn1/test/test_modified_x420.erl5
-rw-r--r--lib/asn1/test/test_partial_incomplete_decode.erl116
-rw-r--r--lib/asn1/test/test_selective_decode.erl45
-rw-r--r--lib/asn1/test/test_special_decode_performance.erl6
-rw-r--r--lib/asn1/test/test_undecoded_rest.erl52
-rw-r--r--lib/asn1/test/test_x691.erl183
-rw-r--r--lib/asn1/vsn.mk2
105 files changed, 2828 insertions, 5184 deletions
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index 23d122f69a..fcd77e9dc6 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -66,7 +66,7 @@
<v>Option = ber | per | uper | der | compact_bit_string |
legacy_bit_string |
noobj | {n2n, EnumTypeName} |{outdir, Dir} | {i, IncludeDir} |
- asn1config | undec_rest |
+ asn1config | undec_rest | no_ok_wrapper |
{macro_name_prefix, Prefix} | {record_name_prefix, Prefix} | verbose | warnings_as_errors</v>
<v>OldOption = ber | per</v>
<v>Reason = term()</v>
@@ -238,6 +238,13 @@ File3.asn </pre>
list or a binary. Earlier versions of the compiler ignored
those following bytes.</p>
</item>
+ <tag><c>no_ok_wrapper</c></tag>
+ <item>
+ <p>If this option is given, the generated <c>encode/2</c>
+ and <c>decode/2</c> functions will not wrap a successful
+ return value in an <c>{ok,...}</c> tuple. If any error
+ occurs, there will be an exception.</p>
+ </item>
<tag><c>{macro_name_prefix, Prefix}</c></tag>
<item>
<p>All macro names generated by the compiler are prefixed with
diff --git a/lib/asn1/doc/src/notes.xml b/lib/asn1/doc/src/notes.xml
index e4d9edd709..a00fc3de36 100644
--- a/lib/asn1/doc/src/notes.xml
+++ b/lib/asn1/doc/src/notes.xml
@@ -31,6 +31,66 @@
<p>This document describes the changes made to the asn1 application.</p>
+<section><title>Asn1 2.0.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The default value for a <c>BIT STRING</c> would not
+ always be recognized, causing the encoding to be
+ incorrect for the DER/PER/UPER encodings.</p>
+ <p>
+ Own Id: OTP-11319</p>
+ </item>
+ <item>
+ <p>
+ The <c>asn1</c> application would fail to build if the
+ <c>.erlang</c> file printed something to standard output.</p>
+ <p>
+ Own Id: OTP-11360</p>
+ </item>
+ <item>
+ <p>An union of integer ranges in an INTEGER constraint
+ could sometimes be interpreted as the intersection of the
+ range.</p>
+ <p>
+ Own Id: OTP-11411 Aux Id: seq12443 </p>
+ </item>
+ <item>
+ <p>
+ Extensible, multiple single value constraints (such as
+ <c>INTEGER (1|17, ...)</c>) would be incorrectly encoded.</p>
+ <p>
+ Own Id: OTP-11415</p>
+ </item>
+ <item>
+ <p>
+ The ASN.1 compiler would fail to compile a constraint
+ with values given for for the extension part (such as
+ <c>INTEGER (1..10, ..., 11..20)</c>).</p>
+ <p>
+ Own Id: OTP-11504</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The new option '<c>no_ok_wrapper</c>' generates
+ M:encode/2 and M:decode/2 functions that don't wrap the
+ return value in an {ok,...} tuple.</p>
+ <p>
+ Own Id: OTP-11314</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Asn1 2.0.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/lib/asn1/src/Makefile b/lib/asn1/src/Makefile
index 3f24e15c04..500f4a1358 100644
--- a/lib/asn1/src/Makefile
+++ b/lib/asn1/src/Makefile
@@ -135,7 +135,7 @@ $(EBIN)/asn1ct_func.$(EMULATOR): asn1ct_func.erl
asn1ct_eval_%.erl: asn1ct_eval_%.funcs
$(gen_verbose)erl -pa $(EBIN) -noshell -noinput \
- -run prepare_templates gen_asn1ct_eval $< >$@
+ -run prepare_templates gen_asn1ct_eval $<
$(APP_TARGET): $(APP_SRC) ../vsn.mk
$(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
@@ -180,7 +180,7 @@ RT_TEMPLATES_TARGET = $(RT_TEMPLATES:%=%.$(EMULATOR))
asn1ct_rtt.erl: prepare_templates.$(EMULATOR) $(RT_TEMPLATES_TARGET)
$(gen_verbose)erl -noshell -noinput -run prepare_templates gen_asn1ct_rtt \
- $(RT_TEMPLATES_TARGET) >asn1ct_rtt.erl
+ $(RT_TEMPLATES_TARGET)
prepare_templates.$(EMULATOR): prepare_templates.erl
$(V_ERLC) prepare_templates.erl
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl
index eddcda0018..0a13801e08 100644
--- a/lib/asn1/src/asn1ct_check.erl
+++ b/lib/asn1/src/asn1ct_check.erl
@@ -2534,89 +2534,54 @@ normalize_integer(S,Int=#'Externalvaluereference'{value=Name},Type) ->
normalize_integer(_,Int,_) ->
exit({'Unknown INTEGER value',Int}).
-normalize_bitstring(S,Value,Type)->
- %% There are four different Erlang formats of BIT STRING:
- %% 1 - a list of ones and zeros.
- %% 2 - a list of atoms.
- %% 3 - as an integer, for instance in hexadecimal form.
- %% 4 - as a tuple {Unused, Binary} where Unused is an integer
- %% and tells how many bits of Binary are unused.
- %%
- %% normalize_bitstring/3 transforms Value according to:
- %% A to 3,
- %% B to 1,
- %% C to 1 or 3
- %% D to 2,
- %% Value can be on format:
- %% A - {hstring, String}, where String is a hexadecimal string.
- %% B - {bstring, String}, where String is a string on bit format
- %% C - #'Externalvaluereference'{value=V}, where V is a defined value
- %% D - list of #'Externalvaluereference', where each value component
- %% is an identifier corresponing to NamedBits in Type.
- %% E - list of ones and zeros, if Value already is normalized.
+%% normalize_bitstring(S, Value, Type) -> bitstring()
+%% Convert a literal value for a BIT STRING to an Erlang bit string.
+%%
+normalize_bitstring(S, Value, Type)->
case Value of
{hstring,String} when is_list(String) ->
- hstring_to_int(String);
+ hstring_to_bitstring(String);
{bstring,String} when is_list(String) ->
- bstring_to_bitlist(String);
- Rec when is_record(Rec,'Externalvaluereference') ->
- get_normalized_value(S,Value,Type,
- fun normalize_bitstring/3,[]);
+ bstring_to_bitstring(String);
+ #'Externalvaluereference'{} ->
+ get_normalized_value(S, Value, Type,
+ fun normalize_bitstring/3, []);
RecList when is_list(RecList) ->
- case Type of
- NBL when is_list(NBL) ->
- F = fun(#'Externalvaluereference'{value=Name}) ->
- case lists:keysearch(Name,1,NBL) of
- {value,{Name,_}} ->
- Name;
- Other ->
- throw({error,Other})
- end;
- (I) when I =:= 1; I =:= 0 ->
- I;
- (Other) ->
- throw({error,Other})
- end,
- case catch lists:map(F,RecList) of
- {error,Reason} ->
- asn1ct:warning("default value not "
- "compatible with type definition ~p~n",
- [Reason],S,
- "default value not "
- "compatible with type definition"),
- Value;
- NewList ->
- NewList
- end;
- _ ->
+ F = fun(#'Externalvaluereference'{value=Name}) ->
+ case lists:keymember(Name, 1, Type) of
+ true -> Name;
+ false -> throw({error,false})
+ end;
+ (Name) when is_atom(Name) ->
+ %% Already normalized.
+ Name;
+ (Other) ->
+ throw({error,Other})
+ end,
+ try
+ lists:map(F, RecList)
+ catch
+ throw:{error,Reason} ->
asn1ct:warning("default value not "
"compatible with type definition ~p~n",
- [RecList],S,
+ [Reason],S,
"default value not "
"compatible with type definition"),
Value
end;
- {Name,String} when is_atom(Name) ->
- normalize_bitstring(S,String,Type);
- Other ->
- asn1ct:warning("illegal default value ~p~n",[Other],S,
- "illegal default value"),
- Value
+ Bs when is_bitstring(Bs) ->
+ %% Already normalized.
+ Bs
end.
-hstring_to_int(L) when is_list(L) ->
- hstring_to_int(L,0).
-hstring_to_int([H|T],Acc) when H >= $A, H =< $F ->
- hstring_to_int(T,(Acc bsl 4) + (H - $A + 10) ) ;
-hstring_to_int([H|T],Acc) when H >= $0, H =< $9 ->
- hstring_to_int(T,(Acc bsl 4) + (H - $0));
-hstring_to_int([],Acc) ->
- Acc.
+hstring_to_bitstring(L) ->
+ << <<(hex_to_int(D)):4>> || D <- L >>.
-bstring_to_bitlist([H|T]) when H == $0; H == $1 ->
- [H - $0 | bstring_to_bitlist(T)];
-bstring_to_bitlist([]) ->
- [].
+bstring_to_bitstring(L) ->
+ << <<(D-$0):1>> || D <- L >>.
+
+hex_to_int(D) when $0 =< D, D =< $9 -> D - $0;
+hex_to_int(D) when $A =< D, D =< $F -> D - ($A - 10).
%% normalize_octetstring/1 changes representation of input Value to a
%% list of octets.
@@ -4229,9 +4194,10 @@ constraint_union(S,C) when is_list(C) ->
constraint_union(_S,C) ->
[C].
-constraint_union1(S,[A={'ValueRange',_},union,B={'ValueRange',_}|Rest],Acc) ->
- AunionB = constraint_union_vr([A,B]),
- constraint_union1(S, AunionB++Rest, Acc);
+constraint_union1(S, [{'ValueRange',{Lb1,Ub1}},union,
+ {'ValueRange',{Lb2,Ub2}}|Rest], Acc) ->
+ AunionB = {'ValueRange',{c_min(Lb1, Lb2),max(Ub1, Ub2)}},
+ constraint_union1(S, [AunionB|Rest], Acc);
constraint_union1(S,[A={'SingleValue',_},union,B={'SingleValue',_}|Rest],Acc) ->
AunionB = constraint_union_sv(S,[A,B]),
constraint_union1(S,Rest,Acc ++ AunionB);
@@ -4255,42 +4221,9 @@ constraint_union_sv(_S,SV) ->
[N] -> [{'SingleValue',N}];
L -> [{'SingleValue',L}]
end.
-
-%% REMOVE????
-%%constraint_union(S,VR,'ValueRange') ->
-%% constraint_union_vr(VR).
-
-%% constraint_union_vr(VR)
-%% VR = [{'ValueRange',{Lb,Ub}},...]
-%% Lb = 'MIN' | integer()
-%% Ub = 'MAX' | integer()
-%% Returns if possible only one ValueRange tuple with a range that
-%% is a union of all ranges in VR.
-constraint_union_vr(VR) ->
- %% Sort VR by Lb in first hand and by Ub in second hand
- Fun=fun({_,{'MIN',_B1}},{_,{A2,_B2}}) when is_integer(A2)->true;
- ({_,{A1,_B1}},{_,{'MAX',_B2}}) when is_integer(A1) -> true;
- ({_,{A1,_B1}},{_,{A2,_B2}}) when is_integer(A1),is_integer(A2),A1<A2 -> true;
- ({_,{A,B1}},{_,{A,B2}}) when B1=<B2->true;
- (_,_)->false end,
- SortedVR = lists:usort(Fun,VR),
- constraint_union_vr(SortedVR, []).
-
-constraint_union_vr([],Acc) ->
- lists:reverse(Acc);
-constraint_union_vr([C|Rest],[]) ->
- constraint_union_vr(Rest,[C]);
-constraint_union_vr([{_,{Lb,Ub2}}|Rest],[{_,{Lb,_Ub1}}|Acc]) -> %Ub2 > Ub1
- constraint_union_vr(Rest,[{'ValueRange',{Lb,Ub2}}|Acc]);
-constraint_union_vr([{_,{_,Ub}}|Rest],A=[{_,{_,Ub}}|_Acc]) ->
- constraint_union_vr(Rest,A);
-constraint_union_vr([{_,{Lb2,Ub2}}|Rest], [{_,{Lb1,Ub1}}|Acc])
- when Ub1 =< Lb2, Ub1 < Ub2 ->
- constraint_union_vr(Rest,[{'ValueRange',{Lb1,Ub2}}|Acc]);
-constraint_union_vr([{_,{_,Ub2}}|Rest],A=[{_,{_,Ub1}}|_Acc]) when Ub2=<Ub1->
- constraint_union_vr(Rest,A);
-constraint_union_vr([VR|Rest],Acc) ->
- constraint_union_vr(Rest,[VR|Acc]).
+c_min('MIN', _) -> 'MIN';
+c_min(_, 'MIN') -> 'MIN';
+c_min(A, B) -> min(A, B).
union_sv_vr(_S,{'SingleValue',SV},VR)
when is_integer(SV) ->
diff --git a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
index 8359b81b33..a38da8bcc2 100644
--- a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl
@@ -1155,7 +1155,8 @@ gen_dec_line(Erules,TopType,Cname,CTags,Type,OptOrMand,DecObjInf) ->
emit([indent(4),"_ ->",nl]),
case OptOrMand of
- {'DEFAULT', Def} ->
+ {'DEFAULT', Def0} ->
+ Def = asn1ct_gen:conform_value(Type, Def0),
emit([indent(8),"{",{asis,Def},",",{prev,tlv},"}",nl]);
'OPTIONAL' ->
emit([indent(8),"{ asn1_NOVALUE, ",{prev,tlv},"}",nl])
diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl
index 8d4afc0a0b..4672f7edd3 100644
--- a/lib/asn1/src/asn1ct_constructed_per.erl
+++ b/lib/asn1/src/asn1ct_constructed_per.erl
@@ -770,8 +770,10 @@ optionals(L) -> optionals(L,[],2).
optionals([#'ComponentType'{prop='OPTIONAL'}|Rest], Acc, Pos) ->
optionals(Rest, [Pos|Acc], Pos+1);
-optionals([#'ComponentType'{prop={'DEFAULT',Val}}|Rest], Acc, Pos) ->
- optionals(Rest, [{Pos,Val}|Acc], Pos+1);
+optionals([#'ComponentType'{typespec=T,prop={'DEFAULT',Val}}|Rest],
+ Acc, Pos) ->
+ Vals = def_values(T, Val),
+ optionals(Rest, [{Pos,Vals}|Acc], Pos+1);
optionals([#'ComponentType'{}|Rest], Acc, Pos) ->
optionals(Rest, Acc, Pos+1);
optionals([], Acc, _) ->
@@ -888,7 +890,8 @@ gen_enc_components_call1(Erule,TopType,
optional ->
asn1ct_imm:enc_absent(Element, [asn1_NOVALUE], Imm1);
{default,Def} ->
- asn1ct_imm:enc_absent(Element, [asn1_DEFAULT,Def], Imm1)
+ DefValues = def_values(Type, Def),
+ asn1ct_imm:enc_absent(Element, DefValues, Imm1)
end,
Imm = case Imm2 of
[] -> [];
@@ -899,6 +902,38 @@ gen_enc_components_call1(_Erule,_TopType,[],Pos,_,_, Acc) ->
ImmList = lists:reverse(Acc),
{ImmList,Pos}.
+def_values(#type{def=#'Externaltypereference'{module=Mod,type=Type}}, Def) ->
+ #typedef{typespec=T} = asn1_db:dbget(Mod, Type),
+ def_values(T, Def);
+def_values(#type{def={'BIT STRING',[]}}, Bs) when is_bitstring(Bs) ->
+ ListBs = [B || <<B:1>> <= Bs],
+ IntBs = lists:foldl(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, lists:reverse(ListBs)),
+ Sz = bit_size(Bs),
+ Compact = case 8 - Sz rem 8 of
+ 8 ->
+ {0,Bs};
+ Unused ->
+ {Unused,<<Bs:Sz/bits,0:Unused>>}
+ end,
+ [asn1_DEFAULT,Bs,Compact,ListBs,IntBs];
+def_values(#type{def={'BIT STRING',[_|_]=Ns}}, List) when is_list(List) ->
+ Bs = asn1ct_gen:named_bitstring_value(List, Ns),
+ ListBs = [B || <<B:1>> <= Bs],
+ IntBs = lists:foldl(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, lists:reverse(ListBs)),
+ Args = [List,Bs,ListBs,IntBs],
+ {call,per_common,is_default_bitstring,Args};
+def_values(#type{def={'INTEGER',Ns}}, Def) ->
+ [asn1_DEFAULT,Def|case lists:keyfind(Def, 2, Ns) of
+ false -> [];
+ {Val,Def} -> [Val]
+ end];
+def_values(_, Def) ->
+ [asn1_DEFAULT,Def].
+
gen_enc_line_imm(Erule, TopType, Cname, Type, Element, DynamicEnc, Ext) ->
Imm0 = gen_enc_line_imm_1(Erule, TopType, Cname, Type,
Element, DynamicEnc),
@@ -1207,7 +1242,8 @@ gen_dec_comp_call(Comp, Erule, TopType, Tpos, OptTable, DecInfObj,
comp_call_pre_post(noext, mandatory, _, _, _, _, _, _) ->
{[],[]};
-comp_call_pre_post(noext, Prop, _, _, TextPos, OptTable, NumOptionals, Ext) ->
+comp_call_pre_post(noext, Prop, _, Type, TextPos,
+ OptTable, NumOptionals, Ext) ->
%% OPTIONAL or DEFAULT
OptPos = get_optionality_pos(TextPos, OptTable),
Element = case NumOptionals - OptPos of
@@ -1225,7 +1261,7 @@ comp_call_pre_post(noext, Prop, _, _, TextPos, OptTable, NumOptionals, Ext) ->
emit([";",nl,
"0 ->",nl,
"{"]),
- gen_dec_component_no_val(Ext, Prop),
+ gen_dec_component_no_val(Ext, Type, Prop),
emit([",",{curr,bytes},"}",nl,
"end"]),
St
@@ -1247,10 +1283,10 @@ comp_call_pre_post({ext,_,_}, Prop, Pos, Type, _, _, _, Ext) ->
components=ExtGroupCompList2}}
when is_integer(Number2)->
emit("{extAddGroup,"),
- gen_dec_extaddGroup_no_val(Ext, ExtGroupCompList2),
+ gen_dec_extaddGroup_no_val(Ext, Type, ExtGroupCompList2),
emit("}");
_ ->
- gen_dec_component_no_val(Ext, Prop)
+ gen_dec_component_no_val(Ext, Type, Prop)
end,
emit([",",{curr,bytes},"}",nl,
"end"]),
@@ -1265,21 +1301,22 @@ is_mandatory_predef_tab_c(_, _, {"got objfun through args","ObjFun"}) ->
is_mandatory_predef_tab_c(_,_,_) ->
true.
-gen_dec_extaddGroup_no_val(Ext,[#'ComponentType'{prop=Prop}])->
- gen_dec_component_no_val(Ext,Prop),
+gen_dec_extaddGroup_no_val(Ext, Type, [#'ComponentType'{prop=Prop}])->
+ gen_dec_component_no_val(Ext, Type, Prop),
ok;
-gen_dec_extaddGroup_no_val(Ext,[#'ComponentType'{prop=Prop}|Rest])->
- gen_dec_component_no_val(Ext,Prop),
- emit({","}),
- gen_dec_extaddGroup_no_val(Ext,Rest);
-gen_dec_extaddGroup_no_val(_, []) ->
+gen_dec_extaddGroup_no_val(Ext, Type, [#'ComponentType'{prop=Prop}|Rest])->
+ gen_dec_component_no_val(Ext, Type, Prop),
+ emit(","),
+ gen_dec_extaddGroup_no_val(Ext, Type, Rest);
+gen_dec_extaddGroup_no_val(_, _, []) ->
ok.
-gen_dec_component_no_val(_,{'DEFAULT',DefVal}) ->
+gen_dec_component_no_val(_, Type, {'DEFAULT',DefVal0}) ->
+ DefVal = asn1ct_gen:conform_value(Type, DefVal0),
emit([{asis,DefVal}]);
-gen_dec_component_no_val(_,'OPTIONAL') ->
+gen_dec_component_no_val(_, _, 'OPTIONAL') ->
emit({"asn1_NOVALUE"});
-gen_dec_component_no_val({ext,_,_},mandatory) ->
+gen_dec_component_no_val({ext,_,_}, _, mandatory) ->
emit({"asn1_NOVALUE"}).
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index e6ec0cb12b..30d337635b 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -33,7 +33,9 @@
insert_once/2,
ct_gen_module/1,
index2suffix/1,
- get_record_name_prefix/0]).
+ get_record_name_prefix/0,
+ conform_value/2,
+ named_bitstring_value/2]).
-export([pgen/5,
mk_var/1,
un_hyphen_var/1]).
@@ -85,6 +87,8 @@ pgen_module(OutFile,Erules,Module,
"%%%",nl]),
asn1ct_func:generate(Fid),
file:close(Fid),
+ _ = erase(gen_file_out),
+ _ = erase(outfile),
asn1ct:verbose("--~p--~n",[{generated,ErlFile}],Options).
@@ -907,49 +911,45 @@ pgen_dispatcher(Erules,_Module,{[],_Values,_,_,_Objects,_ObjectSets}) ->
pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) ->
emit(["-export([encode/2,decode/2]).",nl,nl]),
gen_info_functions(Erules),
- NoFinalPadding = lists:member(no_final_padding,get(encoding_options)),
- {Call,BytesAsBinary} =
- case Erules of
- per ->
- asn1ct_func:need({Erules,complete,1}),
- {["complete(encode_disp(Type, Data))"],"Bytes"};
- ber ->
- {"encode_disp(Type,Data)","iolist_to_binary(Bytes)"};
- uper when NoFinalPadding == true ->
- asn1ct_func:need({Erules,complete_NFP,1}),
- {"complete_NFP(encode_disp(Type, Data))","Bytes"};
- uper ->
- asn1ct_func:need({Erules,complete,1}),
- {["complete(encode_disp(Type, Data))"],"Bytes"}
- end,
- emit(["encode(Type,Data) ->",nl,
- "try ",Call," of",nl,
- case erule(Erules) of
- ber ->
- [" {Bytes,_Len} ->",nl,
- " {ok,",BytesAsBinary,"}",nl];
- per ->
- [" Bytes ->",nl,
- " {ok,",BytesAsBinary,"}",nl]
- end,
- " catch",nl,
- " Class:Exception when Class =:= error; Class =:= exit ->",nl,
- " case Exception of",nl,
- " {error,Reason}=Error ->",nl,
- " Error;",nl,
- " Reason ->",nl,
- " {error,{asn1,Reason}}",nl,
- " end",nl,
- "end.",nl,nl]),
-
- Return_rest = lists:member(undec_rest,get(encoding_options)),
+
+ Options = get(encoding_options),
+ NoFinalPadding = lists:member(no_final_padding, Options),
+ NoOkWrapper = proplists:get_bool(no_ok_wrapper, Options),
+
+ Call = case Erules of
+ per ->
+ asn1ct_func:need({Erules,complete,1}),
+ "complete(encode_disp(Type, Data))";
+ ber ->
+ "iolist_to_binary(element(1, encode_disp(Type, Data)))";
+ uper when NoFinalPadding == true ->
+ asn1ct_func:need({Erules,complete_NFP,1}),
+ "complete_NFP(encode_disp(Type, Data))";
+ uper ->
+ asn1ct_func:need({Erules,complete,1}),
+ "complete(encode_disp(Type, Data))"
+ end,
+
+ emit(["encode(Type, Data) ->",nl]),
+ case NoOkWrapper of
+ true ->
+ emit([" ",Call,"."]);
+ false ->
+ emit(["try ",Call," of",nl,
+ " Bytes ->",nl,
+ " {ok,Bytes}",nl,
+ try_catch()])
+ end,
+ emit([nl,nl]),
+
+ Return_rest = proplists:get_bool(undec_rest, Options),
Data = case {Erules,Return_rest} of
{ber,true} -> "Data0";
_ -> "Data"
end,
emit(["decode(Type,",Data,") ->",nl]),
- DecAnonymous =
+ DecWrap =
case {Erules,Return_rest} of
{ber,false} ->
asn1ct_func:need({ber,ber_decode_nif,1}),
@@ -961,49 +961,26 @@ pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) ->
_ ->
"Data"
end,
- DecWrap = case Erules of
- ber ->
- DecAnonymous;
- _ -> "Data"
- end,
-
- emit(["case catch decode_disp(Type,",DecWrap,") of",nl,
- " {'EXIT',{error,Reason}} ->",nl,
- " {error,Reason};",nl,
- " {'EXIT',Reason} ->",nl,
- " {error,{asn1,Reason}};",nl]),
- case {Erules,Return_rest} of
- {ber,false} ->
- emit([" Result ->",nl,
- " {ok,Result}",nl]);
- {ber,true} ->
- emit([" Result ->",nl,
- " {ok,Result,Rest}",nl]);
- {_,false} ->
- emit([" {X,_Rest} ->",nl,
- " {ok,X};",nl,
- " {X,_Rest,_Len} ->",nl,
- " {ok,X}",nl]);
- {per,true} ->
- emit([" {X,{_,Rest}} ->",nl,
- " {ok,X,Rest};",nl,
- " {X,{_,Rest},_Len} ->",nl,
- " {ok,X,Rest};",nl,
- " {X,Rest} ->",nl,
- " {ok,X,Rest};",nl,
- " {X,Rest,_Len} ->",nl,
- " {ok,X,Rest}",nl]);
- {uper,true} ->
- emit([" {X,{_,Rest}} ->",nl,
- " {ok,X,Rest};",nl,
- " {X,{_,Rest},_Len} ->",nl,
- " {ok,X,Rest};",nl,
- " {X,Rest} ->",nl,
- " {ok,X,Rest};",nl,
- " {X,Rest,_Len} ->",nl,
- " {ok,X,Rest}",nl])
+ emit([case NoOkWrapper of
+ false -> "try";
+ true -> "case"
+ end, " decode_disp(Type, ",DecWrap,") of",nl]),
+ case erule(Erules) of
+ ber ->
+ emit([" Result ->",nl]);
+ per ->
+ emit([" {Result,Rest} ->",nl])
+ end,
+ case Return_rest of
+ false -> result_line(NoOkWrapper, ["Result"]);
+ true -> result_line(NoOkWrapper, ["Result","Rest"])
+ end,
+ case NoOkWrapper of
+ false ->
+ emit([nl,try_catch(),nl,nl]);
+ true ->
+ emit([nl,"end.",nl,nl])
end,
- emit(["end.",nl,nl]),
gen_decode_partial_incomplete(Erules),
@@ -1016,8 +993,30 @@ pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) ->
gen_dispatcher(Types,"encode_disp","enc_",""),
gen_dispatcher(Types,"decode_disp","dec_","")
end,
- emit([nl]),
- emit({nl,nl}).
+ emit([nl,nl]).
+
+result_line(NoOkWrapper, Items) ->
+ S = [" "|case NoOkWrapper of
+ false -> result_line_1(["ok"|Items]);
+ true -> result_line_1(Items)
+ end],
+ emit(lists:flatten(S)).
+
+result_line_1([SingleItem]) ->
+ SingleItem;
+result_line_1(Items) ->
+ ["{",string:join(Items, ","),"}"].
+
+try_catch() ->
+ [" catch",nl,
+ " Class:Exception when Class =:= error; Class =:= exit ->",nl,
+ " case Exception of",nl,
+ " {error,Reason}=Error ->",nl,
+ " Error;",nl,
+ " Reason ->",nl,
+ " {error,{asn1,Reason}}",nl,
+ " end",nl,
+ "end."].
gen_info_functions(Erules) ->
emit(["encoding_rule() -> ",
@@ -1488,8 +1487,14 @@ gen_prim_check_call(PrimType, Default, Element, Type) ->
end,
check_call(check_int, [Default,Element,{asis,NNL}]);
'BIT STRING' ->
- {_,NBL} = Type#type.def,
- check_call(check_bitstring, [Default,Element,{asis,NBL}]);
+ case Type#type.def of
+ {_,[]} ->
+ check_call(check_bitstring,
+ [Default,Element]);
+ {_,[_|_]=NBL} ->
+ check_call(check_named_bitstring,
+ [Default,Element,{asis,NBL}])
+ end;
'OCTET STRING' ->
check_call(check_octetstring, [Default,Element]);
'NULL' ->
@@ -1643,9 +1648,33 @@ unify_if_string(PrimType) ->
Other -> Other
end.
-
-
-
+conform_value(#type{def={'BIT STRING',[]}}, Bs) ->
+ case asn1ct:get_bit_string_format() of
+ compact when is_binary(Bs) ->
+ {0,Bs};
+ compact when is_bitstring(Bs) ->
+ Sz = bit_size(Bs),
+ Unused = 8 - bit_size(Bs),
+ {Unused,<<Bs:Sz/bits,0:Unused>>};
+ legacy ->
+ [B || <<B:1>> <= Bs];
+ bitstring when is_bitstring(Bs) ->
+ Bs
+ end;
+conform_value(_, Value) -> Value.
+
+named_bitstring_value(List, Names) ->
+ Int = lists:foldl(fun(N, A) ->
+ {N,Pos} = lists:keyfind(N, 1, Names),
+ A bor (1 bsl Pos)
+ end, 0, List),
+ named_bitstring_value_1(<<>>, Int).
+
+named_bitstring_value_1(Bs, 0) ->
+ Bs;
+named_bitstring_value_1(Bs, Int) ->
+ B = Int band 1,
+ named_bitstring_value_1(<<Bs/bitstring,B:1>>, Int bsr 1).
get_inner(A) when is_atom(A) -> A;
get_inner(Ext) when is_record(Ext,'Externaltypereference') -> Ext;
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl
index 892178f61b..047156fc10 100644
--- a/lib/asn1/src/asn1ct_imm.erl
+++ b/lib/asn1/src/asn1ct_imm.erl
@@ -319,14 +319,22 @@ per_enc_extensions(Val0, Pos0, NumBits, Aligned) when NumBits > 0 ->
{'cond',[[{eq,Bitmap,0}],
['_'|Length ++ PutBits]],{var,"Extensions"}}].
-per_enc_optional(Val0, {Pos,Def}, _Aligned) when is_integer(Pos) ->
+per_enc_optional(Val0, {Pos,DefVals}, _Aligned) when is_integer(Pos),
+ is_list(DefVals) ->
Val1 = lists:concat(["element(",Pos,", ",Val0,")"]),
{B,[Val]} = mk_vars(Val1, []),
Zero = {put_bits,0,1,[1]},
One = {put_bits,1,1,[1]},
- B++[{'cond',[[{eq,Val,asn1_DEFAULT},Zero],
- [{eq,Val,Def},Zero],
- ['_',One]]}];
+ B++[{'cond',
+ [[{eq,Val,DefVal},Zero] || DefVal <- DefVals] ++ [['_',One]]}];
+per_enc_optional(Val0, {Pos,{call,M,F,A}}, _Aligned) when is_integer(Pos) ->
+ Val1 = lists:concat(["element(",Pos,", ",Val0,")"]),
+ {B,[Val,Tmp]} = mk_vars(Val1, [tmp]),
+ Zero = {put_bits,0,1,[1]},
+ One = {put_bits,1,1,[1]},
+ B++[{call,M,F,[Val|A],Tmp},
+ {'cond',
+ [[{eq,Tmp,true},Zero],['_',One]]}];
per_enc_optional(Val0, Pos, _Aligned) when is_integer(Pos) ->
Val1 = lists:concat(["element(",Pos,", ",Val0,")"]),
{B,[Val]} = mk_vars(Val1, []),
@@ -352,7 +360,12 @@ per_enc_sof(Val0, Constraint, ElementVar, ElementImm, Aligned) ->
PreBlock ++ EncLen ++ Lc
end.
-enc_absent(Val0, AbsVals, Body) ->
+enc_absent(Val0, {call,M,F,A}, Body) ->
+ {B,[Var,Tmp]} = mk_vars(Val0, [tmp]),
+ B++[{call,M,F,[Var|A],Tmp},
+ {'cond',
+ [[{eq,Tmp,true}],['_'|Body]]}];
+enc_absent(Val0, AbsVals, Body) when is_list(AbsVals) ->
{B,[Var]} = mk_vars(Val0, []),
Cs = [[{eq,Var,Aval}] || Aval <- AbsVals] ++ [['_'|Body]],
B++build_cond(Cs).
@@ -994,6 +1007,25 @@ mk_var(Base, V) ->
per_enc_integer_1(Val, [], Aligned) ->
[{'cond',[['_'|per_enc_unconstrained(Val, Aligned)]]}];
+per_enc_integer_1(Val, [{{'SingleValue',[_|_]=Svs}=Constr,[]}], Aligned) ->
+ %% An extensible constraint such as (1|17, ...).
+ %%
+ %% A subtle detail is that the extension root as described in the
+ %% ASN.1 spec should be used to determine whether a particular value
+ %% belongs to the extension root (as opposed to the effective
+ %% constraint, which will be used for the actual encoding).
+ %%
+ %% So for the example above, only the integers 1 and 17 should be
+ %% encoded as root values (extension bit = 0).
+
+ [{'ValueRange',{Lb,Ub}}] = effective_constraint(integer, [Constr]),
+ Root = [begin
+ {[],_,Put} = per_enc_constrained(Sv, Lb, Ub, Aligned),
+ [{eq,Val,Sv},{put_bits,0,1,[1]}|Put]
+ end || Sv <- Svs],
+ Cs = Root ++ [['_',{put_bits,1,1,[1]}|
+ per_enc_unconstrained(Val, Aligned)]],
+ build_cond(Cs);
per_enc_integer_1(Val0, [{{_,_}=Constr,[]}], Aligned) ->
{Prefix,Check,Action} = per_enc_integer_2(Val0, Constr, Aligned),
Prefix++build_cond([[Check,{put_bits,0,1,[1]}|Action],
@@ -1004,7 +1036,7 @@ per_enc_integer_1(Val0, [Constr], Aligned) ->
Prefix++build_cond([[Check|Action],
['_',{error,Val0}]]).
-per_enc_integer_2(Val, {'SingleValue',Sv}, Aligned) ->
+per_enc_integer_2(Val, {'SingleValue',Sv}, Aligned) when is_integer(Sv) ->
per_enc_constrained(Val, Sv, Sv, Aligned);
per_enc_integer_2(Val0, {'ValueRange',{Lb,'MAX'}}, Aligned)
when is_integer(Lb) ->
@@ -2123,8 +2155,10 @@ fixup_put_bits(Other) -> per_fixup(Other).
%% returns a value range that has the lower bound set to the lowest value
%% of all single values and lower bound values in C and the upper bound to
%% the greatest value.
-effective_constraint(integer,[C={{_,_},_}|_Rest]) -> % extension
- [C];
+effective_constraint(integer, [{{_,_}=Root,_}|_Rest]) ->
+ %% Normalize extension. Note that any range given for the
+ %% extension should be ignored anyway.
+ [{Root,[]}];
effective_constraint(integer, C) ->
SVs = get_constraints(C, 'SingleValue'),
SV = effective_constr('SingleValue', SVs),
diff --git a/lib/asn1/src/asn1ct_parser2.erl b/lib/asn1/src/asn1ct_parser2.erl
index 1abccc8626..283616b157 100644
--- a/lib/asn1/src/asn1ct_parser2.erl
+++ b/lib/asn1/src/asn1ct_parser2.erl
@@ -38,6 +38,7 @@ parse(Tokens) ->
{error,{Reason,hd(Tokens)}};
{ModuleDefinition,Rest1} ->
{Types,Rest2} = parse_AssignmentList(Rest1),
+ clean_process_dictionary(),
case Rest2 of
[{'END',_}|_Rest3] ->
{ok,ModuleDefinition#module{typeorval = Types}};
@@ -48,6 +49,13 @@ parse(Tokens) ->
end
end.
+clean_process_dictionary() ->
+ Mod = erase(asn1_module),
+ _ = erase({Mod,imports}),
+ _ = erase(tagdefault),
+ _ = erase(extensiondefault),
+ ok.
+
parse_ModuleDefinition([{typereference,L1,ModuleIdentifier}|Rest0]) ->
put(asn1_module,ModuleIdentifier),
{_DefinitiveIdentifier,Rest02} =
diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl
index 992210232f..862b3c4ea5 100644
--- a/lib/asn1/src/asn1ct_value.erl
+++ b/lib/asn1/src/asn1ct_value.erl
@@ -167,17 +167,16 @@ from_type_prim(M, D) ->
case D#type.def of
'INTEGER' ->
i_random(C);
- {'INTEGER',NamedNumberList} ->
- NN = [X||{X,_} <- NamedNumberList],
- case NN of
+ {'INTEGER',[_|_]=NNL} ->
+ case C of
[] ->
- i_random(C);
+ {N,_} = lists:nth(random(length(NNL)), NNL),
+ N;
_ ->
- case C of
- [] ->
- lists:nth(random(length(NN)),NN);
- _ ->
- lists:nth((fun(0)->1;(X)->X end(i_random(C))),NN)
+ V = i_random(C),
+ case lists:keyfind(V, 2, NNL) of
+ false -> V;
+ {N,V} -> N
end
end;
Enum when is_tuple(Enum),element(1,Enum)=='ENUMERATED' ->
diff --git a/lib/asn1/src/asn1rtt_check.erl b/lib/asn1/src/asn1rtt_check.erl
index e78b65a8fb..be4f9c8bff 100644
--- a/lib/asn1/src/asn1rtt_check.erl
+++ b/lib/asn1/src/asn1rtt_check.erl
@@ -20,7 +20,7 @@
-export([check_bool/2,
check_int/3,
- check_bitstring/3,
+ check_bitstring/2,check_named_bitstring/3,
check_octetstring/2,
check_null/2,
check_objectidentifier/2,
@@ -50,31 +50,54 @@ check_int(DefValue, Value, NNL) when is_atom(Value) ->
check_int(DefaultValue, _Value, _) ->
throw({error,DefaultValue}).
-%% Two equal lists or integers
-check_bitstring(_, asn1_DEFAULT, _) ->
+%% check_bitstring(Default, UserBitstring) -> true|false
+%% Default = bitstring()
+%% UserBitstring = integeger() | list(0|1) | {Unused,binary()} | bitstring()
+check_bitstring(_, asn1_DEFAULT) ->
true;
-check_bitstring(V, V, _) ->
- true;
-%% Default value as a list of 1 and 0 and user value as an integer
-check_bitstring(L=[H|T], Int, _) when is_integer(Int), is_integer(H) ->
- case bit_list_to_int(L, length(T)) of
- Int -> true;
- _ -> throw({error,L,Int})
+check_bitstring(DefVal, {Unused,Binary}) ->
+ %% User value in compact format.
+ Sz = bit_size(Binary) - Unused,
+ <<Val:Sz/bitstring,_:Unused>> = Binary,
+ check_bitstring(DefVal, Val);
+check_bitstring(DefVal, Val) when is_bitstring(Val) ->
+ case Val =:= DefVal of
+ false -> throw(error);
+ true -> true
end;
-%% Default value as an integer, val as list
-check_bitstring(Int, Val, NBL) when is_integer(Int), is_list(Val) ->
- BL = int_to_bit_list(Int, [], length(Val)),
- check_bitstring(BL, Val, NBL);
+check_bitstring(Def, Val) when is_list(Val) ->
+ check_bitstring_list(Def, Val);
+check_bitstring(Def, Val) when is_integer(Val) ->
+ check_bitstring_integer(Def, Val).
+
+check_bitstring_list(<<H:1,T1/bitstring>>, [H|T2]) ->
+ check_bitstring_list(T1, T2);
+check_bitstring_list(<<>>, []) ->
+ true;
+check_bitstring_list(_, _) ->
+ throw(error).
+
+check_bitstring_integer(<<H:1,T1/bitstring>>, Int) when H =:= Int band 1 ->
+ check_bitstring_integer(T1, Int bsr 1);
+check_bitstring_integer(<<>>, 0) ->
+ true;
+check_bitstring_integer(_, _) ->
+ throw(error).
+
+check_named_bitstring(_, asn1_DEFAULT, _) ->
+ true;
+check_named_bitstring(V, V, _) ->
+ true;
%% Default value and user value as lists of ones and zeros
-check_bitstring(L1=[H1|_T1], L2=[H2|_T2], NBL=[_H|_T]) when is_integer(H1), is_integer(H2) ->
+check_named_bitstring(L1=[H1|_T1], L2=[H2|_T2], NBL=[_H|_T]) when is_integer(H1), is_integer(H2) ->
L2new = remove_trailing_zeros(L2),
- check_bitstring(L1, L2new, NBL);
+ check_named_bitstring(L1, L2new, NBL);
%% Default value as a list of 1 and 0 and user value as a list of atoms
-check_bitstring(L1=[H1|_T1], L2=[H2|_T2], NBL) when is_integer(H1), is_atom(H2) ->
+check_named_bitstring(L1=[H1|_T1], L2=[H2|_T2], NBL) when is_integer(H1), is_atom(H2) ->
L3 = bit_list_to_nbl(L1, NBL, 0, []),
- check_bitstring(L3, L2, NBL);
+ check_named_bitstring(L3, L2, NBL);
%% Both default value and user value as a list of atoms
-check_bitstring(L1=[H1|T1], L2=[H2|_T2], _)
+check_named_bitstring(L1=[H1|T1], L2=[H2|_T2], _)
when is_atom(H1), is_atom(H2), length(L1) =:= length(L2) ->
case lists:member(H1, L2) of
true ->
@@ -82,27 +105,29 @@ check_bitstring(L1=[H1|T1], L2=[H2|_T2], _)
false -> throw({error,L2})
end;
%% Default value as a list of atoms and user value as a list of 1 and 0
-check_bitstring(L1=[H1|_T1], L2=[H2|_T2], NBL) when is_atom(H1), is_integer(H2) ->
+check_named_bitstring(L1=[H1|_T1], L2=[H2|_T2], NBL) when is_atom(H1), is_integer(H2) ->
L3 = bit_list_to_nbl(L2, NBL, 0, []),
- check_bitstring(L1, L3, NBL);
+ check_named_bitstring(L1, L3, NBL);
%% User value in compact format
-check_bitstring(DefVal,CBS={_,_}, NBL) ->
+check_named_bitstring(DefVal,CBS={_,_}, NBL) ->
NewVal = cbs_to_bit_list(CBS),
- check_bitstring(DefVal, NewVal, NBL);
-check_bitstring(DV, V, _) ->
+ check_named_bitstring(DefVal, NewVal, NBL);
+%% User value as a binary
+check_named_bitstring(DefVal, CBS, NBL) when is_binary(CBS) ->
+ NewVal = cbs_to_bit_list({0,CBS}),
+ check_named_bitstring(DefVal, NewVal, NBL);
+%% User value as a bitstring
+check_named_bitstring(DefVal, CBS, NBL) when is_bitstring(CBS) ->
+ BitSize = bit_size(CBS),
+ Unused = 8 - (BitSize band 7),
+ NewVal = cbs_to_bit_list({Unused,<<CBS:BitSize/bits,0:Unused>>}),
+ check_named_bitstring(DefVal, NewVal, NBL);
+check_named_bitstring(DV, V, _) ->
throw({error,DV,V}).
-
-bit_list_to_int([0|Bs], ShL)->
- bit_list_to_int(Bs, ShL-1) + 0;
-bit_list_to_int([1|Bs], ShL) ->
- bit_list_to_int(Bs, ShL-1) + (1 bsl ShL);
-bit_list_to_int([], _) ->
- 0.
-
int_to_bit_list(0, Acc, 0) ->
Acc;
-int_to_bit_list(Int, Acc, Len) ->
+int_to_bit_list(Int, Acc, Len) when Len > 0 ->
int_to_bit_list(Int bsr 1, [Int band 1|Acc], Len - 1).
bit_list_to_nbl([0|T], NBL, Pos, Acc) ->
diff --git a/lib/asn1/src/asn1rtt_per_common.erl b/lib/asn1/src/asn1rtt_per_common.erl
index 9e9fd87ec3..3309e6a4ca 100644
--- a/lib/asn1/src/asn1rtt_per_common.erl
+++ b/lib/asn1/src/asn1rtt_per_common.erl
@@ -37,6 +37,7 @@
bitstring_from_positions/1,bitstring_from_positions/2,
to_bitstring/1,to_bitstring/2,
to_named_bitstring/1,to_named_bitstring/2,
+ is_default_bitstring/5,
extension_bitmap/3]).
-define('16K',16384).
@@ -271,6 +272,36 @@ to_named_bitstring(Val, Lb) ->
%% for correctness, not speed.
adjust_trailing_zeroes(to_bitstring(Val), Lb).
+is_default_bitstring(asn1_DEFAULT, _, _, _, _) ->
+ true;
+is_default_bitstring({Unused,Bin}, V0, V1, V2, V3) when is_integer(Unused) ->
+ %% Convert compact bitstring to a bitstring.
+ Sz = bit_size(Bin) - Unused,
+ <<Bs:Sz/bitstring,_:Unused>> = Bin,
+ is_default_bitstring(Bs, V0, V1, V2, V3);
+is_default_bitstring(Named, Named, _, _, _) ->
+ true;
+is_default_bitstring(Bs, _, Bs, _, _) ->
+ true;
+is_default_bitstring(List, _, _, List, _) ->
+ true;
+is_default_bitstring(Int, _, _, _, Int) ->
+ true;
+is_default_bitstring(Val, _, Def, _, _) when is_bitstring(Val) ->
+ Sz = bit_size(Def),
+ case Val of
+ <<Def:Sz/bitstring,T/bitstring>> ->
+ NumZeroes = bit_size(T),
+ case T of
+ <<0:NumZeroes>> -> true;
+ _ -> false
+ end;
+ _ ->
+ false
+ end;
+is_default_bitstring(Val, _, _, List, _) when is_list(Val) ->
+ is_default_bitstring_list(List, Val);
+is_default_bitstring(_, _, _, _, _) -> false.
extension_bitmap(Val, Pos, Limit) ->
extension_bitmap(Val, Pos, Limit, 0).
@@ -447,6 +478,16 @@ ntz(Byte) ->
4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0},
element(Byte+1, T).
+is_default_bitstring_list([H|Def], [H|Val]) ->
+ is_default_bitstring_list(Def, Val);
+is_default_bitstring_list([], []) ->
+ true;
+is_default_bitstring_list([], [_|_]=Val) ->
+ lists:all(fun(0) -> true;
+ (_) -> false
+ end, Val);
+is_default_bitstring_list(_, _) -> false.
+
extension_bitmap(_Val, Pos, Limit, Acc) when Pos >= Limit ->
Acc;
extension_bitmap(Val, Pos, Limit, Acc) ->
diff --git a/lib/asn1/src/prepare_templates.erl b/lib/asn1/src/prepare_templates.erl
index 83155b2e52..ccd15548d8 100644
--- a/lib/asn1/src/prepare_templates.erl
+++ b/lib/asn1/src/prepare_templates.erl
@@ -21,69 +21,77 @@
-export([gen_asn1ct_rtt/1,gen_asn1ct_eval/1]).
gen_asn1ct_rtt(Ms) ->
- io:format("%% Generated by ~s. DO NOT EDIT THIS FILE.\n"
+ {ok,Fd} = file:open("asn1ct_rtt.erl", [write]),
+ io:format(Fd,
+ "%% Generated by ~s. DO NOT EDIT THIS FILE.\n"
"%%\n"
"%% Input files:\n", [?MODULE]),
- [io:put_chars(["%% ",M,$\n]) || M <- Ms],
- io:nl(),
- io:put_chars("-module(asn1ct_rtt).\n"
+ [io:put_chars(Fd, ["%% ",M,$\n]) || M <- Ms],
+ io:nl(Fd),
+ io:put_chars(Fd,
+ "-module(asn1ct_rtt).\n"
"-export([assert_defined/1,dependencies/1,code/0]).\n"
"\n"),
Forms = lists:sort(lists:append([abstract(M) || M <- Ms])),
Exp = lists:sort(exports(Forms)),
- defined(Exp),
- io:nl(),
+ defined(Fd, Exp),
+ io:nl(Fd),
Calls = calls(Forms),
R = sofs:relation(Calls),
Fam0 = sofs:relation_to_family(R),
Fam = sofs:to_external(Fam0),
- dependencies(Fam),
- io:nl(),
+ dependencies(Fd, Fam),
+ io:nl(Fd),
Funcs = [begin
Bin = list_to_binary([$\n|erl_pp:function(Func)]),
{{M,F,A},Bin}
end || {M,{function,_,F,A,_}=Func} <- Forms],
- io:format("code() ->\n~p.\n\n", [Funcs]),
+ io:format(Fd, "code() ->\n~p.\n\n", [Funcs]),
+ ok = file:close(Fd),
halt(0).
gen_asn1ct_eval([File]) ->
+ Output = filename:rootname(File, ".funcs") ++ ".erl",
+ {ok,Fd} = file:open(Output, [write]),
{ok,Funcs} = file:consult(File),
asn1ct_func:start_link(),
[asn1ct_func:need(MFA) || MFA <- Funcs],
- io:format("%% Generated by ~s. DO NOT EDIT THIS FILE.\n"
+ io:format(Fd,
+ "%% Generated by ~s. DO NOT EDIT THIS FILE.\n"
"%%\n"
"%% Input file: ~s\n\n", [?MODULE,File]),
- io:format("-module(~s).\n", [filename:rootname(File)]),
- gen_asn1ct_eval_exp(Funcs),
- asn1ct_func:generate(group_leader()),
+ io:format(Fd, "-module(~s).\n", [filename:rootname(File)]),
+ gen_asn1ct_eval_exp(Fd, Funcs),
+ asn1ct_func:generate(Fd),
+ ok = file:close(Fd),
halt(0).
-gen_asn1ct_eval_exp(Funcs) ->
- io:put_chars("-export(["),
- gen_asn1ct_eval_exp_1(Funcs, ""),
- io:put_chars("]).\n").
+gen_asn1ct_eval_exp(Fd, Funcs) ->
+ io:put_chars(Fd, "-export(["),
+ gen_asn1ct_eval_exp_1(Fd, Funcs, ""),
+ io:put_chars(Fd, "]).\n").
-gen_asn1ct_eval_exp_1([{_,F,A}|T], Sep) ->
- io:put_chars(Sep),
- io:format("~p/~p", [F,A]),
- gen_asn1ct_eval_exp_1(T, ",\n");
-gen_asn1ct_eval_exp_1([], _) -> ok.
+gen_asn1ct_eval_exp_1(Fd, [{_,F,A}|T], Sep) ->
+ io:put_chars(Fd, Sep),
+ io:format(Fd, "~p/~p", [F,A]),
+ gen_asn1ct_eval_exp_1(Fd, T, ",\n");
+gen_asn1ct_eval_exp_1(_, [], _) -> ok.
-defined([H|T]) ->
- io:format("assert_defined(~p) -> ok", [H]),
+defined(Fd, [H|T]) ->
+ io:format(Fd, "assert_defined(~p) -> ok", [H]),
case T of
[] ->
- io:put_chars(".\n");
+ io:put_chars(Fd, ".\n");
[_|_] ->
- io:put_chars(";\n"),
- defined(T)
+ io:put_chars(Fd, ";\n"),
+ defined(Fd, T)
end.
-dependencies([{K,V}|T]) ->
- io:format("dependencies(~p) ->\n~p;\n", [K,V]),
- dependencies(T);
-dependencies([]) ->
- io:put_chars("dependencies(_) -> [].\n").
+dependencies(Fd, [{K,V}|T]) ->
+ io:format(Fd, "dependencies(~p) ->\n~p;\n", [K,V]),
+ dependencies(Fd, T);
+dependencies(Fd, []) ->
+ io:put_chars(Fd, "dependencies(_) -> [].\n").
abstract(File) ->
{ok,{M0,[{abstract_code,Abstract}]}} =
diff --git a/lib/asn1/test/Makefile b/lib/asn1/test/Makefile
index a3fa4f2968..b1b08aa9f9 100644
--- a/lib/asn1/test/Makefile
+++ b/lib/asn1/test/Makefile
@@ -26,7 +26,6 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES= \
h323test \
- choice_extension \
ber_decode_error \
testPrim \
testPrimStrings \
@@ -36,7 +35,6 @@ MODULES= \
testChoExtension \
testChoExternal \
testChoOptional \
- testChoOptionalImplicitTag \
testChoRecursive \
testChoTypeRefCho \
testChoTypeRefPrim \
@@ -51,12 +49,12 @@ MODULES= \
testSeqOptional \
testSeq2738 \
testSeqPrim \
+ testSeqSetIndefinite \
testSeqTag \
testSeqTypeRefCho \
testSeqTypeRefPrim \
testSeqTypeRefSeq \
testSeqTypeRefSet \
- testSeqIndefinite \
testSeqOf \
testSeqOfIndefinite \
testSeqOfCho \
@@ -72,7 +70,6 @@ MODULES= \
testSetTypeRefPrim \
testSetTypeRefSeq \
testSetTypeRefSet \
- testSetIndefinite \
testChoiceIndefinite \
testSetOf \
testSetOfCho \
@@ -100,7 +97,6 @@ MODULES= \
test_special_decode_performance \
testTCAP \
testSSLspecs \
- test_driver_load \
testSelectionTypes \
test_undecoded_rest \
testTcapsystem \
@@ -114,12 +110,9 @@ MODULES= \
asn1_test_lib \
asn1_app_test \
asn1_appup_test \
- asn1_wrapper \
asn1_SUITE \
error_SUITE
-SUITE= asn1_SUITE.erl
-
ERL_FILES= $(MODULES:%=%.erl)
HRL_FILES= External.hrl
@@ -144,7 +137,7 @@ EBIN = .
$(EMAKEFILE): $(ERL_FILES) $(HRL_FILES)
$(ERL_TOP)/make/make_emakefile $(ERL_COMPILE_FLAGS) -o$(EBIN) $(MODULES) $(ERL_FILES) >$(EMAKEFILE)
-tests debug opt: $(SUITE) $(SUITE_BIN) $(SUITE_BIN_V2) $(EMAKEFILE)
+tests debug opt: $(EMAKEFILE)
clean:
rm -f core
@@ -161,7 +154,7 @@ release_spec: opt
release_tests_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)"
$(INSTALL_DIR) "$(RELSYSDIR)/asn1_SUITE_data"
- $(INSTALL_DATA) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)"
+ $(INSTALL_DATA) $(EMAKEFILE) $(ERL_FILES) $(HRL_FILES) "$(RELSYSDIR)"
$(INSTALL_DATA) asn1.spec asn1.cover $(INSTALL_PROGS) "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
cd asn1_SUITE_data; tar cfh "$(RELSYSDIR)/asn1_SUITE_data.tar" *
diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index 9a149a495a..83bd66a631 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -67,10 +67,10 @@ groups() ->
{parallel, parallel([]),
[cover,
+ xref,
{group, ber},
% Uses 'P-Record', 'Constraints', 'MEDIA-GATEWAY-CONTROL'...
{group, [], [parse,
- test_driver_load,
test_undecoded_rest,
specialized_decodes,
special_decode_performance,
@@ -83,38 +83,24 @@ groups() ->
{group, [], [testPrim,
rtUI,
testPrimStrings,
- testInvokeMod,
per,
ber_other,
der,
- h323test,
- per_GeneralString]},
+ h323test]},
testChoPrim,
testChoExtension,
testChoOptional,
- testChoOptionalImplicitTag,
testChoRecursive,
testChoTypeRefCho,
testChoTypeRefPrim,
testChoTypeRefSeq,
testChoTypeRefSet,
testMultipleLevels,
- testDef,
testOpt,
testSeqDefault,
% Uses 'External'
- {group, [], [testChoExternal,
- testPrimExternal,
- testSeqExtension,
- testSeqExternal,
- testSeqOfExternal,
- testSeqOfTag,
- testSeqTag,
- testSetExtension,
- testSetExternal,
- testSetOfExternal,
- testSetOfTag,
- testSetTag]},
+ {group, [], [testExternal,
+ testSeqExtension]},
testSeqOptional,
testSeqPrim,
testSeqTypeRefCho,
@@ -143,9 +129,7 @@ groups() ->
% Uses 'Constructed'
{group, [], [constructed,
ber_decode_error]},
- % Uses 'SeqSetIndefinite'
- {group, [], [testSeqIndefinite,
- testSetIndefinite]},
+ testSeqSetIndefinite,
testChoiceIndefinite,
per_open_type,
testInfObjectClass,
@@ -156,9 +140,9 @@ groups() ->
testDeepTConstr,
testExport,
testImport,
- % Uses 'ParamBasic'
- {group, [], [testParamBasic,
- testDER]},
+ testParamBasic,
+ testDER,
+ testDEFAULT,
testMvrasn6,
testContextSwitchingTypes,
testOpenTypeImplicitTag,
@@ -284,13 +268,6 @@ replace_path(PathA, PathB) ->
join(Rule, Opts) ->
string:join([atom_to_list(Rule)|lists:map(fun atom_to_list/1, Opts)], "_").
-case_dir([], _Dir) ->
- exit(no_case_dir);
-case_dir([{case_dir, _}|Config], Dir) ->
- [{case_dir, Dir}|Config];
-case_dir([C|Config], Opt) ->
- [C|case_dir(Config, Opt)].
-
%%------------------------------------------------------------------------------
%% Test cases
%%------------------------------------------------------------------------------
@@ -319,7 +296,15 @@ cover(_) ->
testPrim(Config) -> test(Config, fun testPrim/3).
testPrim(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["Prim", "Real"], Config, [Rule|Opts]),
+ Files = ["Prim","Real"],
+ asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
+ do_test_prim(Rule, false),
+ asn1_test_lib:compile_all(Files, Config, [no_ok_wrapper,Rule|Opts]),
+ do_test_prim(Rule, true).
+
+do_test_prim(Rule, NoOkWrapper) ->
+ io:format("No ok wrapper: ~p\n", [NoOkWrapper]),
+ put(no_ok_wrapper, NoOkWrapper),
testPrim:bool(Rule),
testPrim:int(Rule),
testPrim:enum(Rule),
@@ -340,20 +325,21 @@ testCompactBitString(Config, Rule, Opts) ->
[Rule, compact_bit_string|Opts]),
testCompactBitString:otp_4869(Rule).
-testPrimStrings(Config) -> test(Config, fun testPrimStrings/3).
+testPrimStrings(Config) ->
+ test(Config, fun testPrimStrings/3, [ber,{ber,[der]},per,uper]).
testPrimStrings(Config, Rule, Opts) ->
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config, [Rule|Opts]),
- testPrimStrings_cases(Rule),
+ testPrimStrings_cases(Rule, Opts),
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
[legacy_bit_string,Rule|Opts]),
- testPrimStrings:bit_string(Rule),
+ testPrimStrings:bit_string(Rule, Opts),
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
[compact_bit_string,Rule|Opts]),
- testPrimStrings:bit_string(Rule),
+ testPrimStrings:bit_string(Rule, Opts),
testPrimStrings:more_strings(Rule).
-testPrimStrings_cases(Rule) ->
- testPrimStrings:bit_string(Rule),
+testPrimStrings_cases(Rule, Opts) ->
+ testPrimStrings:bit_string(Rule, Opts),
testPrimStrings:octet_string(Rule),
testPrimStrings:numeric_string(Rule),
testPrimStrings:other_strings(Rule),
@@ -363,15 +349,33 @@ testPrimStrings_cases(Rule) ->
testPrimStrings:utf8_string(Rule),
testPrimStrings:fragmented(Rule).
-testPrimExternal(Config) -> test(Config, fun testPrimExternal/3).
-testPrimExternal(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "PrimExternal"], Config,
- [Rule|Opts]),
+testExternal(Config) -> test(Config, fun testExternal/3).
+testExternal(Config, Rule, Opts) ->
+ asn1_test_lib:compile_all(["External",
+ "ChoExternal",
+ "PrimExternal",
+ "SeqExternal",
+ "SeqOfExternal",
+ "SeqOfTag",
+ "SeqTag",
+ "SetExtension",
+ "SetExternal",
+ "SetOfExternal",
+ "SetOfTag",
+ "SetTag"],
+ Config, [Rule|Opts]),
+ testChoExternal:external(Rule),
testPrimExternal:external(Rule),
- asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
- [Rule|Opts]),
- testPrimStrings_cases(Rule),
- testPrimStrings:more_strings(Rule).
+ testSeqExternal:main(Rule),
+ testSeqOfExternal:main(Rule),
+ testSeqOfTag:main(Rule),
+ testSeqTag:main(Rule),
+ testSetExtension:main(Rule),
+ testSetExternal:main(Rule),
+ testSetOfExternal:main(Rule),
+ testSetOfTag:main(Rule),
+ testSetTag:main(Rule).
+
testChoPrim(Config) -> test(Config, fun testChoPrim/3).
testChoPrim(Config, Rule, Opts) ->
@@ -384,23 +388,11 @@ testChoExtension(Config, Rule, Opts) ->
asn1_test_lib:compile("ChoExtension", Config, [Rule|Opts]),
testChoExtension:extension(Rule).
-testChoExternal(Config) -> test(Config, fun testChoExternal/3).
-testChoExternal(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "ChoExternal"], Config, [Rule|Opts]),
- testChoExternal:external(Rule).
-
testChoOptional(Config) -> test(Config, fun testChoOptional/3).
testChoOptional(Config, Rule, Opts) ->
- asn1_test_lib:compile("ChoOptional", Config, [Rule|Opts]),
- testChoOptional:optional(Rule).
-
-testChoOptionalImplicitTag(Config) ->
- test(Config, fun testChoOptionalImplicitTag/3,
- [ber]).
-testChoOptionalImplicitTag(Config, Rule, Opts) ->
- %% Only meaningful for ber & co
- asn1_test_lib:compile("ChoOptionalImplicitTag", Config, [Rule|Opts]),
- testChoOptionalImplicitTag:optional(Rule).
+ asn1_test_lib:compile_all(["ChoOptional",
+ "ChoOptionalImplicitTag"], Config, [Rule|Opts]),
+ testChoOptional:run().
testChoRecursive(Config) -> test(Config, fun testChoRecursive/3).
testChoRecursive(Config, Rule, Opts) ->
@@ -437,6 +429,13 @@ testDef(Config, Rule, Opts) ->
asn1_test_lib:compile("Def", Config, [Rule|Opts]),
testDef:main(Rule).
+testDEFAULT(Config) ->
+ test(Config, fun testDEFAULT/3, [ber,{ber,[der]},per,uper]).
+testDEFAULT(Config, Rule, Opts) ->
+ asn1_test_lib:compile_all(["Def","Default"], Config, [Rule|Opts]),
+ testDef:main(Rule),
+ testSeqSetDefaultVal:main(Rule, Opts).
+
testOpt(Config) -> test(Config, fun testOpt/3).
testOpt(Config, Rule, Opts) ->
asn1_test_lib:compile("Opt", Config, [Rule|Opts]),
@@ -463,11 +462,6 @@ testSeqExtension(Config, Rule, Opts) ->
DataDir = ?config(data_dir, Config),
testSeqExtension:main(Rule, DataDir, [Rule|Opts]).
-testSeqExternal(Config) -> test(Config, fun testSeqExternal/3).
-testSeqExternal(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SeqExternal"], Config, [Rule|Opts]),
- testSeqExternal:main(Rule).
-
testSeqOptional(Config) -> test(Config, fun testSeqOptional/3).
testSeqOptional(Config, Rule, Opts) ->
asn1_test_lib:compile("SeqOptional", Config, [Rule|Opts]),
@@ -484,11 +478,6 @@ testSeq2738(Config, Rule, Opts) ->
asn1_test_lib:compile("Seq2738", Config, [Rule|Opts]),
testSeq2738:main(Rule).
-testSeqTag(Config) -> test(Config, fun testSeqTag/3).
-testSeqTag(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SeqTag"], Config, [Rule|Opts]),
- testSeqTag:main(Rule).
-
testSeqTypeRefCho(Config) -> test(Config, fun testSeqTypeRefCho/3).
testSeqTypeRefCho(Config, Rule, Opts) ->
asn1_test_lib:compile("SeqTypeRefCho", Config, [Rule|Opts]),
@@ -529,38 +518,17 @@ testSeqOfIndefinite(Config, Rule, Opts) ->
asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
testSeqOfIndefinite:main().
-testSeqOfExternal(Config) -> test(Config, fun testSeqOfExternal/3).
-testSeqOfExternal(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SeqOfExternal"], Config,
- [Rule|Opts]),
- testSeqOfExternal:main(Rule).
-
-testSeqOfTag(Config) -> test(Config, fun testSeqOfTag/3).
-testSeqOfTag(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SeqOfTag"], Config, [Rule|Opts]),
- testSeqOfTag:main(Rule).
-
testSetDefault(Config) -> test(Config, fun testSetDefault/3).
testSetDefault(Config, Rule, Opts) ->
asn1_test_lib:compile("SetDefault", Config, [Rule|Opts]),
testSetDefault:main(Rule).
-testParamBasic(Config) -> test(Config, fun testParamBasic/3).
+testParamBasic(Config) ->
+ test(Config, fun testParamBasic/3, [ber,{ber,[der]},per,uper]).
testParamBasic(Config, Rule, Opts) ->
asn1_test_lib:compile("ParamBasic", Config, [Rule|Opts]),
testParamBasic:main(Rule).
-testSetExtension(Config) -> test(Config, fun testSetExtension/3).
-testSetExtension(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SetExtension"], Config,
- [Rule|Opts]),
- testSetExtension:main(Rule).
-
-testSetExternal(Config) -> test(Config, fun testSetExternal/3).
-testSetExternal(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SetExternal"], Config, [Rule|Opts]),
- testSetExternal:main(Rule).
-
testSetOptional(Config) -> test(Config, fun testSetOptional/3).
testSetOptional(Config, Rule, Opts) ->
asn1_test_lib:compile("SetOptional", Config, [Rule|Opts]),
@@ -572,11 +540,6 @@ testSetPrim(Config, Rule, Opts) ->
asn1_test_lib:compile("SetPrim", Config, [Rule|Opts]),
testSetPrim:main(Rule).
-testSetTag(Config) -> test(Config, fun testSetTag/3).
-testSetTag(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SetTag"], Config, [Rule|Opts]),
- testSetTag:main(Rule).
-
testSetTypeRefCho(Config) -> test(Config, fun testSetTypeRefCho/3).
testSetTypeRefCho(Config, Rule, Opts) ->
asn1_test_lib:compile("SetTypeRefCho", Config, [Rule|Opts]),
@@ -607,17 +570,6 @@ testSetOfCho(Config, Rule, Opts) ->
asn1_test_lib:compile("SetOfCho", Config, [Rule|Opts]),
testSetOfCho:main(Rule).
-testSetOfExternal(Config) -> test(Config, fun testSetOfExternal/3).
-testSetOfExternal(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SetOfExternal"], Config,
- [Rule|Opts]),
- testSetOfExternal:main(Rule).
-
-testSetOfTag(Config) -> test(Config, fun testSetOfTag/3).
-testSetOfTag(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["External", "SetOfTag"], Config, [Rule|Opts]),
- testSetOfTag:main(Rule).
-
c_syntax(Config) ->
DataDir = ?config(data_dir, Config),
[{error, _} = asn1ct:compile(filename:join(DataDir, F))
@@ -715,10 +667,7 @@ ber_optional(Config, Rule, Opts) ->
V = {'S', {'A', 10, asn1_NOVALUE, asn1_NOVALUE},
{'B', asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE},
{'C', asn1_NOVALUE, 111, asn1_NOVALUE}},
- {ok, B} = asn1_wrapper:encode('SOpttest', 'S', V),
- Bytes = lists:flatten(B),
- V2 = asn1_wrapper:decode('SOpttest', 'S', Bytes),
- V = element(2, V2).
+ asn1_test_lib:roundtrip('SOpttest', 'S', V).
%% records used by test-case default
-record('Def1', {bool0,
@@ -729,14 +678,16 @@ ber_optional(Config, Rule, Opts) ->
default(Config) -> test(Config, fun default/3).
default(Config, Rule, Opts) ->
asn1_test_lib:compile("Def", Config, [Rule|Opts]),
- {ok, Bytes1} = asn1_wrapper:encode('Def', 'Def1', #'Def1'{bool0 = true}),
- {ok, {'Def1', true, false, false, false}} =
- asn1_wrapper:decode('Def', 'Def1', lists:flatten(Bytes1)),
-
- {ok, Bytes2} = asn1_wrapper:encode('Def', 'Def1', #'Def1'{bool0 = true,
- bool2 = false}),
- {ok, {'Def1', true, false, false, false}} =
- asn1_wrapper:decode('Def', 'Def1', lists:flatten(Bytes2)).
+ asn1_test_lib:roundtrip('Def',
+ 'Def1',
+ #'Def1'{bool0=true},
+ #'Def1'{bool0=true,bool1=false,
+ bool2=false,bool3=false}),
+ asn1_test_lib:roundtrip('Def',
+ 'Def1',
+ #'Def1'{bool0=true,bool2=false},
+ #'Def1'{bool0=true,bool1=false,
+ bool2=false,bool3=false}).
value_test(Config) -> test(Config, fun value_test/3).
value_test(Config, Rule, Opts) ->
@@ -748,12 +699,13 @@ constructed(Config) ->
test(Config, fun constructed/3, [ber]).
constructed(Config, Rule, Opts) ->
asn1_test_lib:compile("Constructed", Config, [Rule|Opts]),
- {ok, B} = asn1_wrapper:encode('Constructed', 'S', {'S', false}),
- [40, 3, 1, 1, 0] = lists:flatten(B),
- {ok, B1} = asn1_wrapper:encode('Constructed', 'S2', {'S2', false}),
- [40, 5, 48, 3, 1, 1, 0] = lists:flatten(B1),
- {ok, B2} = asn1_wrapper:encode('Constructed', 'I', 10),
- [136, 1, 10] = lists:flatten(B2).
+ <<40,3,1,1,0>> =
+ asn1_test_lib:roundtrip_enc('Constructed', 'S', {'S',false}),
+ <<40,5,48,3,1,1,0>> =
+ asn1_test_lib:roundtrip_enc('Constructed', 'S2', {'S2',false}),
+ <<136,1,10>> =
+ asn1_test_lib:roundtrip_enc('Constructed', 'I', 10),
+ ok.
ber_decode_error(Config) ->
test(Config, fun ber_decode_error/3, [ber]).
@@ -768,14 +720,6 @@ h323test(Config, Rule, Opts) ->
asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
h323test:run(Rule).
-per_GeneralString(Config) ->
- test(Config, fun per_GeneralString/3, [per]).
-per_GeneralString(Config, Rule, Opts) ->
- asn1_test_lib:compile("MULTIMEDIA-SYSTEM-CONTROL", Config, [Rule|Opts]),
- UI = [109, 64, 1, 57],
- {ok, _V} = asn1_wrapper:decode('MULTIMEDIA-SYSTEM-CONTROL',
- 'MultimediaSystemControlMessage', UI).
-
per_open_type(Config) -> test(Config, fun per_open_type/3, [per]).
per_open_type(Config, Rule, Opts) ->
asn1_test_lib:compile("OpenType", Config, [Rule|Opts]),
@@ -785,24 +729,17 @@ testConstraints(Config) -> test(Config, fun testConstraints/3).
testConstraints(Config, Rule, Opts) ->
asn1_test_lib:compile("Constraints", Config, [Rule|Opts]),
asn1_test_lib:compile("LargeConstraints", Config, [Rule|Opts]),
- testConstraints:int_constraints(Rule).
-
-
-testSeqIndefinite(Config) ->
- test(Config, fun testSeqIndefinite/3, [ber]).
-
-testSeqIndefinite(Config, Rule, Opts) ->
- asn1_test_lib:compile("SeqSetIndefinite", Config, [Rule|Opts]),
- testSeqIndefinite:main(Rule).
-
-
-testSetIndefinite(Config) ->
- test(Config, fun testSetIndefinite/3, [ber]).
+ testConstraints:int_constraints(Rule),
+ case Rule of
+ ber -> ok;
+ _ -> testConstraints:refed_NNL_name(Rule)
+ end.
-testSetIndefinite(Config, Rule, Opts) ->
+testSeqSetIndefinite(Config) ->
+ test(Config, fun testSeqSetIndefinite/3, [ber]).
+testSeqSetIndefinite(Config, Rule, Opts) ->
asn1_test_lib:compile("SeqSetIndefinite", Config, [Rule|Opts]),
- testSetIndefinite:main(Rule).
-
+ testSeqSetIndefinite:main().
testChoiceIndefinite(Config) ->
test(Config, fun testChoiceIndefinite/3, [ber]).
@@ -858,11 +795,6 @@ testDeepTConstr(Config, Rule, Opts) ->
[Rule|Opts]),
testDeepTConstr:main(Rule).
-testInvokeMod(Config) -> test(Config, fun testInvokeMod/3).
-testInvokeMod(Config, Rule, Opts) ->
- asn1_test_lib:compile("PrimStrings", Config, [Rule|Opts]),
- {ok, _Result2} = 'PrimStrings':encode('Bs1', [1, 0, 1, 0]).
-
testExport(Config) ->
{error, _} =
asn1ct:compile(filename:join(?config(data_dir, Config),
@@ -918,7 +850,10 @@ duplicate_tags(Config) ->
rtUI(Config) -> test(Config, fun rtUI/3).
rtUI(Config, Rule, Opts) ->
asn1_test_lib:compile("Prim", Config, [Rule|Opts]),
- {ok, _} = asn1rt:info('Prim').
+ {ok, _} = asn1rt:info('Prim'),
+ Rule = 'Prim':encoding_rule(),
+ io:format("Default BIT STRING format: ~p\n",
+ ['Prim':bit_string_format()]).
testROSE(Config) -> test(Config, fun testROSE/3).
testROSE(Config, Rule, Opts) ->
@@ -946,11 +881,7 @@ testDER(Config) ->
test(Config, fun testDER/3, [ber]).
testDER(Config, Rule, Opts) ->
asn1_test_lib:compile("DERSpec", Config, [Rule, der|Opts]),
- testDER:test(),
- asn1_test_lib:compile("ParamBasic", Config, [Rule, der|Opts]),
- testParamBasic:main(der),
- asn1_test_lib:compile("Default", Config, [Rule, der|Opts]),
- testSeqSetDefaultVal:main(Rule).
+ testDER:test().
specialized_decodes(Config) ->
test(Config, fun specialized_decodes/3, [ber]).
@@ -972,13 +903,6 @@ special_decode_performance(Config, Rule, Opts) ->
asn1_test_lib:compile_all(Files, Config, [Rule, asn1config|Opts]),
test_special_decode_performance:go(all).
-
-test_driver_load(Config) ->
- test(Config, fun test_driver_load/3, [per]).
-test_driver_load(Config, Rule, Opts) ->
- asn1_test_lib:compile("P-Record", Config, [Rule|Opts]),
- test_driver_load:test(5).
-
test_ParamTypeInfObj(Config) ->
asn1_test_lib:compile("IN-CS-1-Datatypes", Config, [ber]).
@@ -996,7 +920,7 @@ test_Defed_ObjectIdentifier(Config, Rule, Opts) ->
testSelectionType(Config) -> test(Config, fun testSelectionType/3).
testSelectionType(Config, Rule, Opts) ->
asn1_test_lib:compile("SelectionType", Config, [Rule|Opts]),
- {ok, _} = testSelectionTypes:test().
+ testSelectionTypes:test().
testSSLspecs(Config) ->
test(Config, fun testSSLspecs/3, [ber]).
@@ -1013,10 +937,14 @@ testNortel(Config, Rule, Opts) ->
test_undecoded_rest(Config) -> test(Config, fun test_undecoded_rest/3).
test_undecoded_rest(Config, Rule, Opts) ->
+ do_test_undecoded_rest(Config, Rule, Opts),
+ do_test_undecoded_rest(Config, Rule, [no_ok_wrapper|Opts]),
+ do_test_undecoded_rest(Config, Rule, [undec_rest|Opts]),
+ do_test_undecoded_rest(Config, Rule, [no_ok_wrapper,undec_rest|Opts]).
+
+do_test_undecoded_rest(Config, Rule, Opts) ->
asn1_test_lib:compile("P-Record", Config, [Rule|Opts]),
- ok = test_undecoded_rest:test([], Config),
- asn1_test_lib:compile("P-Record", Config, [Rule,undec_rest|Opts]),
- test_undecoded_rest:test(undec_rest, Config).
+ test_undecoded_rest:test(Opts, Config).
testTcapsystem(Config) ->
test(Config, fun testTcapsystem/3).
@@ -1036,7 +964,20 @@ testS1AP(Config, Rule, Opts) ->
"S1AP-IEs",
"S1AP-PDU-Contents",
"S1AP-PDU-Descriptions"],
- asn1_test_lib:compile_all(S1AP, Config, [Rule|Opts]).
+ asn1_test_lib:compile_all(S1AP, Config, [Rule|Opts]),
+
+ %% OTP-7876.
+ case Rule of
+ per ->
+ Enc = <<0,2,64,49,0,0,5,0,0,0,4,128,106,56,197,0,8,0,3,64,2,134,0,
+ 100,64,8,0,66,240,153,0,7,192,16,0,67,64,6,0,66,240,153,70,
+ 1,0,107,64,5,0,0,0,0,0>>,
+ {ok,{initiatingMessage,_}} = 'S1AP-PDU-Descriptions':decode('S1AP-PDU', Enc);
+ uper ->
+ ok;
+ ber ->
+ ok
+ end.
test_compile_options(Config) ->
ok = test_compile_options:wrong_path(Config),
@@ -1068,24 +1009,38 @@ testX420(Config) ->
"sparc-sun-solaris2.10" ->
{skip,"Too slow for an old Sparc"};
_ ->
- test(Config, fun testX420/3, [ber])
+ Rule = ber,
+ testX420:compile(Rule, [der], Config),
+ ok = testX420:ticket7759(Rule, Config)
end.
-testX420(Config, Rule, Opts) ->
- testX420:compile(Rule, [der|Opts], Config),
- ok = testX420:ticket7759(Rule, Config),
- testX420:compile(Rule, Opts, Config).
test_x691(Config) ->
test(Config, fun test_x691/3, [per, uper]).
test_x691(Config, Rule, Opts) ->
Files = ["P-RecordA1", "P-RecordA2", "P-RecordA3"],
asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
- test_x691:cases(Rule, case Rule of
- uper -> unaligned;
- _ -> aligned
- end),
- asn1_test_lib:ticket_7708(Config, []),
- asn1_test_lib:ticket_7763(Config).
+ test_x691:cases(Rule),
+
+ %% OTP-7708.
+ asn1_test_lib:compile("EUTRA-extract-55", Config, [Rule|Opts]),
+
+ %% OTP-7763.
+ Val = {'Seq',15,lists:duplicate(8, 0),[0],lists:duplicate(28, 0),15,true},
+ CompactVal = {'Seq',15,{0,<<0>>},{7,<<0>>},{4,<<0,0,0,0>>},15,true},
+ {ok,Bin} = 'EUTRA-extract-55':encode('Seq', Val),
+ {ok,Bin} = 'EUTRA-extract-55':encode('Seq', CompactVal),
+
+ %% OTP-7678.
+ asn1_test_lib:compile("UPERDefault", Config, [Rule|Opts]),
+ DefVal = 'UPERDefault':seq(),
+ {ok,DefBin} = 'UPERDefault':encode('Seq', DefVal),
+ {ok,DefVal} = 'UPERDefault':decode('Seq', DefBin),
+ case Rule of
+ uper -> <<0,6,0>> = DefBin;
+ _ -> ok
+ end,
+
+ ok.
ticket_6143(Config) ->
ok = test_compile_options:ticket_6143(Config).
@@ -1193,9 +1148,7 @@ testTimer_uper(Config) ->
testComment(suite) -> [];
testComment(Config) ->
asn1_test_lib:compile("Comment", Config, []),
- {ok,Enc} = asn1_wrapper:encode('Comment','Seq',{'Seq',12,true}),
- {ok,{'Seq',12,true}} = asn1_wrapper:decode('Comment','Seq',Enc),
- ok.
+ asn1_test_lib:roundtrip('Comment', 'Seq', {'Seq',12,true}).
testName2Number(suite) -> [];
testName2Number(Config) ->
@@ -1231,11 +1184,66 @@ testName2Number(Config) ->
ticket_7407(Config) ->
asn1_test_lib:compile("EUTRA-extract-7407", Config, [uper]),
- asn1_test_lib:ticket_7407_code(true),
+ ticket_7407_code(true),
+ asn1_test_lib:compile("EUTRA-extract-7407", Config, [uper,no_final_padding]),
+ ticket_7407_code(false).
+
+ticket_7407_code(FinalPadding) ->
+ Msg1 = {Type1,_} = eutra1(msg),
+ {ok,B1} = 'EUTRA-extract-7407':encode(Type1, Msg1),
+ B1 = eutra1(result, FinalPadding),
+
+ Msg2 = {Type2,_} = eutra2(msg),
+ {ok,B2} = 'EUTRA-extract-7407':encode(Type2, Msg2),
+ B2 = eutra2(result, FinalPadding),
+ ok.
- asn1_test_lib:compile("EUTRA-extract-7407", Config,
- [uper, no_final_padding]),
- asn1_test_lib:ticket_7407_code(false).
+eutra1(msg) ->
+ {'BCCH-BCH-Message',
+ {'MasterInformationBlock',[0,1,0,1],[1,0,1,0],
+ {'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}}.
+
+eutra1(result, true) ->
+ <<90,80,0>>;
+eutra1(result, false) ->
+ <<90,80,0:1>>.
+
+eutra2(msg) ->
+ {'BCCH-DL-SCH-Message',
+ {c1,
+ {systemInformation1,
+ {'SystemInformationBlockType1',
+ {'SystemInformationBlockType1_cellAccessRelatedInformation',
+ [{'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',
+ {'PLMN-Identity'},true},
+ {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',
+ {'PLMN-Identity'},false},
+ {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',
+ {'PLMN-Identity'},true}],
+ {'TrackingAreaCode'},
+ {'CellIdentity'},
+ false,
+ true,
+ true,
+ true
+ },
+ {'SystemInformationBlockType1_cellSelectionInfo',-50},
+ 24,
+ [{'SystemInformationBlockType1_schedulinInformation_SEQOF',
+ {'SystemInformationBlockType1_schedulinInformation_SEQOF_si-MessageType'},
+ ms320,
+ {'SystemInformationBlockType1_schedulinInformation_SEQOF_sib-MappingInfo'}}],
+ 0
+ }
+ }
+ }
+ }.
+
+eutra2(result, true) ->
+%% 55 5C A5 E0
+ <<85,92,165,224>>;
+eutra2(result, false) ->
+ <<85,92,165,14:4>>.
-record('InitiatingMessage',{procedureCode,criticality,value}).
-record('Iu-ReleaseCommand',{first,second}).
@@ -1251,3 +1259,17 @@ ticket7904(Config) ->
{ok,_} = 'RANAPextract1':encode('InitiatingMessage', Val1),
{ok,_} = 'RANAPextract1':encode('InitiatingMessage', Val1).
+
+xref(_Config) ->
+ xref:start(s),
+ xref:set_default(s, [{verbose,false},{warnings,false},{builtins,true}]),
+ Test = filename:dirname(code:which(?MODULE)),
+ {ok,_PMs} = xref:add_directory(s, Test),
+ UnusedExports = "X - XU - asn1_appup_test - asn1_app_test - \".*_SUITE\" : Mod",
+ case xref:q(s, UnusedExports) of
+ {ok,[]} ->
+ ok;
+ {ok,[_|_]=Res} ->
+ io:format("Exported, but unused: ~p\n", [Res]),
+ ?t:fail()
+ end.
diff --git a/lib/asn1/test/asn1_SUITE_data/Constraints.py b/lib/asn1/test/asn1_SUITE_data/Constraints.py
index e4bc987e4c..c3b3aebd6d 100644
--- a/lib/asn1/test/asn1_SUITE_data/Constraints.py
+++ b/lib/asn1/test/asn1_SUITE_data/Constraints.py
@@ -16,6 +16,14 @@ SemiConstrained ::= INTEGER (100..MAX)
NegSemiConstrained ::= INTEGER (-128..MAX)
SemiConstrainedExt ::= INTEGER (42..MAX, ...)
NegSemiConstrainedExt ::= INTEGER (-128..MAX, ...)
+-- Extensions --
+LongLongExt ::= INTEGER (0..18446744073709551615, ..., -5000..-1)
+Range256to65536Ext ::= INTEGER (256..65536, ..., 1000000..9000000)
+
+-- Union of single values
+Sv1 ::= INTEGER (2|3|17)
+Sv2 ::= INTEGER (2|3|17, ...)
+Sv3 ::= INTEGER {a(2),b(3),z(17)} (2|3|17, ...)
-- Other constraints
FixedSize ::= OCTET STRING (SIZE(10))
@@ -94,4 +102,44 @@ pdf OBJECT IDENTIFIER ::= {1,2,3,4,5}
ShorterExt ::= IA5String (SIZE (5, ...))
+SeqOverlapping ::= SEQUENCE {
+ v Overlapping
+}
+
+SeqNonOverlapping ::= SEQUENCE {
+ v NonOverlapping
+}
+
+Overlapping ::= INTEGER (7280..7560 |
+7580..7680 |
+7910..8210 |
+8600..8940 |
+9250..9600 |
+14759..15109 |
+15250..15590 |
+18050..18800 |
+19300..19950 |
+21100..21700 |
+26200..26900 |
+18500..19900 |
+20100..20250 |
+21100..21700 |
+23000..24000 |
+24960..26900)
+
+-- The same intervals, but merged and sorted --
+NonOverlapping ::= INTEGER (7280..7560 |
+7580..7680 |
+7910..8210 |
+8600..8940 |
+9250..9600 |
+14759..15109 |
+15250..15590 |
+18050..19950 |
+20100..20250 |
+21100..21700 |
+23000..24000 |
+24960..26900)
+
+
END
diff --git a/lib/asn1/test/asn1_SUITE_data/Default.asn b/lib/asn1/test/asn1_SUITE_data/Default.asn
index 6604953c1f..168ce50bb2 100644
--- a/lib/asn1/test/asn1_SUITE_data/Default.asn
+++ b/lib/asn1/test/asn1_SUITE_data/Default.asn
@@ -21,7 +21,8 @@ SeqBS ::= SEQUENCE {
a BIT STRING DEFAULT '1010110'B,
b BIT STRING DEFAULT 'A8A'H,
c BIT STRING {first(0),second(1),third(2)} DEFAULT {second},
- d BIT STRING DEFAULT onelist
+ d BIT STRING DEFAULT onelist,
+ e BIT STRING DEFAULT '01011010'B
}
SetBS ::= SET {
diff --git a/lib/asn1/test/asn1_SUITE_data/PrimStrings.asn1 b/lib/asn1/test/asn1_SUITE_data/PrimStrings.asn1
index 08e7f94ab6..a5b4c8a53d 100644
--- a/lib/asn1/test/asn1_SUITE_data/PrimStrings.asn1
+++ b/lib/asn1/test/asn1_SUITE_data/PrimStrings.asn1
@@ -46,7 +46,13 @@ BS256 ::= BIT STRING (SIZE (256))
BS1024 ::= BIT STRING (SIZE (1024))
-
+ BsDef1 ::= SEQUENCE {
+ s BIT STRING DEFAULT '101111'B
+ }
+
+ BsDef2 ::= SEQUENCE {
+ s BIT STRING DEFAULT 'DEADBEEF'H
+ }
Os ::= OCTET STRING
OsCon ::= [60] OCTET STRING
diff --git a/lib/asn1/test/asn1_SUITE_data/UPERDefault.asn b/lib/asn1/test/asn1_SUITE_data/UPERDefault.asn
new file mode 100644
index 0000000000..7b81a0e09f
--- /dev/null
+++ b/lib/asn1/test/asn1_SUITE_data/UPERDefault.asn
@@ -0,0 +1,18 @@
+UPERDefault DEFINITIONS AUTOMATIC TAGS ::=
+
+BEGIN
+
+-- OTP-7681
+Int ::= INTEGER (0..32767)
+
+Seq ::= SEQUENCE {
+ a Int,
+ b INTEGER (-27..27) DEFAULT 0, -- OTP-7678
+ c INTEGER OPTIONAL
+}
+
+seq Seq ::=
+{a 12,
+ b 0}
+
+END \ No newline at end of file
diff --git a/lib/asn1/test/asn1_test_lib.erl b/lib/asn1/test/asn1_test_lib.erl
index 60b2b2b42e..417380159e 100644
--- a/lib/asn1/test/asn1_test_lib.erl
+++ b/lib/asn1/test/asn1_test_lib.erl
@@ -19,13 +19,9 @@
%%
-module(asn1_test_lib).
--export([compile/3]).
--export([compile_all/3]).
--export([compile_erlang/3]).
--export([hex_to_bin/1]).
-
--export([ticket_7407_compile/2,ticket_7407_code/1, ticket_7678/2,
- ticket_7708/2, ticket_7763/1, ticket_7876/3]).
+-export([compile/3,compile_all/3,compile_erlang/3,
+ hex_to_bin/1,
+ roundtrip/3,roundtrip/4,roundtrip_enc/3,roundtrip_enc/4]).
-include_lib("test_server/include/test_server.hrl").
@@ -40,15 +36,7 @@ compile_all(Files, Config, Options) ->
compile_file(File, Options) ->
try
- ok = asn1ct:compile(File, [warnings_as_errors|Options]),
- case should_load(File, Options) of
- false ->
- ok;
- {module, Module} ->
- code:purge(Module),
- {module, Module} = code:load_file(Module),
- code:purge(Module)
- end
+ ok = asn1ct:compile(File, [warnings_as_errors|Options])
catch
Class:Reason ->
ct:print("Failed to compile ~s\n", [File]),
@@ -65,153 +53,26 @@ compile_erlang(Mod, Config, Options) ->
hex_to_bin(S) ->
<< <<(hex2num(C)):4>> || C <- S, C =/= $\s >>.
-%%%
-%%% Internal functions.
-%%%
+roundtrip(Mod, Type, Value) ->
+ roundtrip(Mod, Type, Value, Value).
-should_load(File, Options) ->
- case lists:member(abs, Options) of
- true ->
- false;
- false ->
- {module,list_to_atom(strip_extension(filename:basename(File)))}
- end.
+roundtrip(Mod, Type, Value, ExpectedValue) ->
+ {ok,Encoded} = Mod:encode(Type, Value),
+ {ok,ExpectedValue} = Mod:decode(Type, Encoded),
+ ok.
-strip_extension(File) ->
- strip_extension(File, filename:extension(File)).
+roundtrip_enc(Mod, Type, Value) ->
+ roundtrip_enc(Mod, Type, Value, Value).
-strip_extension(File, "") ->
- File;
-strip_extension(File, Ext) when Ext == ".asn"; Ext == ".set"; Ext == ".asn1"->
- strip_extension(filename:rootname(File));
-strip_extension(File, _Ext) ->
- File.
+roundtrip_enc(Mod, Type, Value, ExpectedValue) ->
+ {ok,Encoded} = Mod:encode(Type, Value),
+ {ok,ExpectedValue} = Mod:decode(Type, Encoded),
+ Encoded.
+
+%%%
+%%% Internal functions.
+%%%
hex2num(C) when $0 =< C, C =< $9 -> C - $0;
hex2num(C) when $A =< C, C =< $F -> C - $A + 10;
hex2num(C) when $a =< C, C =< $f -> C - $a + 10.
-
-ticket_7407_compile(Config,Option) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
-
- ?line ok = asn1ct:compile(DataDir ++ "EUTRA-extract-7407",
- [uper, {outdir,OutDir}]++Option).
-
-ticket_7708(Config,Option) ->
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
-
- ?line ok = asn1ct:compile(DataDir ++ "EUTRA-extract-55",
- [uper, {outdir,OutDir}]++Option).
-
-
-ticket_7407_code(FinalPadding) ->
- Msg1 = {Type1,_} = eutra1(msg),
- ?line {ok,B1} = 'EUTRA-extract-7407':encode(Type1,Msg1),
- ?line B1 = eutra1(result,FinalPadding),
-
- Msg2 = {Type2,_} = eutra2(msg),
- ?line {ok,B2} = 'EUTRA-extract-7407':encode(Type2,Msg2),
- ?line B2 = eutra2(result,FinalPadding),
- ok.
-
-eutra1(msg) ->
- {'BCCH-BCH-Message',{'MasterInformationBlock',[0,1,0,1],[1,0,1,0],{'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}}.
-eutra1(result,true) ->
- <<90,80,0>>;
-eutra1(result,false) ->
- <<90,80,0:1>>.
-
-eutra2(msg) ->
- {'BCCH-DL-SCH-Message',
- {c1,
- {systemInformation1,
- {'SystemInformationBlockType1',
- {'SystemInformationBlockType1_cellAccessRelatedInformation',
- [{'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true},
- {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},false},
- {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true}],
- {'TrackingAreaCode'},
- {'CellIdentity'},
- false,
- true,
- true,
- true
- },
- {'SystemInformationBlockType1_cellSelectionInfo',-50},
- 24,
- [{'SystemInformationBlockType1_schedulinInformation_SEQOF',
- {'SystemInformationBlockType1_schedulinInformation_SEQOF_si-MessageType'},
- ms320,
- {'SystemInformationBlockType1_schedulinInformation_SEQOF_sib-MappingInfo'}}],
- 0
- }
- }
- }
- }.
-eutra2(result,true) ->
-%% 55 5C A5 E0
- <<85,92,165,224>>;
-eutra2(result,false) ->
- <<85,92,165,14:4>>.
-
-
-
-ticket_7678(Config, Option) ->
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
-
- ?line ok = asn1ct:compile(DataDir ++ "UPERDefault",
- [uper, {outdir,OutDir}]++Option),
-
- ?line Val = 'UPERDefault':seq(),
- ?line {ok,<<0,6,0>>} = 'UPERDefault':encode('Seq',Val),
- ?line {ok,Val} = 'UPERDefault':decode('Seq',<<0,6,0>>),
- ok.
-
-
-ticket_7763(Config) ->
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
-
- ?line ok = asn1ct:compile(DataDir ++ "EUTRA-extract-55",
- [uper, {outdir,OutDir}]),
- Val = {'Seq',15,lists:duplicate(8,0),[0],lists:duplicate(28,0),15,true},
- ?line {ok,Bin} = 'EUTRA-extract-55':encode('Seq',Val),
-
- ?line ok = asn1ct:compile(DataDir ++ "EUTRA-extract-55",
- [uper,compact_bit_string,{outdir,OutDir}]),
- CompactVal = {'Seq',15,{0,<<0>>},{7,<<0>>},{4,<<0,0,0,0>>},15,true},
- {ok,CompactBin} = 'EUTRA-extract-55':encode('Seq',CompactVal),
-
- ?line Bin = CompactBin,
-
- io:format("CompactBin:~n~p~nBin:~n~p~nCompactBin == Bin is ~p~n",[CompactBin,Bin,CompactBin == Bin]).
-
-
-ticket_7876(Config,Erule,Options) ->
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
-
- ?line ok = asn1ct:compile(DataDir ++ "S1AP-CommonDataTypes",
- [Erule,{outdir,OutDir}|Options]),
- ?line ok = asn1ct:compile(DataDir ++ "S1AP-Constants",
- [Erule,{outdir,OutDir}|Options]),
-?line ok = asn1ct:compile(DataDir ++ "S1AP-Containers",
- [Erule,{outdir,OutDir}|Options]),
-?line ok = asn1ct:compile(DataDir ++ "S1AP-IEs",
- [Erule,{outdir,OutDir}|Options]),
-?line ok = asn1ct:compile(DataDir ++ "S1AP-PDU-Contents",
- [Erule,{outdir,OutDir}|Options]),
-?line ok = asn1ct:compile(DataDir ++ "S1AP-PDU-Descriptions",
- [Erule,{outdir,OutDir}|Options]),
-
- ticket_7876_encdec(Erule),
- ok.
-
-ticket_7876_encdec(per) ->
- ?line {ok,{initiatingMessage,_}} = 'S1AP-PDU-Descriptions':decode('S1AP-PDU', [0,2,64,49,0,0,5,0,0,0,4,128,106,56,197,0,8,0,3,64,2,134,0,100,64,8,0,66,240,153,0,7,192,16,0,67,64,6,0,66,240,153,70,1,0,107,64,5,0,0,0,0,0]);
-ticket_7876_encdec(_) ->
- ?line {ok,{initiatingMessage,_}} = 'S1AP-PDU-Descriptions':decode('S1AP-PDU', <<0,2,64,49,0,0,5,0,0,0,4,128,106,56,197,0,8,0,3,64,2,134,0,100,64,8,0,66,240,153,0,7,192,16,0,67,64,6,0,66,240,153,70,1,0,107,64,5,0,0,0,0,0>>).
diff --git a/lib/asn1/test/asn1_wrapper.erl b/lib/asn1/test/asn1_wrapper.erl
deleted file mode 100644
index ac194fe38b..0000000000
--- a/lib/asn1/test/asn1_wrapper.erl
+++ /dev/null
@@ -1,49 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(asn1_wrapper).
--author('kenneth@bilbo').
-
--compile(export_all).
-%%-export([Function/Arity, ...]).
-
-
-encode(Module,Type,Value) ->
- case asn1rt:encode(Module,Type,Value) of
- {ok,X} when is_binary(X) ->
- {ok, binary_to_list(X)};
- {ok,X} ->
- {ok, binary_to_list(list_to_binary(X))};
- Error ->
- Error
- end.
-
-decode(Module, Type, Bytes) when is_binary(Bytes) ->
- asn1rt:decode(Module, Type, Bytes);
-decode(Module, Type, Bytes) when is_list(Bytes) ->
- asn1rt:decode(Module, Type, list_to_binary(Bytes)).
-
-erule(ber) ->
- ber;
-erule(per) ->
- per;
-erule(uper) ->
- per.
-
-
diff --git a/lib/asn1/test/ber_decode_error.erl b/lib/asn1/test/ber_decode_error.erl
index 1c4b4c6894..8be92292ee 100644
--- a/lib/asn1/test/ber_decode_error.erl
+++ b/lib/asn1/test/ber_decode_error.erl
@@ -22,15 +22,15 @@
-export([run/1]).
run([]) ->
- {ok,B} = asn1_wrapper:encode('Constructed','S3',{'S3',17}),
- [T,L|V] = lists:flatten(B),
- Bytes = [T,L+3|V] ++ [2,1,3],
- case asn1_wrapper:decode('Constructed','S3',Bytes) of
+ {ok,B} = 'Constructed':encode('S3', {'S3',17}),
+ [T,L|V] = binary_to_list(B),
+ Bytes = list_to_binary([T,L+3|V] ++ [2,1,3]),
+ case 'Constructed':decode('S3', Bytes) of
{error,{asn1,{unexpected,_}}} -> ok
end,
%% Unexpected bytes must be accepted if there is an extensionmark
- {ok,{'S3ext',17}} = asn1_wrapper:decode('Constructed','S3ext',Bytes),
+ {ok,{'S3ext',17}} = 'Constructed':decode('S3ext', Bytes),
%% Truncated tag.
{error,{asn1,{invalid_tag,_}}} =
diff --git a/lib/asn1/test/choice_extension.erl b/lib/asn1/test/choice_extension.erl
deleted file mode 100644
index 85e0936ebf..0000000000
--- a/lib/asn1/test/choice_extension.erl
+++ /dev/null
@@ -1,37 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(choice_extension).
-
--export([run/0, compile/3]).
-
--include_lib("test_server/include/test_server.hrl").
-
-compile(Config,Rules,Options) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
- ?line true = code:add_patha(?config(priv_dir,Config)),
- ?line ok = asn1ct:compile(DataDir ++ "ChoExtension",[Rules,{outdir,OutDir}]++Options).
-
-run() ->
- Val = {str,"abc"},
- ?line {ok,B} = asn1_wrapper:encode('ChoExtension','ChoExt4',Val),
- ?line {ok,Val} = asn1_wrapper:decode('ChoExtension','ChoExt4',lists:flatten(B)),
- ok.
diff --git a/lib/asn1/test/h323test.erl b/lib/asn1/test/h323test.erl
index 426ae16994..3baaa994ea 100644
--- a/lib/asn1/test/h323test.erl
+++ b/lib/asn1/test/h323test.erl
@@ -26,44 +26,62 @@ run(per) -> run();
run(_Rules) -> ok.
run() ->
- alerting(),
- connect(),
+ roundtrip('H323-UserInformation', alerting_val(), alerting_enc()),
+ roundtrip('H323-UserInformation', connect_val(), connect_enc()),
+ general_string(),
ok.
-dec_alerting() ->
- Cs = "0380060008914a0002020120110000000000000000000000000000000000",
- ByteList = hexstr2bytes(Cs),
- asn1_wrapper:decode('H323-MESSAGES','H323-UserInformation',ByteList).
+alerting_val() ->
+ {'H323-UserInformation',
+ {'H323-UU-PDU',
+ {alerting,
+ {'Alerting-UUIE',
+ {0,0,8,2250,0,2},
+ {'EndpointType',asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE,asn1_NOVALUE,
+ {'TerminalInfo',asn1_NOVALUE},
+ false,false},
+ asn1_NOVALUE,
+ {'CallIdentifier',[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE},
+ asn1_NOVALUE}.
-enc_alerting(V) ->
- asn1_wrapper:encode('H323-MESSAGES','H323-UserInformation',V).
+alerting_enc() ->
+ "0380060008914a0002020120110000000000000000000000000000000000".
-alerting() ->
- {ok,V} = dec_alerting(),
- {ok,B} = enc_alerting(V),
- ByteList = lists:flatten(B),
- {ok,V} = asn1_wrapper:decode('H323-MESSAGES','H323-UserInformation',ByteList).
+connect_val() ->
+ {'H323-UserInformation',
+ {'H323-UU-PDU',
+ {connect,
+ {'Connect-UUIE',
+ {0,0,8,2250,0,2},
+ {ipAddress,
+ {'TransportAddress_ipAddress',[136,225,41,58],1187}},
+ {'EndpointType',asn1_NOVALUE,
+ {'VendorIdentifier',
+ {'H221NonStandard',181,0,21324},
+ [77,105,99,114,111,115,111,102,116,174,32,78,101,116,
+ 77,101,100,116,105,110,103,174,0],
+ [51,46,48,0]},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ {'TerminalInfo',asn1_NOVALUE},
+ false,false},
+ [22,137,237,197,191,35,211,17,140,45,0,192,79,75,28,208],
+ {'CallIdentifier',[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE},
+ asn1_NOVALUE}.
+connect_enc() ->
+ "02c0060008914a00020088e1293a04a322c0b500534c164d6963726f736f6674ae204e65744d656474696e67ae0003332e3000001689edc5bf23d3118c2d00c04f4b1cd00900110000000000000000000000000000000000".
-dec_connect() ->
- Cs = "02c0060008914a00020088e1293a04a322c0b500534c164d6963726f736f6674ae204e65744d656474696e67ae0003332e3000001689edc5bf23d3118c2d00c04f4b1cd00900110000000000000000000000000000000000",
- ByteList = hexstr2bytes(Cs),
- asn1_wrapper:decode('H323-MESSAGES','H323-UserInformation',ByteList).
+general_string() ->
+ Type = 'MultimediaSystemControlMessage',
+ UI = <<109,64,1,57>>,
+ {ok, _V} = 'MULTIMEDIA-SYSTEM-CONTROL':decode(Type, UI).
-enc_connect(V) ->
- asn1_wrapper:encode('H323-MESSAGES','H323-UserInformation',V).
-
-connect() ->
- {ok,V} = dec_connect(),
- {ok,B} = enc_connect(V),
- ByteList = lists:flatten(B),
- {ok,V} = asn1_wrapper:decode('H323-MESSAGES','H323-UserInformation',ByteList).
-
-hexstr2bytes([D1,D2|T]) ->
- [dig2num(D1)*16+dig2num(D2)|hexstr2bytes(T)];
-hexstr2bytes([]) ->
- [].
-
-dig2num(D) when D >= $0, D =< $9 -> D - $0;
-dig2num(D) when D >= $a, D =< $f -> 10 + D - $a;
-dig2num(D) when D >= $A, D =< $F -> 10 + D - $A.
+roundtrip(T, V, HexString) ->
+ Enc = asn1_test_lib:hex_to_bin(HexString),
+ Enc = asn1_test_lib:roundtrip_enc('H323-MESSAGES', T, V),
+ ok.
diff --git a/lib/asn1/test/pem_performance.erl b/lib/asn1/test/pem_performance.erl
deleted file mode 100644
index 87b8cbd61d..0000000000
--- a/lib/asn1/test/pem_performance.erl
+++ /dev/null
@@ -1,37 +0,0 @@
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-
--module([cert_pem/0]).
--module([dsa_pem/0]).
-
-cert_pem() ->
- 'OTP-PUB-KEY':decode('Certificate',<<48,130,3,184,48,130,3,33,160,3,2,1,2,2,1,1,48,13,6,9,42,134,72,134,247,13,1,1,5,5,0,48,129,131,49,14,48,12,6,3,85,4,3,19,5,111,116,112,67,65,49,19,48,17,6,3,85,4,11,19,10,69,114,108,97,110,103,32,79,84,80,49,20,48,18,6,3,85,4,10,19,11,69,114,105,99,115,115,111,110,32,65,66,49,11,48,9,6,3,85,4,6,19,2,83,69,49,18,48,16,6,3,85,4,7,19,9,83,116,111,99,107,104,111,108,109,49,37,48,35,6,9,42,134,72,134,247,13,1,9,1,22,22,112,101,116,101,114,64,101,114,105,120,46,101,114,105,99,115,115,111,110,46,115,101,48,30,23,13,48,56,48,49,48,57,48,56,50,57,51,48,90,23,13,49,55,49,49,49,55,48,56,50,57,51,48,90,48,129,132,49,15,48,13,6,3,85,4,3,19,6,99,108,105,101,110,116,49,19,48,17,6,3,85,4,11,19,10,69,114,108,97,110,103,32,79,84,80,49,20,48,18,6,3,85,4,10,19,11,69,114,105,99,115,115,111,110,32,65,66,49,11,48,9,6,3,85,4,6,19,2,83,69,49,18,48,16,6,3,85,4,7,19,9,83,116,111,99,107,104,111,108,109,49,37,48,35,6,9,42,134,72,134,247,13,1,9,1,22,22,112,101,116,101,114,64,101,114,105,120,46,101,114,105,99,115,115,111,110,46,115,101,48,129,159,48,13,6,9,42,134,72,134,247,13,1,1,1,5,0,3,129,141,0,48,129,137,2,129,129,0,245,56,68,254,220,239,193,190,63,221,182,60,67,77,121,163,214,136,137,183,139,8,166,30,100,27,45,17,126,58,15,173,151,218,75,224,148,14,22,164,10,100,186,183,104,175,197,97,96,182,146,150,106,129,140,100,194,106,90,62,133,233,155,46,155,33,101,220,83,193,182,232,240,99,253,249,114,8,159,172,143,77,179,132,229,205,29,110,185,233,224,52,25,149,249,100,80,229,199,125,23,106,146,233,159,26,13,8,161,206,221,43,240,149,42,45,194,190,85,6,235,152,220,219,160,32,144,67,2,3,1,0,1,163,130,1,55,48,130,1,51,48,9,6,3,85,29,19,4,2,48,0,48,11,6,3,85,29,15,4,4,3,2,5,224,48,29,6,3,85,29,14,4,22,4,20,26,59,44,5,72,211,158,214,23,34,30,241,125,27,123,115,93,163,231,120,48,129,179,6,3,85,29,35,4,129,171,48,129,168,128,20,6,171,128,52,58,164,184,118,178,189,157,46,40,229,109,145,222,125,1,155,161,129,140,164,129,137,48,129,134,49,17,48,15,6,3,85,4,3,19,8,101,114,108,97,110,103,67,65,49,19,48,17,6,3,85,4,11,19,10,69,114,108,97,110,103,32,79,84,80,49,20,48,18,6,3,85,4,10,19,11,69,114,105,99,115,115,111,110,32,65,66,49,18,48,16,6,3,85,4,7,19,9,83,116,111,99,107,104,111,108,109,49,11,48,9,6,3,85,4,6,19,2,83,69,49,37,48,35,6,9,42,134,72,134,247,13,1,9,1,22,22,112,101,116,101,114,64,101,114,105,120,46,101,114,105,99,115,115,111,110,46,115,101,130,1,1,48,33,6,3,85,29,17,4,26,48,24,129,22,112,101,116,101,114,64,101,114,105,120,46,101,114,105,99,115,115,111,110,46,115,101,48,33,6,3,85,29,18,4,26,48,24,129,22,112,101,116,101,114,64,101,114,105,120,46,101,114,105,99,115,115,111,110,46,115,101,48,13,6,9,42,134,72,134,247,13,1,1,5,5,0,3,129,129,0,93,11,112,227,121,15,121,179,247,135,110,216,17,197,84,18,149,166,147,142,190,178,0,209,190,0,142,233,144,100,194,205,220,182,73,204,108,42,95,23,48,63,4,120,239,42,194,25,184,35,117,107,96,229,18,45,76,122,125,40,171,210,132,50,146,178,160,55,17,35,255,208,114,30,47,55,185,154,155,165,204,180,14,143,20,234,6,234,201,225,72,235,5,87,61,255,250,23,217,1,144,246,98,221,223,102,49,168,177,13,70,241,26,27,254,251,217,14,244,18,242,197,151,50,186,214,15,42>>).
-
-dsa_pem() ->
- 'OTP-PUB-KEY':decode('DSAPrivateKey',<<48,130,1,187,2,1,0,2,129,129,0,183,179,230,217,37,99,144,157,21,228,204,162,207,61,246,144,58,139,139,184,184,43,108,206,0,115,173,208,100,233,201,121,21,90,179,119,53,140,25,52,34,202,121,211,164,107,43,56,68,162,159,51,244,232,138,126,164,109,121,89,237,142,57,28,32,188,44,67,253,111,121,104,40,141,211,255,140,118,37,234,150,201,155,160,16,17,51,59,26,249,41,129,16,211,119,128,95,254,182,235,132,0,92,206,93,77,106,217,201,132,203,4,75,201,246,204,216,162,1,84,79,211,10,21,152,195,103,145,2,21,0,213,30,184,86,247,16,247,69,192,241,35,138,84,57,140,3,71,65,206,233,2,129,129,0,148,179,24,63,74,91,128,25,96,29,5,78,223,246,175,0,121,86,54,178,42,231,98,241,147,180,157,60,149,160,50,243,227,76,175,89,234,203,252,242,76,108,9,204,157,182,59,206,227,127,99,215,42,156,194,78,116,25,7,62,243,169,45,5,101,179,247,127,199,144,135,103,23,42,154,125,231,248,154,101,175,155,101,42,232,41,80,41,47,128,208,11,31,106,63,12,202,207,135,80,200,136,250,171,31,118,52,91,200,138,112,111,179,23,214,123,21,118,194,179,0,185,217,52,197,182,236,13,2,129,128,124,66,0,111,121,139,142,209,95,136,95,237,177,150,248,252,49,135,117,100,155,232,138,244,132,89,40,5,70,125,202,96,78,239,76,37,125,149,82,64,107,54,227,73,25,180,227,41,0,234,73,47,80,242,242,129,250,61,68,62,39,38,156,193,146,40,241,247,106,215,223,202,194,110,130,62,186,90,18,28,196,174,99,47,193,61,130,100,150,25,248,115,164,231,153,99,46,69,66,139,33,187,51,49,35,219,234,29,44,172,166,247,42,16,177,187,9,162,81,243,33,26,100,46,78,57,203,135,2,20,89,128,159,14,187,249,182,172,15,88,162,110,211,71,179,209,29,125,217,38>>),
- 'OTP-PUB-KEY':decode('SubjectPublicKeyInfo',<<48,130,1,183,48,130,1,44,6,7,42,134,72,206,56,4,1,48,130,1,31,2,129,129,0,183,179,230,217,37,99,144,157,21,228,204,162,207,61,246,144,58,139,139,184,184,43,108,206,0,115,173,208,100,233,201,121,21,90,179,119,53,140,25,52,34,202,121,211,164,107,43,56,68,162,159,51,244,232,138,126,164,109,121,89,237,142,57,28,32,188,44,67,253,111,121,104,40,141,211,255,140,118,37,234,150,201,155,160,16,17,51,59,26,249,41,129,16,211,119,128,95,254,182,235,132,0,92,206,93,77,106,217,201,132,203,4,75,201,246,204,216,162,1,84,79,211,10,21,152,195,103,145,2,21,0,213,30,184,86,247,16,247,69,192,241,35,138,84,57,140,3,71,65,206,233,2,129,129,0,148,179,24,63,74,91,128,25,96,29,5,78,223,246,175,0,121,86,54,178,42,231,98,241,147,180,157,60,149,160,50,243,227,76,175,89,234,203,252,242,76,108,9,204,157,182,59,206,227,127,99,215,42,156,194,78,116,25,7,62,243,169,45,5,101,179,247,127,199,144,135,103,23,42,154,125,231,248,154,101,175,155,101,42,232,41,80,41,47,128,208,11,31,106,63,12,202,207,135,80,200,136,250,171,31,118,52,91,200,138,112,111,179,23,214,123,21,118,194,179,0,185,217,52,197,182,236,13,3,129,132,0,2,129,128,124,66,0,111,121,139,142,209,95,136,95,237,177,150,248,252,49,135,117,100,155,232,138,244,132,89,40,5,70,125,202,96,78,239,76,37,125,149,82,64,107,54,227,73,25,180,227,41,0,234,73,47,80,242,242,129,250,61,68,62,39,38,156,193,146,40,241,247,106,215,223,202,194,110,130,62,186,90,18,28,196,174,99,47,193,61,130,100,150,25,248,115,164,231,153,99,46,69,66,139,33,187,51,49,35,219,234,29,44,172,166,247,42,16,177,187,9,162,81,243,33,26,100,46,78,57,203,135>>),
- 'OTP-PUB-KEY':decode('DSAParams',<<48,130,1,31,2,129,129,0,183,179,230,217,37,99,144,157,21,228,204,162,207,61,246,144,58,139,139,184,184,43,108,206,0,115,173,208,100,233,201,121,21,90,179,119,53,140,25,52,34,202,121,211,164,107,43,56,68,162,159,51,244,232,138,126,164,109,121,89,237,142,57,28,32,188,44,67,253,111,121,104,40,141,211,255,140,118,37,234,150,201,155,160,16,17,51,59,26,249,41,129,16,211,119,128,95,254,182,235,132,0,92,206,93,77,106,217,201,132,203,4,75,201,246,204,216,162,1,84,79,211,10,21,152,195,103,145,2,21,0,213,30,184,86,247,16,247,69,192,241,35,138,84,57,140,3,71,65,206,233,2,129,129,0,148,179,24,63,74,91,128,25,96,29,5,78,223,246,175,0,121,86,54,178,42,231,98,241,147,180,157,60,149,160,50,243,227,76,175,89,234,203,252,242,76,108,9,204,157,182,59,206,227,127,99,215,42,156,194,78,116,25,7,62,243,169,45,5,101,179,247,127,199,144,135,103,23,42,154,125,231,248,154,101,175,155,101,42,232,41,80,41,47,128,208,11,31,106,63,12,202,207,135,80,200,136,250,171,31,118,52,91,200,138,112,111,179,23,214,123,21,118,194,179,0,185,217,52,197,182,236,13>>),
- 'OTP-PUB-KEY':decode('DSAPublicKey',<<2,129,128,124,66,0,111,121,139,142,209,95,136,95,237,177,150,248,252,49,135,117,100,155,232,138,244,132,89,40,5,70,125,202,96,78,239,76,37,125,149,82,64,107,54,227,73,25,180,227,41,0,234,73,47,80,242,242,129,250,61,68,62,39,38,156,193,146,40,241,247,106,215,223,202,194,110,130,62,186,90,18,28,196,174,99,47,193,61,130,100,150,25,248,115,164,231,153,99,46,69,66,139,33,187,51,49,35,219,234,29,44,172,166,247,42,16,177,187,9,162,81,243,33,26,100,46,78,57,203,135>>),
- 'OTP-PUB-KEY':encode('DSAParams',{params,{'Dss-Parms',129000451850199666185842362389296595317127259539517666765336291347244303954511451744518587442120964433734460998523119938005801396466878889993179871123036311260456172022864663021425348874648247531097042575063545128239655736096045972718934778583429973433661785691086624069991876932064334822608460064613803976593,1216700114794736143432235288305776850295620488937,104420402274523493329542694749036577763086597934731674202966304958550599470165597750883637440049774107540742087494301536297571301945349213110548764383811017178451900599240379681904765817950545426764751538502808499880604633364255316249231153053427235538288687666086821781456733226598288985591031656134573747213}}),
- 'OTP-PUB-KEY':encode(
- 'SubjectPublicKeyInfo',
- {'SubjectPublicKeyInfo',
- {'AlgorithmIdentifier',
- {1,2,840,10040,4,1},
- <<48,130,1,31,2,129,129,0,183,179,230,217,37,99,144,157,21,228,204,162,207,61,246,144,58,139,139,184,184,43,108,206,0,115,173,208,100,233,201,121,21,90,179,119,53,140,25,52,34,202,121,211,164,107,43,56,68,162,159,51,244,232,138,126,164,109,121,89,237,142,57,28,32,188,44,67,253,111,121,104,40,141,211,255,140,118,37,234,150,201,155,160,16,17,51,59,26,249,41,129,16,211,119,128,95,254,182,235,132,0,92,206,93,77,106,217,201,132,203,4,75,201,246,204,216,162,1,84,79,211,10,21,152,195,103,145,2,21,0,213,30,184,86,247,16,247,69,192,241,35,138,84,57,140,3,71,65,206,233,2,129,129,0,148,179,24,63,74,91,128,25,96,29,5,78,223,246,175,0,121,86,54,178,42,231,98,241,147,180,157,60,149,160,50,243,227,76,175,89,234,203,252,242,76,108,9,204,157,182,59,206,227,127,99,215,42,156,194,78,116,25,7,62,243,169,45,5,101,179,247,127,199,144,135,103,23,42,154,125,231,248,154,101,175,155,101,42,232,41,80,41,47,128,208,11,31,106,63,12,202,207,135,80,200,136,250,171,31,118,52,91,200,138,112,111,179,23,214,123,21,118,194,179,0,185,217,52,197,182,236,13>>},
- {0,
- <<2,129,128,124,66,0,111,121,139,142,209,95,136,95,237,177,150,248,252,49,135,117,100,155,232,138,244,132,89,40,5,70,125,202,96,78,239,76,37,125,149,82,64,107,54,227,73,25,180,227,41,0,234,73,47,80,242,242,129,250,61,68,62,39,38,156,193,146,40,241,247,106,215,223,202,194,110,130,62,186,90,18,28,196,174,99,47,193,61,130,100,150,25,248,115,164,231,153,99,46,69,66,139,33,187,51,49,35,219,234,29,44,172,166,247,42,16,177,187,9,162,81,243,33,26,100,46,78,57,203,135>>}}).
diff --git a/lib/asn1/test/testChoExtension.erl b/lib/asn1/test/testChoExtension.erl
index c6a07646c2..e54cbe825b 100644
--- a/lib/asn1/test/testChoExtension.erl
+++ b/lib/asn1/test/testChoExtension.erl
@@ -31,10 +31,7 @@ extension(_Rules) ->
%% A trick to encode with another compatible CHOICE type to test reception
%% extension alternative
- {ok,Bytes2x} = asn1_wrapper:encode('ChoExtension','ChoExt1x',{str,"abc"}),
- {ok,Val2x} =
- asn1_wrapper:decode('ChoExtension','ChoExt1',lists:flatten(Bytes2x)),
- io:format("Choice extension alternative = ~p~n",[Val2x]),
+ roundtrip('ChoExt1x', {str,"abc"}),
roundtrip('ChoExt2', {bool,true}),
roundtrip('ChoExt2', {int,33}),
@@ -51,6 +48,4 @@ extension(_Rules) ->
roundtrip(Type, Value) ->
- {ok,Encoded} = 'ChoExtension':encode(Type, Value),
- {ok,Value} = 'ChoExtension':decode(Type, Encoded),
- ok.
+ asn1_test_lib:roundtrip('ChoExtension', Type, Value).
diff --git a/lib/asn1/test/testChoExternal.erl b/lib/asn1/test/testChoExternal.erl
index 5fdee48add..12abdbb2bc 100644
--- a/lib/asn1/test/testChoExternal.erl
+++ b/lib/asn1/test/testChoExternal.erl
@@ -18,25 +18,11 @@
%%
%%
-module(testChoExternal).
-
-
--export([compile/3]).
-export([external/1]).
-include_lib("test_server/include/test_server.hrl").
-include("External.hrl").
-
-
-compile(Config, Rules, Optimize) ->
- DataDir = ?config(data_dir, Config),
- CaseDir = ?config(case_dir, Config),
- true = code:add_patha(CaseDir),
- ok = asn1ct:compile(DataDir ++ "ChoExternal",
- [Rules, {outdir, CaseDir}] ++ Optimize).
-
-
-
external(_Rules) ->
roundtrip('ChoXCho', {boolCho,true}),
roundtrip('ChoXCho', {intCho,77}),
@@ -59,6 +45,4 @@ external(_Rules) ->
ok.
roundtrip(Type, Value) ->
- {ok,Encoded} = 'ChoExternal':encode(Type, Value),
- {ok,Value} = 'ChoExternal':decode(Type, Encoded),
- ok.
+ asn1_test_lib:roundtrip('ChoExternal', Type, Value).
diff --git a/lib/asn1/test/testChoOptional.erl b/lib/asn1/test/testChoOptional.erl
index cbb8134e51..f5e77cb721 100644
--- a/lib/asn1/test/testChoOptional.erl
+++ b/lib/asn1/test/testChoOptional.erl
@@ -18,83 +18,30 @@
%%
%%
-module(testChoOptional).
+-export([run/0]).
--export([optional/1]).
+-record('Seq1', {bool, int = asn1_NOVALUE, cho = asn1_NOVALUE}).
+-record('Seq2', {int = asn1_NOVALUE, cho = asn1_NOVALUE, bool}).
+-record('Seq3', {cho = asn1_NOVALUE, int = asn1_NOVALUE, bool}).
-%-include("ChoOptional.hrl").
--include_lib("test_server/include/test_server.hrl").
--include("External.hrl").
+run() ->
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho=asn1_NOVALUE}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=233,cho=asn1_NOVALUE}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho={vsCho,"Vs Str"}}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho={ocStrCho,"Oct Str"}}),
+ roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho=asn1_NOVALUE,bool=true}),
+ roundtrip('Seq2', #'Seq2'{int=233,cho=asn1_NOVALUE,bool=true}),
+ roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={vsCho,"Vs Str"},bool=true}),
+ roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={ocStrCho,"Oct Str"},bool=true}),
+ roundtrip('Seq3', #'Seq3'{cho=asn1_NOVALUE,int=asn1_NOVALUE,bool=true}),
+ roundtrip('Seq3', #'Seq3'{cho=asn1_NOVALUE,int=233,bool=true}),
+ roundtrip('Seq3', #'Seq3'{cho={vsCho,"Vs Str"},int=asn1_NOVALUE,bool=true}),
+ roundtrip('Seq3', #'Seq3'{cho={ocStrCho,"Oct Str"},int=asn1_NOVALUE,bool=true}),
+ ok.
--record('Seq1',{bool, int = asn1_NOVALUE, cho = asn1_NOVALUE}).
--record('Seq2',{int = asn1_NOVALUE, cho = asn1_NOVALUE, bool}).
--record('Seq3',{cho = asn1_NOVALUE, int = asn1_NOVALUE, bool}).
+roundtrip(Type, Value) ->
+ roundtrip('ChoOptional', Type, Value),
+ roundtrip('ChoOptionalImplicitTag', Type, Value).
-optional(_Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('ChoOptional','Seq1',#'Seq1'{bool = true}),
- ?line {ok,{'Seq1',true,asn1_NOVALUE,asn1_NOVALUE}} =
- asn1_wrapper:decode('ChoOptional','Seq1',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('ChoOptional','Seq1',#'Seq1'{bool = true,
- int = 233}),
- ?line {ok,{'Seq1',true,233,asn1_NOVALUE}} =
- asn1_wrapper:decode('ChoOptional','Seq1',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('ChoOptional','Seq1',#'Seq1'{bool = true,
- cho = {vsCho,"Vs Str"}}),
- ?line {ok,{'Seq1',true,asn1_NOVALUE,{vsCho,"Vs Str"}}} =
- asn1_wrapper:decode('ChoOptional','Seq1',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} =
- asn1_wrapper:encode('ChoOptional','Seq1',#'Seq1'{bool = true,
- cho = {ocStrCho,"Oct Str"}}),
- ?line {ok,{'Seq1',true,asn1_NOVALUE,{ocStrCho,"Oct Str"}}} =
- asn1_wrapper:decode('ChoOptional','Seq1',lists:flatten(Bytes14)),
-
-
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('ChoOptional','Seq2',#'Seq2'{bool = true}),
- ?line {ok,{'Seq2',asn1_NOVALUE,asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptional','Seq2',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('ChoOptional','Seq2',#'Seq2'{bool = true,
- int = 233}),
- ?line {ok,{'Seq2',233,asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptional','Seq2',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('ChoOptional','Seq2',#'Seq2'{bool = true,
- cho = {vsCho,"Vs Str"}}),
- ?line {ok,{'Seq2',asn1_NOVALUE,{vsCho,"Vs Str"},true}} =
- asn1_wrapper:decode('ChoOptional','Seq2',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} =
- asn1_wrapper:encode('ChoOptional','Seq2',#'Seq2'{bool = true,
- cho = {ocStrCho,"Oct Str"}}),
- ?line {ok,{'Seq2',asn1_NOVALUE,{ocStrCho,"Oct Str"},true}} =
- asn1_wrapper:decode('ChoOptional','Seq2',lists:flatten(Bytes24)),
-
-
-
- ?line {ok,Bytes31} = asn1_wrapper:encode('ChoOptional','Seq3',#'Seq3'{bool = true}),
- ?line {ok,{'Seq3',asn1_NOVALUE,asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptional','Seq3',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('ChoOptional','Seq3',#'Seq3'{bool = true,
- int = 233}),
- ?line {ok,{'Seq3',asn1_NOVALUE,233,true}} =
- asn1_wrapper:decode('ChoOptional','Seq3',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} = asn1_wrapper:encode('ChoOptional','Seq3',#'Seq3'{bool = true,
- cho = {vsCho,"Vs Str"}}),
- ?line {ok,{'Seq3',{vsCho,"Vs Str"},asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptional','Seq3',lists:flatten(Bytes33)),
-
- ?line {ok,Bytes34} =
- asn1_wrapper:encode('ChoOptional','Seq3',#'Seq3'{bool = true,
- cho = {ocStrCho,"Oct Str"}}),
- ?line {ok,{'Seq3',{ocStrCho,"Oct Str"},asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptional','Seq3',lists:flatten(Bytes34)),
-
-
-
- ok.
+roundtrip(Mod, Type, Value) ->
+ asn1_test_lib:roundtrip(Mod, Type, Value).
diff --git a/lib/asn1/test/testChoOptionalImplicitTag.erl b/lib/asn1/test/testChoOptionalImplicitTag.erl
deleted file mode 100644
index efe335cabd..0000000000
--- a/lib/asn1/test/testChoOptionalImplicitTag.erl
+++ /dev/null
@@ -1,101 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(testChoOptionalImplicitTag).
-
-
--export([optional/1]).
-
-%-include("ChoOptional.hrl").
--include_lib("test_server/include/test_server.hrl").
--include("External.hrl").
-
--record('Seq1',{bool, int = asn1_NOVALUE, cho = asn1_NOVALUE}).
--record('Seq2',{int = asn1_NOVALUE, cho = asn1_NOVALUE, bool}).
--record('Seq3',{cho = asn1_NOVALUE, int = asn1_NOVALUE, bool}).
-
-optional(_Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq1',#'Seq1'{bool = true}),
- ?line {ok,{'Seq1',true,asn1_NOVALUE,asn1_NOVALUE}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq1',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq1',#'Seq1'{bool = true,
- int = 233}),
- ?line {ok,{'Seq1',true,233,asn1_NOVALUE}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq1',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq1',#'Seq1'{bool = true,
- cho = {vsCho,"Vs Str"}}),
- ?line {ok,{'Seq1',true,asn1_NOVALUE,{vsCho,"Vs Str"}}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq1',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} =
- asn1_wrapper:encode('ChoOptionalImplicitTag','Seq1',#'Seq1'{bool = true,
- cho = {ocStrCho,"Oct Str"}}),
- ?line {ok,{'Seq1',true,asn1_NOVALUE,{ocStrCho,"Oct Str"}}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq1',lists:flatten(Bytes14)),
-
-
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq2',#'Seq2'{bool = true}),
- ?line {ok,{'Seq2',asn1_NOVALUE,asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq2',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq2',#'Seq2'{bool = true,
- int = 233}),
- ?line {ok,{'Seq2',233,asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq2',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq2',#'Seq2'{bool = true,
- cho = {vsCho,"Vs Str"}}),
- ?line {ok,{'Seq2',asn1_NOVALUE,{vsCho,"Vs Str"},true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq2',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} =
- asn1_wrapper:encode('ChoOptionalImplicitTag','Seq2',#'Seq2'{bool = true,
- cho = {ocStrCho,"Oct Str"}}),
- ?line {ok,{'Seq2',asn1_NOVALUE,{ocStrCho,"Oct Str"},true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq2',lists:flatten(Bytes24)),
-
-
-
- ?line {ok,Bytes31} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq3',#'Seq3'{bool = true}),
- ?line {ok,{'Seq3',asn1_NOVALUE,asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq3',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq3',#'Seq3'{bool = true,
- int = 233}),
- ?line {ok,{'Seq3',asn1_NOVALUE,233,true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq3',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} = asn1_wrapper:encode('ChoOptionalImplicitTag','Seq3',#'Seq3'{bool = true,
- cho = {vsCho,"Vs Str"}}),
- ?line {ok,{'Seq3',{vsCho,"Vs Str"},asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq3',lists:flatten(Bytes33)),
-
- ?line {ok,Bytes34} =
- asn1_wrapper:encode('ChoOptionalImplicitTag','Seq3',#'Seq3'{bool = true,
- cho = {ocStrCho,"Oct Str"}}),
- ?line {ok,{'Seq3',{ocStrCho,"Oct Str"},asn1_NOVALUE,true}} =
- asn1_wrapper:decode('ChoOptionalImplicitTag','Seq3',lists:flatten(Bytes34)),
-
-
-
- ok.
diff --git a/lib/asn1/test/testChoPrim.erl b/lib/asn1/test/testChoPrim.erl
index 936a38f76c..4665de6989 100644
--- a/lib/asn1/test/testChoPrim.erl
+++ b/lib/asn1/test/testChoPrim.erl
@@ -25,80 +25,44 @@
-include_lib("test_server/include/test_server.hrl").
bool(Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('ChoPrim','ChoCon',{bool0,true}),
- ?line {ok,{bool0,true}} = asn1_wrapper:decode('ChoPrim','ChoCon',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('ChoPrim','ChoCon',{bool1,true}),
- ?line {ok,{bool1,true}} = asn1_wrapper:decode('ChoPrim','ChoCon',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('ChoPrim','ChoCon',{int2,233}),
- ?line {ok,{int2,233}} = asn1_wrapper:decode('ChoPrim','ChoCon',lists:flatten(Bytes13)),
-
- ?line case asn1_wrapper:erule(Rules) of
- ber ->
- ?line {error,{asn1,{invalid_choice_type,wrong}}} =
- case catch asn1_wrapper:encode('ChoPrim','ChoCon',{wrong,233}) of
- X1 -> X1 end,
- ?line {error,{asn1,{invalid_choice_tag,_WrongTag}}} =
- case catch asn1_wrapper:decode('ChoPrim','ChoCon',[131,2,0,233]) of
- X2 -> X2 end,
- ok;
-
- per ->
- ok
- end,
-
+ roundtrip('ChoCon', {bool0,true}),
+ roundtrip('ChoCon', {bool1,true}),
+ roundtrip('ChoCon', {int2,233}),
+ case Rules of
+ ber ->
+ {error,{asn1,{invalid_choice_type,wrong}}} =
+ (catch 'ChoPrim':encode('ChoCon', {wrong,233})),
+ {error,{asn1,{invalid_choice_tag,_WrongTag}}} =
+ (catch 'ChoPrim':decode('ChoCon', <<131,2,0,233>>));
+ per ->
+ ok;
+ uper ->
+ ok
+ end,
ok.
-
-
int(Rules) ->
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('ChoPrim','ChoExp',{int10,1}),
- ?line {ok,{int10,first}} = asn1_wrapper:decode('ChoPrim','ChoExp',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('ChoPrim','ChoExp',{int10,first}),
- ?line {ok,{int10,first}} = asn1_wrapper:decode('ChoPrim','ChoExp',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('ChoPrim','ChoExp',{int10,last}),
- ?line {ok,{int10,last}} = asn1_wrapper:decode('ChoPrim','ChoExp',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} = asn1_wrapper:encode('ChoPrim','ChoExp',{bool11,true}),
- ?line {ok,{bool11,true}} = asn1_wrapper:decode('ChoPrim','ChoExp',lists:flatten(Bytes24)),
-
-
- ?line {ok,Bytes26} = asn1_wrapper:encode('ChoPrim','ChoExp',{enum12,one}),
- ?line {ok,{enum12,one}} = asn1_wrapper:decode('ChoPrim','ChoExp',lists:flatten(Bytes26)),
-
- ?line {ok,Bytes25} = asn1_wrapper:encode('ChoPrim','ChoExp',{bool11,true}),
- ?line {ok,{bool11,true}} =
- asn1_wrapper:decode('ChoPrim','ChoExp',lists:flatten(Bytes25)),
-
- ?line {error,{asn1,_}} =
- case catch asn1_wrapper:encode('ChoPrim','ChoExp',{enum12,four}) of
- X3 -> X3 end,
-
- ?line {error,{asn1,_}} =
- case catch asn1_wrapper:encode('ChoPrim','ChoExp',{wrong,233}) of
- X4 -> io:format("error reason = ~p~n",[X4]), X4 end,
-
- ?line case asn1_wrapper:erule(Rules) of
- ber ->
- ?line {error,{asn1,_}} =
- case catch asn1_wrapper:decode('ChoPrim','ChoExp',[107,3,2,1,1]) of
- X5 -> X5 end,
- ok;
-
- per ->
- ok
- end,
+ roundtrip('ChoExp', {int10,1}, {int10,first}),
+ roundtrip('ChoExp', {int10,first}),
+ roundtrip('ChoExp', {int10,last}),
+ roundtrip('ChoExp', {bool11,true}),
+ roundtrip('ChoExp', {enum12,one}),
+ roundtrip('ChoExp', {bool11,true}),
+
+ {error,{asn1,_}} = (catch 'ChoPrim':encode('ChoExp', {enum12,four})),
+ {error,{asn1,_}} = (catch 'ChoPrim':encode('ChoExp', {wrong,233})),
+ case Rules of
+ ber ->
+ {error,{asn1,_}} = (catch 'ChoPrim':decode('ChoExp', <<107,3,2,1,1>>));
+ per ->
+ ok;
+ uper ->
+ ok
+ end,
ok.
+roundtrip(Type, Value) ->
+ roundtrip(Type, Value, Value).
-
-
-
-
-
-
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('ChoPrim', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testChoRecursive.erl b/lib/asn1/test/testChoRecursive.erl
index ee26d124a9..593b845949 100644
--- a/lib/asn1/test/testChoRecursive.erl
+++ b/lib/asn1/test/testChoRecursive.erl
@@ -43,6 +43,4 @@ recursive(_Rules) ->
ok.
roundtrip(Type, Value) ->
- {ok,Encoded} = 'ChoRecursive':encode(Type, Value),
- {ok,Value} = 'ChoRecursive':decode(Type, Encoded),
- ok.
+ asn1_test_lib:roundtrip('ChoRecursive', Type, Value).
diff --git a/lib/asn1/test/testChoTypeRefCho.erl b/lib/asn1/test/testChoTypeRefCho.erl
index 9bd732f462..cd2672add0 100644
--- a/lib/asn1/test/testChoTypeRefCho.erl
+++ b/lib/asn1/test/testChoTypeRefCho.erl
@@ -24,43 +24,15 @@
-include_lib("test_server/include/test_server.hrl").
choice(_Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('ChoTypeRefCho','ChoTRcho',{choCho,{choInt,88}}),
- ?line {ok,{choCho,{choInt,88}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoTRcho',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('ChoTypeRefCho','ChoTRcho',{choChoE,{choInt,88}}),
- ?line {ok,{choChoE,{choInt,88}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoTRcho',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('ChoTypeRefCho','ChoTRcho',{'choCho-E',{choInt,88}}),
- ?line {ok,{'choCho-E',{choInt,88}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoTRcho',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} = asn1_wrapper:encode('ChoTypeRefCho','ChoTRcho',{'choChoE-E',{choInt,88}}),
- ?line {ok,{'choChoE-E',{choInt,88}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoTRcho',lists:flatten(Bytes14)),
-
-
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('ChoTypeRefCho','ChoChoInline',{bool1,true}),
- ?line {ok,{bool1,true}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoChoInline',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('ChoTypeRefCho','ChoChoInline',{'choCho',{bool,true}}),
- ?line {ok,{'choCho',{bool,true}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoChoInline',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('ChoTypeRefCho','ChoChoInline',{'choCho',{octStr,"kk"}}),
- ?line {ok,{'choCho',{octStr,"kk"}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoChoInline',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} = asn1_wrapper:encode('ChoTypeRefCho','ChoChoInline',{'choCho',{int,55}}),
- ?line {ok,{'choCho',{int,55}}} =
- asn1_wrapper:decode('ChoTypeRefCho','ChoChoInline',lists:flatten(Bytes24)),
-
-
-
-
-
+ roundtrip('ChoTRcho', {choCho,{choInt,88}}),
+ roundtrip('ChoTRcho', {choChoE,{choInt,88}}),
+ roundtrip('ChoTRcho', {'choCho-E',{choInt,88}}),
+ roundtrip('ChoTRcho', {'choChoE-E',{choInt,88}}),
+ roundtrip('ChoChoInline', {bool1,true}),
+ roundtrip('ChoChoInline', {choCho,{bool,true}}),
+ roundtrip('ChoChoInline', {choCho,{octStr,"kk"}}),
+ roundtrip('ChoChoInline', {choCho,{int,55}}),
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('ChoTypeRefCho', Type, Value).
diff --git a/lib/asn1/test/testChoTypeRefPrim.erl b/lib/asn1/test/testChoTypeRefPrim.erl
index edef6192fe..8a2bc7bd8e 100644
--- a/lib/asn1/test/testChoTypeRefPrim.erl
+++ b/lib/asn1/test/testChoTypeRefPrim.erl
@@ -24,60 +24,20 @@
-include_lib("test_server/include/test_server.hrl").
prim(_Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR',{bool,true}),
- ?line {ok,{bool,true}} = asn1_wrapper:decode('ChoTypeRefPrim','ChoTR',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('ChoTypeRefPrim','ChoTR',{octStr,[11,12,13,14,15,16,17]}),
- ?line {ok,{octStr,[11,12,13,14,15,16,17]}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR',{int,233}),
- ?line {ok,{int,233}} = asn1_wrapper:decode('ChoTypeRefPrim','ChoTR',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} =
- asn1_wrapper:encode('ChoTypeRefPrim','ChoTR',{octStr,"Stringing in the rain"}),
- ?line {ok,{octStr,"Stringing in the rain"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR',lists:flatten(Bytes14)),
-
-
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStr',"A string"}),
- ?line {ok,{'octStr',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStrI',"A string"}),
- ?line {ok,{'octStrI',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStrE',"A string"}),
- ?line {ok,{'octStrE',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStr-I',"A string"}),
- ?line {ok,{'octStr-I',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes24)),
-
- ?line {ok,Bytes25} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStrI-I',"A string"}),
- ?line {ok,{'octStrI-I',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes25)),
-
- ?line {ok,Bytes26} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStrE-I',"A string"}),
- ?line {ok,{'octStrE-I',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes26)),
-
- ?line {ok,Bytes27} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStr-E',"A string"}),
- ?line {ok,{'octStr-E',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes27)),
-
- ?line {ok,Bytes28} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStrI-E',"A string"}),
- ?line {ok,{'octStrI-E',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes28)),
-
- ?line {ok,Bytes29} = asn1_wrapper:encode('ChoTypeRefPrim','ChoTR2',{'octStrE-E',"A string"}),
- ?line {ok,{'octStrE-E',"A string"}} =
- asn1_wrapper:decode('ChoTypeRefPrim','ChoTR2',lists:flatten(Bytes29)),
-
-
+ roundtrip('ChoTR', {bool,true}),
+ roundtrip('ChoTR', {octStr,[11,12,13,14,15,16,17]}),
+ roundtrip('ChoTR', {int,233}),
+ roundtrip('ChoTR', {octStr,"Stringing in the rain"}),
+ roundtrip('ChoTR2', {octStr,"A string"}),
+ roundtrip('ChoTR2', {octStrI,"A string"}),
+ roundtrip('ChoTR2', {octStrE,"A string"}),
+ roundtrip('ChoTR2', {'octStr-I',"A string"}),
+ roundtrip('ChoTR2', {'octStrI-I',"A string"}),
+ roundtrip('ChoTR2', {'octStrE-I',"A string"}),
+ roundtrip('ChoTR2', {'octStr-E',"A string"}),
+ roundtrip('ChoTR2', {'octStrI-E',"A string"}),
+ roundtrip('ChoTR2', {'octStrE-E',"A string"}),
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('ChoTypeRefPrim', Type, Value).
diff --git a/lib/asn1/test/testChoTypeRefSeq.erl b/lib/asn1/test/testChoTypeRefSeq.erl
index bf2b66c73e..86c22619aa 100644
--- a/lib/asn1/test/testChoTypeRefSeq.erl
+++ b/lib/asn1/test/testChoTypeRefSeq.erl
@@ -23,82 +23,21 @@
-include_lib("test_server/include/test_server.hrl").
--record('ChoSeq',{seqInt, seqOs}).
--record('ChoSeqImp',{seqInt, seqOs}).
--record('ChoSeqExp',{seqInt, seqOs}).
+-record('ChoSeq', {seqInt, seqOs}).
+-record('ChoSeqImp', {seqInt, seqOs}).
+-record('ChoSeqExp', {seqInt, seqOs}).
seq(_Rules) ->
-
- ?line {ok,Bytes1} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {choSeq,#'ChoSeq'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{choSeq,{'ChoSeq',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes1)),
-
-
- ?line {ok,Bytes2} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {choSeqI,#'ChoSeq'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{choSeqI,{'ChoSeq',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes2)),
-
-
- ?line {ok,Bytes3} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {choSeqE,#'ChoSeq'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{choSeqE,{'ChoSeq',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes3)),
-
-
- ?line {ok,Bytes4} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {'choSeq-I',#'ChoSeqImp'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{'choSeq-I',{'ChoSeqImp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes4)),
-
-
- ?line {ok,Bytes5} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {'choSeqI-I',#'ChoSeqImp'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{'choSeqI-I',{'ChoSeqImp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes5)),
-
-
- ?line {ok,Bytes6} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {'choSeqE-I',#'ChoSeqImp'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{'choSeqE-I',{'ChoSeqImp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes6)),
-
-
- ?line {ok,Bytes7} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {'choSeq-E',#'ChoSeqExp'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{'choSeq-E',{'ChoSeqExp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes7)),
-
-
- ?line {ok,Bytes8} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {'choSeqI-E',#'ChoSeqExp'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{'choSeqI-E',{'ChoSeqExp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes8)),
-
-
- ?line {ok,Bytes9} =
- asn1_wrapper:encode('ChoTypeRefSeq','ChoTRseq',
- {'choSeqE-E',#'ChoSeqExp'{seqInt = 88,
- seqOs = "A string"}}),
- ?line {ok,{'choSeqE-E',{'ChoSeqExp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSeq','ChoTRseq',lists:flatten(Bytes9)),
-
-
+ roundtrip('ChoTRseq', {choSeq,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {choSeqI,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {choSeqE,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {'choSeq-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {'choSeqI-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {'choSeqE-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {'choSeq-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {'choSeqI-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {'choSeqE-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('ChoTypeRefSeq', Type, Value).
diff --git a/lib/asn1/test/testChoTypeRefSet.erl b/lib/asn1/test/testChoTypeRefSet.erl
index 8a3e8bdbb0..fd3d75cbcb 100644
--- a/lib/asn1/test/testChoTypeRefSet.erl
+++ b/lib/asn1/test/testChoTypeRefSet.erl
@@ -23,83 +23,21 @@
-include_lib("test_server/include/test_server.hrl").
--record('ChoSet',{setInt, setOs}).
--record('ChoSetImp',{setInt, setOs}).
--record('ChoSetExp',{setInt, setOs}).
+-record('ChoSet', {setInt, setOs}).
+-record('ChoSetImp', {setInt, setOs}).
+-record('ChoSetExp', {setInt, setOs}).
set(_Rules) ->
-
- ?line {ok,Bytes1} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {choSet,#'ChoSet'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{choSet,{'ChoSet',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes1)),
-
-
- ?line {ok,Bytes2} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {choSetI,#'ChoSet'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{choSetI,{'ChoSet',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes2)),
-
-
- ?line {ok,Bytes3} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {choSetE,#'ChoSet'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{choSetE,{'ChoSet',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes3)),
-
-
- ?line {ok,Bytes4} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {'choSet-I',#'ChoSetImp'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{'choSet-I',{'ChoSetImp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes4)),
-
-
- ?line {ok,Bytes5} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {'choSetI-I',#'ChoSetImp'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{'choSetI-I',{'ChoSetImp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes5)),
-
-
- ?line {ok,Bytes6} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {'choSetE-I',#'ChoSetImp'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{'choSetE-I',{'ChoSetImp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes6)),
-
-
- ?line {ok,Bytes7} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {'choSet-E',#'ChoSetExp'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{'choSet-E',{'ChoSetExp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes7)),
-
-
- ?line {ok,Bytes8} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {'choSetI-E',#'ChoSetExp'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{'choSetI-E',{'ChoSetExp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes8)),
-
-
- ?line {ok,Bytes9} =
- asn1_wrapper:encode('ChoTypeRefSet','ChoTRset',
- {'choSetE-E',#'ChoSetExp'{setInt = 88,
- setOs = "A string"}}),
- ?line {ok,{'choSetE-E',{'ChoSetExp',88,"A string"}}} =
- asn1_wrapper:decode('ChoTypeRefSet','ChoTRset',lists:flatten(Bytes9)),
-
-
-
+ roundtrip('ChoTRset', {choSet,#'ChoSet'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {choSetI,#'ChoSet'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {choSetE,#'ChoSet'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {'choSet-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {'choSetI-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {'choSetE-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {'choSet-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {'choSetI-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {'choSetE-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('ChoTypeRefSet', Type, Value).
diff --git a/lib/asn1/test/testChoiceIndefinite.erl b/lib/asn1/test/testChoiceIndefinite.erl
index b5832c985a..87910cf6ec 100644
--- a/lib/asn1/test/testChoiceIndefinite.erl
+++ b/lib/asn1/test/testChoiceIndefinite.erl
@@ -32,6 +32,6 @@ main(ber) ->
Bi = [48,128,160,128,128,1,11,0,0,129,1,12,0,0],
%% the value which is encoded
V = {'Seq',{ca,11},12},
- ?line {ok,V} = asn1_wrapper:decode('ChoiceIndef','Seq',B),
- ?line {ok,V} = asn1_wrapper:decode('ChoiceIndef','Seq',Bi),
+ {ok,V} = 'ChoiceIndef':decode('Seq', B),
+ {ok,V} = 'ChoiceIndef':decode('Seq', Bi),
ok.
diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl
index 03a09492af..54ba748519 100644
--- a/lib/asn1/test/testConstraints.erl
+++ b/lib/asn1/test/testConstraints.erl
@@ -70,6 +70,8 @@ int_constraints(Rules) ->
%%==========================================================
LastNumWithoutLengthEncoding = 65536,
roundtrip('Range256to65536', LastNumWithoutLengthEncoding),
+ roundtrip('Range256to65536Ext', LastNumWithoutLengthEncoding),
+ roundtrip('Range256to65536Ext', 42),
FirstNumWithLengthEncoding = 65537,
roundtrip('LargeConstraints', 'RangeMax', FirstNumWithLengthEncoding),
@@ -95,6 +97,8 @@ int_constraints(Rules) ->
%% Random number within longlong range
LongLong = 12672809400538808320,
roundtrip('LongLong', LongLong),
+ roundtrip('LongLongExt', LongLong),
+ roundtrip('LongLongExt', -10000),
%%==========================================================
%% Constraint Combinations (Duboisson p. 285)
@@ -122,6 +126,42 @@ int_constraints(Rules) ->
range_error(Rules, 'X1', 21),
%%==========================================================
+ %% Union of single values
+ %% Sv1 ::= INTEGER (2|3|17)
+ %% Sv2 ::= INTEGER (2|3|17, ...)
+ %% Sv3 ::= INTEGER {a(2),b(3),z(17)} (2|3|17, ...)
+ %%==========================================================
+
+ range_error(Rules, 'Sv1', 1),
+ range_error(Rules, 'Sv1', 18),
+ roundtrip('Sv1', 2),
+ roundtrip('Sv1', 3),
+ roundtrip('Sv1', 7),
+
+ %% Encoded as root
+ v_roundtrip(Rules, 'Sv2', 2),
+ v_roundtrip(Rules, 'Sv2', 3),
+ v_roundtrip(Rules, 'Sv2', 17),
+
+ %% Encoded as extension
+ v_roundtrip(Rules, 'Sv2', 1),
+ v_roundtrip(Rules, 'Sv2', 4),
+ v_roundtrip(Rules, 'Sv2', 18),
+
+ %% Encoded as root
+ v_roundtrip(Rules, 'Sv3', a),
+ v_roundtrip(Rules, 'Sv3', b),
+ v_roundtrip(Rules, 'Sv3', z),
+ v_roundtrip(Rules, 'Sv3', 2, a),
+ v_roundtrip(Rules, 'Sv3', 3, b),
+ v_roundtrip(Rules, 'Sv3', 17, z),
+
+ %% Encoded as extension
+ v_roundtrip(Rules, 'Sv3', 1),
+ v_roundtrip(Rules, 'Sv3', 4),
+ v_roundtrip(Rules, 'Sv3', 18),
+
+ %%==========================================================
%% SemiConstrained
%%==========================================================
@@ -182,6 +222,15 @@ int_constraints(Rules) ->
roundtrip('ShorterExt', "abcde"),
roundtrip('ShorterExt', "abcdef"),
+ %%==========================================================
+ %% Unions of INTEGER constraints
+ %%==========================================================
+ seq_roundtrip(Rules, 'SeqOverlapping', 'SeqNonOverlapping', 7580),
+ seq_roundtrip(Rules, 'SeqOverlapping', 'SeqNonOverlapping', 9600),
+ seq_roundtrip(Rules, 'SeqOverlapping', 'SeqNonOverlapping', 18050),
+ seq_roundtrip(Rules, 'SeqOverlapping', 'SeqNonOverlapping', 19000),
+ seq_roundtrip(Rules, 'SeqOverlapping', 'SeqNonOverlapping', 26900),
+
ok.
%% PER: Ensure that if the lower bound is Lb, Lb+16#80 is encoded
@@ -197,33 +246,54 @@ v(per, 'SemiConstrainedExt', 42+128) -> "000180";
v(uper, 'SemiConstrainedExt', 42+128) -> "00C000";
v(ber, 'NegSemiConstrainedExt', 0) -> "020100";
v(per, 'NegSemiConstrainedExt', 0) -> "000180";
-v(uper, 'NegSemiConstrainedExt', 0) -> "00C000".
+v(uper, 'NegSemiConstrainedExt', 0) -> "00C000";
+v(ber, 'Sv2', 1) -> "020101";
+v(per, 'Sv2', 1) -> "800101";
+v(uper, 'Sv2', 1) -> "808080";
+v(ber, 'Sv2', 2) -> "020102";
+v(per, 'Sv2', 2) -> "00";
+v(uper, 'Sv2', 2) -> "00";
+v(ber, 'Sv2', 3) -> "020103";
+v(per, 'Sv2', 3) -> "08";
+v(uper, 'Sv2', 3) -> "08";
+v(ber, 'Sv2', 4) -> "020104";
+v(per, 'Sv2', 4) -> "800104";
+v(uper, 'Sv2', 4) -> "808200";
+v(ber, 'Sv2', 17) -> "020111";
+v(per, 'Sv2', 17) -> "78";
+v(uper, 'Sv2', 17) -> "78";
+v(ber, 'Sv2', 18) -> "020112";
+v(per, 'Sv2', 18) -> "800112";
+v(uper, 'Sv2', 18) -> "808900";
+v(Rule, 'Sv3', a) -> v(Rule, 'Sv2', 2);
+v(Rule, 'Sv3', b) -> v(Rule, 'Sv2', 3);
+v(Rule, 'Sv3', z) -> v(Rule, 'Sv2', 17);
+v(Rule, 'Sv3', Val) when is_integer(Val) -> v(Rule, 'Sv2', Val).
shorter_ext(per, "a") -> <<16#80,16#01,16#61>>;
shorter_ext(uper, "a") -> <<16#80,16#E1>>;
shorter_ext(ber, _) -> none.
refed_NNL_name(_Erule) ->
- ?line {ok,_} = asn1_wrapper:encode('Constraints','AnotherThing',fred),
- ?line {error,_Reason} =
- asn1_wrapper:encode('Constraints','AnotherThing',fred3).
+ roundtrip('AnotherThing', fred),
+ {error,_Reason} = 'Constraints':encode('AnotherThing', fred3).
v_roundtrip(Erule, Type, Value) ->
Encoded = asn1_test_lib:hex_to_bin(v(Erule, Type, Value)),
Encoded = roundtrip('Constraints', Type, Value).
+v_roundtrip(Erule, Type, Value, Expected) ->
+ Encoded = asn1_test_lib:hex_to_bin(v(Erule, Type, Value)),
+ Encoded = asn1_test_lib:roundtrip_enc('Constraints', Type, Value, Expected).
+
roundtrip(Type, Value) ->
roundtrip('Constraints', Type, Value).
roundtrip(Module, Type, Value) ->
- {ok,Encoded} = Module:encode(Type, Value),
- {ok,Value} = Module:decode(Type, Encoded),
- Encoded.
+ asn1_test_lib:roundtrip_enc(Module, Type, Value).
roundtrip_enc(Type, Value, Enc) ->
- Module = 'Constraints',
- {ok,Encoded} = Module:encode(Type, Value),
- {ok,Value} = Module:decode(Type, Encoded),
+ Encoded = asn1_test_lib:roundtrip_enc('Constraints', Type, Value),
case Enc of
none -> ok;
Encoded -> ok
@@ -240,3 +310,12 @@ range_error(Per, Type, Value) when Per =:= per; Per =:= uper ->
%% on encode.
{error,_} = 'Constraints':encode(Type, Value),
ok.
+
+seq_roundtrip(Rules, Seq1, Seq2, Val) ->
+ Enc = roundtrip(Seq1, {Seq1,Val}),
+ case Rules of
+ ber ->
+ roundtrip(Seq2, {Seq2,Val});
+ _ ->
+ roundtrip_enc(Seq2, {Seq2,Val}, Enc)
+ end.
diff --git a/lib/asn1/test/testContextSwitchingTypes.erl b/lib/asn1/test/testContextSwitchingTypes.erl
index 40dbe25015..bdd6883dac 100644
--- a/lib/asn1/test/testContextSwitchingTypes.erl
+++ b/lib/asn1/test/testContextSwitchingTypes.erl
@@ -24,31 +24,21 @@
-include_lib("test_server/include/test_server.hrl").
test(Config) ->
- ?line ValT = 'ContextSwitchingTypes':'val1-T'(),
- ?line {ok,Bytes1} =
- asn1_wrapper:encode('ContextSwitchingTypes','T',ValT),
- ?line {ok,Result1} =
- asn1_wrapper:decode('ContextSwitchingTypes','T',Bytes1),
- ?line ok = check_EXTERNAL(Result1),
- ?line {ok,ValT2} = asn1ct:value('ContextSwitchingTypes','T',
- [{i, ?config(case_dir, Config)}]),
- ?line {ok,Bytes1_2} =
- asn1_wrapper:encode('ContextSwitchingTypes','T',ValT2),
- ?line {ok,Result1_2} =
- asn1_wrapper:decode('ContextSwitchingTypes','T',Bytes1_2),
- ?line ok = check_EXTERNAL(Result1_2),
+ ValT = 'ContextSwitchingTypes':'val1-T'(),
+ check_EXTERNAL(enc_dec('T', ValT)),
- ?line ValEP = 'ContextSwitchingTypes':'val1-EP'(),
- ?line {ok,Bytes2} =
- asn1_wrapper:encode('ContextSwitchingTypes','EP',ValEP),
- ?line {ok,_Result2} =
- asn1_wrapper:decode('ContextSwitchingTypes','EP',Bytes2),
+ {ok,ValT2} = asn1ct:value('ContextSwitchingTypes', 'T',
+ [{i,?config(case_dir, Config)}]),
+ check_EXTERNAL(enc_dec('T', ValT2)),
- ?line ValCS = 'ContextSwitchingTypes':'val1-CS'(),
- ?line {ok,Bytes3} =
- asn1_wrapper:encode('ContextSwitchingTypes','CS',ValCS),
- ?line {ok,_Result3} =
- asn1_wrapper:decode('ContextSwitchingTypes','CS',Bytes3).
+ ValEP = 'ContextSwitchingTypes':'val1-EP'(),
+ ValEPDec = enc_dec('EP', ValEP),
+ io:format("~p\n~p\n", [ValEP,ValEPDec]),
+
+ ValCS = 'ContextSwitchingTypes':'val1-CS'(),
+ ValCSDec = enc_dec('EP', ValCS),
+ io:format("~p\n~p\n", [ValCS,ValCSDec]),
+ ok.
check_EXTERNAL({'EXTERNAL',Identif,DVD,DV})->
@@ -85,3 +75,9 @@ check_object_identifier(Tuple) when is_tuple(Tuple) ->
not is_integer(E)] of
[] -> ok
end.
+
+enc_dec(T, V0) ->
+ M = 'ContextSwitchingTypes',
+ {ok,Enc} = M:encode(T, V0),
+ {ok,V} = M:decode(T, Enc),
+ V.
diff --git a/lib/asn1/test/testDER.erl b/lib/asn1/test/testDER.erl
index 395116bd34..3f74a16797 100644
--- a/lib/asn1/test/testDER.erl
+++ b/lib/asn1/test/testDER.erl
@@ -25,26 +25,24 @@
test() ->
Val = {'Set',12,{version,214},true},
- ?line {ok,Bin}=asn1_wrapper:encode('DERSpec','Set',Val),
- ?line ok = match_value('Set',Bin),
- ?line {ok,{'Set',12,{version,214},true}} =
- asn1_wrapper:decode('DERSpec','Set',Bin),
+ roundtrip_enc('Set', Val, <<49,12,1,1,255,2,2,0,214,161,3,2,1,12>>),
- ValSof = [{version,12},{message,"PrintableString"},{message,"Print"},{version,11}],
- ?line {ok,BSof} = asn1_wrapper:encode('DERSpec','SetOf',ValSof),
- ?line ok = match_value('SetOf',BSof),
- ?line {ok,[{version,11},{version,12},{message,"Print"},{message,"PrintableString"}]} = asn1_wrapper:decode('DERSpec','SetOf',BSof),
+ ValSof = [{version,12},{message,"PrintableString"},
+ {message,"Print"},{version,11}],
+ ValSofSorted = [{version,11},{version,12},
+ {message,"Print"},{message,"PrintableString"}],
+ roundtrip_enc('SetOf', ValSof, ValSofSorted,
+ <<49,30,2,1,11,2,1,12,19,5,80,114,105,110,116,19,15,80,
+ 114,105,110,116,97,98,108,101,83,116,114,105,110,103>>),
ValSO = [{'Seq2',1,true},{'Seq2',120000,false},{'Seq2',3,true}],
- ?line {ok,SOB} = asn1_wrapper:encode('DERSpec','SO',ValSO),
- ?line {ok,ValSO} = asn1_wrapper:decode('DERSpec','SO',SOB).
+ roundtrip('SO', ValSO).
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('DERSpec', T, V).
-match_value('Set',<<49,12,1,1,255,2,2,0,214,161,3,2,1,12>>) ->
- ok;
-match_value('Set',[49,12,1,1,255,2,2,0,214,161,3,2,1,12]) ->
- ok;
-match_value('SetOf',<<49,30,2,1,11,2,1,12,19,5,80,114,105,110,116,19,15,80,114,105,110,116,97,98,108,101,83,116,114,105,110,103>>) -> ok;
-match_value('SetOf',[49,30,2,1,11,2,1,12,19,5,80,114,105,110,116,19,15,80,114,105,110,116,97,98,108,101,83,116,114,105,110,103]) -> ok;
-match_value(_,B) ->
- {error,B}.
+roundtrip_enc(T, V, Enc) ->
+ Enc = asn1_test_lib:roundtrip_enc('DERSpec', T, V).
+
+roundtrip_enc(T, V, Expected, Enc) ->
+ Enc = asn1_test_lib:roundtrip_enc('DERSpec', T, V, Expected).
diff --git a/lib/asn1/test/testDeepTConstr.erl b/lib/asn1/test/testDeepTConstr.erl
index 620b5f3356..880f15e91a 100644
--- a/lib/asn1/test/testDeepTConstr.erl
+++ b/lib/asn1/test/testDeepTConstr.erl
@@ -88,9 +88,7 @@ main(_Erule) ->
roundtrip(M, T, V) ->
- {ok,E} = M:encode(T, V),
- {ok,V} = M:decode(T, E),
- ok.
+ asn1_test_lib:roundtrip(M, T, V).
%% Either encoding or decoding must fail.
must_fail(M, T, V) ->
diff --git a/lib/asn1/test/testDef.erl b/lib/asn1/test/testDef.erl
index 48f0015008..b8df3c4f8b 100644
--- a/lib/asn1/test/testDef.erl
+++ b/lib/asn1/test/testDef.erl
@@ -37,81 +37,45 @@
bool33 = asn1_DEFAULT}).
main(_Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('Def','Def1',#'Def1'{bool0 = true,
- bool1 = true,
- bool2 = true,
- bool3 = true}),
- ?line {ok,{'Def1',true,true,true,true}} =
- asn1_wrapper:decode('Def','Def1',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('Def','Def1',#'Def1'{bool0 = true}),
- ?line {ok,{'Def1',true,false,false,false}} =
- asn1_wrapper:decode('Def','Def1',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('Def','Def1',#'Def1'{bool0 = true,
- bool2 = false}),
- ?line {ok,{'Def1',true,false,false,false}} =
- asn1_wrapper:decode('Def','Def1',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} = asn1_wrapper:encode('Def','Def1',#'Def1'{bool0 = false,
- bool3 = false}),
- ?line {ok,{'Def1',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def1',lists:flatten(Bytes14)),
-
-
-
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('Def','Def2',#'Def2'{bool10 = false,
- bool11 = false,
- bool12 = false,
- bool13 = false}),
- ?line {ok,{'Def2',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def2',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('Def','Def2',#'Def2'{bool10 = true,
- bool13 = false}),
- ?line {ok,{'Def2',true,false,false,false}} =
- asn1_wrapper:decode('Def','Def2',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('Def','Def2',#'Def2'{bool10 = true,
- bool11 = false,
- bool13 = false}),
- ?line {ok,{'Def2',true,false,false,false}} =
- asn1_wrapper:decode('Def','Def2',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} = asn1_wrapper:encode('Def','Def2',#'Def2'{bool10 = false,
- bool12 = false,
- bool13 = false}),
- ?line {ok,{'Def2',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def2',lists:flatten(Bytes24)),
-
-
-
-
- ?line {ok,Bytes31} = asn1_wrapper:encode('Def','Def3',#'Def3'{bool30 = false,
- bool31 = false,
- bool32 = false,
- bool33 = false}),
- ?line {ok,{'Def3',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def3',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('Def','Def3',#'Def3'{}),
- ?line {ok,{'Def3',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def3',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} = asn1_wrapper:encode('Def','Def3',#'Def3'{bool30 = true}),
- ?line {ok,{'Def3',true,false,false,false}} =
- asn1_wrapper:decode('Def','Def3',lists:flatten(Bytes33)),
-
- ?line {ok,Bytes34} = asn1_wrapper:encode('Def','Def3',#'Def3'{bool32 = false}),
- ?line {ok,{'Def3',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def3',lists:flatten(Bytes34)),
-
- ?line {ok,Bytes35} = asn1_wrapper:encode('Def','Def3',#'Def3'{bool33 = false}),
- ?line {ok,{'Def3',false,false,false,false}} =
- asn1_wrapper:decode('Def','Def3',lists:flatten(Bytes35)),
-
-
-
+ roundtrip('Def1', #'Def1'{bool0=true,bool1=true,bool2=true,bool3=true}),
+ roundtrip('Def1',
+ #'Def1'{bool0=true},
+ #'Def1'{bool0=true,bool1=false,bool2=false,bool3=false}),
+ roundtrip('Def1',
+ #'Def1'{bool0=true,bool2=false},
+ #'Def1'{bool0=true,bool1=false,bool2=false,bool3=false}),
+ roundtrip('Def1',
+ #'Def1'{bool0=false,bool3=false},
+ #'Def1'{bool0=false,bool1=false,bool2=false,bool3=false}),
+
+ roundtrip('Def2', #'Def2'{bool10=false,bool11=false,bool12=false,bool13=false}),
+ roundtrip('Def2',
+ #'Def2'{bool10=true,bool13=false},
+ #'Def2'{bool10=true,bool11=false,bool12=false,bool13=false}),
+ roundtrip('Def2',
+ #'Def2'{bool10=true,bool11=false,bool13=false},
+ #'Def2'{bool10=true,bool11=false,bool12=false,bool13=false}),
+ roundtrip('Def2',
+ #'Def2'{bool10=false,bool12=false,bool13=false},
+ #'Def2'{bool10=false,bool11=false,bool12=false,bool13=false}),
+
+ roundtrip('Def3', #'Def3'{bool30=false,bool31=false,bool32=false,bool33=false}),
+ roundtrip('Def3',
+ #'Def3'{},
+ #'Def3'{bool30=false,bool31=false,bool32=false,bool33=false}),
+ roundtrip('Def3',
+ #'Def3'{bool30=true},
+ #'Def3'{bool30=true,bool31=false,bool32=false,bool33=false}),
+ roundtrip('Def3',
+ #'Def3'{bool32=false},
+ #'Def3'{bool30=false,bool31=false,bool32=false,bool33=false}),
+ roundtrip('Def3',
+ #'Def3'{bool33=false},
+ #'Def3'{bool30=false,bool31=false,bool32=false,bool33=false}),
ok.
+
+roundtrip(Type, Value) ->
+ roundtrip(Type, Value, Value).
+
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('Def', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testDoubleEllipses.erl b/lib/asn1/test/testDoubleEllipses.erl
index 1032156b91..4e8972cdfc 100644
--- a/lib/asn1/test/testDoubleEllipses.erl
+++ b/lib/asn1/test/testDoubleEllipses.erl
@@ -34,67 +34,27 @@
-record('SetAltV2',{a,d,b,e,h,i,c,f,g}).
main(_Rules) ->
- %% SEQUENCE
- ?line {ok,Bytes} =
- asn1_wrapper:encode('DoubleEllipses','Seq',#'Seq'{a = 10,c = true}),
- ?line {ok,#'SeqV2'{a=10,b = asn1_NOVALUE, c = true}} =
- asn1_wrapper:decode('DoubleEllipses','SeqV2',Bytes),
- ?line {ok,Bytes2} =
- asn1_wrapper:encode('DoubleEllipses','SeqV2',
- #'SeqV2'{a=10,b = false, c = true}),
- ?line {ok,#'Seq'{a = 10, c = true}} =
- asn1_wrapper:decode('DoubleEllipses','Seq',Bytes2),
+ roundtrip('Seq', #'Seq'{a=10,c=true}),
+ roundtrip('SeqV2', #'SeqV2'{a=10,b=false,c=true}),
+ roundtrip('SeqAlt',
+ #'SeqAlt'{a=10,d=12,b = <<2#1010:4>>,
+ e=true,c=false,f=14,g=16}),
+ roundtrip('SeqAltV2',
+ #'SeqAltV2'{a=10,d=12,
+ b = <<2#1010:4>>,
+ e=true,h="PS",i=13,c=false,f=14,g=16}),
- ?line {ok,Bytes3} =
- asn1_wrapper:encode('DoubleEllipses','SeqAlt',
- #'SeqAlt'{a = 10, d = 12,
- b = [1,0,1,0], e = true,
- c = false, f = 14, g = 16}),
- ?line {ok,#'SeqAltV2'{a = 10, d = 12,
- b = <<2#1010:4>>, e = true,
- h = asn1_NOVALUE, i = asn1_NOVALUE,
- c = false, f = 14, g = 16}} =
- asn1_wrapper:decode('DoubleEllipses','SeqAltV2',Bytes3),
- ?line {ok,Bytes4} =
- asn1_wrapper:encode('DoubleEllipses','SeqAltV2',
- #'SeqAltV2'{a = 10, d = 12,
- b = [1,0,1,0], e = true,
- h = "PS", i = 13,
- c = false, f = 14, g = 16}),
- ?line {ok,#'SeqAlt'{a = 10, d = 12,
- b = <<2#1010:4>>, e = true,
- c = false, f = 14, g = 16}} =
- asn1_wrapper:decode('DoubleEllipses','SeqAlt',Bytes4),
-
- %% SET
- ?line {ok,Bytes5} =
- asn1_wrapper:encode('DoubleEllipses','Set',#'Set'{a = 10,c = true}),
- ?line {ok,#'SetV2'{a=10,b = asn1_NOVALUE, c = true}} =
- asn1_wrapper:decode('DoubleEllipses','SetV2',Bytes5),
- ?line {ok,Bytes6} =
- asn1_wrapper:encode('DoubleEllipses','SetV2',
- #'SetV2'{a=10,b = false, c = true}),
- ?line {ok,#'Set'{a = 10, c = true}} =
- asn1_wrapper:decode('DoubleEllipses','Set',Bytes6),
-
- ?line {ok,Bytes7} =
- asn1_wrapper:encode('DoubleEllipses','SetAlt',
- #'SetAlt'{a = 10, d = 12,
- b = [1,0,1,0], e = true,
- c = false, f = 14, g = 16}),
- ?line {ok,#'SetAltV2'{a = 10, d = 12,
- b = <<2#1010:4>>, e = true,
- h = asn1_NOVALUE, i = asn1_NOVALUE,
- c = false, f = 14, g = 16}} =
- asn1_wrapper:decode('DoubleEllipses','SetAltV2',Bytes7),
- ?line {ok,Bytes8} =
- asn1_wrapper:encode('DoubleEllipses','SetAltV2',
- #'SetAltV2'{a = 10, d = 12,
- b = [1,0,1,0], e = true,
- h = "PS", i = 13,
- c = false, f = 14, g = 16}),
- ?line {ok,#'SetAlt'{a = 10, d = 12,
- b = <<2#1010:4>>, e = true,
- c = false, f = 14, g = 16}} =
- asn1_wrapper:decode('DoubleEllipses','SetAlt',Bytes8),
+ roundtrip('Set', #'Set'{a=10,c=true}),
+ roundtrip('SetV2', #'SetV2'{a=10,b=false,c=true}),
+ roundtrip('SetAlt',
+ #'SetAlt'{a=10,d=12,
+ b = <<2#1010:4>>,
+ e=true,c=false,f=14,g=16}),
+ roundtrip('SetAltV2',
+ #'SetAltV2'{a=10,d=12,
+ b = <<2#1010:4>>,
+ e=true,h="PS",i=13,c=false,f=14,g=16}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('DoubleEllipses', T, V).
diff --git a/lib/asn1/test/testEnumExt.erl b/lib/asn1/test/testEnumExt.erl
index cbc13ee6da..c66adaf949 100644
--- a/lib/asn1/test/testEnumExt.erl
+++ b/lib/asn1/test/testEnumExt.erl
@@ -33,7 +33,7 @@ main(Rule) when Rule =:= per; Rule =:= uper ->
%% ENUMERATED with extensionmark (value is an extensionvalue)
Or = roundtrip('Ext1', orange),
%% unknown extensionvalue
- {ok,{asn1_enum,0}} = asn1_wrapper:decode('EnumExt','Ext',Or),
+ {ok,{asn1_enum,0}} = 'EnumExt':decode('Ext', Or),
%% ENUMERATED no extensionmark
B64 = <<64>>,
@@ -45,12 +45,12 @@ main(ber) ->
roundtrip('Ext', red),
%% value is an extensionvalue
- {ok,Bytes1_1} = asn1_wrapper:encode('EnumExt','Ext1',orange),
- {ok,{asn1_enum,7}} = asn1_wrapper:decode('EnumExt','Ext',lists:flatten(Bytes1_1)),
+ {ok,Bytes1_1} = 'EnumExt':encode('Ext1', orange),
+ {ok,{asn1_enum,7}} = 'EnumExt':decode('Ext', Bytes1_1),
%% ENUMERATED no extensionmark
roundtrip('Noext', red),
- ?line {error,{asn1,_}} = (catch asn1_wrapper:encode('EnumExt','Noext',orange)),
+ {error,{asn1,_}} = (catch 'EnumExt':encode('Noext', orange)),
%% ENUMERATED with atom 'com'
roundtrip('Globalstate', preop),
@@ -77,9 +77,7 @@ common(Erule) ->
ok.
roundtrip(Type, Value) ->
- {ok,Encoded} = 'EnumExt':encode(Type, Value),
- {ok,Value} = 'EnumExt':decode(Type, Encoded),
- Encoded.
+ asn1_test_lib:roundtrip_enc('EnumExt', Type, Value).
v_roundtrip(Erule, Type, Value) ->
Encoded = roundtrip(Type, Value),
diff --git a/lib/asn1/test/testFragmented.erl b/lib/asn1/test/testFragmented.erl
index c391ba8305..8d5fa07a5b 100644
--- a/lib/asn1/test/testFragmented.erl
+++ b/lib/asn1/test/testFragmented.erl
@@ -37,6 +37,4 @@ main(_Erule) ->
ok.
roundtrip(T, V) ->
- {ok,E} = 'Fragmented':encode(T, V),
- {ok,V} = 'Fragmented':decode(T, E),
- ok.
+ asn1_test_lib:roundtrip('Fragmented', T, V).
diff --git a/lib/asn1/test/testINSTANCE_OF.erl b/lib/asn1/test/testINSTANCE_OF.erl
index ce411beb92..c855ca3c06 100644
--- a/lib/asn1/test/testINSTANCE_OF.erl
+++ b/lib/asn1/test/testINSTANCE_OF.erl
@@ -18,46 +18,23 @@
%%
%%
-module(testINSTANCE_OF).
-
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
-main(Erule) ->
+main(_Erule) ->
+ Int = roundtrip('Int', 3),
- ?line {ok,Integer} = asn1_wrapper:encode('INSTANCEOF','Int',3),
- Int = list_to_binary(Integer),
ValotherName = {otherName,{'INSTANCE OF',{2,4},Int}},
+ _ = roundtrip('GeneralName', ValotherName),
+
VallastName1 = {lastName,{'GeneralName_lastName',{2,4},12}},
+ _ = roundtrip('GeneralName', VallastName1),
+
VallastName2 = {lastName,{'GeneralName_lastName',{2,3,4},
{'Seq',12,true}}},
- ?line {ok,BytesoN}=
- asn1_wrapper:encode('INSTANCEOF','GeneralName',ValotherName),
- ?line {ok,Res1={otherName,_}} =
- asn1_wrapper:decode('INSTANCEOF','GeneralName',BytesoN),
- ?line ok = test_encdec(Erule,Int,Res1),
-
- ?line {ok,ByteslN1}=
- asn1_wrapper:encode('INSTANCEOF','GeneralName',VallastName1),
- ?line {ok,Res2={lastName,_}} =
- asn1_wrapper:decode('INSTANCEOF','GeneralName',ByteslN1),
- ?line test_encdec(Erule,Res2),
-
- ?line {ok,ByteslN2}=
- asn1_wrapper:encode('INSTANCEOF','GeneralName',VallastName2),
- ?line {ok,Res3={lastName,_}} =
- asn1_wrapper:decode('INSTANCEOF','GeneralName',ByteslN2),
- ?line test_encdec(Erule,Res3).
-
-test_encdec(_Erule,Int,{otherName,{'INSTANCE OF',{2,4},Int}}) ->
- ok;
-test_encdec(Erule,Int,R={otherName,{'INSTANCE OF',{2,4},_Int2}}) ->
- {error,{Erule,Int,R}}.
+ _ = roundtrip('GeneralName', VallastName2),
+ ok.
-test_encdec(_Erule,{lastName,{'GeneralName_lastName',{2,4},12}}) ->
- ok;
-test_encdec(_Erule,{lastName,{'GeneralName_lastName',{2,3,4},
- {'Seq',12,true}}}) ->
- ok;
-test_encdec(Erule,Res) ->
- {error,{Erule,Res}}.
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip_enc('INSTANCEOF', T, V).
diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl
index 76f216fdad..cd335e1023 100644
--- a/lib/asn1/test/testInfObj.erl
+++ b/lib/asn1/test/testInfObj.erl
@@ -121,9 +121,7 @@ main(_Erule) ->
{'Multiple-Optionals',1,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}).
roundtrip(M, T, V) ->
- {ok,Enc} = M:encode(T, V),
- {ok,V} = M:decode(T, Enc),
- ok.
+ asn1_test_lib:roundtrip(M, T, V).
enc_dec(M, T, V0) ->
{ok,Enc} = M:encode(T, V0),
diff --git a/lib/asn1/test/testInfObjectClass.erl b/lib/asn1/test/testInfObjectClass.erl
index 98408502c6..c36c05a2ea 100644
--- a/lib/asn1/test/testInfObjectClass.erl
+++ b/lib/asn1/test/testInfObjectClass.erl
@@ -29,24 +29,22 @@ main(Rule) ->
%% this test is added for OTP-4591, to test that elements in decoded
%% value has terms in right order.
Val = {'Seq',12,13,2},
- ?line {ok,Bytes}= asn1_wrapper:encode('InfClass','Seq',Val),
- ?line {ok,Val} = asn1_wrapper:decode('InfClass','Seq',Bytes),
+ roundtrip('Seq', Val),
%% OTP-5783
- ?line {error,{asn1,{'Type not compatible with table constraint',
- {component,'ArgumentType'},
- {value,_},_}}} = asn1_wrapper:encode('InfClass','Seq',
- {'Seq',12,13,1}),
+ {error,{asn1,{'Type not compatible with table constraint',
+ {component,'ArgumentType'},
+ {value,_},_}}} = 'InfClass':encode('Seq', {'Seq',12,13,1}),
Bytes2 = case Rule of
ber ->
<<48,9,2,1,12,2,1,11,2,1,1>>;
_ ->
- <<1,12,1,11,1,1>>
+ <<1,12,1,11,1,1>>
end,
- ?line {error,{asn1,{'Type not compatible with table constraint',
- {{component,_},
- {value,_B},_}}}} =
- asn1_wrapper:decode('InfClass','Seq',Bytes2).
+ {error,{asn1,{'Type not compatible with table constraint',
+ {{component,_},
+ {value,_B},_}}}} = 'InfClass':decode('Seq', Bytes2),
+ ok.
-
-
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('InfClass', T, V).
diff --git a/lib/asn1/test/testMegaco.erl b/lib/asn1/test/testMegaco.erl
index f4edcebb7e..644042b484 100644
--- a/lib/asn1/test/testMegaco.erl
+++ b/lib/asn1/test/testMegaco.erl
@@ -20,165 +20,28 @@
-module(testMegaco).
--export([compile/3,main/2,msg11/0]).
+-export([compile/3,main/2]).
-include_lib("test_server/include/test_server.hrl").
--define(MID, {ip4Address, #'IP4Address'{address = [124, 124, 124, 222],
- portNumber = 55555}}).
--define(A4444, ["11111111"]).
--record('MegacoMessage',
- {
- authHeader = asn1_NOVALUE,
- mess
- }).
-
--record('Message',
- {
- version,
- mId,
- messageBody
- }). % with extension mark
-
--record('IP4Address',
- {
- address,
- portNumber = asn1_NOVALUE
- }).
-
--record('TransactionRequest',
- {
- transactionId,
- actions = []
- }). % with extension mark
-
--record('ActionRequest',
- {
- contextId,
- contextRequest = asn1_NOVALUE,
- contextAttrAuditReq = asn1_NOVALUE,
- commandRequests = []
- }).
-
--record('CommandRequest',
- {
- command,
- optional = asn1_NOVALUE,
- wildcardReturn = asn1_NOVALUE
- }). % with extension mark
-
--record('NotifyRequest',
- {
- terminationID,
- observedEventsDescriptor,
- errorDescriptor = asn1_NOVALUE
- }). % with extension mark
-
--record('ObservedEventsDescriptor',
- {
- requestId,
- observedEventLst = []
- }).
-
--record('ObservedEvent',
- {
- eventName,
- streamID = asn1_NOVALUE,
- eventParList = [],
- timeNotation = asn1_NOVALUE
- }). % with extension mark
-
--record('EventParameter',
- {
- eventParameterName,
- value
- }).
-
--record('TimeNotation',
- {
- date,
- time
- }).
-
--record(megaco_term_id, {contains_wildcards = ["f"], id}).
-
-
-compile(_Config,ber,[optimize]) ->
- {ok,no_module,no_module};
-compile(_Config,per,[optimize]) ->
- {ok,no_module,no_module};
-compile(Config,Erule,Options) ->
+compile(Config, Erule, Options) ->
asn1_test_lib:compile("MEDIA-GATEWAY-CONTROL.asn", Config, [Erule|Options]),
asn1_test_lib:compile("OLD-MEDIA-GATEWAY-CONTROL.asn", Config, [Erule|Options]),
{ok,'OLD-MEDIA-GATEWAY-CONTROL','MEDIA-GATEWAY-CONTROL'}.
-
main(no_module,_) -> ok;
main('OLD-MEDIA-GATEWAY-CONTROL',Config) ->
-% Msg = msg11(),
CaseDir = ?config(case_dir, Config),
{ok,Msg} = asn1ct:value('OLD-MEDIA-GATEWAY-CONTROL','MegacoMessage',
[{i, CaseDir}]),
- ?line {ok,Bytes} = asn1_wrapper:encode('OLD-MEDIA-GATEWAY-CONTROL',
- 'MegacoMessage',Msg),
- ?line {ok,Msg} = asn1_wrapper:decode('OLD-MEDIA-GATEWAY-CONTROL',
- 'MegacoMessage',
- Bytes),
+ asn1_test_lib:roundtrip('OLD-MEDIA-GATEWAY-CONTROL', 'MegacoMessage', Msg),
ok;
-main(Mod='MEDIA-GATEWAY-CONTROL',Config) ->
- ?line DataDir = ?config(data_dir,Config),
- io:format("DataDir:~p~n",[DataDir]),
- ?line {ok,FilenameList} = file:list_dir(filename:join([DataDir,
- megacomessages])),
- %% remove any junk files that may be in the megacomessage directory
- Pred = fun(X) ->
- case lists:reverse(X) of
- [$l,$a,$v,$.|_R] ->true;
- _ -> false
- end
- end,
- MegacoMsgFilenameList = lists:filter(Pred,FilenameList),
-
- Fun = fun(F) ->
- M = read_msg(filename:join([DataDir,megacomessages,F])),
- {ok,B} = asn1_wrapper:encode(Mod,element(1,M),M),
- {ok,M} = asn1_wrapper:decode(Mod,element(1,M),B)
- end,
- ?line lists:foreach(Fun,MegacoMsgFilenameList),
- ok.
-
-read_msg(File) ->
- case file:read_file(File) of
- {ok,Bin} ->
- binary_to_term(Bin);
- _ ->
- io:format("couldn't read file ~p~n",[File])
- end.
-
-
-request(Mid, TransId, ContextId, CmdReq) when is_list(CmdReq) ->
- Actions = [#'ActionRequest'{contextId = ContextId,
- commandRequests = CmdReq}],
- Req = {transactions,
- [{transactionRequest,
- #'TransactionRequest'{transactionId = TransId,
- actions = Actions}}]},
- #'MegacoMessage'{mess = #'Message'{version = 1,
- mId = Mid,
- messageBody = Req}}.
-
-msg11() ->
- TimeStamp = #'TimeNotation'{date = "19990729",
- time = "22012001"},
- Parm = #'EventParameter'{eventParameterName = "ds",
- value = "916135551212"},
-
- Event = #'ObservedEvent'{eventName = "ddce",
- timeNotation = TimeStamp,
- eventParList = [Parm]},
- Desc = #'ObservedEventsDescriptor'{requestId = 2223,
- observedEventLst = [Event]},
- NotifyReq = #'NotifyRequest'{terminationID = [#megaco_term_id{id = ?A4444}],
- observedEventsDescriptor = Desc},
- CmdReq = #'CommandRequest'{command = {notifyReq, NotifyReq}},
- request(?MID, 10002, 0, [CmdReq]).
+main('MEDIA-GATEWAY-CONTROL'=Mod, Config) ->
+ DataDir = ?config(data_dir, Config),
+ Files = filelib:wildcard(filename:join([DataDir,megacomessages,"*.val"])),
+ lists:foreach(fun(File) ->
+ {ok,Bin} = file:read_file(File),
+ V = binary_to_term(Bin),
+ T = element(1, V),
+ asn1_test_lib:roundtrip(Mod, T, V)
+ end, Files).
diff --git a/lib/asn1/test/testMergeCompile.erl b/lib/asn1/test/testMergeCompile.erl
index 8ef7ba3458..7cda71c441 100644
--- a/lib/asn1/test/testMergeCompile.erl
+++ b/lib/asn1/test/testMergeCompile.erl
@@ -30,42 +30,35 @@
main(Erule) ->
%% test of module MS.set.asn that tests OTP-4492: different tagdefault in
%% modules and types with same name in modules
- ?line MSVal = {'Type4M2',8,true,three,"OCTET STRING"},
- ?line {ok,MSBytes} = asn1_wrapper:encode('MS','Type4M2',MSVal),
- ?line {ok,MSVal} = asn1_wrapper:decode('MS','Type4M2',MSBytes),
-
+ MSVal = {'Type4M2',8,true,three,"OCTET STRING"},
+ asn1_test_lib:roundtrip('MS', 'Type4M2', MSVal),
%% test of RANAP.set.asn1
- ?line _PIEVal = [{'ProtocolIE-Field',4,ignore,{'Cause',{radioNetwork,{'CauseRadioNetwork','rab-pre-empted'}}}}],
PIEVal2 = [{'ProtocolIE-Field',4,ignore,{radioNetwork,'rab-pre-empted'}}],
- ?line _PEVal = [{'ProtocolExtensionField',[0]}],
-%% ?line EncVal = asn1rt_per_v1:encode_integer([],100),
- ?line EncVal =
+ EncVal =
case Erule of
per ->
<<1,100>>;
uper ->
<<1,100>>;
ber ->
- [2,1,1]
+ <<2,1,1>>
end,
- ?line PEVal2 = [{dummy,1,ignore,EncVal},{dummy,2,reject,EncVal}],
- ?line Val2 =
+ PEVal2 = [{'ProtocolExtensionField',1,ignore,EncVal},
+ {'ProtocolExtensionField',2,reject,EncVal}],
+ Val2 =
#'InitiatingMessage'{procedureCode=1,
criticality=ignore,
value=#'Iu-ReleaseCommand'{protocolIEs=PIEVal2,
protocolExtensions=asn1_NOVALUE}},
- ?line {ok,Bytes2} = asn1_wrapper:encode('RANAPSET','InitiatingMessage',Val2),
- ?line {ok,_Ret2} = asn1_wrapper:decode('RANAPSET','InitiatingMessage',Bytes2),
-
- ?line Val3 =
+ asn1_test_lib:roundtrip('RANAPSET', 'InitiatingMessage', Val2),
+ Val3 =
#'InitiatingMessage'{procedureCode=1,
criticality=ignore,
value=#'Iu-ReleaseCommand'{protocolIEs=PIEVal2,
protocolExtensions=PEVal2}},
- ?line {ok,Bytes3} = asn1_wrapper:encode('RANAPSET','InitiatingMessage',Val3),
- ?line {ok,_Ret3} = asn1_wrapper:decode('RANAPSET','InitiatingMessage',Bytes3).
+ asn1_test_lib:roundtrip('RANAPSET', 'InitiatingMessage', Val3).
mvrasn(Erule) ->
@@ -83,78 +76,73 @@ mvrasn(Erule) ->
?line ok = test(mvrasn6,'InsertSubscriberDataArg').
test(isd)->
- EncPdu = [48,128,129,7,145,148,113,50,1,0,241,131,1,0,176,128,5,0,161,128,48,22,2,1,1,144,2,241,33,145,4,0,1,2,3,146,3,36,131,16,148,2,1,42,48,35,2,1,2,144,2,241,33,145,4,255,255,255,255,146,3,37,147,18,147,0,148,13,7,67,79,77,80,65,78,89,4,67,79,77,53,48,28,2,1,3,144,2,241,33,146,3,26,98,31,148,14,9,67,79,77,80,65,78,89,49,50,3,67,79,77,0,0,0,0,152,1,2,0,0],
-
- ?line {ok,_} = asn1_wrapper:decode('Mvrasn4',
- 'InsertSubscriberDataArg',
- EncPdu),
+ EncPdu = <<48,128,129,7,145,148,113,50,1,0,241,131,1,0,176,128,5,0,
+ 161,128,48,22,2,1,1,144,2,241,33,145,4,0,1,2,3,146,3,36,
+ 131,16,148,2,1,42,48,35,2,1,2,144,2,241,33,145,4,255,255,
+ 255,255,146,3,37,147,18,147,0,148,13,7,67,79,77,80,65,78,
+ 89,4,67,79,77,53,48,28,2,1,3,144,2,241,33,146,3,26,98,31,
+ 148,14,9,67,79,77,80,65,78,89,49,50,3,67,79,77,0,0,0,0,
+ 152,1,2,0,0>>,
+ {ok,_} = 'Mvrasn4':decode('InsertSubscriberDataArg', EncPdu),
ok;
%
% Problems with indefinite length encoding !!!
%
test(isd2)->
- EncPdu = [48, 128, 128, 8, 98, 2, 50, 1, 0, 0, 0, 241, 176, 128, 161, 128, 48, 128, 2, 1, 1, 144, 2, 241, 33, 145, 4, 255, 23, 12, 1, 146, 3, 9, 17, 1, 147, 0, 148, 13, 7, 67, 79, 77, 80, 65, 78, 89, 4, 67, 79, 77, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
-
- ?line {ok,_DecPdu} = asn1_wrapper:decode('Mvrasn4',
- 'InsertSubscriberDataArg',
- EncPdu),
-
+ EncPdu = <<48,128,128,8,98,2,50,1,0,0,0,241,176,128,161,128,48,128,2,1,1,144,
+ 2,241,33,145,4,255,23,12,1,146,3,9,17,1,147,0,148,13,7,67,79,77,80,
+ 65,78,89,4,67,79,77,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
+ {ok,_DecPdu} = 'Mvrasn4':decode('InsertSubscriberDataArg', EncPdu),
ok;
%
% Is doing fine, although there is indefinite encoding used... !!!
%
test(dsd)->
- EncPdu = [48, 128, 128, 8, 98, 2, 50, 1, 0, 0, 0, 241, 170, 2, 5, 0, 0, 0, 0, 0],
-
- ?line {ok,_DecPdu} = asn1_wrapper:decode('Mvrasn4',
- 'DeleteSubscriberDataArg',
- EncPdu),
-
+ EncPdu = <<48,128,128,8,98,2,50,1,0,0,0,241,170,2,5,0,0,0,0,0>>,
+ {ok,_DecPdu} = 'Mvrasn4':decode('DeleteSubscriberDataArg', EncPdu),
ok;
%
% Is doing fine !!!
%
test(ul_res)->
- EncPdu = [48, 9, 4, 7, 145, 148, 113, 66, 16, 17, 241],
-
- ?line {ok,_DecPdu} = asn1_wrapper:decode('Mvrasn4',
- 'UpdateGprsLocationRes',
- EncPdu),
-
+ EncPdu = <<48,9,4,7,145,148,113,66,16,17,241>>,
+ {ok,_DecPdu} = 'Mvrasn4':decode('UpdateGprsLocationRes', EncPdu),
ok;
test(seqofseq) ->
- {ok,_V} = asn1_wrapper:decode('Mvrasn4',
- 'SentParameters',
- [48,129,190,161,128,4,16,176,197,182,68,41,243,188,205,123,13,9,145,206,200,144,102,4,4,176,197,182,68,4,8,41,243,188,205,123,13,9,145,0,0,161,128,4,16,39,0,3,117,35,189,130,21,42,104,49,194,212,24,151,234,4,4,39,0,3,117,4,8,35,189,130,21,42,104,49,194,0,0,161,128,4,16,62,207,166,59,71,29,37,97,120,25,132,80,144,251,161,123,4,4,62,207,166,59,4,8,71,29,37,97,120,25,132,80,0,0,161,128,4,16,95,183,173,151,17,76,148,146,248,102,127,215,102,224,39,60,4,4,95,183,173,151,4,8,17,76,148,146,248,102,127,215,0,0,161,128,4,16,41,198,247,157,117,190,203,170,91,146,88,91,223,220,188,16,4,4,41,198,247,157,4,8,117,190,203,170,91,146,88,91,0,0]),
+ EncPdu = <<48,129,190,161,128,4,16,176,197,182,68,41,243,188,205,123,13,
+ 9,145,206,200,144,102,4,4,176,197,182,68,4,8,41,243,188,205,
+ 123,13,9,145,0,0,161,128,4,16,39,0,3,117,35,189,130,21,42,104,
+ 49,194,212,24,151,234,4,4,39,0,3,117,4,8,35,189,130,21,42,104,
+ 49,194,0,0,161,128,4,16,62,207,166,59,71,29,37,97,120,25,132,
+ 80,144,251,161,123,4,4,62,207,166,59,4,8,71,29,37,97,120,25,
+ 132,80,0,0,161,128,4,16,95,183,173,151,17,76,148,146,248,102,
+ 127,215,102,224,39,60,4,4,95,183,173,151,4,8,17,76,148,146,248,
+ 102,127,215,0,0,161,128,4,16,41,198,247,157,117,190,203,170,91,
+ 146,88,91,223,220,188,16,4,4,41,198,247,157,4,8,117,190,203,170,91,146,88,91,0,0>>,
+ {ok,_V} = 'Mvrasn4':decode('SentParameters', EncPdu),
ok;
test('InsertSubscriberDataArg') ->
- {ok,_V} =
- asn1_wrapper:decode('Mvrasn4','InsertSubscriberDataArg',
- [16#30,16#80,16#81,16#07,16#91,16#94,
- 16#71,16#92,16#00,16#35,16#80,16#83,
- 16#01,16#00,16#A6,16#06,16#04,16#01,
- 16#21,16#04,16#01,16#22,16#B0,16#80,
- 16#05,16#00,16#A1,16#80,16#30,16#1A,
- 16#02,16#01,16#01,16#90,16#02,16#F1,
- 16#21,16#92,16#03,16#0D,16#92,16#1F,
- 16#94,16#0C,16#03,16#53,16#49,16#4D,
- 16#03,16#47,16#53,16#4E,16#03,16#4C,
- 16#4B,16#50,16#00,16#00,16#00,16#00,
- 16#98,16#01,16#00,16#00,16#00]),
+ EncPdu = <<16#30,16#80,16#81,16#07,16#91,16#94,
+ 16#71,16#92,16#00,16#35,16#80,16#83,
+ 16#01,16#00,16#A6,16#06,16#04,16#01,
+ 16#21,16#04,16#01,16#22,16#B0,16#80,
+ 16#05,16#00,16#A1,16#80,16#30,16#1A,
+ 16#02,16#01,16#01,16#90,16#02,16#F1,
+ 16#21,16#92,16#03,16#0D,16#92,16#1F,
+ 16#94,16#0C,16#03,16#53,16#49,16#4D,
+ 16#03,16#47,16#53,16#4E,16#03,16#4C,
+ 16#4B,16#50,16#00,16#00,16#00,16#00,
+ 16#98,16#01,16#00,16#00,16#00>>,
+ {ok,_V} = 'Mvrasn4':decode('InsertSubscriberDataArg', EncPdu),
ok.
test(mvrasn6,'InsertSubscriberDataArg') ->
Val = {'InsertSubscriberDataArg',"IMSI","Address","C",serviceGranted,["abc","cde"],["tele","serv","ice"],asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,{'NAEA-PreferredCI',"NCC",asn1_NOVALUE},{'GPRSSubscriptionData','NULL',[{'PDP-Context',49,"PT","PDP-Address","QoS",'NULL',"APN",asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],asn1_NOVALUE},'NULL',onlyMSC,{'LSAInformation','NULL',accessOutsideLSAsAllowed,[{'LSAData',"LSA","L",'NULL',asn1_NOVALUE},{'LSAData',"LSA","L",'NULL',asn1_NOVALUE}],asn1_NOVALUE},'NULL',{'LCSInformation',["Addr","ess","string"],[{'LCS-PrivacyClass',"S","ExtSS",notifyLocationAllowed,[{'ExternalClient',{'LCSClientExternalID',"Addr",asn1_NOVALUE},asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],[broadcastService,anonymousLocation,targetMSsubscribedService],asn1_NOVALUE}],asn1_NOVALUE},100,"age",{'MC-SS-Info',"S","ExtSS",5,4,asn1_NOVALUE},"C",{'SGSN-CAMEL-SubscriptionInfo',{'GPRS-CSI',[{'GPRS-CamelTDPData',attach,13,"Addr",continueTransaction,asn1_NOVALUE}],11,asn1_NOVALUE,'NULL','NULL'},{'SMS-CSI',[{'SMS-CAMEL-TDP-DataList','sms-CollectedInfo',13,"Addr",continueTransaction,asn1_NOVALUE}],11,asn1_NOVALUE,'NULL','NULL'},asn1_NOVALUE},"ON"},
-
- {ok,Bytes}=
- asn1_wrapper:encode('Mvrasn6','InsertSubscriberDataArg',Val),
-
- {ok,_Res} =
- asn1_wrapper:decode('Mvrasn6','InsertSubscriberDataArg',Bytes),
-
+ {ok,Bytes} = 'Mvrasn6':encode('InsertSubscriberDataArg', Val),
+ {ok,_} = 'Mvrasn6':decode('InsertSubscriberDataArg', Bytes),
ok.
diff --git a/lib/asn1/test/testNBAPsystem.erl b/lib/asn1/test/testNBAPsystem.erl
index 0f4459f5b2..57cb483374 100644
--- a/lib/asn1/test/testNBAPsystem.erl
+++ b/lib/asn1/test/testNBAPsystem.erl
@@ -19,7 +19,7 @@
%%
-module(testNBAPsystem).
--export([compile/2,test/2,cell_setup_req_msg/0]).
+-export([compile/2,test/2]).
-include_lib("test_server/include/test_server.hrl").
@@ -96,23 +96,16 @@ test(_Erule,Config) ->
ticket_5812(Config) ->
?line Msg = v_5812(),
- ?line {ok,B2} = asn1_wrapper:encode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- Msg),
+ {ok,B2} = 'NBAP-PDU-Discriptions':encode('NBAP-PDU', Msg),
V = <<0,28,74,0,3,48,0,0,1,0,123,64,41,0,0,0,126,64,35,95,208,2,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,145,0,1,205,0,0,0,0,2,98,64,1,128>>,
?line ok = compare(V,B2),
- ?line {ok,Msg2} = asn1_wrapper:decode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',B2),
+ {ok,Msg2} = 'NBAP-PDU-Discriptions':decode('NBAP-PDU', B2),
?line ok = check_record_names(Msg2,Config).
enc_audit_req_msg() ->
Msg = {initiatingMessage, audit_req_msg()},
- ?line {ok,B}=asn1_wrapper:encode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- Msg),
- ?line {ok,_Msg}=asn1_wrapper:decode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- B),
+ {ok,B} = 'NBAP-PDU-Discriptions':encode('NBAP-PDU', Msg),
+ {ok,_Msg} = 'NBAP-PDU-Discriptions':decode('NBAP-PDU', B),
?line {initiatingMessage,
#'InitiatingMessage'{value=#'AuditRequest'{protocolIEs=[{_,114,ignore,_}],
protocolExtensions = asn1_NOVALUE}}} = _Msg,
@@ -121,12 +114,8 @@ enc_audit_req_msg() ->
cell_setup_req_msg_test() ->
Msg = {initiatingMessage, cell_setup_req_msg()},
- ?line {ok,B}=asn1_wrapper:encode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- Msg),
- ?line {ok,_Msg}=asn1_wrapper:decode('NBAP-PDU-Discriptions',
- 'NBAP-PDU',
- B),
+ {ok,B} = 'NBAP-PDU-Discriptions':encode('NBAP-PDU', Msg),
+ {ok,_Msg} = 'NBAP-PDU-Discriptions':decode('NBAP-PDU', B),
io:format("Msg: ~P~n~n_Msg: ~P~n",[Msg,15,_Msg,15]),
ok.
diff --git a/lib/asn1/test/testOpenTypeImplicitTag.erl b/lib/asn1/test/testOpenTypeImplicitTag.erl
index a37d8004ef..0fbf70d037 100644
--- a/lib/asn1/test/testOpenTypeImplicitTag.erl
+++ b/lib/asn1/test/testOpenTypeImplicitTag.erl
@@ -24,18 +24,9 @@
-include_lib("test_server/include/test_server.hrl").
main(_Rules) ->
-
- ?line {ok,Bytes1} =
- asn1_wrapper:encode('OpenTypeImplicitTag','Seq',
- {'Seq',[1,1,255],[1,1,255],12,[1,1,255]}),
- ?line {ok,{'Seq',_,_,12,_}} =
- asn1_wrapper:decode('OpenTypeImplicitTag','Seq',
- lists:flatten(Bytes1)),
-
- ?line {ok,Bytes2} =
- asn1_wrapper:encode('OpenTypeImplicitTag','Seq',
- {'Seq',[1,1,255],asn1_NOVALUE,12,[1,1,255]}),
- ?line {ok,{'Seq',_,asn1_NOVALUE,12,_}} =
- asn1_wrapper:decode('OpenTypeImplicitTag','Seq',
- lists:flatten(Bytes2)),
+ roundtrip('Seq', {'Seq',<<1,1,255>>,<<1,1,255>>,12,<<1,1,255>>}),
+ roundtrip('Seq', {'Seq',<<1,1,255>>,asn1_NOVALUE,12,<<1,1,255>>}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('OpenTypeImplicitTag', T, V).
diff --git a/lib/asn1/test/testOpt.erl b/lib/asn1/test/testOpt.erl
index a1ad8099b5..a6dcccad15 100644
--- a/lib/asn1/test/testOpt.erl
+++ b/lib/asn1/test/testOpt.erl
@@ -18,8 +18,6 @@
%%
%%
-module(testOpt).
-
--export([compile/2]).
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -39,92 +37,29 @@
bool32 = asn1_NOVALUE,
bool33 = asn1_NOVALUE}).
-
-compile(Config,Rules) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
- ?line true = code:add_patha(?config(priv_dir,Config)),
- ?line ok = asn1ct:compile(DataDir ++ "Opt",[Rules,{outdir,OutDir}]).
-
-
-
main(_Rules) ->
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('Opt','Opt1',#'Opt1'{bool0 = true,
- bool1 = true,
- bool2 = true,
- bool3 = true}),
- ?line {ok,{'Opt1',true,true,true,true}} =
- asn1_wrapper:decode('Opt','Opt1',lists:flatten(Bytes11)),
+ roundtrip('Opt1', #'Opt1'{bool0=true,bool1=true,bool2=true,bool3=true}),
+ roundtrip('Opt1', #'Opt1'{bool0=true,bool1=asn1_NOVALUE,bool2=asn1_NOVALUE,
+ bool3=asn1_NOVALUE}),
+ roundtrip('Opt1', #'Opt1'{bool0=true,bool1=asn1_NOVALUE,bool2=false,bool3=asn1_NOVALUE}),
+ roundtrip('Opt1', #'Opt1'{bool0=false,bool1=asn1_NOVALUE,bool2=asn1_NOVALUE,bool3=false}),
- ?line {ok,Bytes12} = asn1_wrapper:encode('Opt','Opt1',#'Opt1'{bool0 = true}),
- ?line {ok,{'Opt1',true,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}} =
- asn1_wrapper:decode('Opt','Opt1',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('Opt','Opt1',#'Opt1'{bool0 = true,
- bool2 = false}),
- ?line {ok,{'Opt1',true,asn1_NOVALUE,false,asn1_NOVALUE}} =
- asn1_wrapper:decode('Opt','Opt1',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} = asn1_wrapper:encode('Opt','Opt1',#'Opt1'{bool0 = false,
- bool3 = false}),
- ?line {ok,{'Opt1',false,asn1_NOVALUE,asn1_NOVALUE,false}} =
- asn1_wrapper:decode('Opt','Opt1',lists:flatten(Bytes14)),
-
-
-
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('Opt','Opt2',#'Opt2'{bool10 = false,
- bool11 = false,
- bool12 = false,
- bool13 = false}),
- ?line {ok,{'Opt2',false,false,false,false}} =
- asn1_wrapper:decode('Opt','Opt2',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('Opt','Opt2',#'Opt2'{bool10 = true,
- bool13 = false}),
- ?line {ok,{'Opt2',true,asn1_NOVALUE,asn1_NOVALUE,false}} =
- asn1_wrapper:decode('Opt','Opt2',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} = asn1_wrapper:encode('Opt','Opt2',#'Opt2'{bool10 = true,
- bool11 = false,
- bool13 = false}),
- ?line {ok,{'Opt2',true,false,asn1_NOVALUE,false}} =
- asn1_wrapper:decode('Opt','Opt2',lists:flatten(Bytes23)),
-
- ?line {ok,Bytes24} = asn1_wrapper:encode('Opt','Opt2',#'Opt2'{bool10 = false,
- bool12 = false,
- bool13 = false}),
- ?line {ok,{'Opt2',false,asn1_NOVALUE,false,false}} =
- asn1_wrapper:decode('Opt','Opt2',lists:flatten(Bytes24)),
-
-
-
-
- ?line {ok,Bytes31} = asn1_wrapper:encode('Opt','Opt3',#'Opt3'{bool30 = false,
- bool31 = false,
- bool32 = false,
- bool33 = false}),
- ?line {ok,{'Opt3',false,false,false,false}} =
- asn1_wrapper:decode('Opt','Opt3',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('Opt','Opt3',#'Opt3'{}),
- ?line {ok,{'Opt3',asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}} =
- asn1_wrapper:decode('Opt','Opt3',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} = asn1_wrapper:encode('Opt','Opt3',#'Opt3'{bool30 = true}),
- ?line {ok,{'Opt3',true,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}} =
- asn1_wrapper:decode('Opt','Opt3',lists:flatten(Bytes33)),
-
- ?line {ok,Bytes34} = asn1_wrapper:encode('Opt','Opt3',#'Opt3'{bool32 = false}),
- ?line {ok,{'Opt3',asn1_NOVALUE,asn1_NOVALUE,false,asn1_NOVALUE}} =
- asn1_wrapper:decode('Opt','Opt3',lists:flatten(Bytes34)),
-
- ?line {ok,Bytes35} = asn1_wrapper:encode('Opt','Opt3',#'Opt3'{bool33 = false}),
- ?line {ok,{'Opt3',asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,false}} =
- asn1_wrapper:decode('Opt','Opt3',lists:flatten(Bytes35)),
-
-
-
+ roundtrip('Opt2', #'Opt2'{bool10=false,bool11=false,bool12=false,bool13=false}),
+ roundtrip('Opt2', #'Opt2'{bool10=true,bool11=asn1_NOVALUE,bool12=asn1_NOVALUE,
+ bool13=false}),
+ roundtrip('Opt2', #'Opt2'{bool10=true,bool11=false,bool12=asn1_NOVALUE,bool13=false}),
+ roundtrip('Opt2', #'Opt2'{bool10=false,bool11=asn1_NOVALUE,bool12=false,bool13=false}),
+
+ roundtrip('Opt3', #'Opt3'{bool30=false,bool31=false,bool32=false,bool33=false}),
+ roundtrip('Opt3', #'Opt3'{bool30=asn1_NOVALUE,bool31=asn1_NOVALUE,bool32=asn1_NOVALUE,
+ bool33=asn1_NOVALUE}),
+ roundtrip('Opt3', #'Opt3'{bool30=true,bool31=asn1_NOVALUE,bool32=asn1_NOVALUE,
+ bool33=asn1_NOVALUE}),
+ roundtrip('Opt3', #'Opt3'{bool30=asn1_NOVALUE,bool31=asn1_NOVALUE,bool32=false,
+ bool33=asn1_NOVALUE}),
+ roundtrip('Opt3', #'Opt3'{bool30=asn1_NOVALUE,bool31=asn1_NOVALUE,bool32=asn1_NOVALUE,
+ bool33=false}),
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('Opt', Type, Value).
diff --git a/lib/asn1/test/testParamBasic.erl b/lib/asn1/test/testParamBasic.erl
index a10468d592..3db89ca174 100644
--- a/lib/asn1/test/testParamBasic.erl
+++ b/lib/asn1/test/testParamBasic.erl
@@ -29,53 +29,27 @@
-record('T22',{number, string}).
main(Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('ParamBasic','T11',
- #'T11'{number = 11,
- string = "hello"}),
- ?line {ok,{'T11',11,"hello"}} =
- asn1_wrapper:decode('ParamBasic','T11',Bytes11),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('ParamBasic','T12',
- #'T12'{number = 11,
- string = <<2#10101:5>>}),
- {ok,{'T12',11,<<2#10101:5>>}} =
- asn1_wrapper:decode('ParamBasic','T12',Bytes12),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('ParamBasic','T21',
- #'T21'{number = 11,
- string = "hello"}),
- ?line {ok,{'T21',11,"hello"}} =
- asn1_wrapper:decode('ParamBasic','T21',Bytes13),
-
- ?line {ok,Bytes14} =
- asn1_wrapper:encode('ParamBasic','T22',
- #'T22'{number = 11,
- string = <<2#10101:5>>}),
- {ok,{'T22',11,<<2#10101:5>>}} =
- asn1_wrapper:decode('ParamBasic','T22',Bytes14),
-
+ roundtrip('T11', #'T11'{number=11,string="hello"}),
+ roundtrip('T12', #'T12'{number=11,string = <<21:5>>}),
+ roundtrip('T21', #'T21'{number=11,string="hello"}),
+ roundtrip('T22', #'T22'{number=11,string = <<21:5>>}),
case Rules of
der ->
-
- ?line {ok,[48,3,128,1,11]} =
- asn1_wrapper:encode('ParamBasic','T11',
- #'T11'{number = 11,
- string = "hej"}),
- ?line {ok,{'T11',11,"hej"}} =
- asn1_wrapper:decode('ParamBasic','T11',[48,3,128,1,11]),
-
- ?line {ok,[48,3,128,1,11]} =
- asn1_wrapper:encode('ParamBasic','T12',
- #'T12'{number = 11,
- string = [1,0,1,0]}),
-
- ?line {ok,{'T12',11,[1,0,1,0]}} =
- asn1_wrapper:decode('ParamBasic','T12',[48,3,128,1,11]);
+ <<48,3,128,1,11>> =
+ roundtrip_enc('T11', #'T11'{number=11,string="hej"}),
+ <<48,3,128,1,11>> =
+ roundtrip_enc('T12',
+ #'T12'{number=11,string=[1,0,1,0]},
+ #'T12'{number=11,string = <<10:4>>});
_ -> ok
end,
-
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('ParamBasic', Type, Value).
+
+roundtrip_enc(Type, Value) ->
+ asn1_test_lib:roundtrip_enc('ParamBasic', Type, Value).
+
+roundtrip_enc(Type, Value, Expected) ->
+ asn1_test_lib:roundtrip_enc('ParamBasic', Type, Value, Expected).
diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl
index 02847e502b..f3b4f9b170 100644
--- a/lib/asn1/test/testParameterizedInfObj.erl
+++ b/lib/asn1/test/testParameterizedInfObj.erl
@@ -41,49 +41,39 @@ param(Erule) ->
iE_Extensions =
[#'ProtocolExtensionField'{id=14,
criticality=reject,
- extensionValue=open_type(Erule,[0])},
+ extensionValue= <<0>>},
#'ProtocolExtensionField'{id=2,
criticality=ignore,
- extensionValue=open_type(Erule,[1])}]},
+ extensionValue= <<1>>}]},
BERVal = #'AllocationOrRetentionPriority'
{priorityLevel = true,
iE_Extensions =
[#'ProtocolExtensionField'{id=14,
criticality=reject,
- extensionValue=[2,1,0]},
+ extensionValue= <<2,1,0>>},
#'ProtocolExtensionField'{id=2,
criticality=ignore,
- extensionValue=[2,1,1]}]},
- ?line {ok,Bytes1} =
- case asn1_wrapper:erule(Erule) of
- per ->
- asn1_wrapper:encode('Param','AllocationOrRetentionPriority',
- PERVal);
- _ ->
- asn1_wrapper:encode('Param','AllocationOrRetentionPriority',
- BERVal)
- end,
-
- ?line {ok,{'AllocationOrRetentionPriority',true,[_R1,_R2]}} =
- asn1_wrapper:decode('Param','AllocationOrRetentionPriority',Bytes1),
+ extensionValue= <<2,1,1>>}]},
+ case Erule of
+ ber ->
+ roundtrip('AllocationOrRetentionPriority', BERVal);
+ per ->
+ roundtrip('AllocationOrRetentionPriority', PERVal);
+ uper ->
+ roundtrip('AllocationOrRetentionPriority', PERVal)
+ end,
%% test code for OTP-4242, ValueFromObject
- case asn1_wrapper:erule(Erule) of
+ case Erule of
ber ->
- ?line {ok,_Val3} = asn1_wrapper:decode('Param','OS1',[4,2,1,2]),
- ?line {error,_Reason1} =
- asn1_wrapper:decode('Param','OS1',[4,4,1,2,3,4]),
- ?line {error,_Reason2} =
- asn1_wrapper:decode('Param','OS2',[4,4,1,2,3,4]),
- ?line {ok,_Val4} = asn1_wrapper:decode('Param','OS1',[4,2,1,2]);
- per ->
- ?line {ok,Bytes3} =
- asn1_wrapper:encode('Param','OS1',[1,2]),
- ?line {ok,[1,2]} =
- asn1_wrapper:decode('Param','OS1',Bytes3),
- ?line {error,_Reason3} =
- asn1_wrapper:encode('Param','OS1',[1,2,3,4])
+ {ok,_Val3} = 'Param':decode('OS1', [4,2,1,2]),
+ {error,_Reason1} = 'Param':decode('OS1',[4,4,1,2,3,4]),
+ {error,_Reason2} = 'Param':decode('OS2',[4,4,1,2,3,4]),
+ {ok,_Val4} = 'Param':decode('OS1',[4,2,1,2]);
+ _ -> %per/uper
+ roundtrip('OS1', [1,2]),
+ {error,_Reason3} = 'Param':encode('OS1', [1,2,3,4])
end,
roundtrip('Scl', {'Scl',42,{a,9738654}}),
@@ -93,9 +83,7 @@ param(Erule) ->
ok.
roundtrip(T, V) ->
- {ok,Enc} = 'Param':encode(T, V),
- {ok,V} = 'Param':decode(T, Enc),
- ok.
+ asn1_test_lib:roundtrip('Param', T, V).
ranap(_Erule) ->
@@ -106,16 +94,11 @@ ranap(_Erule) ->
value=#'Iu-ReleaseCommand'{protocolIEs=PIEVal2,
protocolExtensions=asn1_NOVALUE}},
- ?line {ok,Bytes2} = asn1_wrapper:encode('RANAP','InitiatingMessage',Val2),
- ?line {ok,_Ret2} = asn1_wrapper:decode('RANAP','InitiatingMessage',Bytes2),
+ {ok,Bytes2} = 'RANAP':encode('InitiatingMessage', Val2),
+ {ok,_Ret2} = 'RANAP':decode('InitiatingMessage', Bytes2),
ok.
-open_type(uper,Val) when is_list(Val) ->
- list_to_binary(Val);
-open_type(_,Val) ->
- Val.
-
param2(Config, Erule) ->
roundtrip2('HandoverRequired',
{'HandoverRequired',
@@ -148,7 +131,7 @@ param2(Config, Erule) ->
{'ProtocolIE-Field',2,-42},
{'ProtocolIE-Field',100,Open100},
{'ProtocolIE-Field',101,Open101}]}} =
- asn1_wrapper:decode('Param2', 'HandoverRequired', Enc),
+ 'Param2':decode('HandoverRequired', Enc),
true = is_binary(Open100),
true = is_binary(Open101),
@@ -160,6 +143,4 @@ param2(Config, Erule) ->
roundtrip2(T, V) ->
- {ok,Enc} = asn1_wrapper:encode('Param2', T, V),
- {ok,V} = asn1_wrapper:decode('Param2', T, Enc),
- Enc.
+ asn1_test_lib:roundtrip_enc('Param2', T, V).
diff --git a/lib/asn1/test/testPrim.erl b/lib/asn1/test/testPrim.erl
index a6e68a9fe0..e07379e634 100644
--- a/lib/asn1/test/testPrim.erl
+++ b/lib/asn1/test/testPrim.erl
@@ -36,8 +36,7 @@ bool(Rules) ->
case Rules of
ber ->
[begin
- {error,{asn1,{encode_boolean,517}}} =
- (catch 'Prim':encode(T, 517))
+ {error,{asn1,{encode_boolean,517}}} = enc_error(T, 517)
end || T <- Types],
ok;
_ ->
@@ -90,12 +89,12 @@ enum(Rules) ->
roundtrip('Enum', monday),
roundtrip('Enum', thursday),
- {error,{asn1,{_,4}}} = (catch 'Prim':encode('Enum', 4)),
+ {error,{asn1,{_,4}}} = enc_error('Enum', 4),
case Rules of
Per when Per =:= per; Per =:= uper ->
- {ok,<<0>>} = 'Prim':encode('SingleEnumVal', true),
- {ok,<<0>>} = 'Prim':encode('SingleEnumValExt', true);
+ <<0>> = roundtrip('SingleEnumVal', true),
+ <<0>> = roundtrip('SingleEnumValExt', true);
ber ->
ok
end,
@@ -128,15 +127,36 @@ null(_Rules) ->
%%==========================================================
%% Null ::= NULL
%%==========================================================
-
- {ok,Bytes1} = asn1_wrapper:encode('Prim','Null',monday),
- {ok,'NULL'} = asn1_wrapper:decode('Prim','Null',lists:flatten(Bytes1)),
+ roundtrip('Null', monday, 'NULL'),
ok.
roundtrip(T, V) ->
- {ok,E} = 'Prim':encode(T, V),
- {ok,V} = 'Prim':decode(T, E),
- E.
+ roundtrip(T, V, V).
+
+roundtrip(Type, Value, ExpectedValue) ->
+ case get(no_ok_wrapper) of
+ false ->
+ asn1_test_lib:roundtrip_enc('Prim', Type, Value, ExpectedValue);
+ true ->
+ M = 'Prim',
+ Enc = M:encode(Type, Value),
+ ExpectedValue = M:decode(Type, Enc),
+ Enc
+ end.
+
+enc_error(T, V) ->
+ case get(no_ok_wrapper) of
+ false ->
+ 'Prim':encode(T, V);
+ true ->
+ try 'Prim':encode(T, V) of
+ _ ->
+ ?t:fail()
+ catch
+ _:Reason ->
+ Reason
+ end
+ end.
real(_Rules) ->
%%==========================================================
@@ -144,67 +164,45 @@ real(_Rules) ->
%%==========================================================
%% Base 2
- ?line {ok,Bytes1} = asn1_wrapper:encode('Real','AngleInRadians',{1,2,1}),
- ?line {ok,{1,2,1}} = asn1_wrapper:decode('Real','AngleInRadians',Bytes1),
-
- ?line {ok,Bytes2} = asn1_wrapper:encode('Real','AngleInRadians',{129,2,1}),
- ?line {ok,{129,2,1}} = asn1_wrapper:decode('Real','AngleInRadians',Bytes2),
-
- ?line {ok,Bytes3} = asn1_wrapper:encode('Real','AngleInRadians',{128,2,1}),
- ?line {ok,{1,2,8}} = asn1_wrapper:decode('Real','AngleInRadians',Bytes3),
-
- ?line {ok,Bytes4} = asn1_wrapper:encode('Real','AngleInRadians',{128,2,-7}),
- ?line {ok,{1,2,0}} = asn1_wrapper:decode('Real','AngleInRadians',Bytes4),
-
- ?line {ok,Bytes5} = asn1_wrapper:encode('Real','AngleInRadians',{16#f1f1f1,2,128}),
- ?line {ok,{16#f1f1f1,2,128}} = asn1_wrapper:decode('Real','AngleInRadians',Bytes5),
+ real_roundtrip('AngleInRadians', {1,2,1}),
+ real_roundtrip('AngleInRadians', {129,2,1}),
+ real_roundtrip('AngleInRadians', {128,2,1}, {1,2,8}),
+ real_roundtrip('AngleInRadians', {128,2,-7}, {1,2,0}),
+ real_roundtrip('AngleInRadians', {16#f1f1f1,2,128}),
%% Base 10, tuple format
- ?line {ok,Bytes6} = asn1_wrapper:encode('Real','AngleInRadians',{1,10,1}),
- ?line {ok,"1.E1"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes6),
-
- ?line {ok,Bytes7} = asn1_wrapper:encode('Real','AngleInRadians',{100,10,1}),
- ?line {ok,"1.E3"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes7),
-
- ?line {ok,Bytes8} = asn1_wrapper:encode('Real','AngleInRadians',{-100,10,1}),
- ?line {ok,"-1.E3"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes8),
-
- ?line {ok,Bytes9} = asn1_wrapper:encode('Real','AngleInRadians',{00002,10,1}),
- ?line {ok,"2.E1"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes9),
-
- ?line {ok,Bytes10} = asn1_wrapper:encode('Real','AngleInRadians',{123000,10,0}),
- ?line {ok,"123.E3"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes10),
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('Real','AngleInRadians',{123456789,10,123456789}),
- ?line {ok,"123456789.E123456789"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes11),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('Real','AngleInRadians',{-12345,10,-12345}),
- ?line {ok,"-12345.E-12345"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes12),
+ real_roundtrip('AngleInRadians', {1,10,1}, "1.E1"),
+ real_roundtrip('AngleInRadians', {100,10,1}, "1.E3"),
+ real_roundtrip('AngleInRadians', {-100,10,1}, "-1.E3"),
+ real_roundtrip('AngleInRadians', {2,10,1}, "2.E1"),
+ real_roundtrip('AngleInRadians', {123000,10,0}, "123.E3"),
+ real_roundtrip('AngleInRadians', {123456789,10,123456789},
+ "123456789.E123456789" ),
+ real_roundtrip('AngleInRadians', {-12345,10,-12345}, "-12345.E-12345"),
%% Base 10, string format NR3
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('Real','AngleInRadians',"123.123E123"),
- ?line {ok,"123123.E120"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes13),
-
- ?line {ok,Bytes14} = asn1_wrapper:encode('Real','AngleInRadians',"0.0E0"),
- ?line {ok,"0.E+0"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes14),
- ?line {ok,Bytes15} = asn1_wrapper:encode('Real','AngleInRadians',"0.0123"),
- ?line {ok,"123.E-4"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes15),
+ real_roundtrip('AngleInRadians', "123.123E123", "123123.E120"),
+ real_roundtrip('AngleInRadians', "0.0E0", "0.E+0"),
+ real_roundtrip('AngleInRadians', "0.0123", "123.E-4"),
+ real_roundtrip('AngleInRadians', "0", "0.E+0"),
+ real_roundtrip('AngleInRadians', "-123.45", "-12345.E-2"),
+ real_roundtrip('AngleInRadians', "123456789E123456789",
+ "123456789.E123456789"),
+ real_roundtrip('AngleInRadians', "01.000E1", "1.E1"),
+ real_roundtrip('AngleInRadians', "120.0001", "1200001.E-4"),
- ?line {ok,Bytes16} = asn1_wrapper:encode('Real','AngleInRadians',"0"),
- ?line {ok,"0.E+0"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes16),
-
- ?line {ok,Bytes17} = asn1_wrapper:encode('Real','AngleInRadians',"-123.45"),
- ?line {ok,"-12345.E-2"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes17),
-
- ?line {ok,Bytes18} =
- asn1_wrapper:encode('Real','AngleInRadians',"123456789E123456789"),
- ?line {ok,"123456789.E123456789"} =
- asn1_wrapper:decode('Real','AngleInRadians',Bytes18),
+ ok.
- ?line {ok,Bytes19} = asn1_wrapper:encode('Real','AngleInRadians',"01.000E1"),
- ?line {ok,"1.E1"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes19),
+real_roundtrip(T, V) ->
+ real_roundtrip(T, V, V).
- ?line {ok,Bytes20} = asn1_wrapper:encode('Real','AngleInRadians',"120.0001"),
- ?line {ok,"1200001.E-4"} = asn1_wrapper:decode('Real','AngleInRadians',Bytes20).
+real_roundtrip(Type, Value, ExpectedValue) ->
+ case get(no_ok_wrapper) of
+ false ->
+ asn1_test_lib:roundtrip('Real', Type, Value, ExpectedValue);
+ true ->
+ M = 'Real',
+ ExpectedValue = M:decode(Type, M:encode(Type, Value)),
+ ok
+ end.
diff --git a/lib/asn1/test/testPrimExternal.erl b/lib/asn1/test/testPrimExternal.erl
index 65c3c3a31a..07a1de931f 100644
--- a/lib/asn1/test/testPrimExternal.erl
+++ b/lib/asn1/test/testPrimExternal.erl
@@ -24,84 +24,27 @@
-include_lib("test_server/include/test_server.hrl").
external(_Rules) ->
-
-
- ?line {ok,Bytes10} = asn1_wrapper:encode('PrimExternal','NT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','NT',lists:flatten(Bytes10)),
-
- ?line {ok,Bytes11} = asn1_wrapper:encode('PrimExternal','Imp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','Imp',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('PrimExternal','Exp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','Exp',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes13} = asn1_wrapper:encode('PrimExternal','NTNT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','NTNT',lists:flatten(Bytes13)),
-
- ?line {ok,Bytes14} = asn1_wrapper:encode('PrimExternal','NTImp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','NTImp',lists:flatten(Bytes14)),
-
- ?line {ok,Bytes15} = asn1_wrapper:encode('PrimExternal','NTExp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','NTExp',lists:flatten(Bytes15)),
-
-
- ?line {ok,Bytes16} = asn1_wrapper:encode('PrimExternal','ImpNT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','ImpNT',lists:flatten(Bytes16)),
-
- ?line {ok,Bytes17} = asn1_wrapper:encode('PrimExternal','ImpImp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','ImpImp',lists:flatten(Bytes17)),
-
- ?line {ok,Bytes18} = asn1_wrapper:encode('PrimExternal','ImpExp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','ImpExp',lists:flatten(Bytes18)),
-
-
- ?line {ok,Bytes19} = asn1_wrapper:encode('PrimExternal','ExpNT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','ExpNT',lists:flatten(Bytes19)),
-
- ?line {ok,Bytes20} = asn1_wrapper:encode('PrimExternal','ExpImp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','ExpImp',lists:flatten(Bytes20)),
-
- ?line {ok,Bytes21} = asn1_wrapper:encode('PrimExternal','ExpExp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','ExpExp',lists:flatten(Bytes21)),
-
-
-
-
-
- ?line {ok,Bytes31} = asn1_wrapper:encode('PrimExternal','XNTNT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XNTNT',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('PrimExternal','XNTImp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XNTImp',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} = asn1_wrapper:encode('PrimExternal','XNTExp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XNTExp',lists:flatten(Bytes33)),
-
-
- ?line {ok,Bytes34} = asn1_wrapper:encode('PrimExternal','XImpNT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XImpNT',lists:flatten(Bytes34)),
-
- ?line {ok,Bytes35} = asn1_wrapper:encode('PrimExternal','XImpImp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XImpImp',lists:flatten(Bytes35)),
-
- ?line {ok,Bytes36} = asn1_wrapper:encode('PrimExternal','XImpExp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XImpExp',lists:flatten(Bytes36)),
-
-
- ?line {ok,Bytes37} = asn1_wrapper:encode('PrimExternal','XExpNT',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XExpNT',lists:flatten(Bytes37)),
-
- ?line {ok,Bytes38} = asn1_wrapper:encode('PrimExternal','XExpImp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XExpImp',lists:flatten(Bytes38)),
-
- ?line {ok,Bytes39} = asn1_wrapper:encode('PrimExternal','XExpExp',"kalle"),
- ?line {ok,"kalle"} = asn1_wrapper:decode('PrimExternal','XExpExp',lists:flatten(Bytes39)),
-
-
-
-
-
-
-
-ok.
+ Types = ['NT',
+ 'Imp',
+ 'Exp',
+ 'NTNT',
+ 'NTImp',
+ 'NTExp',
+ 'ImpNT',
+ 'ImpImp',
+ 'ImpExp',
+ 'ExpNT',
+ 'ExpImp',
+ 'ExpExp',
+ 'XNTNT',
+ 'XNTImp',
+ 'XNTExp',
+ 'XImpNT',
+ 'XImpImp',
+ 'XImpExp',
+ 'XExpNT',
+ 'XExpImp',
+ 'XExpExp'],
+ _ = [asn1_test_lib:roundtrip('PrimExternal', T, "kalle") ||
+ T <- Types],
+ ok.
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index 1762e34599..2fe0780701 100644
--- a/lib/asn1/test/testPrimStrings.erl
+++ b/lib/asn1/test/testPrimStrings.erl
@@ -19,7 +19,7 @@
%%
-module(testPrimStrings).
--export([bit_string/1]).
+-export([bit_string/2]).
-export([octet_string/1]).
-export([numeric_string/1]).
-export([other_strings/1]).
@@ -68,7 +68,7 @@ fragmented_lengths() ->
K64-1,K64,K64+1,K64+(1 bsl 7)-1,K64+(1 bsl 7),K64+(1 bsl 7)+1,
K64+K16-1,K64+K16,K64+K16+1].
-bit_string(Rules) ->
+bit_string(Rules, Opts) ->
%%==========================================================
%% Bs1 ::= BIT STRING
@@ -90,9 +90,10 @@ bit_string(Rules) ->
bs_roundtrip('Bs1', [0,1,0,0,1,0]),
bs_roundtrip('Bs1', [1,0,0,0,0,0,0,0,0]),
bs_roundtrip('Bs1', [0,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1]),
-
- case Rules of
- ber ->
+
+
+ case {Rules,Opts} of
+ {ber,[]} ->
bs_decode('Bs1', <<35,8,3,2,0,73,3,2,4,32>>,
[0,1,0,0,1,0,0,1,0,0,1,0]),
bs_decode('Bs1', <<35,9,3,2,0,234,3,3,7,156,0>>,
@@ -100,7 +101,17 @@ bit_string(Rules) ->
bs_decode('Bs1', <<35,128,3,2,0,234,3,3,7,156,0,0,0>>,
[1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0]);
_ ->
- ok
+ %% DER, PER, UPER
+ consistent_def_enc('BsDef1',
+ [2#111101,
+ [1,0,1,1,1,1],
+ {2,<<2#101111:6,0:2>>},
+ <<2#101111:6>>]),
+ consistent_def_enc('BsDef2',
+ [[1,1,0,1, 1,1,1,0, 1,0,1,0, 1,1,0,1,
+ 1,0,1,1, 1,1,1,0, 1,1,1,0, 1,1,1,1],
+ {0,<<16#DEADBEEF:4/unit:8>>},
+ <<16#DEADBEEF:4/unit:8>>])
end,
@@ -217,6 +228,24 @@ bit_string(Rules) ->
_ -> per_bs_strings()
end.
+consistent_def_enc(Type, Vs) ->
+ M = 'PrimStrings',
+ {ok,Enc} = M:encode(Type, {Type,asn1_DEFAULT}),
+ {ok,Val} = M:decode(Type, Enc),
+
+ %% Ensure that the value has the correct format.
+ case {M:bit_string_format(),Val} of
+ {bitstring,{_,Bs}} when is_bitstring(Bs) -> ok;
+ {compact,{_,{Unused,Bin}}} when is_integer(Unused),
+ is_binary(Bin) -> ok;
+ {legacy,{_,Bs}} when is_list(Bs) -> ok
+ end,
+
+ %% All values should be recognized and encoded as the
+ %% the default value (i.e. not encoded at all).
+ _ = [{ok,Enc} = M:encode(Type, {Type,V}) || V <- Vs],
+ ok.
+
%% The PER encoding rules requires that a BIT STRING with
%% named positions should never have any trailing zeroes
%% (except to reach the minimum number of bits as given by
@@ -722,14 +751,10 @@ p_roundtrip(Type, Value0) ->
roundtrip(Type, Value).
roundtrip(Type, Value) ->
- {ok,Encoded} = 'PrimStrings':encode(Type, Value),
- {ok,Value} = 'PrimStrings':decode(Type, Encoded),
- ok.
+ roundtrip(Type, Value, Value).
roundtrip(Type, Value, Expected) ->
- {ok,Encoded} = 'PrimStrings':encode(Type, Value),
- {ok,Expected} = 'PrimStrings':decode(Type, Encoded),
- ok.
+ asn1_test_lib:roundtrip('PrimStrings', Type, Value, Expected).
bs_roundtrip(Type, Value) ->
bs_roundtrip(Type, Value, Value).
diff --git a/lib/asn1/test/testSelectionTypes.erl b/lib/asn1/test/testSelectionTypes.erl
index 6d1641388f..6d060321da 100644
--- a/lib/asn1/test/testSelectionTypes.erl
+++ b/lib/asn1/test/testSelectionTypes.erl
@@ -18,19 +18,16 @@
%%
%%
-module(testSelectionTypes).
-
-export([test/0]).
-include_lib("test_server/include/test_server.hrl").
test() ->
Val = ["PrintableString","PrintableString","PrintableString"],
- ?line {ok,Bin}=asn1_wrapper:encode('SelectionType','MendeleyevTable',Val),
- ?line {ok,Val} = asn1_wrapper:decode('SelectionType','MendeleyevTable',Bin),
-
- ?line Val2 = ['SelectionType':einsteinium()],
- ?line ["Es"] = Val2,
-
- ?line {ok,Bin2}=asn1_wrapper:encode('SelectionType','MendeleyevTable',Val2),
- ?line {ok,Val2} = asn1_wrapper:decode('SelectionType','MendeleyevTable',Bin2).
+ ["Es"] = Val2 = ['SelectionType':einsteinium()],
+ roundtrip('MendeleyevTable', Val),
+ roundtrip('MendeleyevTable', Val2),
+ ok.
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SelectionType', T, V).
diff --git a/lib/asn1/test/testSeq2738.erl b/lib/asn1/test/testSeq2738.erl
index cddfe4b311..9c059f2fc9 100644
--- a/lib/asn1/test/testSeq2738.erl
+++ b/lib/asn1/test/testSeq2738.erl
@@ -18,27 +18,16 @@
%%
%%
-module(testSeq2738).
-
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
-%-record('SeqOpt',{int, opt = asn1_NOVALUE}).
-record('SeqOptFake',{int, opt = asn1_NOVALUE}).
-%-record('OptSeq',{int=17}).
-record('OptSeqFake',{bool = false}).
-
-
-
main(_Rules) ->
-
- ?line {ok,Bytes} =
- asn1_wrapper:encode('Seq2738','SeqOptFake',
- #'SeqOptFake'{int = 10,
- opt = #'OptSeqFake'{}}),
- ?line {ok,#'SeqOptFake'{int=10,opt=#'OptSeqFake'{bool=false}}} =
- asn1_wrapper:decode('Seq2738','SeqOptFake',lists:flatten(Bytes)),
- ?line {error,_} =
- asn1_wrapper:decode('Seq2738','SeqOpt',lists:flatten(Bytes)),
+ Enc = asn1_test_lib:roundtrip_enc('Seq2738',
+ 'SeqOptFake',
+ #'SeqOptFake'{int=10,opt=#'OptSeqFake'{}}),
+ {error,_} = 'Seq2738':decode('SeqOpt', Enc),
ok.
diff --git a/lib/asn1/test/testSeqDefault.erl b/lib/asn1/test/testSeqDefault.erl
index a772b749bd..22c1b7ee3a 100644
--- a/lib/asn1/test/testSeqDefault.erl
+++ b/lib/asn1/test/testSeqDefault.erl
@@ -33,148 +33,64 @@
-record('SeqDef3',{bool3 = asn1_DEFAULT, seq3 = asn1_DEFAULT, int3 = asn1_DEFAULT}).
-record('SeqDef3Imp',{bool3 = asn1_DEFAULT, seq3 = asn1_DEFAULT, int3 = asn1_DEFAULT}).
-record('SeqDef3Exp',{bool3 = asn1_DEFAULT, seq3 = asn1_DEFAULT, int3 = asn1_DEFAULT}).
--record('SeqIn',{boolIn, intIn}).
+-record('SeqIn',{boolIn = asn1_NOVALUE, intIn = 12}).
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqDefault','SeqDef1',#'SeqDef1'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef1',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqDefault','SeqDef1',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('SeqDefault','SeqDef1',#'SeqDef1'{int1 = 15}),
- ?line {ok,{'SeqDef1',true,15,{'SeqIn',asn1_NOVALUE,12}}} =
- asn1_wrapper:decode('SeqDefault','SeqDef1',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqDefault','SeqDef2',#'SeqDef2'{bool2 = true,
- int2 = 15,
- seq2 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef2',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef2',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('SeqDefault','SeqDef2',#'SeqDef2'{int2 = 15}),
- ?line {ok,{'SeqDef2',{'SeqIn',asn1_NOVALUE,12},true,15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef2',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqDefault','SeqDef3',#'SeqDef3'{bool3 = true,
- int3 = 15,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef3',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef3',lists:flatten(Bytes31)),
-
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('SeqDefault','SeqDef3',#'SeqDef3'{int3 = 15}),
- ?line {ok,{'SeqDef3',true,{'SeqIn',asn1_NOVALUE,12},15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef3',lists:flatten(Bytes32)),
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqDefault','SeqDef1Imp',#'SeqDef1Imp'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef1Imp',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqDefault','SeqDef1Imp',lists:flatten(Bytes41)),
-
-
- ?line {ok,Bytes42} = asn1_wrapper:encode('SeqDefault','SeqDef1Imp',#'SeqDef1Imp'{int1 = 15}),
- ?line {ok,{'SeqDef1Imp',true,15,{'SeqIn',asn1_NOVALUE,12}}} =
- asn1_wrapper:decode('SeqDefault','SeqDef1Imp',lists:flatten(Bytes42)),
-
-
- ?line {ok,Bytes51} =
- asn1_wrapper:encode('SeqDefault','SeqDef2Imp',#'SeqDef2Imp'{bool2 = true,
- int2 = 15,
- seq2 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef2Imp',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef2Imp',lists:flatten(Bytes51)),
-
-
- ?line {ok,Bytes52} = asn1_wrapper:encode('SeqDefault','SeqDef2Imp',#'SeqDef2Imp'{int2 = 15}),
- ?line {ok,{'SeqDef2Imp',{'SeqIn',asn1_NOVALUE,12},true,15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef2Imp',lists:flatten(Bytes52)),
-
-
-
- ?line {ok,Bytes61} =
- asn1_wrapper:encode('SeqDefault','SeqDef3Imp',#'SeqDef3Imp'{bool3 = true,
- int3 = 15,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef3Imp',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef3Imp',lists:flatten(Bytes61)),
-
-
- ?line {ok,Bytes62} = asn1_wrapper:encode('SeqDefault','SeqDef3Imp',#'SeqDef3Imp'{int3 = 15}),
- ?line {ok,{'SeqDef3Imp',true,{'SeqIn',asn1_NOVALUE,12},15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef3Imp',lists:flatten(Bytes62)),
-
-
-
-
-
-
- ?line {ok,Bytes71} =
- asn1_wrapper:encode('SeqDefault','SeqDef1Exp',#'SeqDef1Exp'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef1Exp',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqDefault','SeqDef1Exp',lists:flatten(Bytes71)),
-
-
- ?line {ok,Bytes72} = asn1_wrapper:encode('SeqDefault','SeqDef1Exp',#'SeqDef1Exp'{int1 = 15}),
- ?line {ok,{'SeqDef1Exp',true,15,{'SeqIn',asn1_NOVALUE,12}}} =
- asn1_wrapper:decode('SeqDefault','SeqDef1Exp',lists:flatten(Bytes72)),
-
-
- ?line {ok,Bytes81} =
- asn1_wrapper:encode('SeqDefault','SeqDef2Exp',#'SeqDef2Exp'{bool2 = true,
- int2 = 15,
- seq2 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef2Exp',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef2Exp',lists:flatten(Bytes81)),
-
-
- ?line {ok,Bytes82} = asn1_wrapper:encode('SeqDefault','SeqDef2Exp',#'SeqDef2Exp'{int2 = 15,
- bool2 = true}),
- ?line {ok,{'SeqDef2Exp',{'SeqIn',asn1_NOVALUE,12},true,15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef2Exp',lists:flatten(Bytes82)),
-
-
-
- ?line {ok,Bytes91} =
- asn1_wrapper:encode('SeqDefault','SeqDef3Exp',#'SeqDef3Exp'{bool3 = true,
- int3 = 15,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqDef3Exp',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef3Exp',lists:flatten(Bytes91)),
-
-
- ?line {ok,Bytes92} = asn1_wrapper:encode('SeqDefault','SeqDef3Exp',#'SeqDef3Exp'{int3 = 15}),
- ?line {ok,{'SeqDef3Exp',true,{'SeqIn',asn1_NOVALUE,12},15}} =
- asn1_wrapper:decode('SeqDefault','SeqDef3Exp',lists:flatten(Bytes92)),
-
-
-
-
+ roundtrip('SeqDef1', #'SeqDef1'{bool1=true,int1=15,seq1=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('SeqDef1',
+ #'SeqDef1'{bool1=asn1_DEFAULT,int1=15,seq1=asn1_DEFAULT},
+ #'SeqDef1'{bool1=true,int1=15,seq1=#'SeqIn'{}}),
+
+ roundtrip('SeqDef2', #'SeqDef2'{seq2=#'SeqIn'{boolIn=true,intIn=66},bool2=true,int2=15}),
+ roundtrip('SeqDef2',
+ #'SeqDef2'{seq2=asn1_DEFAULT,bool2=asn1_DEFAULT,int2=15},
+ #'SeqDef2'{seq2=#'SeqIn'{},bool2=true,int2=15}),
+
+ roundtrip('SeqDef3', #'SeqDef3'{bool3=true,seq3=#'SeqIn'{boolIn=true,intIn=66},int3=15}),
+ roundtrip('SeqDef3',
+ #'SeqDef3'{bool3=asn1_DEFAULT,seq3=asn1_DEFAULT,int3=15},
+ #'SeqDef3'{bool3=true,seq3=#'SeqIn'{},int3=15}),
+
+ roundtrip('SeqDef1Imp', #'SeqDef1Imp'{bool1=true,int1=15,
+ seq1=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('SeqDef1Imp',
+ #'SeqDef1Imp'{bool1=asn1_DEFAULT,int1=15,seq1=asn1_DEFAULT},
+ #'SeqDef1Imp'{bool1=true,int1=15,seq1=#'SeqIn'{}}),
+
+ roundtrip('SeqDef2Imp', #'SeqDef2Imp'{seq2=#'SeqIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('SeqDef2Imp',
+ #'SeqDef2Imp'{seq2=asn1_DEFAULT,bool2=asn1_DEFAULT,int2=15},
+ #'SeqDef2Imp'{seq2=#'SeqIn'{},bool2=true,int2=15}),
+
+ roundtrip('SeqDef3Imp',
+ #'SeqDef3Imp'{bool3=true,seq3=#'SeqIn'{boolIn=true,intIn=66},int3=15}),
+ roundtrip('SeqDef3Imp',
+ #'SeqDef3Imp'{bool3=asn1_DEFAULT,seq3=asn1_DEFAULT,int3=15},
+ #'SeqDef3Imp'{bool3=true,seq3=#'SeqIn'{},int3=15}),
+
+ roundtrip('SeqDef1Exp',
+ #'SeqDef1Exp'{bool1=true,int1=15,seq1=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('SeqDef1Exp',
+ #'SeqDef1Exp'{bool1=asn1_DEFAULT,int1=15,seq1=asn1_DEFAULT},
+ #'SeqDef1Exp'{bool1=true,int1=15,seq1=#'SeqIn'{}}),
+
+ roundtrip('SeqDef2Exp', #'SeqDef2Exp'{seq2=#'SeqIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('SeqDef2Exp',
+ #'SeqDef2Exp'{seq2=asn1_DEFAULT,bool2=true,int2=15},
+ #'SeqDef2Exp'{seq2=#'SeqIn'{},bool2=true,int2=15}),
+
+ roundtrip('SeqDef3Exp',
+ #'SeqDef3Exp'{bool3=true,seq3=#'SeqIn'{boolIn=true,intIn=66},int3=15}),
+ roundtrip('SeqDef3Exp',
+ #'SeqDef3Exp'{bool3=asn1_DEFAULT,seq3=asn1_DEFAULT,int3=15},
+ #'SeqDef3Exp'{bool3=true,seq3=#'SeqIn'{},int3=15}),
ok.
+
+roundtrip(Type, Value) ->
+ roundtrip(Type, Value, Value).
+
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('SeqDefault', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testSeqExtension.erl b/lib/asn1/test/testSeqExtension.erl
index b996634996..8473459c36 100644
--- a/lib/asn1/test/testSeqExtension.erl
+++ b/lib/asn1/test/testSeqExtension.erl
@@ -108,18 +108,14 @@ main(Erule, DataDir, Opts) ->
ok.
roundtrip(Type, Value) ->
- {ok,Encoded} = 'SeqExtension':encode(Type, Value),
- {ok,Value} = 'SeqExtension':decode(Type, Encoded),
- ok.
+ asn1_test_lib:roundtrip('SeqExtension', Type, Value).
v_roundtrip2(Erule, Type, Value) ->
Encoded = asn1_test_lib:hex_to_bin(v(Erule, Type)),
Encoded = roundtrip2(Type, Value).
roundtrip2(Type, Value) ->
- {ok,Encoded} = 'SeqExtension2':encode(Type, Value),
- {ok,Value} = 'SeqExtension2':decode(Type, Encoded),
- Encoded.
+ asn1_test_lib:roundtrip_enc('SeqExtension2', Type, Value).
v(ber, 'SeqExt66') -> "30049F41 017D";
v(per, 'SeqExt66') -> "C0420000 00000000 00004001 FA";
diff --git a/lib/asn1/test/testSeqExternal.erl b/lib/asn1/test/testSeqExternal.erl
index b89b98d3fa..a8e0902244 100644
--- a/lib/asn1/test/testSeqExternal.erl
+++ b/lib/asn1/test/testSeqExternal.erl
@@ -20,121 +20,38 @@
-module(testSeqExternal).
-include("External.hrl").
--export([compile/3]).
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
-
-record('SeqXSet1',{set, bool, int}).
-record('SeqXSet2',{bool, set, int}).
-record('SeqXSet3',{bool, int, set}).
-%-record('NT',{os, bool}).
-%-record('Imp',{os, bool}).
-%-record('Exp',{os, bool}).
-
-
-compile(Config,Rules,Options) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
- ?line true = code:add_patha(?config(priv_dir,Config)),
- ?line ok = asn1ct:compile(DataDir ++ "SeqExternal",
- [Rules,{outdir,OutDir}]++Options).
-
-
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqExternal','XNTNT',#'XSeqNT'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqNT',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XNTNT',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqExternal','XImpNT',#'XSeqNT'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqNT',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XImpNT',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SeqExternal','XExpNT',#'XSeqNT'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqNT',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XExpNT',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqExternal','XNTImp',#'XSeqImp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqImp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XNTImp',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SeqExternal','XImpImp',#'XSeqImp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqImp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XImpImp',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SeqExternal','XExpImp',#'XSeqImp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqImp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XExpImp',lists:flatten(Bytes23)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqExternal','XNTExp',#'XSeqExp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqExp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XNTExp',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SeqExternal','XImpExp',#'XSeqExp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqExp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XImpExp',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SeqExternal','XExpExp',#'XSeqExp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSeqExp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SeqExternal','XExpExp',lists:flatten(Bytes33)),
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqExternal','SeqXSet1',
- #'SeqXSet1'{bool = true,
- int = 66,
- set = #'XSet1'{bool1 = true,
- int1 = 77,
- set1 = #'XSetIn'{boolIn = false,
- intIn = 88}}}),
- ?line {ok,{'SeqXSet1',{'XSet1',true,77,{'XSetIn',false,88}},true,66}} =
- asn1_wrapper:decode('SeqExternal','SeqXSet1',lists:flatten(Bytes41)),
-
-
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SeqExternal','SeqXSet2',
- #'SeqXSet2'{bool = true,
- int = 66,
- set = #'XSet1'{bool1 = true,
- int1 = 77,
- set1 = #'XSetIn'{boolIn = false,
- intIn = 88}}}),
- ?line {ok,{'SeqXSet2',true,{'XSet1',true,77,{'XSetIn',false,88}},66}} =
- asn1_wrapper:decode('SeqExternal','SeqXSet2',lists:flatten(Bytes42)),
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SeqExternal','SeqXSet3',
- #'SeqXSet3'{bool = true,
- int = 66,
- set = #'XSet1'{bool1 = true,
- int1 = 77,
- set1 = #'XSetIn'{boolIn = false,
- intIn = 88}}}),
- ?line {ok,{'SeqXSet3',true,66,{'XSet1',true,77,{'XSetIn',false,88}}}} =
- asn1_wrapper:decode('SeqExternal','SeqXSet3',lists:flatten(Bytes43)),
-
-
-
-
+ roundtrip('XNTNT', #'XSeqNT'{os="kalle",bool=true}),
+ roundtrip('XImpNT', #'XSeqNT'{os="kalle",bool=true}),
+ roundtrip('XExpNT', #'XSeqNT'{os="kalle",bool=true}),
+ roundtrip('XNTImp', #'XSeqImp'{os="kalle",bool=true}),
+ roundtrip('XImpImp', #'XSeqImp'{os="kalle",bool=true}),
+ roundtrip('XExpImp', #'XSeqImp'{os="kalle",bool=true}),
+ roundtrip('XNTExp', #'XSeqExp'{os="kalle",bool=true}),
+ roundtrip('XImpExp', #'XSeqExp'{os="kalle",bool=true}),
+ roundtrip('XExpExp', #'XSeqExp'{os="kalle",bool=true}),
+ roundtrip('SeqXSet1',
+ #'SeqXSet1'{set=#'XSet1'{bool1=true,int1=77,
+ set1=#'XSetIn'{boolIn=false,intIn=88}},
+ bool=true,int=66}),
+ roundtrip('SeqXSet2',
+ #'SeqXSet2'{bool=true,
+ set=#'XSet1'{bool1=true,int1=77,
+ set1=#'XSetIn'{boolIn=false,intIn=88}},
+ int=66}),
+ roundtrip('SeqXSet3',
+ #'SeqXSet3'{bool=true,int=66,
+ set=#'XSet1'{bool1=true,int1=77,
+ set1=#'XSetIn'{boolIn=false,intIn=88}}}),
ok.
-
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqExternal', T, V).
diff --git a/lib/asn1/test/testSeqIndefinite.erl b/lib/asn1/test/testSeqIndefinite.erl
deleted file mode 100644
index c7b8aba523..0000000000
--- a/lib/asn1/test/testSeqIndefinite.erl
+++ /dev/null
@@ -1,48 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(testSeqIndefinite).
-
--export([main/1]).
-
--include_lib("test_server/include/test_server.hrl").
-
-main(per) -> ok;
-main(ber) ->
-
- %% normal encoding
- B = [48,20,1,1,255,48,9,1,1,255,2,4,251,35,238,194,2,4,251,55,236,161],
- %% indefinite length encoding
- Bi = [48,22,1,1,255,48,128,1,1,255,2,4,251,35,238,194,0,0,2,4,251,55,236,161],
- %% the value which is encoded
- V = {'SeqS3',true,{'SeqS3_seqS3',true,-81531198},-80221023},
- ?line {ok,V} = asn1_wrapper:decode('SeqSetIndefinite','SeqS3',B),
- ?line {ok,V} = asn1_wrapper:decode('SeqSetIndefinite','SeqS3',Bi),
-
- %% normal encoding but with unknown extension component
- _Be = [48,23,1,1,255,48,12,1,1,255,2,4,251,35,238,194,1,1,255,2,4,251,55,236,161],
- %% indefinite length encoding but with unknown extension component
- _Bei = [48,25,1,1,255,48,128,1,1,255,2,4,251,35,238,194,1,1,255,0,0,2,4,251,55,236,161],
-
- ?line {ok,V} = asn1_wrapper:decode('SeqSetIndefinite','SeqS3',B),
- ?line {ok,V} = asn1_wrapper:decode('SeqSetIndefinite','SeqS3',Bi),
- ok.
-
-
-
diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl
index c50cc27f6f..7f8f4079b4 100644
--- a/lib/asn1/test/testSeqOf.erl
+++ b/lib/asn1/test/testSeqOf.erl
@@ -149,15 +149,9 @@ roundtrip(T, V) ->
roundtrip(T, V, V).
roundtrip(Type, Val, Expected) ->
- M = 'SeqOf',
- {ok,Enc} = M:encode(Type, Val),
- {ok,Expected} = M:decode(Type, Enc),
- ok.
+ asn1_test_lib:roundtrip('SeqOf', Type, Val, Expected).
xroundtrip(T1, T2, Val) ->
- M = 'XSeqOf',
- {ok,Enc} = M:encode(T1, Val),
- {ok,Enc} = M:encode(T2, Val),
- {ok,Val} = M:decode(T1, Enc),
- {ok,Val} = M:decode(T2, Enc),
+ Enc = asn1_test_lib:roundtrip_enc('XSeqOf', T1, Val),
+ Enc = asn1_test_lib:roundtrip_enc('XSeqOf', T2, Val),
ok.
diff --git a/lib/asn1/test/testSeqOfCho.erl b/lib/asn1/test/testSeqOfCho.erl
index 5b83c8bf21..f749845bb9 100644
--- a/lib/asn1/test/testSeqOfCho.erl
+++ b/lib/asn1/test/testSeqOfCho.erl
@@ -31,117 +31,45 @@
-record('SeqOfChoEmbOpt_SEQOF',{bool1, int1, seq1 = asn1_NOVALUE}).
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqOfCho','SeqChoDef',#'SeqChoDef'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SeqChoDef',true,17,[]}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoDef',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqOfCho','SeqChoDef',#'SeqChoDef'{bool1 = true,
- int1 = 17,
- seq1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SeqChoDef',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoDef',lists:flatten(Bytes12)),
-
-
-
- ?line {ok,Bytes15} =
- asn1_wrapper:encode('SeqOfCho','SeqChoOpt',#'SeqChoOpt'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SeqChoOpt',true,17,asn1_NOVALUE}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoOpt',lists:flatten(Bytes15)),
-
-
- ?line {ok,Bytes16} =
- asn1_wrapper:encode('SeqOfCho','SeqChoOpt',#'SeqChoOpt'{bool1 = true,
- int1 = 17,
- seq1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SeqChoOpt',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoOpt',lists:flatten(Bytes16)),
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqOfCho','SeqChoEmbDef',#'SeqChoEmbDef'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SeqChoEmbDef',true,17,[]}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoEmbDef',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SeqOfCho','SeqChoEmbDef',#'SeqChoEmbDef'{bool1 = true,
- int1 = 17,
- seq1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SeqChoEmbDef',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoEmbDef',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes25} =
- asn1_wrapper:encode('SeqOfCho','SeqChoEmbOpt',#'SeqChoEmbOpt'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SeqChoEmbOpt',true,17,asn1_NOVALUE}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoEmbOpt',lists:flatten(Bytes25)),
-
-
- ?line {ok,Bytes26} =
- asn1_wrapper:encode('SeqOfCho','SeqChoEmbOpt',#'SeqChoEmbOpt'{bool1 = true,
- int1 = 17,
- seq1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SeqChoEmbOpt',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SeqOfCho','SeqChoEmbOpt',lists:flatten(Bytes26)),
-
-
-
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqOfCho','SeqOfChoEmbDef',[#'SeqOfChoEmbDef_SEQOF'{bool1 = true,
- int1 = 17}]),
- ?line {ok,[{'SeqOfChoEmbDef_SEQOF',true,17,[]}]} =
- asn1_wrapper:decode('SeqOfCho','SeqOfChoEmbDef',lists:flatten(Bytes31)),
-
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SeqOfCho','SeqOfChoEmbDef',
- [#'SeqOfChoEmbDef_SEQOF'{bool1 = true,
- int1 = 17,
- seq1 = [{boolIn,true},
- {intIn,25}]}]),
- ?line {ok,[{'SeqOfChoEmbDef_SEQOF',true,17,[{boolIn,true},{intIn,25}]}]} =
- asn1_wrapper:decode('SeqOfCho','SeqOfChoEmbDef',lists:flatten(Bytes32)),
-
-
-
- ?line {ok,Bytes35} =
- asn1_wrapper:encode('SeqOfCho','SeqOfChoEmbOpt',[#'SeqOfChoEmbOpt_SEQOF'{bool1 = true,
- int1 = 17}]),
- ?line {ok,[{'SeqOfChoEmbOpt_SEQOF',true,17,asn1_NOVALUE}]} =
- asn1_wrapper:decode('SeqOfCho','SeqOfChoEmbOpt',lists:flatten(Bytes35)),
-
-
- ?line {ok,Bytes36} =
- asn1_wrapper:encode('SeqOfCho','SeqOfChoEmbOpt',
- [#'SeqOfChoEmbOpt_SEQOF'{bool1 = true,
- int1 = 17,
- seq1 = [{boolIn,true},
- {intIn,25}]}]),
- ?line {ok,[{'SeqOfChoEmbOpt_SEQOF',true,17,[{boolIn,true},{intIn,25}]}]} =
- asn1_wrapper:decode('SeqOfCho','SeqOfChoEmbOpt',lists:flatten(Bytes36)),
-
-
-
-
+ roundtrip('SeqChoDef',
+ #'SeqChoDef'{bool1=true,int1=17,seq1=asn1_DEFAULT},
+ #'SeqChoDef'{bool1=true,int1=17,seq1=[]}),
+ roundtrip('SeqChoDef',
+ #'SeqChoDef'{bool1=true,int1=17,
+ seq1=[{boolIn,true},{intIn,25}]}),
+ roundtrip('SeqChoOpt',
+ #'SeqChoOpt'{bool1=true,int1=17,seq1=asn1_NOVALUE}),
+ roundtrip('SeqChoOpt',
+ #'SeqChoOpt'{bool1=true,int1=17,
+ seq1=[{boolIn,true},{intIn,25}]}),
+
+ roundtrip('SeqChoEmbDef',
+ #'SeqChoEmbDef'{bool1=true,int1=17,seq1=asn1_DEFAULT},
+ #'SeqChoEmbDef'{bool1=true,int1=17,seq1=[]}),
+ roundtrip('SeqChoEmbDef',
+ #'SeqChoEmbDef'{bool1=true,int1=17,
+ seq1=[{boolIn,true},{intIn,25}]}),
+ roundtrip('SeqChoEmbOpt',
+ #'SeqChoEmbOpt'{bool1=true,int1=17,seq1=asn1_NOVALUE}),
+ roundtrip('SeqChoEmbOpt',
+ #'SeqChoEmbOpt'{bool1=true,int1=17,
+ seq1=[{boolIn,true},{intIn,25}]}),
+
+ roundtrip('SeqOfChoEmbDef',
+ [#'SeqOfChoEmbDef_SEQOF'{bool1=true,int1=17,seq1=asn1_DEFAULT}],
+ [#'SeqOfChoEmbDef_SEQOF'{bool1=true,int1=17,seq1=[]}]),
+ roundtrip('SeqOfChoEmbDef',
+ [#'SeqOfChoEmbDef_SEQOF'{bool1=true,int1=17,
+ seq1=[{boolIn,true},{intIn,25}]}]),
+ roundtrip('SeqOfChoEmbOpt',
+ [#'SeqOfChoEmbOpt_SEQOF'{bool1=true,int1=17,seq1=asn1_NOVALUE}]),
+ roundtrip('SeqOfChoEmbOpt',
+ [#'SeqOfChoEmbOpt_SEQOF'{bool1=true,int1=17,
+ seq1=[{boolIn,true},{intIn,25}]}]),
ok.
+roundtrip(Type, Value) ->
+ roundtrip(Type, Value, Value).
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('SeqOfCho', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testSeqOfExternal.erl b/lib/asn1/test/testSeqOfExternal.erl
index 4c4c9e2b0f..2e60f441c1 100644
--- a/lib/asn1/test/testSeqOfExternal.erl
+++ b/lib/asn1/test/testSeqOfExternal.erl
@@ -18,9 +18,6 @@
%%
%%
-module(testSeqOfExternal).
-
-
--export([compile/3]).
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -30,142 +27,53 @@
-record('Imp',{os, bool}).
-record('Exp',{os, bool}).
-
-
-compile(Config,Rules,Options) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
- ?line true = code:add_patha(?config(priv_dir,Config)),
- ?line ok = asn1ct:compile(DataDir ++ "SeqOfExternal",[Rules,{outdir,OutDir}]++Options).
-
-
-
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqOfExternal','NTNT',[#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','NTNT',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqOfExternal','ImpNT',[#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','ImpNT',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SeqOfExternal','ExpNT',[#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','ExpNT',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqOfExternal','NTImp',[#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','NTImp',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SeqOfExternal','ImpImp',[#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','ImpImp',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SeqOfExternal','ExpImp',[#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','ExpImp',lists:flatten(Bytes23)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqOfExternal','NTExp',[#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','NTExp',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SeqOfExternal','ImpExp',[#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','ImpExp',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SeqOfExternal','ExpExp',[#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','ExpExp',lists:flatten(Bytes33)),
-
-
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqOfExternal','XNTNT',[#'XSeqNT'{bool = true, os = "kalle"},
- #'XSeqNT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqNT',[107,97,108,108,101],true},{'XSeqNT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XNTNT',lists:flatten(Bytes41)),
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SeqOfExternal','XImpNT',[#'XSeqNT'{bool = true, os = "kalle"},
- #'XSeqNT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqNT',[107,97,108,108,101],true},{'XSeqNT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XImpNT',lists:flatten(Bytes42)),
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SeqOfExternal','XExpNT',[#'XSeqNT'{bool = true, os = "kalle"},
- #'XSeqNT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqNT',[107,97,108,108,101],true},{'XSeqNT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XExpNT',lists:flatten(Bytes43)),
-
-
-
- ?line {ok,Bytes51} =
- asn1_wrapper:encode('SeqOfExternal','XNTImp',[#'XSeqImp'{bool = true, os = "kalle"},
- #'XSeqImp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqImp',[107,97,108,108,101],true},{'XSeqImp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XNTImp',lists:flatten(Bytes51)),
-
- ?line {ok,Bytes52} =
- asn1_wrapper:encode('SeqOfExternal','XImpImp',[#'XSeqImp'{bool = true, os = "kalle"},
- #'XSeqImp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqImp',[107,97,108,108,101],true},{'XSeqImp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XImpImp',lists:flatten(Bytes52)),
-
- ?line {ok,Bytes53} =
- asn1_wrapper:encode('SeqOfExternal','XExpImp',[#'XSeqImp'{bool = true, os = "kalle"},
- #'XSeqImp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqImp',[107,97,108,108,101],true},{'XSeqImp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XExpImp',lists:flatten(Bytes53)),
-
-
-
- ?line {ok,Bytes61} =
- asn1_wrapper:encode('SeqOfExternal','XNTExp',[#'XSeqExp'{bool = true, os = "kalle"},
- #'XSeqExp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqExp',[107,97,108,108,101],true},{'XSeqExp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XNTExp',lists:flatten(Bytes61)),
-
- ?line {ok,Bytes62} =
- asn1_wrapper:encode('SeqOfExternal','XImpExp',[#'XSeqExp'{bool = true, os = "kalle"},
- #'XSeqExp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqExp',[107,97,108,108,101],true},{'XSeqExp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XImpExp',lists:flatten(Bytes62)),
-
- ?line {ok,Bytes63} =
- asn1_wrapper:encode('SeqOfExternal','XExpExp',[#'XSeqExp'{bool = true, os = "kalle"},
- #'XSeqExp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSeqExp',[107,97,108,108,101],true},{'XSeqExp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SeqOfExternal','XExpExp',lists:flatten(Bytes63)),
-
-
-
-
+ roundtrip('NTNT',
+ [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ roundtrip('ImpNT',
+ [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ roundtrip('ExpNT',
+ [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ roundtrip('NTImp',
+ [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ roundtrip('ImpImp',
+ [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ roundtrip('ExpImp',
+ [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ roundtrip('NTExp',
+ [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ roundtrip('ImpExp',
+ [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ roundtrip('ExpExp',
+ [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ roundtrip('XNTNT',
+ [#'XSeqNT'{os="kalle",bool=true},
+ #'XSeqNT'{os="kalle",bool=true}]),
+ roundtrip('XImpNT',
+ [#'XSeqNT'{os="kalle",bool=true},
+ #'XSeqNT'{os="kalle",bool=true}]),
+ roundtrip('XExpNT',
+ [#'XSeqNT'{os="kalle",bool=true},
+ #'XSeqNT'{os="kalle",bool=true}]),
+ roundtrip('XNTImp',
+ [#'XSeqImp'{os="kalle",bool=true},
+ #'XSeqImp'{os="kalle",bool=true}]),
+ roundtrip('XImpImp',
+ [#'XSeqImp'{os="kalle",bool=true},
+ #'XSeqImp'{os="kalle",bool=true}]),
+ roundtrip('XExpImp',
+ [#'XSeqImp'{os="kalle",bool=true},
+ #'XSeqImp'{os="kalle",bool=true}]),
+ roundtrip('XNTExp',
+ [#'XSeqExp'{os="kalle",bool=true},
+ #'XSeqExp'{os="kalle",bool=true}]),
+ roundtrip('XImpExp',
+ [#'XSeqExp'{os="kalle",bool=true},
+ #'XSeqExp'{os="kalle",bool=true}]),
+ roundtrip('XExpExp',
+ [#'XSeqExp'{os="kalle",bool=true},
+ #'XSeqExp'{os="kalle",bool=true}]),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqOfExternal', T, V).
diff --git a/lib/asn1/test/testSeqOfIndefinite.erl b/lib/asn1/test/testSeqOfIndefinite.erl
index 01ef36e0b4..b771405d84 100644
--- a/lib/asn1/test/testSeqOfIndefinite.erl
+++ b/lib/asn1/test/testSeqOfIndefinite.erl
@@ -33,60 +33,53 @@ main() ->
?line ok = test('InsertSubscriberDataArg'). % OTP-4232
test(isd)->
- EncPdu = [48,128,129,7,145,148,113,50,1,0,241,131,1,0,176,128,5,0,161,128,48,22,2,1,1,144,2,241,33,145,4,0,1,2,3,146,3,36,131,16,148,2,1,42,48,35,2,1,2,144,2,241,33,145,4,255,255,255,255,146,3,37,147,18,147,0,148,13,7,67,79,77,80,65,78,89,4,67,79,77,53,48,28,2,1,3,144,2,241,33,146,3,26,98,31,148,14,9,67,79,77,80,65,78,89,49,50,3,67,79,77,0,0,0,0,152,1,2,0,0],
-
- ?line {ok,_} = asn1_wrapper:decode('Mvrasn-11-4',
- 'InsertSubscriberDataArg',
- EncPdu),
+ EncPdu = <<48,128,129,7,145,148,113,50,1,0,241,131,1,0,176,128,5,0,
+ 161,128,48,22,2,1,1,144,2,241,33,145,4,0,1,2,3,146,3,36,
+ 131,16,148,2,1,42,48,35,2,1,2,144,2,241,33,145,4,255,255,
+ 255,255,146,3,37,147,18,147,0,148,13,7,67,79,77,80,65,78,
+ 89,4,67,79,77,53,48,28,2,1,3,144,2,241,33,146,3,26,98,31,
+ 148,14,9,67,79,77,80,65,78,89,49,50,3,67,79,77,0,0,0,0,
+ 152,1,2,0,0>>,
+ {ok,_} = 'Mvrasn-11-4':decode('InsertSubscriberDataArg', EncPdu),
ok;
%
% Problems with indefinite length encoding !!!
%
test(isd2)->
- EncPdu = [48, 128, 128, 8, 98, 2, 50, 1, 0, 0, 0, 241, 176, 128, 161, 128, 48, 128, 2, 1, 1, 144, 2, 241, 33, 145, 4, 255, 23, 12, 1, 146, 3, 9, 17, 1, 147, 0, 148, 13, 7, 67, 79, 77, 80, 65, 78, 89, 4, 67, 79, 77, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
-
- ?line {ok,_DecPdu} = asn1_wrapper:decode('Mvrasn-11-4',
- 'InsertSubscriberDataArg',
- EncPdu),
-
+ EncPdu = <<48,128,128,8,98,2,50,1,0,0,0,241,176,128,161,128,48,128,2,1,1,144,
+ 2,241,33,145,4,255,23,12,1,146,3,9,17,1,147,0,148,13,7,67,79,77,80,
+ 65,78,89,4,67,79,77,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>,
+ {ok,_DecPdu} = 'Mvrasn-11-4':decode('InsertSubscriberDataArg', EncPdu),
ok;
%
% Is doing fine, although there is indefinite encoding used... !!!
%
test(dsd)->
- EncPdu = [48, 128, 128, 8, 98, 2, 50, 1, 0, 0, 0, 241, 170, 2, 5, 0, 0, 0, 0, 0],
-
- ?line {ok,_DecPdu} = asn1_wrapper:decode('Mvrasn-11-4',
- 'DeleteSubscriberDataArg',
- EncPdu),
-
+ EncPdu = <<48,128,128,8,98,2,50,1,0,0,0,241,170,2,5,0,0,0,0,0>>,
+ {ok,_DecPdu} = 'Mvrasn-11-4':decode('DeleteSubscriberDataArg', EncPdu),
ok;
%
% Is doing fine !!!
%
test(ul_res)->
- EncPdu = [48, 9, 4, 7, 145, 148, 113, 66, 16, 17, 241],
-
- ?line {ok,_DecPdu} = asn1_wrapper:decode('Mvrasn-11-4',
- 'UpdateGprsLocationRes',
- EncPdu),
-
+ EncPdu = <<48,9,4,7,145,148,113,66,16,17,241>>,
+ {ok,_DecPdu} = 'Mvrasn-11-4':decode('UpdateGprsLocationRes', EncPdu),
ok;
test(prim) ->
- ?line {ok,Bytes} = asn1_wrapper:encode('SeqOf','SeqOfInt',[10,20,30]),
- ?line [Tag,_Len|Ints] = lists:flatten(Bytes),
- ?line {ok,[10,20,30]} =
- asn1_wrapper:decode('SeqOf','SeqOfInt',[Tag,128|Ints] ++ [0,0]),
+ Bytes = asn1_test_lib:roundtrip_enc('SeqOf', 'SeqOfInt', [10,20,30]),
+ <<Tag,_Len,Ints/binary>> = Bytes,
+ {ok,[10,20,30]} =
+ 'SeqOf':decode('SeqOfInt', <<Tag,128,Ints/binary,0,0>>),
ok;
test(seqofseq) ->
- {ok,_V} = asn1_wrapper:decode('Mvrasn-DataTypes-1',
- 'SentParameters',
- [48,
+ {ok,_V} = 'Mvrasn-DataTypes-1':decode(
+ 'SentParameters',
+ [48,
129,
190,
161,
@@ -281,17 +274,16 @@ test(seqofseq) ->
0]),
ok;
test('InsertSubscriberDataArg') ->
- {ok,_V} =
- asn1_wrapper:decode('Mvrasn-11-4','InsertSubscriberDataArg',
- [16#30,16#80,16#81,16#07,16#91,16#94,
- 16#71,16#92,16#00,16#35,16#80,16#83,
- 16#01,16#00,16#A6,16#06,16#04,16#01,
- 16#21,16#04,16#01,16#22,16#B0,16#80,
- 16#05,16#00,16#A1,16#80,16#30,16#1A,
- 16#02,16#01,16#01,16#90,16#02,16#F1,
- 16#21,16#92,16#03,16#0D,16#92,16#1F,
- 16#94,16#0C,16#03,16#53,16#49,16#4D,
- 16#03,16#47,16#53,16#4E,16#03,16#4C,
- 16#4B,16#50,16#00,16#00,16#00,16#00,
- 16#98,16#01,16#00,16#00,16#00]),
+ EncPdu = <<16#30,16#80,16#81,16#07,16#91,16#94,
+ 16#71,16#92,16#00,16#35,16#80,16#83,
+ 16#01,16#00,16#A6,16#06,16#04,16#01,
+ 16#21,16#04,16#01,16#22,16#B0,16#80,
+ 16#05,16#00,16#A1,16#80,16#30,16#1A,
+ 16#02,16#01,16#01,16#90,16#02,16#F1,
+ 16#21,16#92,16#03,16#0D,16#92,16#1F,
+ 16#94,16#0C,16#03,16#53,16#49,16#4D,
+ 16#03,16#47,16#53,16#4E,16#03,16#4C,
+ 16#4B,16#50,16#00,16#00,16#00,16#00,
+ 16#98,16#01,16#00,16#00,16#00>>,
+ {ok,_V} = 'Mvrasn-11-4':decode('InsertSubscriberDataArg', EncPdu),
ok.
diff --git a/lib/asn1/test/testSeqOfTag.erl b/lib/asn1/test/testSeqOfTag.erl
index 2359df0c59..38c1dcb90f 100644
--- a/lib/asn1/test/testSeqOfTag.erl
+++ b/lib/asn1/test/testSeqOfTag.erl
@@ -44,145 +44,48 @@
-record('Exp',{os, bool}).
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqOfTag','SeqTagNt',
- #'SeqTagNt'{nt = [#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagNt',
- [{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagNt',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqOfTag','SeqTagNtI',
- #'SeqTagNtI'{imp = [#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagNtI',
- [{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagNtI',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SeqOfTag','SeqTagNtE',
- #'SeqTagNtE'{exp = [#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagNtE',
- [{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagNtE',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqOfTag','SeqTagI',
- #'SeqTagI'{nt = [#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagI',
- [{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagI',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SeqOfTag','SeqTagII',
- #'SeqTagII'{imp = [#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagII',
- [{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagII',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SeqOfTag','SeqTagIE',
- #'SeqTagIE'{exp = [#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagIE',
- [{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagIE',lists:flatten(Bytes23)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqOfTag','SeqTagE',
- #'SeqTagE'{nt = [#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagE',
- [{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagE',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SeqOfTag','SeqTagEI',
- #'SeqTagEI'{imp = [#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagEI',
- [{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagEI',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SeqOfTag','SeqTagEE',
- #'SeqTagEE'{exp = [#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagEE',
- [{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagEE',lists:flatten(Bytes33)),
-
-
-
-
+ roundtrip('SeqTagNt', #'SeqTagNt'{nt=[#'NT'{os="kalle",bool=true},
+ #'NT'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagNtI', #'SeqTagNtI'{imp=[#'Imp'{os="kalle",bool=true},
+ #'Imp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagNtE', #'SeqTagNtE'{exp=[#'Exp'{os="kalle",bool=true},
+ #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagI', #'SeqTagI'{nt=[#'NT'{os="kalle",bool=true},
+ #'NT'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagII', #'SeqTagII'{imp=[#'Imp'{os="kalle",bool=true},
+ #'Imp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagIE', #'SeqTagIE'{exp=[#'Exp'{os="kalle",bool=true},
+ #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagE', #'SeqTagE'{nt=[#'NT'{os="kalle",bool=true},
+ #'NT'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagEI', #'SeqTagEI'{imp=[#'Imp'{os="kalle",bool=true},
+ #'Imp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagEE', #'SeqTagEE'{exp=[#'Exp'{os="kalle",bool=true},
+ #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagXNt',
+ #'SeqTagXNt'{xnt=[#'XSeqNT'{os="kalle",bool=true},
+ #'XSeqNT'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagXI',
+ #'SeqTagXI'{ximp=[#'XSeqImp'{os="kalle",bool=true},
+ #'XSeqImp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagXE',
+ #'SeqTagXE'{xexp=[#'XSeqExp'{os="kalle",bool=true},
+ #'XSeqExp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagImpX',
+ #'SeqTagImpX'{xnt=[#'XSeqNT'{os="kalle",bool=true},
+ #'XSeqNT'{os="kalle",bool=true}],
+ ximp=[#'XSeqImp'{os="kalle",bool=true},
+ #'XSeqImp'{os="kalle",bool=true}],
+ xexp=[#'XSeqExp'{os="kalle",bool=true},
+ #'XSeqExp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagExpX',
+ #'SeqTagExpX'{xnt=[#'XSeqNT'{os="kalle",bool=true},
+ #'XSeqNT'{os="kalle",bool=true}],
+ ximp=[#'XSeqImp'{os="kalle",bool=true},
+ #'XSeqImp'{os="kalle",bool=true}],
+ xexp=[#'XSeqExp'{os="kalle",bool=true},
+ #'XSeqExp'{os="kalle",bool=true}]}),
+ ok.
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqOfTag','SeqTagXNt',
- #'SeqTagXNt'{xnt = [#'XSeqNT'{bool = true, os = "kalle"},
- #'XSeqNT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagXNt',
- [{'XSeqNT',[107,97,108,108,101],true},{'XSeqNT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagXNt',lists:flatten(Bytes41)),
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SeqOfTag','SeqTagXI',
- #'SeqTagXI'{ximp = [#'XSeqImp'{bool = true, os = "kalle"},
- #'XSeqImp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagXI',
- [{'XSeqImp',[107,97,108,108,101],true},{'XSeqImp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagXI',lists:flatten(Bytes42)),
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SeqOfTag','SeqTagXE',
- #'SeqTagXE'{xexp = [#'XSeqExp'{bool = true, os = "kalle"},
- #'XSeqExp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagXE',
- [{'XSeqExp',[107,97,108,108,101],true},{'XSeqExp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagXE',lists:flatten(Bytes43)),
-
-
-
-
-
- ?line {ok,Bytes51} =
- asn1_wrapper:encode('SeqOfTag','SeqTagImpX',
- #'SeqTagImpX'{xnt = [#'XSeqNT'{bool = true, os = "kalle"},
- #'XSeqNT'{bool = true, os = "kalle"}],
- ximp = [#'XSeqImp'{bool = true, os = "kalle"},
- #'XSeqImp'{bool = true, os = "kalle"}],
- xexp = [#'XSeqExp'{bool = true, os = "kalle"},
- #'XSeqExp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagImpX',
- [{'XSeqNT',[107,97,108,108,101],true},{'XSeqNT',[107,97,108,108,101],true}],
- [{'XSeqImp',[107,97,108,108,101],true},{'XSeqImp',[107,97,108,108,101],true}],
- [{'XSeqExp',[107,97,108,108,101],true},{'XSeqExp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagImpX',lists:flatten(Bytes51)),
-
-
-
- ?line {ok,Bytes52} =
- asn1_wrapper:encode('SeqOfTag','SeqTagExpX',
- #'SeqTagExpX'{xnt = [#'XSeqNT'{bool = true, os = "kalle"},
- #'XSeqNT'{bool = true, os = "kalle"}],
- ximp = [#'XSeqImp'{bool = true, os = "kalle"},
- #'XSeqImp'{bool = true, os = "kalle"}],
- xexp = [#'XSeqExp'{bool = true, os = "kalle"},
- #'XSeqExp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SeqTagExpX',
- [{'XSeqNT',[107,97,108,108,101],true},{'XSeqNT',[107,97,108,108,101],true}],
- [{'XSeqImp',[107,97,108,108,101],true},{'XSeqImp',[107,97,108,108,101],true}],
- [{'XSeqExp',[107,97,108,108,101],true},{'XSeqExp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SeqOfTag','SeqTagExpX',lists:flatten(Bytes52)),
-
-ok.
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqOfTag', T, V).
diff --git a/lib/asn1/test/testSeqOptional.erl b/lib/asn1/test/testSeqOptional.erl
index 8013f3c685..c9478105a4 100644
--- a/lib/asn1/test/testSeqOptional.erl
+++ b/lib/asn1/test/testSeqOptional.erl
@@ -37,159 +37,48 @@
-record('SeqChoOpt',{int, cho = asn1_NOVALUE}).
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqOptional','SeqOpt1',#'SeqOpt1'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt1',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt1',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('SeqOptional','SeqOpt1',#'SeqOpt1'{int1 = 15}),
- ?line {ok,{'SeqOpt1',asn1_NOVALUE,15,asn1_NOVALUE}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt1',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqOptional','SeqOpt2',#'SeqOpt2'{bool2 = true,
- int2 = 15,
- seq2 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt2',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt2',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('SeqOptional','SeqOpt2',#'SeqOpt2'{int2 = 15,
- bool2 = true}),
- ?line {ok,{'SeqOpt2',asn1_NOVALUE,true,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt2',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqOptional','SeqOpt3',#'SeqOpt3'{bool3 = true,
- int3 = 15,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt3',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt3',lists:flatten(Bytes31)),
-
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('SeqOptional','SeqOpt3',#'SeqOpt3'{int3 = 15}),
- ?line {ok,{'SeqOpt3',asn1_NOVALUE,asn1_NOVALUE,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt3',lists:flatten(Bytes32)),
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqOptional','SeqOpt1Imp',#'SeqOpt1Imp'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt1Imp',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt1Imp',lists:flatten(Bytes41)),
-
-
- ?line {ok,Bytes42} = asn1_wrapper:encode('SeqOptional','SeqOpt1Imp',#'SeqOpt1Imp'{int1 = 15}),
- ?line {ok,{'SeqOpt1Imp',asn1_NOVALUE,15,asn1_NOVALUE}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt1Imp',lists:flatten(Bytes42)),
-
-
- ?line {ok,Bytes51} =
- asn1_wrapper:encode('SeqOptional','SeqOpt2Imp',#'SeqOpt2Imp'{bool2 = true,
- int2 = 15,
- seq2 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt2Imp',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt2Imp',lists:flatten(Bytes51)),
-
-
- ?line {ok,Bytes52} = asn1_wrapper:encode('SeqOptional','SeqOpt2Imp',#'SeqOpt2Imp'{int2 = 15,
- bool2 = true}),
- ?line {ok,{'SeqOpt2Imp',asn1_NOVALUE,true,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt2Imp',lists:flatten(Bytes52)),
-
-
-
- ?line {ok,Bytes61} =
- asn1_wrapper:encode('SeqOptional','SeqOpt3Imp',#'SeqOpt3Imp'{bool3 = true,
- int3 = 15,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt3Imp',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt3Imp',lists:flatten(Bytes61)),
-
-
- ?line {ok,Bytes62} = asn1_wrapper:encode('SeqOptional','SeqOpt3Imp',#'SeqOpt3Imp'{int3 = 15}),
- ?line {ok,{'SeqOpt3Imp',asn1_NOVALUE,asn1_NOVALUE,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt3Imp',lists:flatten(Bytes62)),
-
-
-
-
-
-
- ?line {ok,Bytes71} =
- asn1_wrapper:encode('SeqOptional','SeqOpt1Exp',#'SeqOpt1Exp'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt1Exp',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt1Exp',lists:flatten(Bytes71)),
-
-
- ?line {ok,Bytes72} = asn1_wrapper:encode('SeqOptional','SeqOpt1Exp',#'SeqOpt1Exp'{int1 = 15}),
- ?line {ok,{'SeqOpt1Exp',asn1_NOVALUE,15,asn1_NOVALUE}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt1Exp',lists:flatten(Bytes72)),
-
-
- ?line {ok,Bytes81} =
- asn1_wrapper:encode('SeqOptional','SeqOpt2Exp',#'SeqOpt2Exp'{bool2 = true,
- int2 = 15,
- seq2 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt2Exp',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt2Exp',lists:flatten(Bytes81)),
-
-
- ?line {ok,Bytes82} = asn1_wrapper:encode('SeqOptional','SeqOpt2Exp',#'SeqOpt2Exp'{int2 = 15,
- bool2 = true}),
- ?line {ok,{'SeqOpt2Exp',asn1_NOVALUE,true,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt2Exp',lists:flatten(Bytes82)),
-
-
-
- ?line {ok,Bytes91} =
- asn1_wrapper:encode('SeqOptional','SeqOpt3Exp',#'SeqOpt3Exp'{bool3 = true,
- int3 = 15,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqOpt3Exp',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt3Exp',lists:flatten(Bytes91)),
-
-
- ?line {ok,Bytes92} = asn1_wrapper:encode('SeqOptional','SeqOpt3Exp',#'SeqOpt3Exp'{int3 = 15}),
- ?line {ok,{'SeqOpt3Exp',asn1_NOVALUE,asn1_NOVALUE,15}} =
- asn1_wrapper:decode('SeqOptional','SeqOpt3Exp',lists:flatten(Bytes92)),
-
-
-
- ?line {ok,Bytes101} =
- asn1_wrapper:encode('SeqOptional','SeqChoOpt',#'SeqChoOpt'{int = 15,
- cho = {boolC,true}}),
- ?line {ok,{'SeqChoOpt',15,{boolC,true}}} =
- asn1_wrapper:decode('SeqOptional','SeqChoOpt',lists:flatten(Bytes101)),
-
-
- ?line {ok,Bytes102} = asn1_wrapper:encode('SeqOptional','SeqChoOpt',#'SeqChoOpt'{int = 15}),
- ?line {ok,{'SeqChoOpt',15,asn1_NOVALUE}} =
- asn1_wrapper:decode('SeqOptional','SeqChoOpt',lists:flatten(Bytes102)),
-
-
-
-
+ roundtrip('SeqOpt1', #'SeqOpt1'{bool1=true,int1=15,
+ seq1=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('SeqOpt1', #'SeqOpt1'{bool1=asn1_NOVALUE,
+ int1=15,seq1=asn1_NOVALUE}),
+ roundtrip('SeqOpt2', #'SeqOpt2'{seq2=#'SeqIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('SeqOpt2', #'SeqOpt2'{seq2=asn1_NOVALUE,bool2=true,int2=15}),
+ roundtrip('SeqOpt3', #'SeqOpt3'{bool3=true,
+ seq3=#'SeqIn'{boolIn=true,
+ intIn=66},int3=15}),
+ roundtrip('SeqOpt3', #'SeqOpt3'{bool3=asn1_NOVALUE,
+ seq3=asn1_NOVALUE,int3=15}),
+ roundtrip('SeqOpt1Imp', #'SeqOpt1Imp'{bool1=true,int1=15,
+ seq1=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('SeqOpt1Imp', #'SeqOpt1Imp'{bool1=asn1_NOVALUE,
+ int1=15,seq1=asn1_NOVALUE}),
+ roundtrip('SeqOpt2Imp', #'SeqOpt2Imp'{seq2=#'SeqIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('SeqOpt2Imp', #'SeqOpt2Imp'{seq2=asn1_NOVALUE,
+ bool2=true,int2=15}),
+ roundtrip('SeqOpt3Imp', #'SeqOpt3Imp'{bool3=true,
+ seq3=#'SeqIn'{boolIn=true,intIn=66},
+ int3=15}),
+ roundtrip('SeqOpt3Imp', #'SeqOpt3Imp'{bool3=asn1_NOVALUE,
+ seq3=asn1_NOVALUE,int3=15}),
+ roundtrip('SeqOpt1Exp', #'SeqOpt1Exp'{bool1=true,int1=15,
+ seq1=#'SeqIn'{boolIn=true,
+ intIn=66}}),
+ roundtrip('SeqOpt1Exp', #'SeqOpt1Exp'{bool1=asn1_NOVALUE,
+ int1=15,seq1=asn1_NOVALUE}),
+ roundtrip('SeqOpt2Exp', #'SeqOpt2Exp'{seq2=#'SeqIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('SeqOpt2Exp', #'SeqOpt2Exp'{seq2=asn1_NOVALUE,
+ bool2=true,int2=15}),
+ roundtrip('SeqOpt3Exp', #'SeqOpt3Exp'{bool3=true,
+ seq3=#'SeqIn'{boolIn=true,intIn=66},
+ int3=15}),
+ roundtrip('SeqOpt3Exp', #'SeqOpt3Exp'{bool3=asn1_NOVALUE,
+ seq3=asn1_NOVALUE,int3=15}),
+ roundtrip('SeqChoOpt', #'SeqChoOpt'{int=15,cho={boolC,true}}),
+ roundtrip('SeqChoOpt', #'SeqChoOpt'{int=15,cho=asn1_NOVALUE}),
ok.
+
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('SeqOptional', Type, Value).
diff --git a/lib/asn1/test/testSeqPrim.erl b/lib/asn1/test/testSeqPrim.erl
index c2451a7cd1..eb21d50a37 100644
--- a/lib/asn1/test/testSeqPrim.erl
+++ b/lib/asn1/test/testSeqPrim.erl
@@ -27,58 +27,15 @@
-record('Empty',{}).
main(_Rules) ->
-
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqPrim','Seq',#'Seq'{bool = true,
- boolCon = true,
- boolPri = true,
- boolApp = true,
- boolExpCon = true,
- boolExpPri = true,
- boolExpApp = true}),
- ?line {ok,{'Seq',true,true,true,true,true,true,true}} =
- asn1_wrapper:decode('SeqPrim','Seq',lists:flatten(Bytes11)),
-
-
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqPrim','Seq',#'Seq'{bool = false,
- boolCon = false,
- boolPri = false,
- boolApp = false,
- boolExpCon = false,
- boolExpPri = false,
- boolExpApp = false}),
- ?line {ok,{'Seq',false,false,false,false,false,false,false}} =
- asn1_wrapper:decode('SeqPrim','Seq',lists:flatten(Bytes12)),
-
-
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SeqPrim','Seq',#'Seq'{bool = false,
- boolCon = true,
- boolPri = false,
- boolApp = true,
- boolExpCon = false,
- boolExpPri = true,
- boolExpApp = false}),
- ?line {ok,{'Seq',false,true,false,true,false,true,false}} =
- asn1_wrapper:decode('SeqPrim','Seq',lists:flatten(Bytes13)),
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqPrim','Empty',#'Empty'{}),
- ?line {ok,{'Empty'}} =
- asn1_wrapper:decode('SeqPrim','Empty',lists:flatten(Bytes21)),
-
-
-
+ roundtrip('Seq', #'Seq'{bool=true,boolCon=true,boolPri=true,boolApp=true,
+ boolExpCon=true,boolExpPri=true,boolExpApp=true}),
+ roundtrip('Seq', #'Seq'{bool=false,boolCon=false,boolPri=false,
+ boolApp=false,boolExpCon=false,
+ boolExpPri=false,boolExpApp=false}),
+ roundtrip('Seq', #'Seq'{bool=false,boolCon=true,boolPri=false,boolApp=true,
+ boolExpCon=false,boolExpPri=true,boolExpApp=false}),
+ roundtrip('Empty', #'Empty'{}),
ok.
+roundtrip(Type, Value) ->
+ asn1_test_lib:roundtrip('SeqPrim', Type, Value).
diff --git a/lib/asn1/test/testSeqSetDefaultVal.erl b/lib/asn1/test/testSeqSetDefaultVal.erl
index bd6c9428e2..044099199f 100644
--- a/lib/asn1/test/testSeqSetDefaultVal.erl
+++ b/lib/asn1/test/testSeqSetDefaultVal.erl
@@ -18,10 +18,9 @@
%%
%%
-module(testSeqSetDefaultVal).
+-export([main/2]).
-include("External.hrl").
--export([main/1]).
-
-include_lib("test_server/include/test_server.hrl").
-record('SeqInts',{a = asn1_DEFAULT,
@@ -35,7 +34,8 @@
-record('SeqBS',{a = asn1_DEFAULT,
b = asn1_DEFAULT,
c = asn1_DEFAULT,
- d = asn1_DEFAULT}).
+ d = asn1_DEFAULT,
+ e = asn1_DEFAULT}).
-record('SetBS',{a = asn1_DEFAULT,
b = asn1_DEFAULT,
c = asn1_DEFAULT,
@@ -94,243 +94,368 @@
-record('S4_b',{ba = asn1_DEFAULT,
bb = asn1_DEFAULT}).
-main(_Rules) ->
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqInts',#'SeqInts'{}),
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqInts',#'SeqInts'{a=1,b=-1,c=three,
- d=1}),
- ?line {ok,{'SeqInts',1,-1,3,1}} =
- asn1_wrapper:decode('Default','SeqInts',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetInts',#'SetInts'{}),
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetInts',#'SetInts'{a=1,b=-1,c=three,
- d=1}),
- ?line {ok,{'SetInts',1,-1,3,1}} =
- asn1_wrapper:decode('Default','SetInts',[49,0]),
-
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqBS',
- #'SeqBS'{a=2#1010110,
- b=16#A8A,
- c=[second],
- d=[1,0,0,1]}),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqBS',
- #'SeqBS'{a=[1,0,1,0,1,1,0],
- b=[1,0,1,0,1,0,0,0,1,0,1,0],
- c={5,<<64>>},
- d=9}),
-
- ?line {ok,[48,3,131,1,0]} =
- asn1_wrapper:encode('Default','SeqBS',
- #'SeqBS'{a=[1,0,1,0,1,1,0],
- b=[1,0,1,0,1,0,0,0,1,0,1,0],
- c={5,<<64>>},
- d=0}),
-
- {ok,{'SeqBS',[1,0,1,0,1,1,0],2698,[second],<<>>}} =
- asn1_wrapper:decode('Default','SeqBS',[48,3,131,1,0]),
-
- ?line {ok,{'SeqBS',[1,0,1,0,1,1,0],2698,[second],[1,0,0,1]}} =
- asn1_wrapper:decode('Default','SeqBS',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetBS',
- #'SetBS'{a=2#1010110,
- b=16#A8A,
- c=[second],
- d=[1,0,0,1]}),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetBS',
- #'SetBS'{a=[1,0,1,0,1,1,0],
- b=[1,0,1,0,1,0,0,0,1,0,1,0],
- c={5,<<64>>},
- d=9}),
-
- ?line {ok,[49,3,131,1,0]} =
- asn1_wrapper:encode('Default','SetBS',
- #'SetBS'{a=[1,0,1,0,1,1,0],
- b=[1,0,1,0,1,0,0,0,1,0,1,0],
- c={5,<<64>>},
- d=0}),
-
- {ok,{'SetBS',[1,0,1,0,1,1,0],2698,[second],<<>>}} =
- asn1_wrapper:decode('Default','SetBS',[49,3,131,1,0]),
-
- ?line {ok,{'SetBS',[1,0,1,0,1,1,0],2698,[second],[1,0,0,1]}} =
- asn1_wrapper:decode('Default','SetBS',[49,0]),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqOS',
- #'SeqOS'{a=[172],
- b=[16#A8,16#A0],
- c='NULL'}),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqOS',
- #'SeqOS'{a=2#10101100,
- b=16#A8A0,
- c='NULL'}),
-
- ?line {ok,{'SeqOS',[172],[16#A8,16#A0],'NULL'}} =
- asn1_wrapper:decode('Default','SeqOS',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetOS',
- #'SetOS'{a=[172],
- b=[16#A8,16#A0],
- c='NULL'}),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetOS',
- #'SetOS'{a=2#10101100,
- b=16#A8A0,
- c='NULL'}),
-
- ?line {ok,{'SetOS',[172],[16#A8,16#A0],'NULL'}} =
- asn1_wrapper:decode('Default','SetOS',[49,0]),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqOI',
- #'SeqOI'{a={1,2,14,15},
- b={iso,'member-body',250,3,4},
- c={iso,standard,8571,2,250,4}}),
-
- ?line {ok,{'SeqOI',{1,2,14,15},{1,2,250,3,4},{1,0,8571,2,250,4}}} =
- asn1_wrapper:decode('Default','SeqOI',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetOI',
- #'SetOI'{a={1,2,14,15},
- b={iso,'member-body',250,3,4},
- c={iso,standard,8571,2,250,4}}),
-
- ?line {ok,{'SetOI',{1,2,14,15},{1,2,250,3,4},{1,0,8571,2,250,4}}} =
- asn1_wrapper:decode('Default','SetOI',[49,0]),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqEnum',#'SeqEnum'{a=b4,b=b2}),
-
- ?line {ok,{'SeqEnum',b4,b2}} =
- asn1_wrapper:decode('Default','SeqEnum',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetEnum',#'SetEnum'{a=b4,b=b2}),
-
- ?line {ok,{'SetEnum',b4,b2}} =
- asn1_wrapper:decode('Default','SetEnum',[49,0]),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqIntBool',
- #'SeqIntBool'{a=#'SeqIntBool_a'{aa=12,ab=13},
- b=#'S2'{a=14,b=true},
- c=#'S2'{a=15,b=false}}),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqIntBool',
- #'SeqIntBool'{}),
-
- ?line {ok,{'SeqIntBool',{'SeqIntBool_a',12,13},
- {'S2',14,true},{'S2',15,false}}} =
- asn1_wrapper:decode('Default','SeqIntBool',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetIntBool',
- #'SetIntBool'{a=#'SetIntBool_a'{aa=12,ab=13},
- b=#'S2'{a=14,b=true},
- c=#'S2'{a=15,b=false}}),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetIntBool',
- #'SetIntBool'{}),
-
- ?line {ok,{'SetIntBool',{'SetIntBool_a',12,13},
- {'S2',14,true},{'S2',15,false}}} =
- asn1_wrapper:decode('Default','SetIntBool',[49,0]),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','SeqStrings',
- #'SeqStrings'{a="123456789",
- b1="abcdef",
- b2={0,13},
- b3={"First line",{0,13},"Second line"},
- c="Printable string",
- d={0,0,1,14}}),
-
- ?line {ok,{'SeqStrings',"123456789","abcdef",[0,13],
- ["First line",[0,13],"Second line"],"Printable string",
- [0,0,1,14]}} =
- asn1_wrapper:decode('Default','SeqStrings',[48,0]),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','SetStrings',
- #'SetStrings'{a="123456789",
- b1="abcdef",
- b2={0,13},
- b3={"First line",{0,13},"Second line"},
- c="Printable string",
- d={0,0,1,14}}),
-
- ?line {ok,{'SetStrings',"123456789","abcdef",[0,13],
- ["First line",[0,13],"Second line"],"Printable string",
- [0,0,1,14]}} =
- asn1_wrapper:decode('Default','SetStrings',[49,0]),
-
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','S1',
- #'S1'{a=#'S1_a'{aa=1,
- ab=#'S2'{a=2,b=true}},
- b=#'S4'{a=#'S2'{a=2,b=true},
- b=#'S4_b'{ba=true,
- bb=5}}}),
-
- ?line {ok,{'S1',{'S1_a',1,{'S2',2,true}},
- {'S4',{'S2',2,true},{'S4_b',true,5}}}} =
- asn1_wrapper:decode('Default','S1',[48,0]),
-
- ?line {ok,[48,3,129,1,255]} =
- asn1_wrapper:encode('Default','S2',
- #'S2'{a=1,b=true}),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','S3',
- #'S3'{a=[11,12,13],
- b=[{a,11},{b,true},{c,13}],
- c=[1,2,3,4],
- d=[#'S2'{a=20,b=true},#'S2'{a=30,b=false}]}),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','S3',
- #'S3'{a=[11,13,12],
- b=[{b,true},{a,11},{c,13}],
- c=[3,4,1,2],
- d=[#'S2'{a=30,b=false},#'S2'{a=20,b=true}]}),
-
- ?line {ok,[48,0]} = asn1_wrapper:encode('Default','S3',#'S3'{}),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','S3set',
- #'S3set'{a=[{c,#'S2'{a=3,b=true}},
- {b,17},{a,false}],
- b=[1,2,3,4]}),
-
- ?line {ok,[49,0]} =
- asn1_wrapper:encode('Default','S3set',
- #'S3set'{a=[{b,17},{c,#'S2'{a=3,b=true}},
- {a,false}],
- b=[1,3,4,2]}),
-
- ?line {ok,[49,0]} = asn1_wrapper:encode('Default','S3set',#'S3set'{}),
-
- ?line {ok,[48,0]} =
- asn1_wrapper:encode('Default','S4',#'S4'{a={'S2',1,asn1_NOVALUE},
- b=#'S4_b'{ba=true,bb=0}}),
+main(ber, []) ->
+ %% Nothing to test because plain BER will only use
+ %% default values when explicitly told to do so by
+ %% asn1_DEFAULT.
+ ok;
+main(Rule, Opts) ->
+ %% DER, PER, UPER. These encodings should not encode
+ %% values that are equal to the default value.
+
+ case {Rule,Opts} of
+ {ber,[der]} ->
+ der();
+ {_,_} ->
+ ok
+ end,
+
+ Ts = [{#'SeqInts'{},
+ [{#'SeqInts'.c,
+ [asn1_DEFAULT,
+ three,
+ 3]}]},
+
+ {#'SeqBS'{},
+ [{#'SeqBS'.a,
+ [asn1_DEFAULT,
+ 2#0110101,
+ [1,0,1,0,1,1,0],
+ {1,<<16#AC>>},
+ <<1:1,0:1,1:1,0:1,1:1,1:1,0:1>>]},
+ {#'SeqBS'.b,
+ [asn1_DEFAULT,
+ 2#10100010101,
+ [1,0,1,0,1,0,0,0,1,0,1,0],
+ {4,<<16#A8,16#A0>>},
+ <<16#A8:8,16#A:4>>]},
+ {#'SeqBS'.c,
+ [asn1_DEFAULT,
+ [second],
+ [0,1],
+ {6,<<0:1,1:1,0:6>>},
+ <<1:2>>]},
+ {#'SeqBS'.c, %Zeroes on the right
+ [asn1_DEFAULT,
+ [second],
+ [0,1,0,0,0],
+ {4,<<0:1,1:1,0:6>>},
+ <<1:2,0:17>>]},
+ {#'SeqBS'.d,
+ [asn1_DEFAULT,
+ 2#1001,
+ [1,0,0,1],
+ {4,<<2#1001:4,0:4>>},
+ <<2#1001:4>>]},
+ {#'SeqBS'.e,
+ [asn1_DEFAULT,
+ [0,1,0,1,1,0,1,0],
+ {0,<<2#01011010:8>>},
+ <<2#01011010:8>>]},
+ %% Not EQUAL to DEFAULT.
+ {#'SeqBS'.b,
+ [[1,1,0], %Not equal to DEFAULT
+ {5,<<6:3,0:5>>},
+ <<6:3>>]}
+ ]},
+
+ {#'SeqOS'{},
+ [{#'SeqOS'.a,
+ [asn1_DEFAULT,
+ [172]]}]},
+
+ {#'SeqOI'{},
+ [{#'SeqOI'.a,
+ [asn1_DEFAULT,
+ {1,2,14,15}]},
+ {#'SeqOI'.b,
+ [asn1_DEFAULT,
+%% {iso,'member-body',250,3,4},
+ {1,2,250,3,4}]},
+ {#'SeqOI'.c,
+ [asn1_DEFAULT,
+%% {iso,standard,8571,2,250,4},
+ {1,0,8571,2,250,4}]}]}
+ ],
+ io:format("~p\n", [Ts]),
+ R0 = [[consistency(Rec, Pos, Vs) || {Pos,Vs} <- Fs] || {Rec,Fs} <- Ts],
+ case lists:flatten(R0) of
+ [] ->
+ ok;
+ [_|_]=R ->
+ io:format("~p\n", [R]),
+ ?t:fail()
+ end.
+
+consistency(Rec0, Pos, [V|Vs]) ->
+ T = element(1, Rec0),
+ Rec = setelement(Pos, Rec0, V),
+ {ok,Enc} = 'Default':encode(T, Rec),
+ {ok,_SmokeTest} = 'Default':decode(T, Enc),
+ consistency_1(Vs, Rec0, Pos, Enc).
+
+consistency_1([V|Vs], Rec0, Pos, Enc) ->
+ Rec = setelement(Pos, Rec0, V),
+ case 'Default':encode(element(1, Rec), Rec) of
+ {ok,Enc} ->
+ consistency_1(Vs, Rec0, Pos, Enc);
+ {ok,WrongEnc} ->
+ [{Rec,{wrong,WrongEnc},{should_be,Enc}}|
+ consistency_1(Vs, Rec0, Pos, Enc)]
+ end;
+consistency_1([], _, _, _) -> [].
+
+der() ->
+ io:put_chars("Peforming DER-specific tests..."),
+ roundtrip(<<48,0>>,
+ 'SeqInts',
+ #'SeqInts'{a=asn1_DEFAULT,b=asn1_DEFAULT,
+ c=asn1_DEFAULT,d=asn1_DEFAULT},
+ #'SeqInts'{a=1,b=-1,c=3,d=1}),
+ roundtrip(<<48,0>>,
+ 'SeqInts',
+ #'SeqInts'{a=1,b=-1,c=three,d=1},
+ #'SeqInts'{a=1,b=-1,c=3,d=1}),
+
+ roundtrip(<<49,0>>,
+ 'SetInts',
+ #'SetInts'{a=asn1_DEFAULT,b=asn1_DEFAULT,
+ c=asn1_DEFAULT,d=asn1_DEFAULT},
+ #'SetInts'{a=1,b=-1,c=3,d=1}),
+ roundtrip(<<49,0>>,
+ 'SetInts',
+ #'SetInts'{a=1,b=-1,c=three,d=1},
+ #'SetInts'{a=1,b=-1,c=3,d=1}),
+
+
+ roundtrip(<<48,0>>,
+ 'SeqBS',
+ #'SeqBS'{a=2#0110101,
+ b=2#010100010101,
+ c=[second],
+ d=[1,0,0,1]},
+ #'SeqBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<2#1001:4>>,
+ e = <<2#01011010:8>>}),
+ roundtrip(<<48,0>>,
+ 'SeqBS',
+ #'SeqBS'{a=[1,0,1,0,1,1,0],
+ b=[1,0,1,0,1,0,0,0,1,0,1,0],
+ c={5,<<64>>},
+ d=2#1001},
+ #'SeqBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<2#1001:4>>,
+ e = <<2#01011010:8>>}),
+ roundtrip(<<48,3,131,1,0>>,
+ 'SeqBS',
+ #'SeqBS'{a=[1,0,1,0,1,1,0],
+ b=[1,0,1,0,1,0,0,0,1,0,1,0],
+ c={5,<<64>>},
+ d=0},
+ #'SeqBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<>>,
+ e = <<2#01011010:8>>}),
+ roundtrip(<<48,3,131,1,0>>,
+ 'SeqBS',
+ #'SeqBS'{a = <<1:1,0:1,1:1,0:1,1:1,1:1,0:1>>,
+ b = <<1:1,0:1,1:1,0:1,1:1,0:1,0:1,0:1,1:1,0:1,1:1,0:1>>,
+ c = <<2:3>>,
+ d=0,
+ e = <<16#5A:8>>},
+ #'SeqBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<>>,
+ e = <<2#01011010:8>>}),
+
+ %% None of the default values are used.
+ roundtrip(<<48,19,128,2,7,128,129,2,5,64,130,2,5,32,131,1,0,132,2,5,224>>,
+ 'SeqBS',
+ #'SeqBS'{a = <<1:1>>,
+ b = {5,<<64>>},
+ c = [third],
+ d = 0,
+ e = <<7:3>>},
+ #'SeqBS'{a = <<1:1>>,
+ b = <<2:3>>,
+ c = [third],
+ d = <<>>,
+ e = <<7:3>>}),
+
+ roundtrip(<<49,0>>,
+ 'SetBS',
+ #'SetBS'{a=2#0110101,
+ b=2#010100010101,
+ c=[second],
+ d=[1,0,0,1]},
+ #'SetBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<2#1001:4>>}),
+ roundtrip(<<49,0>>,
+ 'SetBS',
+ #'SetBS'{a=[1,0,1,0,1,1,0],
+ b=[1,0,1,0,1,0,0,0,1,0,1,0],
+ c={5,<<64>>},
+ d=9},
+ #'SetBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<2#1001:4>>}),
+ roundtrip(<<49,3,131,1,0>>,
+ 'SetBS',
+ #'SetBS'{a=[1,0,1,0,1,1,0],
+ b=[1,0,1,0,1,0,0,0,1,0,1,0],
+ c={5,<<64>>},
+ d=0},
+ #'SetBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<>>}),
+ roundtrip(<<49,3,131,1,0>>,
+ 'SetBS',
+ #'SetBS'{a = <<1:1,0:1,1:1,0:1,1:1,1:1,0:1>>,
+ b = <<1:1,0:1,1:1,0:1,1:1,0:1,0:1,0:1,1:1,0:1,1:1,0:1>>,
+ c = <<2:3>>,
+ d=0},
+ #'SetBS'{a = <<2#1010110:7>>, b = <<16#A8A:12>>,
+ c=[second], d = <<>>}),
+
+ roundtrip(<<48,0>>, 'SeqOS',
+ #'SeqOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+ roundtrip(<<48,0>>,
+ 'SeqOS',
+ #'SeqOS'{a=172,b=43168,c='NULL'},
+ #'SeqOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+
+ roundtrip(<<49,0>>, 'SetOS', #'SetOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+ roundtrip(<<49,0>>,
+ 'SetOS',
+ #'SetOS'{a=172,b=43168,c='NULL'},
+ #'SetOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+
+ roundtrip(<<48,0>>,
+ 'SeqOI',
+ #'SeqOI'{a={1,2,14,15},
+ b={iso,'member-body',250,3,4},
+ c={iso,standard,8571,2,250,4}},
+ #'SeqOI'{a={1,2,14,15},
+ b={1,2,250,3,4},
+ c={1,0,8571,2,250,4}}),
+
+ roundtrip(<<49,0>>,
+ 'SetOI',
+ #'SetOI'{a={1,2,14,15},
+ b={iso,'member-body',250,3,4},
+ c={iso,standard,8571,2,250,4}},
+ #'SetOI'{a={1,2,14,15},
+ b={1,2,250,3,4},
+ c={1,0,8571,2,250,4}}),
+
+ roundtrip(<<48,0>>, 'SeqEnum', #'SeqEnum'{a=b4,b=b2}),
+ roundtrip(<<49,0>>, 'SetEnum', #'SetEnum'{a=b4,b=b2}),
+
+ roundtrip(<<48,0>>,
+ 'SeqIntBool',
+ #'SeqIntBool'{a=#'SeqIntBool_a'{aa=12,ab=13},
+ b=#'S2'{a=14,b=true},
+ c=#'S2'{a=15,b=false}}),
+ roundtrip(<<48,0>>,
+ 'SeqIntBool',
+ #'SeqIntBool'{a=asn1_DEFAULT,b=asn1_DEFAULT,c=asn1_DEFAULT},
+ #'SeqIntBool'{a=#'SeqIntBool_a'{aa=12,ab=13},
+ b=#'S2'{a=14,b=true},
+ c=#'S2'{a=15,b=false}}),
+
+ roundtrip(<<49,0>>,
+ 'SetIntBool',
+ #'SetIntBool'{a=#'SetIntBool_a'{aa=12,ab=13},
+ b=#'S2'{a=14,b=true},
+ c=#'S2'{a=15,b=false}}),
+ roundtrip(<<49,0>>,
+ 'SetIntBool',
+ #'SetIntBool'{a=asn1_DEFAULT,b=asn1_DEFAULT,c=asn1_DEFAULT},
+ #'SetIntBool'{a=#'SetIntBool_a'{aa=12,ab=13},
+ b=#'S2'{a=14,b=true},
+ c=#'S2'{a=15,b=false}}),
+
+ roundtrip(<<48,0>>,
+ 'SeqStrings',
+ #'SeqStrings'{a="123456789",b1="abcdef",
+ b2={0,13},
+ b3={"First line",{0,13},"Second line"},
+ c="Printable string",
+ d={0,0,1,14}},
+ #'SeqStrings'{a="123456789",b1="abcdef",
+ b2=[0,13],
+ b3=["First line",[0,13],"Second line"],
+ c="Printable string",
+ d=[0,0,1,14]}),
+
+ roundtrip(<<49,0>>,
+ 'SetStrings',
+ #'SetStrings'{a="123456789",b1="abcdef",
+ b2={0,13},
+ b3={"First line",{0,13},"Second line"},
+ c="Printable string",
+ d={0,0,1,14}},
+ #'SetStrings'{a="123456789",b1="abcdef",
+ b2=[0,13],
+ b3=["First line",[0,13],"Second line"],
+ c="Printable string",
+ d=[0,0,1,14]}),
+
+ roundtrip(<<48,0>>,
+ 'S1',
+ #'S1'{a=#'S1_a'{aa=1,ab=#'S2'{a=2,b=true}},
+ b=#'S4'{a=#'S2'{a=2,b=true},b=#'S4_b'{ba=true,bb=5}}}),
+
+ roundtrip(<<48,3,129,1,255>>, 'S2', #'S2'{a=1,b=true}),
+
+ roundtrip(<<48,0>>,
+ 'S3',
+ #'S3'{a="\v\f\r",
+ b=[{a,11},{b,true},{c,13}],
+ c=[1,2,3,4],
+ d=[#'S2'{a=20,b=true},#'S2'{a=30,b=false}]}),
+ roundtrip(<<48,0>>,
+ 'S3',
+ #'S3'{a=[11,13,12],
+ b=[{b,true},{a,11},{c,13}],
+ c=[3,4,1,2],
+ d=[#'S2'{a=30,b=false},#'S2'{a=20,b=true}]},
+ #'S3'{a=[11,12,13],
+ b=[{a,11},{b,true},{c,13}],
+ c=[1,2,3,4],
+ d=[#'S2'{a=20,b=true},#'S2'{a=30,b=false}]}),
+ roundtrip(<<48,0>>,
+ 'S3',
+ #'S3'{a=asn1_DEFAULT,b=asn1_DEFAULT,
+ c=asn1_DEFAULT,d=asn1_DEFAULT},
+ #'S3'{a=[11,12,13],
+ b=[{a,11},{b,true},{c,13}],
+ c=[1,2,3,4],
+ d=[#'S2'{a=20,b=true},#'S2'{a=30,b=false}]}),
+
+ roundtrip(<<49,0>>,
+ 'S3set',
+ #'S3set'{a=[{c,#'S2'{a=3,b=true}},{b,17},{a,false}],
+ b=[1,2,3,4]}),
+ roundtrip(<<49,0>>,
+ 'S3set',
+ #'S3set'{a=[{b,17},{c,#'S2'{a=3,b=true}},{a,false}],
+ b=[1,3,4,2]},
+ #'S3set'{a=[{c,#'S2'{a=3,b=true}},{b,17},{a,false}],
+ b=[1,2,3,4]}),
+ roundtrip(<<49,0>>,
+ 'S3set',
+ #'S3set'{a=asn1_DEFAULT,b=asn1_DEFAULT},
+ #'S3set'{a=[{c,#'S2'{a=3,b=true}},{b,17},{a,false}],
+ b=[1,2,3,4]}),
+
+ roundtrip(<<48,0>>,
+ 'S4',
+ #'S4'{a=#'S2'{a=1,b=asn1_NOVALUE},b=#'S4_b'{ba=true,bb=0}},
+ #'S4'{a=#'S2'{a=1,b=asn1_NOVALUE},b=#'S4_b'{ba=true,bb=0}}),
+
+ ok.
+
+roundtrip(Encoded, Type, Value) ->
+ roundtrip(Encoded, Type, Value, Value).
+
+roundtrip(Encoded, Type, Value, ExpectedValue) ->
+ Encoded = asn1_test_lib:roundtrip_enc('Default', Type,
+ Value, ExpectedValue),
ok.
diff --git a/lib/asn1/test/testSeqSetIndefinite.erl b/lib/asn1/test/testSeqSetIndefinite.erl
new file mode 100644
index 0000000000..6becf84e77
--- /dev/null
+++ b/lib/asn1/test/testSeqSetIndefinite.erl
@@ -0,0 +1,52 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+-module(testSeqSetIndefinite).
+-export([main/0]).
+
+-include_lib("test_server/include/test_server.hrl").
+
+main() ->
+ seq_indefinite(),
+ set_indefinite().
+
+seq_indefinite() ->
+ %% normal encoding
+ B = <<48,20,1,1,255,48,9,1,1,255,2,4,251,35,238,194,2,4,251,55,236,161>>,
+ %% indefinite length encoding
+ Bi = <<48,22,1,1,255,48,128,1,1,255,2,4,251,35,238,194,0,0,2,4,251,55,236,161>>,
+ %% the value which is encoded
+ V = {'SeqS3',true,{'SeqS3_seqS3',true,-81531198},-80221023},
+ {ok,V} = 'SeqSetIndefinite':decode('SeqS3', B),
+ {ok,V} = 'SeqSetIndefinite':decode('SeqS3', Bi),
+
+ ok.
+
+set_indefinite() ->
+ %% normal encoding
+ B = <<49,20,1,1,255,49,9,1,1,255,2,4,251,35,238,194,2,4,251,55,236,161>>,
+ %% indefinite length encoding
+ Bi = <<49,22,1,1,255,49,128,1,1,255,2,4,251,35,238,194,0,0,2,4,251,55,236,161>>,
+
+ %% the value which is encoded
+ V = {'SetS3',true,{'SetS3_setS3',true,-81531198},-80221023},
+ {ok,V} = 'SeqSetIndefinite':decode('SetS3', B),
+ {ok,V} = 'SeqSetIndefinite':decode('SetS3', Bi),
+
+ ok.
diff --git a/lib/asn1/test/testSeqTag.erl b/lib/asn1/test/testSeqTag.erl
index 9fdaae35dd..2f127b3e97 100644
--- a/lib/asn1/test/testSeqTag.erl
+++ b/lib/asn1/test/testSeqTag.erl
@@ -35,69 +35,25 @@
-record('Exp',{os, bool}).
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqTag','SeqTag',#'SeqTag'{nt = #'NT'{bool = true, os = "kalle"},
- imp = #'Imp'{bool = true, os = "kalle"},
- exp = #'Exp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SeqTag',{'NT',"kalle",true},{'Imp',"kalle",true},{'Exp',"kalle",true}}} =
- asn1_wrapper:decode('SeqTag','SeqTag',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqTag','SeqTagImp',#'SeqTagImp'{nt = #'NT'{bool = true, os = "kalle"},
- imp = #'Imp'{bool = true, os = "kalle"},
- exp = #'Exp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SeqTagImp',{'NT',"kalle",true},{'Imp',"kalle",true},{'Exp',"kalle",true}}} =
- asn1_wrapper:decode('SeqTag','SeqTagImp',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SeqTag','SeqTagExp',#'SeqTagExp'{nt = #'NT'{bool = true, os = "kalle"},
- imp = #'Imp'{bool = true, os = "kalle"},
- exp = #'Exp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SeqTagExp',{'NT',"kalle",true},{'Imp',"kalle",true},{'Exp',"kalle",true}}} =
- asn1_wrapper:decode('SeqTag','SeqTagExp',lists:flatten(Bytes13)),
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqTag','SeqTagX',
- #'SeqTagX'{xnt = #'XSeqNT'{bool = true, os = "kalle"},
- ximp = #'XSeqImp'{bool = true, os = "kalle"},
- xexp = #'XSeqExp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SeqTagX',{'XSeqNT',"kalle",true},
- {'XSeqImp',"kalle",true},
- {'XSeqExp',"kalle",true}}} =
- asn1_wrapper:decode('SeqTag','SeqTagX',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SeqTag','SeqTagImpX',
- #'SeqTagImpX'{xnt = #'XSeqNT'{bool = true, os = "kalle"},
- ximp = #'XSeqImp'{bool = true, os = "kalle"},
- xexp = #'XSeqExp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SeqTagImpX',{'XSeqNT',"kalle",true},
- {'XSeqImp',"kalle",true},
- {'XSeqExp',"kalle",true}}} =
- asn1_wrapper:decode('SeqTag','SeqTagImpX',lists:flatten(Bytes22)),
-
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SeqTag','SeqTagExpX',
- #'SeqTagExpX'{xnt = #'XSeqNT'{bool = true, os = "kalle"},
- ximp = #'XSeqImp'{bool = true, os = "kalle"},
- xexp = #'XSeqExp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SeqTagExpX',{'XSeqNT',"kalle",true},
- {'XSeqImp',"kalle",true},
- {'XSeqExp',"kalle",true}}} =
- asn1_wrapper:decode('SeqTag','SeqTagExpX',lists:flatten(Bytes23)),
-
-
-
-
-
+ roundtrip('SeqTag', #'SeqTag'{nt=#'NT'{os="kalle",bool=true},
+ imp=#'Imp'{os="kalle",bool=true},
+ exp=#'Exp'{os="kalle",bool=true}}),
+ roundtrip('SeqTagImp', #'SeqTagImp'{nt=#'NT'{os="kalle",bool=true},
+ imp=#'Imp'{os="kalle",bool=true},
+ exp=#'Exp'{os="kalle",bool=true}}),
+ roundtrip('SeqTagExp', #'SeqTagExp'{nt=#'NT'{os="kalle",bool=true},
+ imp=#'Imp'{os="kalle",bool=true},
+ exp=#'Exp'{os="kalle",bool=true}}),
+ roundtrip('SeqTagX', #'SeqTagX'{xnt=#'XSeqNT'{os="kalle",bool=true},
+ ximp=#'XSeqImp'{os="kalle",bool=true},
+ xexp=#'XSeqExp'{os="kalle",bool=true}}),
+ roundtrip('SeqTagImpX', #'SeqTagImpX'{xnt=#'XSeqNT'{os="kalle",bool=true},
+ ximp=#'XSeqImp'{os="kalle",bool=true},
+ xexp=#'XSeqExp'{os="kalle",bool=true}}),
+ roundtrip('SeqTagExpX', #'SeqTagExpX'{xnt=#'XSeqNT'{os="kalle",bool=true},
+ ximp=#'XSeqImp'{os="kalle",bool=true},
+ xexp=#'XSeqExp'{os="kalle",bool=true}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqTag', T, V).
diff --git a/lib/asn1/test/testSeqTypeRefCho.erl b/lib/asn1/test/testSeqTypeRefCho.erl
index 4b9eac7034..b008bc46b8 100644
--- a/lib/asn1/test/testSeqTypeRefCho.erl
+++ b/lib/asn1/test/testSeqTypeRefCho.erl
@@ -27,17 +27,12 @@
-record('SeqTRcho',{seqCho, seqChoE, 'seqCho-E', 'seqChoE-E'}).
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqTypeRefCho','SeqTRcho',
- #'SeqTRcho'{'seqCho' = {choOs,"A string 1"},
- 'seqChoE' = {choOs,"A string 3"},
- 'seqCho-E' = {choOs,"A string 7"},
- 'seqChoE-E' = {choOs,"A string 9"}}),
- ?line {ok,{'SeqTRcho',{choOs,"A string 1"},{choOs,"A string 3"},{choOs,"A string 7"},{choOs,"A string 9"}}} =
- asn1_wrapper:decode('SeqTypeRefCho','SeqTRcho',lists:flatten(Bytes11)),
-
-
-
+ roundtrip('SeqTRcho',
+ #'SeqTRcho'{'seqCho' = {choOs,"A string 1"},
+ 'seqChoE' = {choOs,"A string 3"},
+ 'seqCho-E' = {choOs,"A string 7"},
+ 'seqChoE-E' = {choOs,"A string 9"}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqTypeRefCho', T, V).
diff --git a/lib/asn1/test/testSeqTypeRefPrim.erl b/lib/asn1/test/testSeqTypeRefPrim.erl
index 7d4c2acc0e..b63882ae99 100644
--- a/lib/asn1/test/testSeqTypeRefPrim.erl
+++ b/lib/asn1/test/testSeqTypeRefPrim.erl
@@ -18,40 +18,24 @@
%%
%%
-module(testSeqTypeRefPrim).
-
--export([compile/3]).
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
-record('SeqTR',{octStr, octStrI, octStrE, 'octStr-I', 'octStrI-I', 'octStrE-I', 'octStr-E', 'octStrI-E', 'octStrE-E'}).
-
-compile(Config,Rules,Options) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
- ?line true = code:add_patha(?config(priv_dir,Config)),
- ?line ok = asn1ct:compile(DataDir ++ "SeqTypeRefPrim",[Rules,{outdir,OutDir}]++Options).
-
-
-
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqTypeRefPrim','SeqTR',#'SeqTR'{'octStr' = "A string 1",
- 'octStrI' = "A string 2",
- 'octStrE' = "A string 3",
- 'octStr-I' = "A string 4",
- 'octStrI-I' = "A string 5",
- 'octStrE-I' = "A string 6",
- 'octStr-E' = "A string 7",
- 'octStrI-E' = "A string 8",
- 'octStrE-E' = "A string 9"}) ,
- ?line {ok,{'SeqTR',"A string 1","A string 2","A string 3","A string 4","A string 5","A string 6","A string 7","A string 8","A string 9"}} =
- asn1_wrapper:decode('SeqTypeRefPrim','SeqTR',lists:flatten(Bytes11)),
-
-
-
+ roundtrip('SeqTR',
+ #'SeqTR'{'octStr' = "A string 1",
+ 'octStrI' = "A string 2",
+ 'octStrE' = "A string 3",
+ 'octStr-I' = "A string 4",
+ 'octStrI-I' = "A string 5",
+ 'octStrE-I' = "A string 6",
+ 'octStr-E' = "A string 7",
+ 'octStrI-E' = "A string 8",
+ 'octStrE-E' = "A string 9"}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqTypeRefPrim', T, V).
diff --git a/lib/asn1/test/testSeqTypeRefSeq.erl b/lib/asn1/test/testSeqTypeRefSeq.erl
index 57ec6c19b1..fc2e0a67c9 100644
--- a/lib/asn1/test/testSeqTypeRefSeq.erl
+++ b/lib/asn1/test/testSeqTypeRefSeq.erl
@@ -44,133 +44,43 @@
-record('SeqSeqExp',{seqInt, seqOs}).
-
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SeqTypeRefSeq','Seq1',#'Seq1'{bool1 = true,
- int1 = 15,
- seq1 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'Seq1',true,15,{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqTypeRefSeq','Seq1',lists:flatten(Bytes11)),
-
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SeqTypeRefSeq','Seq2',#'Seq2'{seq2 = #'SeqIn'{boolIn = true,
- intIn = 66},
- bool2 = true,
- int2 = 15}),
- ?line {ok,{'Seq2',{'SeqIn',true,66},true,15}} =
- asn1_wrapper:decode('SeqTypeRefSeq','Seq2',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SeqTypeRefSeq','Seq3',#'Seq3'{bool3 = true,
- seq3 = #'SeqIn'{boolIn = true,
- intIn = 66},
- int3 = 15}),
- ?line {ok,{'Seq3',true,{'SeqIn',true,66},15}} =
- asn1_wrapper:decode('SeqTypeRefSeq','Seq3',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes14} =
- asn1_wrapper:encode('SeqTypeRefSeq','Seq4',#'Seq4'{seq41 = #'SeqIn'{boolIn = true,
- intIn = 66},
- seq42 = #'SeqIn'{boolIn = true,
- intIn = 66},
- seq43 = #'SeqIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'Seq4',{'SeqIn',true,66},{'SeqIn',true,66},{'SeqIn',true,66}}} =
- asn1_wrapper:decode('SeqTypeRefSeq','Seq4',lists:flatten(Bytes14)),
-
-
-
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SeqTypeRefSeq','SeqS1',#'SeqS1'{boolS1 = true,
- intS1 = 15,
- seqS1 = #'SeqS1_seqS1'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SeqS1',true,15,{'SeqS1_seqS1',true,66}}} =
- asn1_wrapper:decode('SeqTypeRefSeq','SeqS1',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SeqTypeRefSeq','SeqS2',#'SeqS2'{seqS2 = #'SeqS2_seqS2'{boolIn = true,
- intIn = 66},
- boolS2 = true,
- intS2 = 15}),
- ?line {ok,{'SeqS2',{'SeqS2_seqS2',true,66},true,15}} =
- asn1_wrapper:decode('SeqTypeRefSeq','SeqS2',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SeqTypeRefSeq','SeqS3',#'SeqS3'{boolS3 = true,
- seqS3 = #'SeqS3_seqS3'{boolIn = true,
- intIn = 66},
- intS3 = 15}),
- ?line {ok,{'SeqS3',true,{'SeqS3_seqS3',true,66},15}} =
- asn1_wrapper:decode('SeqTypeRefSeq','SeqS3',lists:flatten(Bytes23)),
-
-
-
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SeqTypeRefSeq','SeqSTag',#'SeqSTag'{seqS1 = #'SeqSTag_seqS1'{b1 = true,
- i1 = 11},
- seqS2 = #'SeqSTag_seqS2'{b2 = true,
- i2 = 22},
- seqS3 = #'SeqSTag_seqS3'{b3 = true,
- i3 = 33}}),
- ?line {ok,{'SeqSTag',{'SeqSTag_seqS1',true,11},
- {'SeqSTag_seqS2',true,22},
- {'SeqSTag_seqS3',true,33}}} =
- asn1_wrapper:decode('SeqTypeRefSeq','SeqSTag',lists:flatten(Bytes31)),
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqTypeRefSeq','SeqTRseq',
- #'SeqTRseq'{'seqSeq' = #'SeqSeq'{seqOs = "A1",
- seqInt = 2},
- 'seqSeqI' = #'SeqSeq'{seqOs = "A2",
- seqInt = 2},
- 'seqSeqE' = #'SeqSeq'{seqOs = "A3",
- seqInt = 2},
- 'seqSeq-I' = #'SeqSeqImp'{seqOs = "A4",
- seqInt = 2},
- 'seqSeqI-I' = #'SeqSeqImp'{seqOs = "A5",
- seqInt = 2},
- 'seqSeqE-I' = #'SeqSeqImp'{seqOs = "A6",
- seqInt = 2},
- 'seqSeq-E' = #'SeqSeqExp'{seqOs = "A7",
- seqInt = 2},
- 'seqSeqI-E' = #'SeqSeqExp'{seqOs = "A8",
- seqInt = 2},
- 'seqSeqE-E' = #'SeqSeqExp'{seqOs = "A9",
- seqInt = 2}}),
- ?line {ok,{'SeqTRseq',{'SeqSeq',2,"A1"},
- {'SeqSeq',2,"A2"},
- {'SeqSeq',2,"A3"},
- {'SeqSeqImp',2,"A4"},
- {'SeqSeqImp',2,"A5"},
- {'SeqSeqImp',2,"A6"},
- {'SeqSeqExp',2,"A7"},
- {'SeqSeqExp',2,"A8"},
- {'SeqSeqExp',2,"A9"}}} =
- asn1_wrapper:decode('SeqTypeRefSeq','SeqTRseq',lists:flatten(Bytes41)),
-
+ roundtrip('Seq1',
+ #'Seq1'{bool1=true,int1=15,
+ seq1=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('Seq2',
+ #'Seq2'{seq2=#'SeqIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('Seq3',
+ #'Seq3'{bool3=true,seq3=#'SeqIn'{boolIn=true,intIn=66},int3=15}),
+ roundtrip('Seq4',
+ #'Seq4'{seq41=#'SeqIn'{boolIn=true,intIn=66},
+ seq42=#'SeqIn'{boolIn=true,intIn=66},
+ seq43=#'SeqIn'{boolIn=true,intIn=66}}),
+ roundtrip('SeqS1',
+ #'SeqS1'{boolS1=true,intS1=15,
+ seqS1=#'SeqS1_seqS1'{boolIn=true,intIn=66}}),
+ roundtrip('SeqS2',
+ #'SeqS2'{seqS2=#'SeqS2_seqS2'{boolIn=true,intIn=66},
+ boolS2=true,intS2=15}),
+ roundtrip('SeqS3',
+ #'SeqS3'{boolS3=true,seqS3=#'SeqS3_seqS3'{boolIn=true,intIn=66},
+ intS3=15}),
+ roundtrip('SeqSTag',
+ #'SeqSTag'{seqS1=#'SeqSTag_seqS1'{b1=true,i1=11},
+ seqS2=#'SeqSTag_seqS2'{b2=true,i2=22},
+ seqS3=#'SeqSTag_seqS3'{b3=true,i3=33}}),
+ roundtrip('SeqTRseq',
+ #'SeqTRseq'{seqSeq=#'SeqSeq'{seqInt=2,seqOs="A1"},
+ seqSeqI=#'SeqSeq'{seqInt=2,seqOs="A2"},
+ seqSeqE=#'SeqSeq'{seqInt=2,seqOs="A3"},
+ 'seqSeq-I'=#'SeqSeqImp'{seqInt=2,seqOs="A4"},
+ 'seqSeqI-I'=#'SeqSeqImp'{seqInt=2,seqOs="A5"},
+ 'seqSeqE-I'=#'SeqSeqImp'{seqInt=2,seqOs="A6"},
+ 'seqSeq-E'=#'SeqSeqExp'{seqInt=2,seqOs="A7"},
+ 'seqSeqI-E'=#'SeqSeqExp'{seqInt=2,seqOs="A8"},
+ 'seqSeqE-E'=#'SeqSeqExp'{seqInt=2,seqOs="A9"}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqTypeRefSeq', T, V).
diff --git a/lib/asn1/test/testSeqTypeRefSet.erl b/lib/asn1/test/testSeqTypeRefSet.erl
index c06a0e7a2b..911a4b7a47 100644
--- a/lib/asn1/test/testSeqTypeRefSet.erl
+++ b/lib/asn1/test/testSeqTypeRefSet.erl
@@ -31,36 +31,17 @@
main(_Rules) ->
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SeqTypeRefSet','SeqTRset',
- #'SeqTRset'{'seqSet' = #'SeqSet'{setOs = "A1",
- setInt = 2},
- 'seqSetI' = #'SeqSet'{setOs = "A2",
- setInt = 2},
- 'seqSetE' = #'SeqSet'{setOs = "A3",
- setInt = 2},
- 'seqSet-I' = #'SeqSetImp'{setOs = "A4",
- setInt = 2},
- 'seqSetI-I' = #'SeqSetImp'{setOs = "A5",
- setInt = 2},
- 'seqSetE-I' = #'SeqSetImp'{setOs = "A6",
- setInt = 2},
- 'seqSet-E' = #'SeqSetExp'{setOs = "A7",
- setInt = 2},
- 'seqSetI-E' = #'SeqSetExp'{setOs = "A8",
- setInt = 2},
- 'seqSetE-E' = #'SeqSetExp'{setOs = "A9",
- setInt = 2}}),
- ?line {ok,{'SeqTRset',{'SeqSet',2,"A1"},
- {'SeqSet',2,"A2"},
- {'SeqSet',2,"A3"},
- {'SeqSetImp',2,"A4"},
- {'SeqSetImp',2,"A5"},
- {'SeqSetImp',2,"A6"},
- {'SeqSetExp',2,"A7"},
- {'SeqSetExp',2,"A8"},
- {'SeqSetExp',2,"A9"}}} =
- asn1_wrapper:decode('SeqTypeRefSet','SeqTRset',lists:flatten(Bytes41)),
-
+ roundtrip('SeqTRset',
+ #'SeqTRset'{seqSet=#'SeqSet'{setInt=2,setOs="A1"},
+ seqSetI=#'SeqSet'{setInt=2,setOs="A2"},
+ seqSetE=#'SeqSet'{setInt=2,setOs="A3"},
+ 'seqSet-I'=#'SeqSetImp'{setInt=2,setOs="A4"},
+ 'seqSetI-I'=#'SeqSetImp'{setInt=2,setOs="A5"},
+ 'seqSetE-I'=#'SeqSetImp'{setInt=2,setOs="A6"},
+ 'seqSet-E'=#'SeqSetExp'{setInt=2,setOs="A7"},
+ 'seqSetI-E'=#'SeqSetExp'{setInt=2,setOs="A8"},
+ 'seqSetE-E'=#'SeqSetExp'{setInt=2,setOs="A9"}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqTypeRefSet', T, V).
diff --git a/lib/asn1/test/testSetDefault.erl b/lib/asn1/test/testSetDefault.erl
index 8aa205e0f0..055dc6cecf 100644
--- a/lib/asn1/test/testSetDefault.erl
+++ b/lib/asn1/test/testSetDefault.erl
@@ -26,58 +26,34 @@
-record('SetDef1',{bool1 = asn1_DEFAULT, int1, set1 = asn1_DEFAULT}).
-record('SetDef2',{set2 = asn1_DEFAULT, bool2, int2}).
-record('SetDef3',{bool3 = asn1_DEFAULT, set3 = asn1_DEFAULT, int3 = asn1_DEFAULT}).
--record('SetIn',{boolIn, intIn}).
+-record('SetIn', {boolIn = asn1_NOVALUE, intIn = 12}).
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetDefault','SetDef1',#'SetDef1'{bool1 = true,
- int1 = 15,
- set1 = #'SetIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SetDef1',true,15,{'SetIn',true,66}}} =
- asn1_wrapper:decode('SetDefault','SetDef1',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} = asn1_wrapper:encode('SetDefault','SetDef1',#'SetDef1'{int1 = 15}),
- ?line {ok,{'SetDef1',true,15,{'SetIn',asn1_NOVALUE,12}}} =
- asn1_wrapper:decode('SetDefault','SetDef1',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetDefault','SetDef2',#'SetDef2'{bool2 = true,
- int2 = 15,
- set2 = #'SetIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SetDef2',{'SetIn',true,66},true,15}} =
- asn1_wrapper:decode('SetDefault','SetDef2',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} = asn1_wrapper:encode('SetDefault','SetDef2',#'SetDef2'{bool2 = true,
- int2 = 15}),
- ?line {ok,{'SetDef2',{'SetIn',asn1_NOVALUE,12},true,15}} =
- asn1_wrapper:decode('SetDefault','SetDef2',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetDefault','SetDef3',#'SetDef3'{bool3 = true,
- int3 = 15,
- set3 = #'SetIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SetDef3',true,{'SetIn',true,66},15}} =
- asn1_wrapper:decode('SetDefault','SetDef3',lists:flatten(Bytes31)),
-
-
- ?line {ok,Bytes32} = asn1_wrapper:encode('SetDefault','SetDef3',#'SetDef3'{int3 = 15}),
- ?line {ok,{'SetDef3',true,{'SetIn',asn1_NOVALUE,12},15}} =
- asn1_wrapper:decode('SetDefault','SetDef3',lists:flatten(Bytes32)),
-
-
-
-
+ roundtrip('SetDef1',
+ #'SetDef1'{bool1=true,int1=15,
+ set1=#'SetIn'{boolIn=true,intIn=66}}),
+ roundtrip('SetDef1',
+ #'SetDef1'{bool1=asn1_DEFAULT,int1=15,set1=asn1_DEFAULT},
+ #'SetDef1'{bool1=true,int1=15,set1=#'SetIn'{}}),
-
-
+ roundtrip('SetDef2',
+ #'SetDef2'{set2=#'SetIn'{boolIn=true,intIn=66},
+ bool2=true,int2=15}),
+ roundtrip('SetDef2',
+ #'SetDef2'{set2=asn1_DEFAULT,bool2=true,int2=15},
+ #'SetDef2'{set2=#'SetIn'{},bool2=true,int2=15}),
+
+ roundtrip('SetDef3',
+ #'SetDef3'{bool3=true,set3=#'SetIn'{boolIn=true,intIn=66},
+ int3=15}),
+ roundtrip('SetDef3',
+ #'SetDef3'{bool3=asn1_DEFAULT,set3=asn1_DEFAULT,int3=15},
+ #'SetDef3'{bool3=true,set3=#'SetIn'{},int3=15}),
ok.
+
+roundtrip(Type, Value) ->
+ roundtrip(Type, Value, Value).
+
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('SetDefault', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testSetExtension.erl b/lib/asn1/test/testSetExtension.erl
index c7fb3b42c4..4e2463326b 100644
--- a/lib/asn1/test/testSetExtension.erl
+++ b/lib/asn1/test/testSetExtension.erl
@@ -18,10 +18,7 @@
%%
%%
-module(testSetExtension).
-
-
-include("External.hrl").
--export([compile/3]).
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -31,76 +28,20 @@
-record('SetExt3',{bool, int}).
-record('SetExt4',{bool, int}).
-
-compile(Config,Rules,Options) ->
-
- ?line DataDir = ?config(data_dir,Config),
- ?line OutDir = ?config(priv_dir,Config),
- ?line true = code:add_patha(?config(priv_dir,Config)),
- ?line ok = asn1ct:compile(DataDir ++ "SetExtension",
- [Rules,{outdir,OutDir}]++Options).
-
-
-
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetExtension','SetExt1',#'SetExt1'{}),
- ?line {ok,{'SetExt1'}} =
- asn1_wrapper:decode('SetExtension','SetExt1',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetExtension','SetExt2',#'SetExt2'{bool = true,int = 99}),
- ?line {ok,{'SetExt2',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt2',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetExtension','SetExt2',#'SetExt2'{int = 99,bool = true}),
- ?line {ok,{'SetExt2',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt2',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetExtension','SetExt3',#'SetExt3'{bool = true,int = 99}),
- ?line {ok,{'SetExt3',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt3',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SetExtension','SetExt3',#'SetExt3'{int = 99,bool = true}),
- ?line {ok,{'SetExt3',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt3',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SetExtension','SetExt4',#'SetExt4'{bool = true,int = 99}),
- ?line {ok,{'SetExt4',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt4',lists:flatten(Bytes41)),
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SetExtension','SetExt4',#'SetExt4'{int = 99,bool = true}),
- ?line {ok,{'SetExt4',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt4',lists:flatten(Bytes42)),
-
-
- %% Test of extension , needs to be improved and extended
-
- ?line {ok,BytesX11} =
- asn1_wrapper:encode('SetExtension','SetExt1',#'SetExt1'{}),
- ?line {ok,{'SetExt1'}} =
- asn1_wrapper:decode('SetExtension','SetExt1',lists:flatten(BytesX11)),
-
- ?line {ok,BytesX21} =
- asn1_wrapper:encode('SetExtension','SetExt2',#'SetExt2'{bool = true,int = 99}),
- ?line {ok,{'SetExt2',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt2',lists:flatten(BytesX21)),
-
- ?line {ok,BytesX22} =
- asn1_wrapper:encode('SetExtension','SetExt2',#'SetExt2'{int = 99,bool = true}),
- ?line {ok,{'SetExt2',true,99}} =
- asn1_wrapper:decode('SetExtension','SetExt2',lists:flatten(BytesX22)),
-
-
-
-
-
+ roundtrip('SetExt1', #'SetExt1'{}),
+ roundtrip('SetExt2', #'SetExt2'{bool=true,int=99}),
+ roundtrip('SetExt2', #'SetExt2'{bool=true,int=99}),
+ roundtrip('SetExt3', #'SetExt3'{bool=true,int=99}),
+ roundtrip('SetExt3', #'SetExt3'{bool=true,int=99}),
+ roundtrip('SetExt4', #'SetExt4'{bool=true,int=99}),
+ roundtrip('SetExt4', #'SetExt4'{bool=true,int=99}),
+ roundtrip('SetExt1', #'SetExt1'{}),
+ roundtrip('SetExt2', #'SetExt2'{bool=true,int=99}),
+ roundtrip('SetExt2', #'SetExt2'{bool=true,int=99}),
ok.
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetExtension', T, V).
+
diff --git a/lib/asn1/test/testSetExternal.erl b/lib/asn1/test/testSetExternal.erl
index 30cddcacfb..e17d7053aa 100644
--- a/lib/asn1/test/testSetExternal.erl
+++ b/lib/asn1/test/testSetExternal.erl
@@ -18,111 +18,36 @@
%%
%%
-module(testSetExternal).
-
--include("External.hrl").
-export([main/1]).
+-include("External.hrl").
-include_lib("test_server/include/test_server.hrl").
-
-record('SetXSeq1',{seq, bool, int}).
-record('SetXSeq2',{bool, seq, int}).
-record('SetXSeq3',{bool, int, seq}).
-%-record('NT',{os, bool}).
-%-record('Imp',{os, bool}).
-%-record('Exp',{os, bool}).
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetExternal','XNTNT',#'XSetNT'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetNT',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XNTNT',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetExternal','XImpNT',#'XSetNT'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetNT',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XImpNT',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetExternal','XExpNT',#'XSetNT'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetNT',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XExpNT',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetExternal','XNTImp',#'XSetImp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetImp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XNTImp',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetExternal','XImpImp',#'XSetImp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetImp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XImpImp',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SetExternal','XExpImp',#'XSetImp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetImp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XExpImp',lists:flatten(Bytes23)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetExternal','XNTExp',#'XSetExp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetExp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XNTExp',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SetExternal','XImpExp',#'XSetExp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetExp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XImpExp',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SetExternal','XExpExp',#'XSetExp'{bool = true, os = "kalle"}),
- ?line {ok,{'XSetExp',[107,97,108,108,101],true}} =
- asn1_wrapper:decode('SetExternal','XExpExp',lists:flatten(Bytes33)),
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SetExternal','SetXSeq1',
- #'SetXSeq1'{bool = true,
- int = 66,
- seq = #'XSeq1'{bool1 = true,
- int1 = 77,
- seq1 = #'XSeqIn'{boolIn = false,
- intIn = 88}}}),
- ?line {ok,{'SetXSeq1',{'XSeq1',true,77,{'XSeqIn',false,88}},true,66}} =
- asn1_wrapper:decode('SetExternal','SetXSeq1',lists:flatten(Bytes41)),
-
-
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SetExternal','SetXSeq2',
- #'SetXSeq2'{bool = true,
- int = 66,
- seq = #'XSeq1'{bool1 = true,
- int1 = 77,
- seq1 = #'XSeqIn'{boolIn = false,
- intIn = 88}}}),
- ?line {ok,{'SetXSeq2',true,{'XSeq1',true,77,{'XSeqIn',false,88}},66}} =
- asn1_wrapper:decode('SetExternal','SetXSeq2',lists:flatten(Bytes42)),
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SetExternal','SetXSeq3',
- #'SetXSeq3'{bool = true,
- int = 66,
- seq = #'XSeq1'{bool1 = true,
- int1 = 77,
- seq1 = #'XSeqIn'{boolIn = false,
- intIn = 88}}}),
- ?line {ok,{'SetXSeq3',true,66,{'XSeq1',true,77,{'XSeqIn',false,88}}}} =
- asn1_wrapper:decode('SetExternal','SetXSeq3',lists:flatten(Bytes43)),
-
-
-
-
+ roundtrip('XNTNT', #'XSetNT'{os="kalle",bool=true}),
+ roundtrip('XImpNT', #'XSetNT'{os="kalle",bool=true}),
+ roundtrip('XExpNT', #'XSetNT'{os="kalle",bool=true}),
+ roundtrip('XNTImp', #'XSetImp'{os="kalle",bool=true}),
+ roundtrip('XImpImp', #'XSetImp'{os="kalle",bool=true}),
+ roundtrip('XExpImp', #'XSetImp'{os="kalle",bool=true}),
+ roundtrip('XNTExp', #'XSetExp'{os="kalle",bool=true}),
+ roundtrip('XImpExp', #'XSetExp'{os="kalle",bool=true}),
+ roundtrip('XExpExp', #'XSetExp'{os="kalle",bool=true}),
+ roundtrip('SetXSeq1', #'SetXSeq1'{seq=#'XSeq1'{bool1=true,int1=77,
+ seq1=#'XSeqIn'{boolIn=false,intIn=88}},
+ bool=true,int=66}),
+ roundtrip('SetXSeq2', #'SetXSeq2'{bool=true,
+ seq=#'XSeq1'{bool1=true,int1=77,
+ seq1=#'XSeqIn'{boolIn=false,intIn=88}},
+ int=66}),
+ roundtrip('SetXSeq3', #'SetXSeq3'{bool=true,int=66,
+ seq=#'XSeq1'{bool1=true,int1=77,
+ seq1=#'XSeqIn'{boolIn=false,intIn=88}}}),
ok.
-
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetExternal', T, V).
diff --git a/lib/asn1/test/testSetIndefinite.erl b/lib/asn1/test/testSetIndefinite.erl
deleted file mode 100644
index 73006da62b..0000000000
--- a/lib/asn1/test/testSetIndefinite.erl
+++ /dev/null
@@ -1,41 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(testSetIndefinite).
-
--export([main/1]).
-
--include_lib("test_server/include/test_server.hrl").
-
-
-main(per) -> ok;
-main(ber) ->
-
- %% normal encoding
- B = [49,20,1,1,255,49,9,1,1,255,2,4,251,35,238,194,2,4,251,55,236,161],
- %% indefinite length encoding
- Bi = [49,22,1,1,255,49,128,1,1,255,2,4,251,35,238,194,0,0,2,4,251,55,236,161],
- %% the value which is encoded
- V = {'SetS3',true,{'SetS3_setS3',true,-81531198},-80221023},
- ?line {ok,V} = asn1_wrapper:decode('SeqSetIndefinite','SetS3',B),
- ?line {ok,V} = asn1_wrapper:decode('SeqSetIndefinite','SetS3',Bi),
- ok.
-
-
-
diff --git a/lib/asn1/test/testSetOf.erl b/lib/asn1/test/testSetOf.erl
index 08723fb468..54c42c1f21 100644
--- a/lib/asn1/test/testSetOf.erl
+++ b/lib/asn1/test/testSetOf.erl
@@ -28,198 +28,108 @@
-record('Set3',{bool3, set3 = asn1_DEFAULT, int3}).
-record('Set4',{set41 = asn1_DEFAULT, set42 = asn1_DEFAULT, set43 = asn1_DEFAULT}).
-record('SetIn',{boolIn, intIn}).
-%-record('SetCho',{bool1, int1, set1 = asn1_DEFAULT}).
-%-record('SetChoInline',{bool1, int1, set1 = asn1_DEFAULT}).
-%-record('SetChoOfInline_SETOF',{bool1, int1, set1 = asn1_DEFAULT}).
-record('SetEmp',{set1}).
-record('Empty',{}).
main(_Rules) ->
+ roundtrip('Set1',
+ #'Set1'{bool1=true,int1=17,set1=asn1_DEFAULT},
+ #'Set1'{bool1=true,int1=17,set1=[]}),
+ roundtrip('Set1',
+ #'Set1'{bool1=true,int1=17,
+ set1=[#'SetIn'{boolIn=true,intIn=25}]}),
+ roundtrip('Set1', #'Set1'{bool1=true,int1=17,
+ set1=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}]}),
+
+ roundtrip('Set2',
+ #'Set2'{set2=asn1_DEFAULT,bool2=true,int2=17},
+ #'Set2'{set2=[],bool2=true,int2=17}),
+ roundtrip('Set2',
+ #'Set2'{set2=[#'SetIn'{boolIn=true,intIn=25}],
+ bool2=true,int2=17}),
+ roundtrip('Set2',
+ #'Set2'{set2=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}],
+ bool2=true,int2=17}),
+
+ roundtrip('Set3',
+ #'Set3'{bool3=true,set3=asn1_DEFAULT,int3=17},
+ #'Set3'{bool3=true,set3=[],int3=17}),
+ roundtrip('Set3',
+ #'Set3'{bool3=true,set3=[#'SetIn'{boolIn=true,intIn=25}],
+ int3=17}),
+ roundtrip('Set3',
+ #'Set3'{bool3=true,
+ set3=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}],
+ int3=17}),
+
+ roundtrip('Set4',
+ #'Set4'{set41=asn1_DEFAULT,set42=asn1_DEFAULT,
+ set43=asn1_DEFAULT},
+ #'Set4'{set41=[],set42=[],set43=[]}),
+ roundtrip('Set4',
+ #'Set4'{set41=[#'SetIn'{boolIn=true,intIn=25}],
+ set42=asn1_DEFAULT,set43=asn1_DEFAULT},
+ #'Set4'{set41=[#'SetIn'{boolIn=true,intIn=25}],
+ set42=[],set43=[]}),
+ roundtrip('Set4',
+ #'Set4'{set41=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}],
+ set42=asn1_DEFAULT,set43=asn1_DEFAULT},
+ #'Set4'{set41=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}],
+ set42=[],set43=[]}),
+ roundtrip('Set4',
+ #'Set4'{set41=asn1_DEFAULT,
+ set42=[#'SetIn'{boolIn=true,intIn=25}],
+ set43=asn1_DEFAULT},
+ #'Set4'{set41=[],
+ set42=[#'SetIn'{boolIn=true,intIn=25}],
+ set43=[]}),
+ roundtrip('Set4',
+ #'Set4'{set41=asn1_DEFAULT,
+ set42=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}],
+ set43=asn1_DEFAULT},
+ #'Set4'{set41=[],
+ set42=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}],
+ set43=[]}),
+ roundtrip('Set4',
+ #'Set4'{set41=asn1_DEFAULT,set42=asn1_DEFAULT,
+ set43=[#'SetIn'{boolIn=true,intIn=25}]},
+ #'Set4'{set41=[],set42=[],
+ set43=[#'SetIn'{boolIn=true,intIn=25}]}),
+ roundtrip('Set4',
+ #'Set4'{set41=asn1_DEFAULT,set42=asn1_DEFAULT,
+ set43=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}]},
+ #'Set4'{set41=[],set42=[],
+ set43=[#'SetIn'{boolIn=true,intIn=25},
+ #'SetIn'{boolIn=false,intIn=125},
+ #'SetIn'{boolIn=false,intIn=225}]}),
+
+ roundtrip('SetOs', ["First","Second","Third"]),
+ roundtrip('SetOsImp', ["First","Second","Third"]),
+ roundtrip('SetOsExp', ["First","Second","Third"]),
+ roundtrip('SetEmp', #'SetEmp'{set1=[#'Empty'{}]}),
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetOf','Set1',#'Set1'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'Set1',true,17,[]}} =
- asn1_wrapper:decode('SetOf','Set1',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetOf','Set1',#'Set1'{bool1 = true,
- int1 = 17,
- set1 = [#'SetIn'{boolIn = true,
- intIn = 25}]}),
- ?line {ok,{'Set1',true,17,[{'SetIn',true,25}]}} =
- asn1_wrapper:decode('SetOf','Set1',lists:flatten(Bytes12)),
-
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetOf','Set1',#'Set1'{bool1 = true,
- int1 = 17,
- set1 = [#'SetIn'{boolIn = true,
- intIn = 25},
- #'SetIn'{boolIn = false,
- intIn = 125},
- #'SetIn'{boolIn = false,
- intIn = 225}]}),
- ?line {ok,{'Set1',true,17,[{'SetIn',true,25},{'SetIn',false,125},{'SetIn',false,225}]}} =
- asn1_wrapper:decode('SetOf','Set1',lists:flatten(Bytes13)),
-
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetOf','Set2',#'Set2'{bool2 = true,
- int2 = 17}),
-
- ?line {ok,{'Set2',[],true,17}} =
- asn1_wrapper:decode('SetOf','Set2',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetOf','Set2',#'Set2'{bool2 = true,
- int2 = 17,
- set2 = [#'SetIn'{boolIn = true,
- intIn = 25}]}),
- ?line {ok,{'Set2',[{'SetIn',true,25}],true,17}} =
- asn1_wrapper:decode('SetOf','Set2',lists:flatten(Bytes22)),
-
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SetOf','Set2',#'Set2'{bool2 = true,
- int2 = 17,
- set2 = [#'SetIn'{boolIn = true,
- intIn = 25},
- #'SetIn'{boolIn = false,
- intIn = 125},
- #'SetIn'{boolIn = false,
- intIn = 225}]}),
- ?line {ok,{'Set2',[{'SetIn',true,25},{'SetIn',false,125},{'SetIn',false,225}],true,17}} =
- asn1_wrapper:decode('SetOf','Set2',lists:flatten(Bytes23)),
-
-
-
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetOf','Set3',#'Set3'{bool3 = true,
- int3 = 17}),
- ?line {ok,{'Set3',true,[],17}} =
- asn1_wrapper:decode('SetOf','Set3',lists:flatten(Bytes31)),
-
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SetOf','Set3',#'Set3'{bool3 = true,
- int3 = 17,
- set3 = [#'SetIn'{boolIn = true,
- intIn = 25}]}),
- ?line {ok,{'Set3',true,[{'SetIn',true,25}],17}} =
- asn1_wrapper:decode('SetOf','Set3',lists:flatten(Bytes32)),
-
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SetOf','Set3',#'Set3'{bool3 = true,
- int3 = 17,
- set3 = [#'SetIn'{boolIn = true,
- intIn = 25},
- #'SetIn'{boolIn = false,
- intIn = 125},
- #'SetIn'{boolIn = false,
- intIn = 225}]}),
- ?line {ok,{'Set3',true,[{'SetIn',true,25},{'SetIn',false,125},{'SetIn',false,225}],17}} =
- asn1_wrapper:decode('SetOf','Set3',lists:flatten(Bytes33)),
-
-
-
-
-
-
-
- ?line {ok,Bytes41} = asn1_wrapper:encode('SetOf','Set4',#'Set4'{}),
- ?line {ok,{'Set4',[],[],[]}} = asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes41)),
-
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SetOf','Set4',#'Set4'{set41 = [#'SetIn'{boolIn = true,
- intIn = 25}]}),
- ?line {ok,{'Set4',[{'SetIn',true,25}],[],[]}} =
- asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes42)),
-
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SetOf','Set4',#'Set4'{set41 = [#'SetIn'{boolIn = true,
- intIn = 25},
- #'SetIn'{boolIn = false,
- intIn = 125},
- #'SetIn'{boolIn = false,
- intIn = 225}]}),
- ?line {ok,{'Set4',[{'SetIn',true,25},{'SetIn',false,125},{'SetIn',false,225}],[],[]}} =
- asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes43)),
-
-
- ?line {ok,Bytes44} =
- asn1_wrapper:encode('SetOf','Set4',#'Set4'{set42 = [#'SetIn'{boolIn = true,
- intIn = 25}]}),
- ?line {ok,{'Set4',[],[{'SetIn',true,25}],[]}} =
- asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes44)),
-
-
- ?line {ok,Bytes45} =
- asn1_wrapper:encode('SetOf','Set4',#'Set4'{set42 = [#'SetIn'{boolIn = true,
- intIn = 25},
- #'SetIn'{boolIn = false,
- intIn = 125},
- #'SetIn'{boolIn = false,
- intIn = 225}]}),
- ?line {ok,{'Set4',[],[{'SetIn',true,25},{'SetIn',false,125},{'SetIn',false,225}],[]}} =
- asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes45)),
-
-
- ?line {ok,Bytes46} =
- asn1_wrapper:encode('SetOf','Set4',#'Set4'{set43 = [#'SetIn'{boolIn = true,
- intIn = 25}]}),
- ?line {ok,{'Set4',[],[],[{'SetIn',true,25}]}} =
- asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes46)),
-
-
- ?line {ok,Bytes47} =
- asn1_wrapper:encode('SetOf','Set4',#'Set4'{set43 = [#'SetIn'{boolIn = true,
- intIn = 25},
- #'SetIn'{boolIn = false,
- intIn = 125},
- #'SetIn'{boolIn = false,
- intIn = 225}]}),
- ?line {ok,{'Set4',[],[],[{'SetIn',true,25},{'SetIn',false,125},{'SetIn',false,225}]}} =
- asn1_wrapper:decode('SetOf','Set4',lists:flatten(Bytes47)),
-
-
-
-
- ?line {ok,Bytes51} = asn1_wrapper:encode('SetOf','SetOs',["First","Second","Third"]),
- ?line {ok,["First","Second","Third"]} =
- asn1_wrapper:decode('SetOf','SetOs',lists:flatten(Bytes51)),
-
- ?line {ok,Bytes52} = asn1_wrapper:encode('SetOf','SetOsImp',["First","Second","Third"]),
- ?line {ok,["First","Second","Third"]} =
- asn1_wrapper:decode('SetOf','SetOsImp',lists:flatten(Bytes52)),
-
- ?line {ok,Bytes53} = asn1_wrapper:encode('SetOf','SetOsExp',["First","Second","Third"]),
- ?line {ok,["First","Second","Third"]} =
- asn1_wrapper:decode('SetOf','SetOsExp',lists:flatten(Bytes53)),
-
-
-
-
-
-
-
- ?line {ok,Bytes71} = asn1_wrapper:encode('SetOf','SetEmp',#'SetEmp'{set1 = [#'Empty'{}]}),
- ?line {ok,{'SetEmp',[{'Empty'}]}} = asn1_wrapper:decode('SetOf','SetEmp',lists:flatten(Bytes71)),
-
ok.
+roundtrip(T, V) ->
+ roundtrip(T, V, V).
+
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('SetOf', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testSetOfCho.erl b/lib/asn1/test/testSetOfCho.erl
index c89bf9596e..09c075e468 100644
--- a/lib/asn1/test/testSetOfCho.erl
+++ b/lib/asn1/test/testSetOfCho.erl
@@ -30,120 +30,46 @@
-record('SetOfChoEmbDef_SETOF',{bool1, int1, set1 = asn1_DEFAULT}).
-record('SetOfChoEmbOpt_SETOF',{bool1, int1, set1 = asn1_NOVALUE}).
+main(_Rules) ->
+ roundtrip('SetChoDef',
+ #'SetChoDef'{bool1=true,int1=17,set1=asn1_DEFAULT},
+ #'SetChoDef'{bool1=true,int1=17,set1=[]}),
+ roundtrip('SetChoDef',
+ #'SetChoDef'{bool1=true,int1=17,set1=[{boolIn,true},{intIn,25}]}),
+ roundtrip('SetChoOpt',
+ #'SetChoOpt'{bool1=true,int1=17,set1=asn1_NOVALUE}),
+ roundtrip('SetChoOpt',
+ #'SetChoOpt'{bool1=true,int1=17,set1=[{boolIn,true},{intIn,25}]}),
+ roundtrip('SetChoEmbDef',
+ #'SetChoEmbDef'{bool1=true,int1=17,set1=asn1_DEFAULT},
+ #'SetChoEmbDef'{bool1=true,int1=17,set1=[]}),
+ roundtrip('SetChoEmbDef',
+ #'SetChoEmbDef'{bool1=true,int1=17,
+ set1=[{boolIn,true},{intIn,25}]}),
+ roundtrip('SetChoEmbOpt',
+ #'SetChoEmbOpt'{bool1=true,int1=17,set1=asn1_NOVALUE}),
+ roundtrip('SetChoEmbOpt',
+ #'SetChoEmbOpt'{bool1=true,int1=17,
+ set1=[{boolIn,true},{intIn,25}]}),
+
+ roundtrip('SetOfChoEmbDef',
+ [#'SetOfChoEmbDef_SETOF'{bool1=true,int1=17,set1=asn1_DEFAULT}],
+ [#'SetOfChoEmbDef_SETOF'{bool1=true,int1=17,set1=[]}]),
+ roundtrip('SetOfChoEmbDef',
+ [#'SetOfChoEmbDef_SETOF'{bool1=true,int1=17,
+ set1=[{boolIn,true},{intIn,25}]}]),
+
+ roundtrip('SetOfChoEmbOpt',
+ [#'SetOfChoEmbOpt_SETOF'{bool1=true,int1=17,set1=asn1_NOVALUE}]),
+ roundtrip('SetOfChoEmbOpt',
+ [#'SetOfChoEmbOpt_SETOF'{bool1=true,int1=17,
+ set1=[{boolIn,true},{intIn,25}]}]),
-main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetOfCho','SetChoDef',#'SetChoDef'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SetChoDef',true,17,[]}} =
- asn1_wrapper:decode('SetOfCho','SetChoDef',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetOfCho','SetChoDef',#'SetChoDef'{bool1 = true,
- int1 = 17,
- set1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SetChoDef',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SetOfCho','SetChoDef',lists:flatten(Bytes12)),
-
-
-
- ?line {ok,Bytes15} =
- asn1_wrapper:encode('SetOfCho','SetChoOpt',#'SetChoOpt'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SetChoOpt',true,17,asn1_NOVALUE}} =
- asn1_wrapper:decode('SetOfCho','SetChoOpt',lists:flatten(Bytes15)),
-
-
- ?line {ok,Bytes16} =
- asn1_wrapper:encode('SetOfCho','SetChoOpt',#'SetChoOpt'{bool1 = true,
- int1 = 17,
- set1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SetChoOpt',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SetOfCho','SetChoOpt',lists:flatten(Bytes16)),
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetOfCho','SetChoEmbDef',#'SetChoEmbDef'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SetChoEmbDef',true,17,[]}} =
- asn1_wrapper:decode('SetOfCho','SetChoEmbDef',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetOfCho','SetChoEmbDef',#'SetChoEmbDef'{bool1 = true,
- int1 = 17,
- set1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SetChoEmbDef',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SetOfCho','SetChoEmbDef',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes25} =
- asn1_wrapper:encode('SetOfCho','SetChoEmbOpt',#'SetChoEmbOpt'{bool1 = true,
- int1 = 17}),
- ?line {ok,{'SetChoEmbOpt',true,17,asn1_NOVALUE}} =
- asn1_wrapper:decode('SetOfCho','SetChoEmbOpt',lists:flatten(Bytes25)),
-
-
- ?line {ok,Bytes26} =
- asn1_wrapper:encode('SetOfCho','SetChoEmbOpt',#'SetChoEmbOpt'{bool1 = true,
- int1 = 17,
- set1 = [{boolIn,true},
- {intIn,25}]}),
- ?line {ok,{'SetChoEmbOpt',true,17,[{boolIn,true},{intIn,25}]}} =
- asn1_wrapper:decode('SetOfCho','SetChoEmbOpt',lists:flatten(Bytes26)),
-
-
-
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetOfCho','SetOfChoEmbDef',[#'SetOfChoEmbDef_SETOF'{bool1 = true,
- int1 = 17}]),
- ?line {ok,[{'SetOfChoEmbDef_SETOF',true,17,[]}]} =
- asn1_wrapper:decode('SetOfCho','SetOfChoEmbDef',lists:flatten(Bytes31)),
-
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SetOfCho','SetOfChoEmbDef',
- [#'SetOfChoEmbDef_SETOF'{bool1 = true,
- int1 = 17,
- set1 = [{boolIn,true},
- {intIn,25}]}]),
- ?line {ok,[{'SetOfChoEmbDef_SETOF',true,17,[{boolIn,true},{intIn,25}]}]} =
- asn1_wrapper:decode('SetOfCho','SetOfChoEmbDef',lists:flatten(Bytes32)),
-
-
-
- ?line {ok,Bytes35} =
- asn1_wrapper:encode('SetOfCho','SetOfChoEmbOpt',[#'SetOfChoEmbOpt_SETOF'{bool1 = true,
- int1 = 17}]),
- ?line {ok,[{'SetOfChoEmbOpt_SETOF',true,17,asn1_NOVALUE}]} =
- asn1_wrapper:decode('SetOfCho','SetOfChoEmbOpt',lists:flatten(Bytes35)),
-
-
- ?line {ok,Bytes36} =
- asn1_wrapper:encode('SetOfCho','SetOfChoEmbOpt',
- [#'SetOfChoEmbOpt_SETOF'{bool1 = true,
- int1 = 17,
- set1 = [{boolIn,true},
- {intIn,25}]}]),
- ?line {ok,[{'SetOfChoEmbOpt_SETOF',true,17,[{boolIn,true},{intIn,25}]}]} =
- asn1_wrapper:decode('SetOfCho','SetOfChoEmbOpt',lists:flatten(Bytes36)),
-
-
-
-
ok.
+roundtrip(T, V) ->
+ roundtrip(T, V, V).
+roundtrip(Type, Value, ExpectedValue) ->
+ asn1_test_lib:roundtrip('SetOfCho', Type, Value, ExpectedValue).
diff --git a/lib/asn1/test/testSetOfExternal.erl b/lib/asn1/test/testSetOfExternal.erl
index 6b280a2595..a380ba5ac1 100644
--- a/lib/asn1/test/testSetOfExternal.erl
+++ b/lib/asn1/test/testSetOfExternal.erl
@@ -18,8 +18,6 @@
%%
%%
-module(testSetOfExternal).
-
-
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -29,133 +27,26 @@
-record('Imp',{os, bool}).
-record('Exp',{os, bool}).
-
-
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetOfExternal','NTNT',[#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','NTNT',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetOfExternal','ImpNT',[#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','ImpNT',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetOfExternal','ExpNT',[#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','ExpNT',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetOfExternal','NTImp',[#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','NTImp',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetOfExternal','ImpImp',[#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','ImpImp',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SetOfExternal','ExpImp',[#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','ExpImp',lists:flatten(Bytes23)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetOfExternal','NTExp',[#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','NTExp',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SetOfExternal','ImpExp',[#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','ImpExp',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SetOfExternal','ExpExp',[#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','ExpExp',lists:flatten(Bytes33)),
-
-
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SetOfExternal','XNTNT',[#'XSetNT'{bool = true, os = "kalle"},
- #'XSetNT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetNT',[107,97,108,108,101],true},{'XSetNT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XNTNT',lists:flatten(Bytes41)),
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SetOfExternal','XImpNT',[#'XSetNT'{bool = true, os = "kalle"},
- #'XSetNT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetNT',[107,97,108,108,101],true},{'XSetNT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XImpNT',lists:flatten(Bytes42)),
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SetOfExternal','XExpNT',[#'XSetNT'{bool = true, os = "kalle"},
- #'XSetNT'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetNT',[107,97,108,108,101],true},{'XSetNT',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XExpNT',lists:flatten(Bytes43)),
-
-
-
- ?line {ok,Bytes51} =
- asn1_wrapper:encode('SetOfExternal','XNTImp',[#'XSetImp'{bool = true, os = "kalle"},
- #'XSetImp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetImp',[107,97,108,108,101],true},{'XSetImp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XNTImp',lists:flatten(Bytes51)),
-
- ?line {ok,Bytes52} =
- asn1_wrapper:encode('SetOfExternal','XImpImp',[#'XSetImp'{bool = true, os = "kalle"},
- #'XSetImp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetImp',[107,97,108,108,101],true},{'XSetImp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XImpImp',lists:flatten(Bytes52)),
-
- ?line {ok,Bytes53} =
- asn1_wrapper:encode('SetOfExternal','XExpImp',[#'XSetImp'{bool = true, os = "kalle"},
- #'XSetImp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetImp',[107,97,108,108,101],true},{'XSetImp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XExpImp',lists:flatten(Bytes53)),
-
-
-
- ?line {ok,Bytes61} =
- asn1_wrapper:encode('SetOfExternal','XNTExp',[#'XSetExp'{bool = true, os = "kalle"},
- #'XSetExp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetExp',[107,97,108,108,101],true},{'XSetExp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XNTExp',lists:flatten(Bytes61)),
-
- ?line {ok,Bytes62} =
- asn1_wrapper:encode('SetOfExternal','XImpExp',[#'XSetExp'{bool = true, os = "kalle"},
- #'XSetExp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetExp',[107,97,108,108,101],true},{'XSetExp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XImpExp',lists:flatten(Bytes62)),
-
- ?line {ok,Bytes63} =
- asn1_wrapper:encode('SetOfExternal','XExpExp',[#'XSetExp'{bool = true, os = "kalle"},
- #'XSetExp'{bool = true, os = "kalle"}]),
- ?line {ok,[{'XSetExp',[107,97,108,108,101],true},{'XSetExp',[107,97,108,108,101],true}]} =
- asn1_wrapper:decode('SetOfExternal','XExpExp',lists:flatten(Bytes63)),
-
-
-
-
+ roundtrip('NTNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ roundtrip('ImpNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ roundtrip('ExpNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ roundtrip('NTImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ roundtrip('ImpImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ roundtrip('ExpImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ roundtrip('NTExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ roundtrip('ImpExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ roundtrip('ExpExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ roundtrip('XNTNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
+ roundtrip('XImpNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
+ roundtrip('XExpNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
+ roundtrip('XNTImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
+ roundtrip('XImpImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
+ roundtrip('XExpImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
+ roundtrip('XNTExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
+ roundtrip('XImpExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
+ roundtrip('XExpExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetOfExternal', T, V).
diff --git a/lib/asn1/test/testSetOfTag.erl b/lib/asn1/test/testSetOfTag.erl
index 2c7a2f5473..81bc467abb 100644
--- a/lib/asn1/test/testSetOfTag.erl
+++ b/lib/asn1/test/testSetOfTag.erl
@@ -18,14 +18,11 @@
%%
%%
-module(testSetOfTag).
-
-
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
-include("External.hrl").
-
-record('SetTagNt',{nt}).
-record('SetTagNtI',{imp}).
-record('SetTagNtE',{exp}).
@@ -44,148 +41,44 @@
-record('Imp',{os, bool}).
-record('Exp',{os, bool}).
-
-
main(_Rules) ->
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetOfTag','SetTagNt',
- #'SetTagNt'{nt = [#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagNt',
- [{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagNt',lists:flatten(Bytes11)),
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetOfTag','SetTagNtI',
- #'SetTagNtI'{imp = [#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagNtI',
- [{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagNtI',lists:flatten(Bytes12)),
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetOfTag','SetTagNtE',
- #'SetTagNtE'{exp = [#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagNtE',
- [{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagNtE',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetOfTag','SetTagI',
- #'SetTagI'{nt = [#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagI',
- [{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagI',lists:flatten(Bytes21)),
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetOfTag','SetTagII',
- #'SetTagII'{imp = [#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagII',
- [{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagII',lists:flatten(Bytes22)),
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SetOfTag','SetTagIE',
- #'SetTagIE'{exp = [#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagIE',
- [{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagIE',lists:flatten(Bytes23)),
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetOfTag','SetTagE',
- #'SetTagE'{nt = [#'NT'{bool = true, os = "kalle"},
- #'NT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagE',
- [{'NT',[107,97,108,108,101],true},{'NT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagE',lists:flatten(Bytes31)),
-
- ?line {ok,Bytes32} =
- asn1_wrapper:encode('SetOfTag','SetTagEI',
- #'SetTagEI'{imp = [#'Imp'{bool = true, os = "kalle"},
- #'Imp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagEI',
- [{'Imp',[107,97,108,108,101],true},{'Imp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagEI',lists:flatten(Bytes32)),
-
- ?line {ok,Bytes33} =
- asn1_wrapper:encode('SetOfTag','SetTagEE',
- #'SetTagEE'{exp = [#'Exp'{bool = true, os = "kalle"},
- #'Exp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagEE',
- [{'Exp',[107,97,108,108,101],true},{'Exp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagEE',lists:flatten(Bytes33)),
-
-
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SetOfTag','SetTagXNt',
- #'SetTagXNt'{xnt = [#'XSetNT'{bool = true, os = "kalle"},
- #'XSetNT'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagXNt',
- [{'XSetNT',[107,97,108,108,101],true},{'XSetNT',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagXNt',lists:flatten(Bytes41)),
-
- ?line {ok,Bytes42} =
- asn1_wrapper:encode('SetOfTag','SetTagXI',
- #'SetTagXI'{ximp = [#'XSetImp'{bool = true, os = "kalle"},
- #'XSetImp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagXI',
- [{'XSetImp',[107,97,108,108,101],true},{'XSetImp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagXI',lists:flatten(Bytes42)),
-
- ?line {ok,Bytes43} =
- asn1_wrapper:encode('SetOfTag','SetTagXE',
- #'SetTagXE'{xexp = [#'XSetExp'{bool = true, os = "kalle"},
- #'XSetExp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagXE',
- [{'XSetExp',[107,97,108,108,101],true},{'XSetExp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagXE',lists:flatten(Bytes43)),
-
-
-
-
-
- ?line {ok,Bytes51} =
- asn1_wrapper:encode('SetOfTag','SetTagImpX',
- #'SetTagImpX'{xnt = [#'XSetNT'{bool = true, os = "kalle"},
- #'XSetNT'{bool = true, os = "kalle"}],
- ximp = [#'XSetImp'{bool = true, os = "kalle"},
- #'XSetImp'{bool = true, os = "kalle"}],
- xexp = [#'XSetExp'{bool = true, os = "kalle"},
- #'XSetExp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagImpX',
- [{'XSetNT',[107,97,108,108,101],true},{'XSetNT',[107,97,108,108,101],true}],
- [{'XSetImp',[107,97,108,108,101],true},{'XSetImp',[107,97,108,108,101],true}],
- [{'XSetExp',[107,97,108,108,101],true},{'XSetExp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagImpX',lists:flatten(Bytes51)),
-
-
-
- ?line {ok,Bytes52} =
- asn1_wrapper:encode('SetOfTag','SetTagExpX',
- #'SetTagExpX'{xnt = [#'XSetNT'{bool = true, os = "kalle"},
- #'XSetNT'{bool = true, os = "kalle"}],
- ximp = [#'XSetImp'{bool = true, os = "kalle"},
- #'XSetImp'{bool = true, os = "kalle"}],
- xexp = [#'XSetExp'{bool = true, os = "kalle"},
- #'XSetExp'{bool = true, os = "kalle"}]}),
- ?line {ok,{'SetTagExpX',
- [{'XSetNT',[107,97,108,108,101],true},{'XSetNT',[107,97,108,108,101],true}],
- [{'XSetImp',[107,97,108,108,101],true},{'XSetImp',[107,97,108,108,101],true}],
- [{'XSetExp',[107,97,108,108,101],true},{'XSetExp',[107,97,108,108,101],true}]}} =
- asn1_wrapper:decode('SetOfTag','SetTagExpX',lists:flatten(Bytes52)),
-
+ roundtrip('SetTagNt', #'SetTagNt'{nt=[#'NT'{os="kalle",bool=true},
+ #'NT'{os="kalle",bool=true}]}),
+ roundtrip('SetTagNtI', #'SetTagNtI'{imp=[#'Imp'{os="kalle",bool=true},
+ #'Imp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagNtE', #'SetTagNtE'{exp=[#'Exp'{os="kalle",bool=true},
+ #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagI', #'SetTagI'{nt=[#'NT'{os="kalle",bool=true},
+ #'NT'{os="kalle",bool=true}]}),
+ roundtrip('SetTagII', #'SetTagII'{imp=[#'Imp'{os="kalle",bool=true},
+ #'Imp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagIE', #'SetTagIE'{exp=[#'Exp'{os="kalle",bool=true},
+ #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagE', #'SetTagE'{nt=[#'NT'{os="kalle",bool=true},
+ #'NT'{os="kalle",bool=true}]}),
+ roundtrip('SetTagEI', #'SetTagEI'{imp=[#'Imp'{os="kalle",bool=true},
+ #'Imp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagEE', #'SetTagEE'{exp=[#'Exp'{os="kalle",bool=true},
+ #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagXNt', #'SetTagXNt'{xnt=[#'XSetNT'{os="kalle",bool=true},
+ #'XSetNT'{os="kalle",bool=true}]}),
+ roundtrip('SetTagXI', #'SetTagXI'{ximp=[#'XSetImp'{os="kalle",bool=true},
+ #'XSetImp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagXE', #'SetTagXE'{xexp=[#'XSetExp'{os="kalle",bool=true},
+ #'XSetExp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagImpX', #'SetTagImpX'{xnt=[#'XSetNT'{os="kalle",bool=true},
+ #'XSetNT'{os="kalle",bool=true}],
+ ximp=[#'XSetImp'{os="kalle",bool=true},
+ #'XSetImp'{os="kalle",bool=true}],
+ xexp=[#'XSetExp'{os="kalle",bool=true},
+ #'XSetExp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagExpX', #'SetTagExpX'{xnt=[#'XSetNT'{os="kalle",bool=true},
+ #'XSetNT'{os="kalle",bool=true}],
+ ximp=[#'XSetImp'{os="kalle",bool=true},
+ #'XSetImp'{os="kalle",bool=true}],
+ xexp=[#'XSetExp'{os="kalle",bool=true},
+ #'XSetExp'{os="kalle",bool=true}]}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetOfTag', T, V).
diff --git a/lib/asn1/test/testSetOptional.erl b/lib/asn1/test/testSetOptional.erl
index bb43ff0a96..eb095fd480 100644
--- a/lib/asn1/test/testSetOptional.erl
+++ b/lib/asn1/test/testSetOptional.erl
@@ -93,6 +93,4 @@ ticket_7533(_) ->
ok.
roundtrip(Type, Value) ->
- {ok,Encoded} = 'SetOptional':encode(Type, Value),
- {ok,Value} = 'SetOptional':decode(Type, Encoded),
- ok.
+ asn1_test_lib:roundtrip('SetOptional', Type, Value).
diff --git a/lib/asn1/test/testSetPrim.erl b/lib/asn1/test/testSetPrim.erl
index 3234b65135..f417f343a7 100644
--- a/lib/asn1/test/testSetPrim.erl
+++ b/lib/asn1/test/testSetPrim.erl
@@ -27,59 +27,17 @@
-record('Empty',{}).
main(_Rules) ->
-
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetPrim','Set',#'Set'{bool = true,
- boolCon = true,
- boolPri = true,
- boolApp = true,
- boolExpCon = true,
- boolExpPri = true,
- boolExpApp = true}),
- ?line {ok,{'Set',true,true,true,true,true,true,true}} =
- asn1_wrapper:decode('SetPrim','Set',lists:flatten(Bytes11)),
-
-
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetPrim','Set',#'Set'{bool = false,
- boolCon = false,
- boolPri = false,
- boolApp = false,
- boolExpCon = false,
- boolExpPri = false,
- boolExpApp = false}),
- ?line {ok,{'Set',false,false,false,false,false,false,false}} =
- asn1_wrapper:decode('SetPrim','Set',lists:flatten(Bytes12)),
-
-
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetPrim','Set',#'Set'{bool = false,
- boolCon = true,
- boolPri = false,
- boolApp = true,
- boolExpCon = false,
- boolExpPri = true,
- boolExpApp = false}),
- ?line {ok,{'Set',false,true,false,true,false,true,false}} =
- asn1_wrapper:decode('SetPrim','Set',lists:flatten(Bytes13)),
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetPrim','Empty',#'Empty'{}),
- ?line {ok,{'Empty'}} =
- asn1_wrapper:decode('SetPrim','Empty',lists:flatten(Bytes21)),
-
-
-
+ roundtrip('Set',
+ #'Set'{bool=true,boolCon=true,boolPri=true,boolApp=true,
+ boolExpCon=true,boolExpPri=true,boolExpApp=true}),
+ roundtrip('Set',
+ #'Set'{bool=false,boolCon=false,boolPri=false,boolApp=false,
+ boolExpCon=false,boolExpPri=false,boolExpApp=false}),
+ roundtrip('Set',
+ #'Set'{bool=false,boolCon=true,boolPri=false,boolApp=true,
+ boolExpCon=false,boolExpPri=true,boolExpApp=false}),
+ roundtrip('Empty', #'Empty'{}),
ok.
-
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetPrim', T, V).
diff --git a/lib/asn1/test/testSetTag.erl b/lib/asn1/test/testSetTag.erl
index 8b9364d603..5863a149b9 100644
--- a/lib/asn1/test/testSetTag.erl
+++ b/lib/asn1/test/testSetTag.erl
@@ -18,7 +18,6 @@
%%
%%
-module(testSetTag).
-
-export([main/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -35,69 +34,25 @@
-record('Exp',{os, bool}).
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetTag','SetTag',#'SetTag'{nt = #'NT'{bool = true, os = "kalle"},
- imp = #'Imp'{bool = true, os = "kalle"},
- exp = #'Exp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SetTag',{'NT',"kalle",true},{'Imp',"kalle",true},{'Exp',"kalle",true}}} =
- asn1_wrapper:decode('SetTag','SetTag',lists:flatten(Bytes11)),
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetTag','SetTagImp',#'SetTagImp'{nt = #'NT'{bool = true, os = "kalle"},
- imp = #'Imp'{bool = true, os = "kalle"},
- exp = #'Exp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SetTagImp',{'NT',"kalle",true},{'Imp',"kalle",true},{'Exp',"kalle",true}}} =
- asn1_wrapper:decode('SetTag','SetTagImp',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetTag','SetTagExp',#'SetTagExp'{nt = #'NT'{bool = true, os = "kalle"},
- imp = #'Imp'{bool = true, os = "kalle"},
- exp = #'Exp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SetTagExp',{'NT',"kalle",true},{'Imp',"kalle",true},{'Exp',"kalle",true}}} =
- asn1_wrapper:decode('SetTag','SetTagExp',lists:flatten(Bytes13)),
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetTag','SetTagX',
- #'SetTagX'{xnt = #'XSetNT'{bool = true, os = "kalle"},
- ximp = #'XSetImp'{bool = true, os = "kalle"},
- xexp = #'XSetExp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SetTagX',{'XSetNT',"kalle",true},
- {'XSetImp',"kalle",true},
- {'XSetExp',"kalle",true}}} =
- asn1_wrapper:decode('SetTag','SetTagX',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetTag','SetTagImpX',
- #'SetTagImpX'{xnt = #'XSetNT'{bool = true, os = "kalle"},
- ximp = #'XSetImp'{bool = true, os = "kalle"},
- xexp = #'XSetExp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SetTagImpX',{'XSetNT',"kalle",true},
- {'XSetImp',"kalle",true},
- {'XSetExp',"kalle",true}}} =
- asn1_wrapper:decode('SetTag','SetTagImpX',lists:flatten(Bytes22)),
-
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SetTag','SetTagExpX',
- #'SetTagExpX'{xnt = #'XSetNT'{bool = true, os = "kalle"},
- ximp = #'XSetImp'{bool = true, os = "kalle"},
- xexp = #'XSetExp'{bool = true, os = "kalle"}}),
- ?line {ok,{'SetTagExpX',{'XSetNT',"kalle",true},
- {'XSetImp',"kalle",true},
- {'XSetExp',"kalle",true}}} =
- asn1_wrapper:decode('SetTag','SetTagExpX',lists:flatten(Bytes23)),
-
-
-
-
-
+ roundtrip('SetTag', #'SetTag'{nt=#'NT'{os="kalle",bool=true},
+ imp=#'Imp'{os="kalle",bool=true},
+ exp=#'Exp'{os="kalle",bool=true}}),
+ roundtrip('SetTagImp', #'SetTagImp'{nt=#'NT'{os="kalle",bool=true},
+ imp=#'Imp'{os="kalle",bool=true},
+ exp=#'Exp'{os="kalle",bool=true}}),
+ roundtrip('SetTagExp', #'SetTagExp'{nt=#'NT'{os="kalle",bool=true},
+ imp=#'Imp'{os="kalle",bool=true},
+ exp=#'Exp'{os="kalle",bool=true}}),
+ roundtrip('SetTagX', #'SetTagX'{xnt=#'XSetNT'{os="kalle",bool=true},
+ ximp=#'XSetImp'{os="kalle",bool=true},
+ xexp=#'XSetExp'{os="kalle",bool=true}}),
+ roundtrip('SetTagImpX', #'SetTagImpX'{xnt=#'XSetNT'{os="kalle",bool=true},
+ ximp=#'XSetImp'{os="kalle",bool=true},
+ xexp=#'XSetExp'{os="kalle",bool=true}}),
+ roundtrip('SetTagExpX', #'SetTagExpX'{xnt=#'XSetNT'{os="kalle",bool=true},
+ ximp=#'XSetImp'{os="kalle",bool=true},
+ xexp=#'XSetExp'{os="kalle",bool=true}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetTag', T, V).
diff --git a/lib/asn1/test/testSetTypeRefCho.erl b/lib/asn1/test/testSetTypeRefCho.erl
index a0989926c7..8d62f45bfa 100644
--- a/lib/asn1/test/testSetTypeRefCho.erl
+++ b/lib/asn1/test/testSetTypeRefCho.erl
@@ -28,17 +28,12 @@
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetTypeRefCho','SetTRcho',
- #'SetTRcho'{'setCho' = {choOs,"A string 1"},
- 'setChoE' = {choOs,"A string 3"},
- 'setCho-E' = {choOs,"A string 7"},
- 'setChoE-E' = {choOs,"A string 9"}}),
- ?line {ok,{'SetTRcho',{choOs,"A string 1"},{choOs,"A string 3"},{choOs,"A string 7"},{choOs,"A string 9"}}} =
- asn1_wrapper:decode('SetTypeRefCho','SetTRcho',lists:flatten(Bytes11)),
-
-
-
+ roundtrip('SetTRcho',
+ #'SetTRcho'{'setCho' = {choOs,"A string 1"},
+ 'setChoE' = {choOs,"A string 3"},
+ 'setCho-E' = {choOs,"A string 7"},
+ 'setChoE-E' = {choOs,"A string 9"}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetTypeRefCho', T, V).
diff --git a/lib/asn1/test/testSetTypeRefPrim.erl b/lib/asn1/test/testSetTypeRefPrim.erl
index 9c7fbd803e..cc2e157e68 100644
--- a/lib/asn1/test/testSetTypeRefPrim.erl
+++ b/lib/asn1/test/testSetTypeRefPrim.erl
@@ -27,21 +27,17 @@
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetTypeRefPrim','SetTR',#'SetTR'{'octStr' = "A string 1",
- 'octStrI' = "A string 2",
- 'octStrE' = "A string 3",
- 'octStr-I' = "A string 4",
- 'octStrI-I' = "A string 5",
- 'octStrE-I' = "A string 6",
- 'octStr-E' = "A string 7",
- 'octStrI-E' = "A string 8",
- 'octStrE-E' = "A string 9"}),
- ?line {ok,{'SetTR',"A string 1","A string 2","A string 3","A string 4","A string 5","A string 6","A string 7","A string 8","A string 9"}} =
- asn1_wrapper:decode('SetTypeRefPrim','SetTR',lists:flatten(Bytes11)),
-
-
-
+ roundtrip('SetTR',
+ #'SetTR'{'octStr' = "A string 1",
+ 'octStrI' = "A string 2",
+ 'octStrE' = "A string 3",
+ 'octStr-I' = "A string 4",
+ 'octStrI-I' = "A string 5",
+ 'octStrE-I' = "A string 6",
+ 'octStr-E' = "A string 7",
+ 'octStrI-E' = "A string 8",
+ 'octStrE-E' = "A string 9"}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetTypeRefPrim', T, V).
diff --git a/lib/asn1/test/testSetTypeRefSeq.erl b/lib/asn1/test/testSetTypeRefSeq.erl
index a3ef4b188d..17af5c2922 100644
--- a/lib/asn1/test/testSetTypeRefSeq.erl
+++ b/lib/asn1/test/testSetTypeRefSeq.erl
@@ -28,12 +28,8 @@
-record('SetSeqImp',{seqInt, seqOs}).
-record('SetSeqExp',{seqInt, seqOs}).
-
-
main(_Rules) ->
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SetTypeRefSeq','SetTRseq',
+ roundtrip('SetTRseq',
#'SetTRseq'{'setSeq' = #'SetSeq'{seqOs = "A1",
seqInt = 2},
'setSeqI' = #'SetSeq'{seqOs = "A2",
@@ -52,15 +48,7 @@ main(_Rules) ->
seqInt = 2},
'setSeqE-E' = #'SetSeqExp'{seqOs = "A9",
seqInt = 2}}),
- ?line {ok,{'SetTRseq',{'SetSeq',2,"A1"},
- {'SetSeq',2,"A2"},
- {'SetSeq',2,"A3"},
- {'SetSeqImp',2,"A4"},
- {'SetSeqImp',2,"A5"},
- {'SetSeqImp',2,"A6"},
- {'SetSeqExp',2,"A7"},
- {'SetSeqExp',2,"A8"},
- {'SetSeqExp',2,"A9"}}} =
- asn1_wrapper:decode('SetTypeRefSeq','SetTRseq',lists:flatten(Bytes41)),
-
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetTypeRefSeq', T, V).
diff --git a/lib/asn1/test/testSetTypeRefSet.erl b/lib/asn1/test/testSetTypeRefSet.erl
index ce77316ef8..8786e0fb4d 100644
--- a/lib/asn1/test/testSetTypeRefSet.erl
+++ b/lib/asn1/test/testSetTypeRefSet.erl
@@ -46,131 +46,42 @@
main(_Rules) ->
-
-
- ?line {ok,Bytes11} =
- asn1_wrapper:encode('SetTypeRefSet','Set1',#'Set1'{bool1 = true,
- int1 = 15,
- set1 = #'SetIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'Set1',true,15,{'SetIn',true,66}}} =
- asn1_wrapper:decode('SetTypeRefSet','Set1',lists:flatten(Bytes11)),
-
-
-
- ?line {ok,Bytes12} =
- asn1_wrapper:encode('SetTypeRefSet','Set2',#'Set2'{set2 = #'SetIn'{boolIn = true,
- intIn = 66},
- bool2 = true,
- int2 = 15}),
- ?line {ok,{'Set2',{'SetIn',true,66},true,15}} =
- asn1_wrapper:decode('SetTypeRefSet','Set2',lists:flatten(Bytes12)),
-
-
- ?line {ok,Bytes13} =
- asn1_wrapper:encode('SetTypeRefSet','Set3',#'Set3'{bool3 = true,
- set3 = #'SetIn'{boolIn = true,
- intIn = 66},
- int3 = 15}),
- ?line {ok,{'Set3',true,{'SetIn',true,66},15}} =
- asn1_wrapper:decode('SetTypeRefSet','Set3',lists:flatten(Bytes13)),
-
-
-
- ?line {ok,Bytes14} =
- asn1_wrapper:encode('SetTypeRefSet','Set4',#'Set4'{set41 = #'SetIn'{boolIn = true,
- intIn = 66},
- set42 = #'SetIn'{boolIn = true,
- intIn = 66},
- set43 = #'SetIn'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'Set4',{'SetIn',true,66},{'SetIn',true,66},{'SetIn',true,66}}} =
- asn1_wrapper:decode('SetTypeRefSet','Set4',lists:flatten(Bytes14)),
-
-
-
-
-
-
-
-
- ?line {ok,Bytes21} =
- asn1_wrapper:encode('SetTypeRefSet','SetS1',#'SetS1'{boolS1 = true,
- intS1 = 15,
- setS1 = #'SetS1_setS1'{boolIn = true,
- intIn = 66}}),
- ?line {ok,{'SetS1',true,15,{'SetS1_setS1',true,66}}} =
- asn1_wrapper:decode('SetTypeRefSet','SetS1',lists:flatten(Bytes21)),
-
-
- ?line {ok,Bytes22} =
- asn1_wrapper:encode('SetTypeRefSet','SetS2',#'SetS2'{setS2 = #'SetS2_setS2'{boolIn = true,
- intIn = 66},
- boolS2 = true,
- intS2 = 15}),
- ?line {ok,{'SetS2',{'SetS2_setS2',true,66},true,15}} =
- asn1_wrapper:decode('SetTypeRefSet','SetS2',lists:flatten(Bytes22)),
-
-
-
- ?line {ok,Bytes23} =
- asn1_wrapper:encode('SetTypeRefSet','SetS3',#'SetS3'{boolS3 = true,
- setS3 = #'SetS3_setS3'{boolIn = true,
- intIn = 66},
- intS3 = 15}),
- ?line {ok,{'SetS3',true,{'SetS3_setS3',true,66},15}} =
- asn1_wrapper:decode('SetTypeRefSet','SetS3',lists:flatten(Bytes23)),
-
-
-
-
-
-
- ?line {ok,Bytes31} =
- asn1_wrapper:encode('SetTypeRefSet','SetSTag',#'SetSTag'{setS1 = #'SetSTag_setS1'{b1 = true,
- i1 = 11},
- setS2 = #'SetSTag_setS2'{b2 = true,
- i2 = 22},
- setS3 = #'SetSTag_setS3'{b3 = true,
- i3 = 33}}),
- ?line {ok,{'SetSTag',{'SetSTag_setS1',true,11},
- {'SetSTag_setS2',true,22},
- {'SetSTag_setS3',true,33}}} =
- asn1_wrapper:decode('SetTypeRefSet','SetSTag',lists:flatten(Bytes31)),
-
-
-
-
-
- ?line {ok,Bytes41} =
- asn1_wrapper:encode('SetTypeRefSet','SetTRset',
- #'SetTRset'{'setSet' = #'SetSet'{setOs = "A1",
- setInt = 2},
- 'setSetI' = #'SetSet'{setOs = "A2",
- setInt = 2},
- 'setSetE' = #'SetSet'{setOs = "A3",
- setInt = 2},
- 'setSet-I' = #'SetSetImp'{setOs = "A4",
- setInt = 2},
- 'setSetI-I' = #'SetSetImp'{setOs = "A5",
- setInt = 2},
- 'setSetE-I' = #'SetSetImp'{setOs = "A6",
- setInt = 2},
- 'setSet-E' = #'SetSetExp'{setOs = "A7",
- setInt = 2},
- 'setSetI-E' = #'SetSetExp'{setOs = "A8",
- setInt = 2},
- 'setSetE-E' = #'SetSetExp'{setOs = "A9",
- setInt = 2}}),
- ?line {ok,{'SetTRset',{'SetSet',2,"A1"},
- {'SetSet',2,"A2"},
- {'SetSet',2,"A3"},
- {'SetSetImp',2,"A4"},
- {'SetSetImp',2,"A5"},
- {'SetSetImp',2,"A6"},
- {'SetSetExp',2,"A7"},
- {'SetSetExp',2,"A8"},
- {'SetSetExp',2,"A9"}}} =
- asn1_wrapper:decode('SetTypeRefSet','SetTRset',lists:flatten(Bytes41)),
+ roundtrip('Set1',
+ #'Set1'{bool1=true,int1=15,set1=#'SetIn'{boolIn=true,intIn=66}}),
+ roundtrip('Set2',
+ #'Set2'{set2=#'SetIn'{boolIn=true,intIn=66},bool2=true,int2=15}),
+ roundtrip('Set3',
+ #'Set3'{bool3=true,set3=#'SetIn'{boolIn=true,intIn=66},int3=15}),
+ roundtrip('Set4',
+ #'Set4'{set41=#'SetIn'{boolIn=true,intIn=66},
+ set42=#'SetIn'{boolIn=true,intIn=66},
+ set43=#'SetIn'{boolIn=true,intIn=66}}),
+ roundtrip('SetS1',
+ #'SetS1'{boolS1=true,intS1=15,
+ setS1=#'SetS1_setS1'{boolIn=true,intIn=66}}),
+ roundtrip('SetS2',
+ #'SetS2'{setS2=#'SetS2_setS2'{boolIn=true,intIn=66},
+ boolS2=true,intS2=15}),
+ roundtrip('SetS3',
+ #'SetS3'{boolS3=true,
+ setS3=#'SetS3_setS3'{boolIn=true,intIn=66},
+ intS3=15}),
+ roundtrip('SetSTag',
+ #'SetSTag'{setS1=#'SetSTag_setS1'{b1=true,i1=11},
+ setS2=#'SetSTag_setS2'{b2=true,i2=22},
+ setS3=#'SetSTag_setS3'{b3=true,i3=33}}),
+ roundtrip('SetTRset',
+ #'SetTRset'{setSet=#'SetSet'{setInt=2,setOs="A1"},
+ setSetI=#'SetSet'{setInt=2,setOs="A2"},
+ setSetE=#'SetSet'{setInt=2,setOs="A3"},
+ 'setSet-I'=#'SetSetImp'{setInt=2,setOs="A4"},
+ 'setSetI-I'=#'SetSetImp'{setInt=2,setOs="A5"},
+ 'setSetE-I'=#'SetSetImp'{setInt=2,setOs="A6"},
+ 'setSet-E'=#'SetSetExp'{setInt=2,setOs="A7"},
+ 'setSetI-E'=#'SetSetExp'{setInt=2,setOs="A8"},
+ 'setSetE-E'=#'SetSetExp'{setInt=2,setOs="A9"}}),
ok.
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SetTypeRefSet', T, V).
diff --git a/lib/asn1/test/testTCAP.erl b/lib/asn1/test/testTCAP.erl
index aba13c94de..17511dc2b7 100644
--- a/lib/asn1/test/testTCAP.erl
+++ b/lib/asn1/test/testTCAP.erl
@@ -40,25 +40,26 @@ compile_asn1config(Config, Options) ->
test(Erule,_Config) ->
% ?line OutDir = ?config(priv_dir,Config),
%% testing OTP-4798, open type encoded with indefinite length
- ?line {ok,_Res} = asn1_wrapper:decode('TCAPMessages-simple','MessageType', val_OTP_4798(Erule)),
+ {ok,_Res} = 'TCAPMessages-simple':decode('MessageType',
+ val_OTP_4798(Erule)),
+
%% testing OTP-4799, absent optional open type
- ?line {ok,_Res2} = asn1_wrapper:decode('TCAPMessages-simple','MessageType',val_OTP_4799(Erule)),
+ {ok,_Res2} = 'TCAPMessages-simple':decode('MessageType',
+ val_OTP_4799(Erule)),
+
%% testing vance shipley's problems. Parameterized object sets.
?line Val3 = 'TCAPPackage_msg':val('PackageType',unidirectional),
- ?line {ok,Bytes3} = asn1_wrapper:encode('TCAPPackage','PackageType',Val3),
- ?line {ok,Res3} = asn1_wrapper:decode('TCAPPackage','PackageType',Bytes3),
+ Res3 = enc_dec('PackageType', Val3),
?line ok = 'TCAPPackage_msg':check_result('PackageType',unidirectional,Res3),
%% ?line io:format("Res3:~n~p~n~n",[Res3]),
?line Val4 = 'TCAPPackage_msg':val('PackageType',abort),
- ?line {ok,Bytes4} = asn1_wrapper:encode('TCAPPackage','PackageType',Val4),
- ?line {ok,Res4} = asn1_wrapper:decode('TCAPPackage','PackageType',Bytes4),
+ Res4 = enc_dec('PackageType', Val4),
?line ok = 'TCAPPackage_msg':check_result('PackageType',abort,Res4),
%% ?line io:format("Res4:~n~p~n~n",[Res4]),
?line Val5 = 'TCAPPackage_msg':val('PackageType',response),
- ?line {ok,Bytes5} = asn1_wrapper:encode('TCAPPackage','PackageType',Val5),
- ?line {ok,Res5} = asn1_wrapper:decode('TCAPPackage','PackageType',Bytes5),
+ Res5 = enc_dec('PackageType', Val5),
?line ok = 'TCAPPackage_msg':check_result('PackageType',response,Res5).
%% ?line io:format("Res5:~n~p~n~n",[Res5]).
@@ -73,21 +74,26 @@ val_OTP_4799(_) ->
<<100,16,73,4,41,182,36,0,108,8,163,6,2,1,29,2,1,27>>.
test_asn1config() ->
- ?line Val = 'TCAPPackage_msg':val('PackageType',queryWithPerm),
- ?line {ok,B} = asn1_wrapper:encode('TCAPPackage','PackageType',Val),
- ?line {ok,ExMsg}='TCAPPackage':decode_PackageType(list_to_binary(B)),
- ?line {_,{_,_,_,{Key,ExVal}}}=ExMsg,
- ?line {ok,_Parts}='TCAPPackage':decode_part(Key,ExVal),
+ Val = 'TCAPPackage_msg':val('PackageType', queryWithPerm),
+ {ok,B} = 'TCAPPackage':encode('PackageType', Val),
+ {ok,ExMsg}='TCAPPackage':decode_PackageType(B),
+ {_,{_,_,_,{Key,ExVal}}} = ExMsg,
+ {ok,_Parts} = 'TCAPPackage':decode_part(Key, ExVal),
- ?line Val2 = 'TCAPPackage_msg':val('TransactionPDU'),
- ?line {ok,B2} = 'TCAPPackage':encode('TransactionPDU',Val2),
- {ok,ExMsg2}='TCAPPackage':decode_TransactionPDU(B2),
- ?line {_,_,_,{Key2,ExVal2}}=ExMsg2,
- ?line {ok,_Parts2}='TCAPPackage':decode_part(Key2,ExVal2),
+ Val2 = 'TCAPPackage_msg':val('TransactionPDU'),
+ {ok,B2} = 'TCAPPackage':encode('TransactionPDU', Val2),
+ {ok,ExMsg2} = 'TCAPPackage':decode_TransactionPDU(B2),
+ {_,_,_,{Key2,ExVal2}} = ExMsg2,
+ {ok,_Parts2} = 'TCAPPackage':decode_part(Key2, ExVal2),
- ?line Val3 = 'TCAPPackage_msg':val('PackageType',response),
- ?line {ok,B3} = asn1_wrapper:encode('TCAPPackage','PackageType',Val3),
- ?line {ok,ExMsg3}='TCAPPackage':decode_PackageType(list_to_binary(B3)),
- ?line {_,{_,_,_,{Key3,ExVal3}}}=ExMsg3,
- ?line {ok,_Parts3}='TCAPPackage':decode_part(Key3,ExVal3).
+ Val3 = 'TCAPPackage_msg':val('PackageType', response),
+ {ok,B3} = 'TCAPPackage':encode('PackageType', Val3),
+ {ok,ExMsg3} = 'TCAPPackage':decode_PackageType(B3),
+ {_,{_,_,_,{Key3,ExVal3}}} = ExMsg3,
+ {ok,_Parts3}='TCAPPackage':decode_part(Key3, ExVal3).
+enc_dec(T, V0) ->
+ M = 'TCAPPackage',
+ {ok,Enc} = M:encode(T, V0),
+ {ok,V} = M:decode(T, Enc),
+ V.
diff --git a/lib/asn1/test/testTimer.erl b/lib/asn1/test/testTimer.erl
index cd7ceb5630..0f02bab6e0 100644
--- a/lib/asn1/test/testTimer.erl
+++ b/lib/asn1/test/testTimer.erl
@@ -18,9 +18,7 @@
%%
%%
-module(testTimer).
-
--compile(export_all).
-%%-export([Function/Arity, ...]).
+-export([go/2]).
-include_lib("test_server/include/test_server.hrl").
@@ -127,7 +125,7 @@ val() ->
{'H323-UserInformation_user-data',24,"O"}}.
-go(Config,Enc) ->
+go(Config, _Enc) ->
?line true = code:add_patha(?config(priv_dir,Config)),
Module = 'H323-MESSAGES',
@@ -137,13 +135,12 @@ go(Config,Enc) ->
CompileOptions = compile_options(),
- ?line {ValWr, done} = timer:tc(?MODULE, encode, [?times, Module, Type, Value]),
+ {ValWr,done} = timer:tc(fun() -> encode(?times, Module, Type, Value) end),
?line io:format("ASN1 encode ~p: ~p micro~n", [CompileOptions, ValWr / ?times]),
- ?line done = decode(2,Module,Type,Bytes,Enc),
+ done = decode(2, Module, Type, Bytes),
- ?line {ValRead, done} = timer:tc(?MODULE, decode, [?times, Module,
- Type, Bytes,Enc]),
+ {ValRead,done} = timer:tc(fun() -> decode(?times, Module, Type, Bytes) end),
?line io:format("ASN1 decode ~p: ~p micro~n", [CompileOptions, ValRead /?times]),
@@ -162,11 +159,11 @@ encode(N, Module,Type,Value) ->
end,
encode(N-1, Module,Type,Value).
-decode(0, _Module,_Type,_Value,_Erule) ->
+decode(0, _Module, _Type, _Value) ->
done;
-decode(N, Module,Type,Value,Erule) ->
- {ok,_B} = asn1rt:decode(Module,Type,Value),
- decode(N-1, Module,Type,Value,Erule).
+decode(N, Module, Type, Value) ->
+ {ok,_B} = asn1rt:decode(Module, Type, Value),
+ decode(N-1, Module, Type, Value).
compile_options() ->
{ok,Info} = asn1rt:info('H323-MESSAGES'),
diff --git a/lib/asn1/test/testTypeValueNotation.erl b/lib/asn1/test/testTypeValueNotation.erl
index 61d69edd0e..b46d7177f5 100644
--- a/lib/asn1/test/testTypeValueNotation.erl
+++ b/lib/asn1/test/testTypeValueNotation.erl
@@ -24,13 +24,15 @@
-record('Seq', {octstr, int, bool, enum, bitstr, null, oid, vstr}).
main(_Rule, _Option) ->
- Value1 = #'Seq'{octstr = [1, 2, 3, 4],
- int = 12,
- bool = true,
- enum = a,
- bitstr = <<2#1010:4>>,
- null = 'NULL',
- oid = {1, 2, 55},
- vstr = "Hello World"},
- {ok, Bytes} = asn1_wrapper:encode('SeqTypeRefPrim', 'Seq', Value1),
- {ok, Value1} = asn1_wrapper:decode('SeqTypeRefPrim', 'Seq', Bytes).
+ Value = #'Seq'{octstr = [1, 2, 3, 4],
+ int = 12,
+ bool = true,
+ enum = a,
+ bitstr = <<2#1010:4>>,
+ null = 'NULL',
+ oid = {1, 2, 55},
+ vstr = "Hello World"},
+ roundtrip('Seq', Value).
+
+roundtrip(T, V) ->
+ asn1_test_lib:roundtrip('SeqTypeRefPrim', T, V).
diff --git a/lib/asn1/test/testWSParamClass.erl b/lib/asn1/test/testWSParamClass.erl
index ae67ca8b81..66ba56a6d8 100644
--- a/lib/asn1/test/testWSParamClass.erl
+++ b/lib/asn1/test/testWSParamClass.erl
@@ -11,7 +11,4 @@ main(_) ->
ok.
roundtrip(Data) ->
- IF = 'InformationFramework',
- {ok,Enc} = asn1_wrapper:encode(IF, 'Attribute', Data),
- {ok,Data} = IF:decode('Attribute', Enc),
- ok.
+ asn1_test_lib:roundtrip('InformationFramework', 'Attribute', Data).
diff --git a/lib/asn1/test/testX420.erl b/lib/asn1/test/testX420.erl
index 70bdb0640d..4ddc55dc16 100644
--- a/lib/asn1/test/testX420.erl
+++ b/lib/asn1/test/testX420.erl
@@ -27,21 +27,11 @@
compile(Erule, Options, Config) ->
- Specs = specs(),
- 99 = length(Specs),
- ok = compile_loop(Erule,Specs,Options,Config).
-
-compile_loop(_Erule, [], _Options, _Config) ->
- ok;
-compile_loop(Erule, [Spec|Specs], Options, Config)
- when Erule =:= ber; Erule =:= per ->
+ Specs0 = specs(),
+ 99 = length(Specs0),
CaseDir = ?config(case_dir, Config),
- asn1_test_lib:compile(filename:join([x420, Spec]), Config,
- [Erule, {i, CaseDir} | Options]),
- compile_loop(Erule, Specs, Options, Config);
-compile_loop(_Erule, _Specs, _Options, _Config) ->
- ok.
-
+ Specs = [filename:join(x420, Spec) || Spec <- Specs0],
+ asn1_test_lib:compile_all(Specs, Config, [Erule,{i,CaseDir}|Options]).
specs() ->
["ACSE-1", "AuthenticationFramework", "BasicAccessControl",
@@ -93,9 +83,9 @@ specs() ->
ticket7759(_Erule,_Config) ->
Encoded = encoded_msg(),
io:format("Testing ticket7759 ...~n",[]),
- ?line {ok, ContentInfo} = asn1_wrapper:decode('PKCS7','ContentInfo',Encoded),
- ?line {'ContentInfo',_Id,PKCS7_content} = ContentInfo,
- ?line {ok,_} = asn1_wrapper:decode('PKCS7','SignedData',PKCS7_content),
+ {ok, ContentInfo} = 'PKCS7':decode('ContentInfo',Encoded),
+ {'ContentInfo',_Id,PKCS7_content} = ContentInfo,
+ {ok,_} = 'PKCS7':decode('SignedData',PKCS7_content),
ok.
diff --git a/lib/asn1/test/test_driver_load.erl b/lib/asn1/test/test_driver_load.erl
deleted file mode 100644
index e0e6602046..0000000000
--- a/lib/asn1/test/test_driver_load.erl
+++ /dev/null
@@ -1,45 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2012. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-%%
--module(test_driver_load).
-
--export([test/1,encode/0]).
-
--include_lib("test_server/include/test_server.hrl").
-
-
-test(0) ->
- ok;
-test(N) ->
- spawn(?MODULE,encode,[]),
- test(N-1).
-
-encode() ->
- ?line Msg = msg(),
- ?line {ok,_}=asn1_wrapper:encode('P-Record','PersonnelRecord',Msg),
- ok.
-
-msg() ->
- {'PersonnelRecord',{'Name',"John","P","Smith"},
- "Director",
- 51,
- "19710917",
- {'Name',"Mary","T","Smith"},
- [{'ChildInformation',{'Name',"Ralph","T","Smith"},"19571111"},{'ChildInformation',{'Name',"Susan","B","Jones"},"19590717"}]}.
-
diff --git a/lib/asn1/test/test_modified_x420.erl b/lib/asn1/test/test_modified_x420.erl
index a525fd6ae1..0df72a1831 100644
--- a/lib/asn1/test/test_modified_x420.erl
+++ b/lib/asn1/test/test_modified_x420.erl
@@ -26,8 +26,9 @@ test(Config) ->
DataDir = ?config(data_dir,Config),
Der = read_pem(filename:join([DataDir,modified_x420,"p7_signed_data.pem"])),
- {ok,{_,_,SignedData}} = asn1_wrapper:decode('PKCS7', 'ContentInfo', Der),
- {ok,_} = asn1_wrapper:decode('PKCS7', 'SignedData', SignedData).
+ {ok,{_,_,SignedData}} = 'PKCS7':decode( 'ContentInfo', Der),
+ {ok,_} = 'PKCS7':decode('SignedData', SignedData),
+ ok.
read_pem(File) ->
{ok,Bin} = file:read_file(File),
diff --git a/lib/asn1/test/test_partial_incomplete_decode.erl b/lib/asn1/test/test_partial_incomplete_decode.erl
index 8ede06938d..4a8a4cd74c 100644
--- a/lib/asn1/test/test_partial_incomplete_decode.erl
+++ b/lib/asn1/test/test_partial_incomplete_decode.erl
@@ -25,84 +25,57 @@
test(Config) ->
FMsg = msg('F'),
- ?line {ok,Bytes} = asn1_wrapper:encode('PartialDecSeq','F',FMsg),
- ?line {ok,_} = asn1_wrapper:decode('PartialDecSeq','F',Bytes),
- ?line {ok,IncFMsg} =
- 'PartialDecSeq':decode_F_fb_incomplete(list_to_binary(Bytes)),
- ?line decode_parts('F',IncFMsg),
+ Bytes1 = roundtrip('PartialDecSeq', 'F', FMsg),
+ {ok,IncFMsg} = 'PartialDecSeq':decode_F_fb_incomplete(Bytes1),
+ decode_parts('F', IncFMsg),
+ {ok,IncF2Msg} = 'PartialDecSeq':decode_F_fb_exclusive2(Bytes1),
+ decode_parts('F2', IncF2Msg),
DMsg = msg('D'),
- ?line {ok,Bytes2} = asn1_wrapper:encode('PartialDecSeq','D',DMsg),
- ?line {ok,_} = asn1_wrapper:decode('PartialDecSeq','D',Bytes2),
- ?line {ok,IncDMsg} =
- 'PartialDecSeq':decode_D_incomplete(list_to_binary(Bytes2)),
- ?line decode_parts('D',IncDMsg),
-
- ?line {ok,IncF2Msg} =
- 'PartialDecSeq':decode_F_fb_exclusive2(list_to_binary(Bytes)),
- ?line decode_parts('F2',IncF2Msg),
+ Bytes2 = roundtrip('PartialDecSeq', 'D', DMsg),
+ {ok,IncDMsg} = 'PartialDecSeq':decode_D_incomplete(Bytes2),
+ decode_parts('D', IncDMsg),
F3Msg = msg('F3'),
- ?line {ok,BytesF3} = asn1_wrapper:encode('PartialDecSeq','F',F3Msg),
- ?line {ok,_} = asn1_wrapper:decode('PartialDecSeq','F',BytesF3),
- ?line {ok,IncF3Msg} =
- 'PartialDecSeq':decode_F_fb_exclusive3(list_to_binary(BytesF3)),
- ?line decode_parts('F3',IncF3Msg),
-
-
- AMsg =msg('A'),
- ?line {ok,Bytes3} = asn1_wrapper:encode('PartialDecSeq2','A',AMsg),
- ?line {ok,_} = asn1_wrapper:decode('PartialDecSeq2','A',Bytes3),
- ?line {ok,IncFMsg3} =
- 'PartialDecSeq2':decode_A_c_b_incomplete(list_to_binary(Bytes3)),
- ?line decode_parts('A',IncFMsg3),
+ BytesF3 = roundtrip('PartialDecSeq', 'F', F3Msg),
+ {ok,IncF3Msg} = 'PartialDecSeq':decode_F_fb_exclusive3(BytesF3),
+ decode_parts('F3', IncF3Msg),
+
+ AMsg = msg('A'),
+ Bytes3 = roundtrip('PartialDecSeq2', 'A', AMsg),
+ {ok,IncFMsg3} = 'PartialDecSeq2':decode_A_c_b_incomplete(Bytes3),
+ decode_parts('A', IncFMsg3),
MyHTTPMsg = msg('GetRequest'),
- ?line {ok,Bytes4} = asn1_wrapper:encode('PartialDecMyHTTP',
- 'GetRequest',MyHTTPMsg),
- ?line {ok,_} = asn1_wrapper:decode('PartialDecMyHTTP','GetRequest',
- Bytes4),
- ?line {ok,IncFMsg4} =
- 'PartialDecMyHTTP':decode_GetRequest_incomplete(list_to_binary(Bytes4)),
- ?line decode_parts('GetRequest',IncFMsg4),
+ Bytes4 = roundtrip('PartialDecMyHTTP', 'GetRequest', MyHTTPMsg),
+ {ok,IncFMsg4} = 'PartialDecMyHTTP':decode_GetRequest_incomplete(Bytes4),
+ decode_parts('GetRequest', IncFMsg4),
MsgS1_1 = msg('S1_1'),
- ?line {ok,Bytes5} = asn1_wrapper:encode('PartialDecSeq3','S1',MsgS1_1),
- ?line {ok,_} = asn1_wrapper:decode('PartialDecSeq3','S1',Bytes5),
- ?line {ok,IncFMsg5} =
- 'PartialDecSeq3':decode_S1_incomplete(list_to_binary(Bytes5)),
- ?line decode_parts('S1_1',IncFMsg5),
+ Bytes5 = roundtrip('PartialDecSeq3', 'S1', MsgS1_1),
+ {ok,IncFMsg5} = 'PartialDecSeq3':decode_S1_incomplete(Bytes5),
+ decode_parts('S1_1', IncFMsg5),
MsgS1_2 = msg('S1_2'),
- ?line {ok,Bytes6} = asn1_wrapper:encode('PartialDecSeq3','S1',MsgS1_2),
- ?line {ok,IncFMsg6} =
- 'PartialDecSeq3':decode_S1_incomplete(list_to_binary(Bytes6)),
- ?line ok = decode_parts('S1_2',IncFMsg6),
+ Bytes6 = roundtrip('PartialDecSeq3', 'S1', MsgS1_2),
+ {ok,IncFMsg6} = 'PartialDecSeq3':decode_S1_incomplete(Bytes6),
+ decode_parts('S1_2', IncFMsg6),
%% test of MEDIA-GATEWAY-CONTROL
test_megaco(Config),
ok.
test_megaco(Config) ->
- ?line DataDir = ?config(data_dir,Config),
- Mod='MEDIA-GATEWAY-CONTROL',
- ?line {ok,FilenameList} = file:list_dir(filename:join([DataDir,
- megacomessages])),
- %% remove any junk files that may be in the megacomessage directory
- Pred = fun(X) ->
- case lists:reverse(X) of
- [$l,$a,$v,$.|_R] ->true;
- _ -> false
- end
- end,
- MegacoMsgFilenameList = lists:filter(Pred,FilenameList),
- Fun = fun(F) ->
- M = read_msg(filename:join([DataDir,megacomessages,F])),
- ?line {ok,B} = asn1_wrapper:encode(Mod,element(1,M),M),
- ?line exclusive_decode(list_to_binary(B),F)
- end,
- ?line lists:foreach(Fun,MegacoMsgFilenameList),
- ok.
+ DataDir = ?config(data_dir, Config),
+ Files = filelib:wildcard(filename:join([DataDir,megacomessages,"*.val"])),
+ Mod = 'MEDIA-GATEWAY-CONTROL',
+ lists:foreach(fun(File) ->
+ {ok,Bin} = file:read_file(File),
+ V = binary_to_term(Bin),
+ T = element(1, V),
+ Enc = roundtrip(Mod, T, V),
+ exclusive_decode(Enc, File)
+ end, Files).
exclusive_decode(Bin,F) ->
Mod='MEDIA-GATEWAY-CONTROL',
@@ -113,15 +86,6 @@ exclusive_decode(Bin,F) ->
?line {ok,_} = Mod:decode_part(MsgMBodyKey,MsgMBody),
ok.
-
-read_msg(File) ->
- case file:read_file(File) of
- {ok,Bin} ->
- binary_to_term(Bin);
- _ ->
- io:format("couldn't read file ~p~n",[File])
- end.
-
decode_parts('F',PartDecMsg) ->
?line {fb,{'E',35,{NameE_b,ListBinE_b},false,{NameE_d,BinE_d}}} = PartDecMsg,
?line {ok,[{'D',3,true}|_]} = 'PartialDecSeq':decode_part(NameE_b,ListBinE_b),
@@ -200,7 +164,10 @@ msg('A') ->
{'A',12,{c,{'S',true,false}},{b,{'A_c_b',false,false}}};
msg('GetRequest') ->
- {'GetRequest',true,false,{'AcceptTypes',[1,1,1,1],["hell","othe","reho","peyo","uare","fine"]},"IamfineThankYOu"};
+ {'GetRequest',true,false,
+ {'AcceptTypes',[html,'plain-text',gif,jpeg],
+ ["hell","othe","reho","peyo","uare","fine"]},
+ "IamfineThankYOu"};
msg('S1_1') ->
{'S1',14,msg('S2'),msg('C1_a'),msg('SO1')};
@@ -213,10 +180,13 @@ msg('C1_a') ->
msg('C1_b') ->
{b,{'C1_b',11,true,msg('S4')}};
msg('S3') ->
- {'S3',10,"PrintableString","OCTETSTRING",[1,1,1,1]};
+ {'S3',10,"PrintableString","OCTETSTRING",[one,two,three,four]};
msg('S4') ->
{'S4',msg('Name'),"MSc"};
msg('SO1') ->
[msg('Name'),msg('Name'),msg('Name')];
msg('Name') ->
{'Name',"Hans","HCA","Andersen"}.
+
+roundtrip(M, T, V) ->
+ asn1_test_lib:roundtrip_enc(M, T, V).
diff --git a/lib/asn1/test/test_selective_decode.erl b/lib/asn1/test/test_selective_decode.erl
index ebe1296cf3..f42f24e0e3 100644
--- a/lib/asn1/test/test_selective_decode.erl
+++ b/lib/asn1/test/test_selective_decode.erl
@@ -18,39 +18,39 @@
%%
%%
-module(test_selective_decode).
-
-export([test/0]).
-include_lib("test_server/include/test_server.hrl").
-
test() ->
FMsg = msg('F'),
- ?line {ok,Bytes} = asn1_wrapper:encode('PartialDecSeq','F',FMsg),
- ?line {ok,3} =
- 'PartialDecSeq':selected_decode_F1(list_to_binary(Bytes)),
- ?line {ok,[{'D',3,true},{'D',4,false},{'D',5,true},{'D',6,true},{'D',7,false},{'D',8,true},{'D',9,true},{'D',10,false},{'D',11,true},{'D',12,true},{'D',13,false},{'D',14,true}]} = 'PartialDecSeq':selected_decode_F2(list_to_binary(Bytes)),
- ?line {ok,{'D',3,true}} = 'PartialDecSeq':selected_decode_F3(list_to_binary(Bytes)),
-
- ?line {ok,17} = 'PartialDecSeq':selected_decode_F4(list_to_binary(Bytes)),
+ Bytes = roundtrip('PartialDecSeq', 'F', FMsg),
+ {ok,3} = 'PartialDecSeq':selected_decode_F1(Bytes),
+ {ok,[{'D',3,true},{'D',4,false},{'D',5,true},{'D',6,true},
+ {'D',7,false},{'D',8,true},{'D',9,true},{'D',10,false},
+ {'D',11,true},{'D',12,true},{'D',13,false},{'D',14,true}]} =
+ 'PartialDecSeq':selected_decode_F2(Bytes),
+ {ok,{'D',3,true}} = 'PartialDecSeq':selected_decode_F3(Bytes),
+ {ok,17} = 'PartialDecSeq':selected_decode_F4(Bytes),
EMsg = msg('E'),
- ?line {ok,Bytes2} = asn1_wrapper:encode('PartialDecSeq','E',EMsg),
- ?line {ok,14} = 'PartialDecSeq':selected_decode_E1(list_to_binary(Bytes2)),
+ Bytes2 = roundtrip('PartialDecSeq', 'E', EMsg),
+ {ok,14} = 'PartialDecSeq':selected_decode_E1(Bytes2),
+
MGCMsg = msg('M-G-C'),
- ?line {ok,Bytes3} = asn1_wrapper:encode('MEDIA-GATEWAY-CONTROL',
- 'MegacoMessage',MGCMsg),
- ?line {ok,1} = 'MEDIA-GATEWAY-CONTROL':decode_MegacoMessage_selective(list_to_binary(Bytes3)),
+ Bytes3 = roundtrip('MEDIA-GATEWAY-CONTROL', 'MegacoMessage', MGCMsg),
+ {ok,1} = 'MEDIA-GATEWAY-CONTROL':decode_MegacoMessage_selective(Bytes3),
PRecMsg = {'PersonnelRecord',{'Name',"Sven","S","Svensson"},
"manager",123,"20000202",{'Name',"Inga","K","Svensson"},
asn1_DEFAULT},
- ?line {ok,Bytes4} = asn1_wrapper:encode('P-Record','PersonnelRecord',
- PRecMsg),
- ?line {ok,_} = 'P-Record':sel_dec(list_to_binary(Bytes4)),
- ok.
-
+ PRecMsgDec = {'PersonnelRecord',{'Name',"Sven","S","Svensson"},
+ "manager",123,"20000202",{'Name',"Inga","K","Svensson"},
+ []},
+ Bytes4 = roundtrip('P-Record', 'PersonnelRecord', PRecMsg, PRecMsgDec),
+ {ok,_} = 'P-Record':sel_dec(Bytes4),
+ ok.
msg('F') ->
{fb,{'E',35,[{'D',3,true},{'D',4,false},{'D',5,true},{'D',6,true},{'D',7,false},{'D',8,true},{'D',9,true},{'D',10,false},{'D',11,true},{'D',12,true},{'D',13,false},{'D',14,true}],false,{da,[{'A',16,{'D',17,true}}]}}};
@@ -60,3 +60,10 @@ msg('E') ->
msg('M-G-C') ->
{'MegacoMessage',asn1_NOVALUE,{'Message',1,{ip4Address,{'IP4Address',[125,125,125,111],55555}},{transactions,[{transactionReply,{'TransactionReply',50007,asn1_NOVALUE,{actionReplies,[{'ActionReply',0,asn1_NOVALUE,asn1_NOVALUE,[{auditValueReply,{auditResult,{'AuditResult',{'TerminationID',[],[255,255,255]},[{mediaDescriptor,{'MediaDescriptor',asn1_NOVALUE,{multiStream,[{'StreamDescriptor',1,{'StreamParms',{'LocalControlDescriptor',sendRecv,asn1_NOVALUE,asn1_NOVALUE,[{'PropertyParm',[0,11,0,7],[[52,48]],asn1_NOVALUE}]},{'LocalRemoteDescriptor',[[{'PropertyParm',[0,0,176,1],[[48]],asn1_NOVALUE},{'PropertyParm',[0,0,176,8],[[73,78,32,73,80,52,32,49,50,53,46,49,50,53,46,49,50,53,46,49,49,49]],asn1_NOVALUE},{'PropertyParm',[0,0,176,15],[[97,117,100,105,111,32,49,49,49,49,32,82,84,80,47,65,86,80,32,32,52]],asn1_NOVALUE},{'PropertyParm',[0,0,176,12],[[112,116,105,109,101,58,51,48]],asn1_NOVALUE}]]},{'LocalRemoteDescriptor',[[{'PropertyParm',[0,0,176,1],[[48]],asn1_NOVALUE},{'PropertyParm',[0,0,176,8],[[73,78,32,73,80,52,32,49,50,52,46,49,50,52,46,49,50,52,46,50,50,50]],asn1_NOVALUE},{'PropertyParm',[0,0,176,15],[[97,117,100,105,111,32,50,50,50,50,32,82,84,80,47,65,86,80,32,32,52]],asn1_NOVALUE},{'PropertyParm',[0,0,176,12],[[112,116,105,109,101,58,51,48]],asn1_NOVALUE}]]}}}]}}},{packagesDescriptor,[{'PackagesItem',[0,11],1},{'PackagesItem',[0,11],1}]},{statisticsDescriptor,[{'StatisticsParameter',[0,12,0,4],[[49,50,48,48]]},{'StatisticsParameter',[0,11,0,2],[[54,50,51,48,48]]},{'StatisticsParameter',[0,12,0,5],[[55,48,48]]},{'StatisticsParameter',[0,11,0,3],[[52,53,49,48,48]]},{'StatisticsParameter',[0,12,0,6],[[48,46,50]]},{'StatisticsParameter',[0,12,0,7],[[50,48]]},{'StatisticsParameter',[0,12,0,8],[[52,48]]}]}]}}}]}]}}}]}}}.
+
+
+roundtrip(M, T, V) ->
+ asn1_test_lib:roundtrip_enc(M, T, V).
+
+roundtrip(M, T, V, E) ->
+ asn1_test_lib:roundtrip_enc(M, T, V, E).
diff --git a/lib/asn1/test/test_special_decode_performance.erl b/lib/asn1/test/test_special_decode_performance.erl
index 7dfab1f25a..0f52ae4cd2 100644
--- a/lib/asn1/test/test_special_decode_performance.erl
+++ b/lib/asn1/test/test_special_decode_performance.erl
@@ -19,7 +19,7 @@
%%
-module(test_special_decode_performance).
--export([go/1,loop2/4,loop1/5]).
+-export([go/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -49,7 +49,7 @@ go1(_,_,[],_,_,AccTime) ->
%% go1 for common decode
go1(common,Mod,_,Bin,N,_) ->
?line TT=get_top_type(Mod),
- ?line {Time,Result}=timer:tc(?MODULE,loop1,[Mod,decode,TT,Bin,N]),
+ {Time,Result} = timer:tc(fun() -> loop1(Mod, decode, TT, Bin, N) end),
case Result of
{ok,_R1} ->
io:format("common Decode ~p:decode, ~p times on time ~p~n",
@@ -59,7 +59,7 @@ go1(common,Mod,_,Bin,N,_) ->
end,
Time;
go1(Dec,Mod,[F|Fs],Bin,N,AccTime) ->
- ?line {Time,Result}=timer:tc(?MODULE,loop2,[Mod,F,Bin,N]),
+ {Time,Result}=timer:tc(fun() -> loop2(Mod, F, Bin, N) end),
case Result of
{ok,_R1} ->
io:format("~p Decode ~p:~p, ~p times on time ~p~n",[Dec,Mod,F,N,Time]);
diff --git a/lib/asn1/test/test_undecoded_rest.erl b/lib/asn1/test/test_undecoded_rest.erl
index 36fd26ed59..91e614d38a 100644
--- a/lib/asn1/test/test_undecoded_rest.erl
+++ b/lib/asn1/test/test_undecoded_rest.erl
@@ -26,28 +26,42 @@
%% testing OTP-5104
-test(Opt, Config) ->
- {ok, Msg} = asn1ct:value('P-Record', 'PersonnelRecord',
- [{i, ?config(case_dir, Config)}]),
- {ok, Bytes} = asn1_wrapper:encode('P-Record', 'PersonnelRecord', Msg),
- Bytes2 = if is_list(Bytes) ->
- Bytes ++ [55, 55, 55];
- is_binary(Bytes) ->
- iolist_to_binary([Bytes, <<55, 55, 55>>])
- end,
- case Opt of
- undec_rest ->
- {ok, Msg, R} = asn1_wrapper:decode('P-Record', 'PersonnelRecord',
- Bytes2),
+test(Opts, Config) ->
+ {ok,Msg} = asn1ct:value('P-Record', 'PersonnelRecord',
+ [{i,?config(case_dir, Config)}]),
+ Bytes0 = encode(Opts, 'PersonnelRecord', Msg),
+ Bytes1 = iolist_to_binary([Bytes0, <<55,55,55>>]),
+ case proplists:get_bool(undec_rest, Opts) of
+ true ->
+ {Msg,R} = decode(Opts, 'PersonnelRecord', Bytes1),
case R of
- <<55, 55, 55>> -> ok;
- [55, 55, 55] -> ok;
+ <<55,55,55>> ->
+ ok;
BStr when is_bitstring(BStr) ->
PadLen = (8 - (bit_size(BStr) rem 8)) rem 8,
- <<0, 55, 55, 55>> = <<0:PadLen, BStr/bitstring>>
+ <<0,55,55,55>> = <<0:PadLen, BStr/bitstring>>
end;
- _ ->
- {ok, Msg} = asn1_wrapper:decode('P-Record', 'PersonnelRecord',
- Bytes2)
+ false ->
+ Msg = decode(Opts, 'PersonnelRecord', Bytes1)
end,
ok.
+
+encode(Opts, T, V) ->
+ M = 'P-Record',
+ case proplists:get_bool(no_ok_wrapper, Opts) of
+ false ->
+ {ok,Enc} = M:encode(T, V),
+ Enc;
+ true ->
+ Enc = M:encode(T, V),
+ true = is_binary(Enc),
+ Enc
+ end.
+
+decode(Opts, T, E) ->
+ M = 'P-Record',
+ case {proplists:get_bool(no_ok_wrapper, Opts),M:decode(T, E)} of
+ {false,{ok,Val}} -> Val;
+ {false,{ok,Val,Rest}} -> {Val,Rest};
+ {true,Result} -> Result
+ end.
diff --git a/lib/asn1/test/test_x691.erl b/lib/asn1/test/test_x691.erl
index dcfa211d80..9b141e2389 100644
--- a/lib/asn1/test/test_x691.erl
+++ b/lib/asn1/test/test_x691.erl
@@ -18,50 +18,25 @@
%%
%%
-module(test_x691).
-
--export([cases/2]).
+-export([cases/1]).
-include_lib("test_server/include/test_server.hrl").
-cases(Erule,Variant) ->
- MsgA1 = a1(),
- ?line {ok,B1} = asn1_wrapper:encode('P-RecordA1','PersonnelRecord',MsgA1),
- ?line {ok,MsgA1} = asn1_wrapper:decode('P-RecordA1','PersonnelRecord',B1),
- io:format("compare_format(~p,B1) ->~p~nencval(a1,~p,binary) ->~p~n",
- [Erule,
- compare_format(Erule,B1),
- Variant,
- encval(a1,Variant,binary)]),
- ?line true = (compare_format(Erule,B1) == encval(a1,Variant,binary)),
-
- MsgA2 = a2(),
- ?line {ok,B2} = asn1_wrapper:encode('P-RecordA2','PersonnelRecord',MsgA2),
- ?line {ok,MsgA2} = asn1_wrapper:decode('P-RecordA2','PersonnelRecord',B2),
- io:format("compare_format(~p,B2) ->~p~nencval(a2,~p,binary) ->~p~n",
- [Erule,
- compare_format(Erule,B2),
- Variant,
- encval(a2,Variant,binary)]),
- ?line true = (compare_format(Erule,B2) == encval(a2,Variant,binary)),
-
- MsgA3 = a3(),
- ?line {ok,B3} = asn1_wrapper:encode('P-RecordA3','PersonnelRecord',MsgA3),
- ?line {ok,MsgA3} = asn1_wrapper:decode('P-RecordA3','PersonnelRecord',B3),
- io:format("compare_format(~p,B3) ->~p~nencval(a3,~p,binary) ->~p~n",
- [Erule,
- compare_format(Erule,B3),
- Variant,
- encval(a3,Variant,binary)]),
- ?line true = (compare_format(Erule,B3) == encval(a3,Variant,binary)).
-
-compare_format(Erule,Val) when is_list(Val) ->
- compare_format(Erule,list_to_binary(Val));
-%% compare_format(per,Val) ->
-%% binary_to_list(Val);
-compare_format(_,Val) ->
- Val.
-
-a1() ->
+cases(Erule) ->
+ _ = [begin
+ Mod = module(Name),
+ Msg = msg(Name),
+ Hex = encval(Name, Erule),
+ Enc = asn1_test_lib:hex_to_bin(Hex),
+ Enc = asn1_test_lib:roundtrip_enc(Mod, 'PersonnelRecord', Msg)
+ end || Name <- [a1,a2,a3]],
+ ok.
+
+module(a1) -> 'P-RecordA1';
+module(a2) -> 'P-RecordA2';
+module(a3) -> 'P-RecordA3'.
+
+msg(a1) ->
{'PersonnelRecord',
{'Name',"John", "P", "Smith"},
"Director",
@@ -73,12 +48,10 @@ a1() ->
"19571111"},
{'ChildInformation',
{'Name', "Susan", "B", "Jones"},
- "19590717"}]}.
-
-a2() ->
- a1().
-
-a3() ->
+ "19590717"}]};
+msg(a2) ->
+ msg(a1);
+msg(a3) ->
{'PersonnelRecord',
{'Name',"John", "P", "Smith"},
"Director",
@@ -94,119 +67,15 @@ a3() ->
"19590717",
female}]}.
-encval(An,Variant,Encoding) when Encoding == hex; Encoding == binary ->
- Msg = encval(An,Variant),
- encoding(Encoding,Msg).
-
-encval(a1,aligned) ->
+encval(a1, per) ->
"80044A6F 686E0150 05536D69 74680133 08446972 6563746F 72083139 37313039 3137044D 61727901 5405536D 69746802 0552616C 70680154 05536D69 74680831 39353731 31313105 53757361 6E014205 4A6F6E65 73083139 35393037 3137";
-encval(a1,unaligned) ->
+encval(a1, uper) ->
"824ADFA3 700D005A 7B74F4D0 02661113 4F2CB8FA 6FE410C5 CB762C1C B16E0937 0F2F2035 0169EDD3 D340102D 2C3B3868 01A80B4F 6E9E9A02 18B96ADD 8B162C41 69F5E787 700C2059 5BF765E6 10C5CB57 2C1BB16E";
-encval(a2,aligned) ->
+encval(a2, per) ->
"864A6F68 6E501053 6D697468 01330844 69726563 746F7219 7109170C 4D617279 5410536D 69746802 1052616C 70685410 536D6974 68195711 11105375 73616E42 104A6F6E 65731959 0717";
-encval(a2,unaligned) ->
+encval(a2, uper) ->
"865D51D2 888A5125 F1809984 44D3CB2E 3E9BF90C B8848B86 7396E8A8 8A5125F1 81089B93 D71AA229 4497C632 AE222222 985CE521 885D54C1 70CAC838 B8";
-encval(a3,aligned) ->
+encval(a3, per) ->
"40C04A6F 686E5008 536D6974 68000033 08446972 6563746F 72001971 0917034D 61727954 08536D69 74680100 52616C70 68540853 6D697468 00195711 11820053 7573616E 42084A6F 6E657300 19590717 010140";
-encval(a3,unaligned) ->
+encval(a3, uper) ->
"40CBAA3A 5108A512 5F180330 889A7965 C7D37F20 CB8848B8 19CE5BA2 A114A24B E3011372 7AE35422 94497C61 95711118 22985CE5 21842EAA 60B832B2 0E2E0202 80".
-
-encoding(binary,Msg) ->
- list_to_binary(bin(Msg));
-encoding(hex,Msg) ->
- hex(Msg).
-
-bin(Msg) ->
- HexList = hex(Msg),
- Fun = fun([H1,H2|Rest],F) -> [(H1 bsl 4) + H2|F(Rest,F)];([],_) -> [] end,
- Fun(HexList,Fun).
-
-hex(Msg) ->
- [to_hex(X)||X <- Msg,X /= $ ].
-
-to_hex(I) when I >= $0, I =< $9 ->
- I-48;
-to_hex(C) when C >= $A,C =< $F ->
- C - 55.
-
-%% ex('EUTRA','BCCH-DL-SCH-Message',1) ->
-%% {'BCCH-DL-SCH-Message',
-%% {c1,
-%% {systemInformation1,
-%% {'SystemInformationBlockType1',
-%% {'SystemInformationBlockType1_cellAccessRelatedInformation',
-%% [{'SystemInformationBlockType1_cellAccessRelatedInformation_SOF',
-%% {'PLMN-Identity'},
-%% true},
-%% {'SystemInformationBlockType1_cellAccessRelatedInformation_SOF',
-%% {'PLMN-Identity'},
-%% false},
-%% {'SystemInformationBlockType1_cellAccessRelatedInformation_SOF',
-%% {'PLMN-Identity'},
-%% true}],
-%% {'TrackingAreaCode'},
-%% {'CellIdentity'},
-%% false,
-%% true,
-%% true,
-%% true},
-%% {'SystemInformationBlockType1_cellSelectionInfo',
-%% -50},
-%% 24,
-%% [{'SystemInformationBlockType1_schedulinInformation_SOF',
-%% {'SystemInformationBlockType1_schedulinInformation_SOF_si-MessageType'},
-%% ms320,
-%% {'SystemInformationBlockType1_schedulinInformation_SOF_sib-MappingInfo'}
-%% }],
-%% 0
-%% }
-%% }
-%% }
-%% }.
-
-%% eutra1(msg) ->
-%% {'BCCH-BCH-Message',{'MasterInformationBlock',[0,1,0,1],[1,0,1,0],{'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}};
-%% eutra1(result) ->
-%% <<90,80,0>>.
-
-%% eutra2(msg) ->
-%% {'BCCH-DL-SCH-Message',
-%% {c1,
-%% {systemInformation1,
-%% {'SystemInformationBlockType1',
-%% {'SystemInformationBlockType1_cellAccessRelatedInformation',
-%% [{'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true},
-%% {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},false},
-%% {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true}],
-%% {'TrackingAreaCode'},
-%% {'CellIdentity'},
-%% false,
-%% true,
-%% true,
-%% true
-%% },
-%% {'SystemInformationBlockType1_cellSelectionInfo',-50},
-%% 24,
-%% [{'SystemInformationBlockType1_schedulinInformation_SEQOF',
-%% {'SystemInformationBlockType1_schedulinInformation_SEQOF_si-MessageType'},
-%% ms320,
-%% {'SystemInformationBlockType1_schedulinInformation_SEQOF_sib-MappingInfo'}}],
-%% 0
-%% }
-%% }
-%% }
-%% };
-%% eutra2(result) ->
-%% %% 55 5C A5 E0
-%% <<85,92,165,224>>.
-
-
-
-%% compare([H|T1],[H|T2],Acc) ->
-%% compare(T1,T2,[H|Acc]);
-%% compare([],[],_Acc) ->
-%% ok;
-%% compare(L1,L2,Acc) ->
-%% {miss_match,L1,L2,lists:reverse(Acc)}.
-
-
diff --git a/lib/asn1/vsn.mk b/lib/asn1/vsn.mk
index 0861fc2681..153c64ebdd 100644
--- a/lib/asn1/vsn.mk
+++ b/lib/asn1/vsn.mk
@@ -1,2 +1,2 @@
#next version number to use is 2.0
-ASN1_VSN = 2.0.3
+ASN1_VSN = 2.0.4