%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% %CopyrightEnd%
%%
%%
-module(testDeepTConstr).
-export([main/1]).
-include_lib("common_test/include/ct.hrl").
main(_Erule) ->
Val1 = {substrings,
{'FilterItem_substrings',
{2,6},
[{initial,"SE"},
{any,"DK"},
{final,"N"}]}},
Val2 = {substrings,
{'FilterItem_substrings',
{2,6},
[{initial,"SE"},
{any,"DK"},
{final,"NO"}]}},
Reason = must_fail('TConstrChoice', 'FilterItem', Val1),
io:format("Reason: ~p~n~n",[Reason]),
{ok,Bytes2} = 'TConstrChoice':encode('FilterItem', Val2),
{ok,Res} = 'TConstrChoice':decode('FilterItem', Bytes2),
%% test of OTP-4248.
{ok,Bytes3} = 'TConstrChoice':encode('Seq', {'Seq',3,Bytes2}),
{ok,{'Seq',3,Bytes4}} = 'TConstrChoice':decode('Seq', Bytes3),
{ok,Res} = 'TConstrChoice':decode('FilterItem', Bytes4),
%% test of TConstr
Seq1Val = {'Seq1',{'Seq1_a',12,{2,4}},
{'Seq1_b',13,{'Type-object1',14,true}}},
roundtrip('TConstr', 'Seq1', Seq1Val),
Seq2Val = {'Seq2',123,{'Seq2_content',{2,6,7},
{first,{'Type-object3_first',false,47}},
false}},
roundtrip('TConstr', 'Seq2', Seq2Val),
roundtrip('TConstr', 'Info', {'Info',{'Info_xyz',{1,2}},1234}),
roundtrip('TConstr', 'Deeper',
{'Deeper',
{'Deeper_a',12,
{'Deeper_a_s',{2,4},42}},
{'Deeper_b',13,{'Type-object1',14,true}}}),
roundtrip('TConstr', 'Seq3',
{'Seq3',
{'Seq3_a',42,'TConstr':'id-object1'()},
{'Seq3_b',
{'Type-object1',-777,true},
12345,
{'Seq3_b_bc',12345789,{'Type-object1',-999,true}}}}),
roundtrip('TConstr', 'Seq3-Opt',
{'Seq3-Opt',
{'Seq3-Opt_a',42,'TConstr':'id-object1'()},
{'Seq3-Opt_b',
{'Type-object1',-777,true},
12345,
{'Seq3-Opt_b_bc',12345789,{'Type-object1',-999,true}}}}),
ok.
roundtrip(M, T, V) ->
asn1_test_lib:roundtrip(M, T, V).
%% Either encoding or decoding must fail.
must_fail(M, T, V) ->
case M:encode(T, V) of
{ok,E} ->
{error,Reason} = M:decode(T, E),
Reason;
{error,Reason} ->
Reason
end.