/****************************************************************************** * Copyright (c) 2000-2014 Ericsson Telecom AB * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html ******************************************************************************/ module Txerint { modulepar boolean verbose := false; #include "../macros.ttcnin" import from AsnValues all; type component TINT {} external function flatten(inout universal charstring par) ; DECLARE_XER_ENCODERS(integer, int); DECLARE_EXER_ENCODERS(integer,int) DECLARE_XER_ENCODERS(r_int, r_int); DECLARE_EXER_ENCODERS(r_int,r_int) DECLARE_XER_ENCODERS(u_int, u_int); DECLARE_EXER_ENCODERS(u_int,u_int) type record r_int { integer i optional } type union u_int { integer i } testcase encode_int() runs on TINT { var integer plain := 42; var universal charstring expected := "42"; CHECK_METHOD(cxer_enc_int, plain, expected); CHECK_METHOD(bxer_enc_int, plain, expected & lf); CHECK_METHOD(exer_enc_int, plain, expected & lf); plain := -13; expected := "-13"; CHECK_METHOD(cxer_enc_int, plain, expected); CHECK_METHOD(bxer_enc_int, plain, expected & lf); CHECK_METHOD(exer_enc_int, plain, expected & lf); plain := 0; expected := "0"; CHECK_METHOD(cxer_enc_int, plain, expected); CHECK_METHOD(bxer_enc_int, plain, expected & lf); CHECK_METHOD(exer_enc_int, plain, expected & lf); plain := -0; expected := "0"; CHECK_METHOD(cxer_enc_int, plain, expected); CHECK_METHOD(bxer_enc_int, plain, expected & lf); CHECK_METHOD(exer_enc_int, plain, expected & lf); plain := 602214179000000000000000; expected := "602214179000000000000000"; CHECK_METHOD(cxer_enc_int, plain, expected); CHECK_METHOD(bxer_enc_int, plain, expected & lf); CHECK_METHOD(exer_enc_int, plain, expected & lf); } testcase decode_int() runs on TINT { var integer expected := 42; const charstring the_answer := "42"; CHECK_DECODE(cxer_dec_int, the_answer, integer, expected); CHECK_DECODE(bxer_dec_int, the_answer, integer, expected); // this is not a valid encoding of an integer: //const charstring deep_answer := "42" //CHECK_DECODE(cxer_dec_int, deep_answer, integer, expected); //CHECK_DECODE(bxer_dec_int, deep_answer, integer, expected); const charstring eris := "-13"; expected := -13; CHECK_DECODE(cxer_dec_int, eris, integer, expected); CHECK_DECODE(bxer_dec_int, eris, integer, expected); const charstring nought := "0"; expected := 0; CHECK_DECODE(cxer_dec_int, nought, integer, expected); CHECK_DECODE(bxer_dec_int, nought, integer, expected); const charstring minought := "0"; expected := -0; CHECK_DECODE(cxer_dec_int, minought, integer, expected); CHECK_DECODE(bxer_dec_int, minought, integer, expected); const charstring avogadros := "602214179000000000000000"; expected := 602214179000000000000000; CHECK_DECODE(cxer_dec_int, avogadros, integer, expected); CHECK_DECODE(bxer_dec_int, avogadros, integer, expected); // The following should cause a runtime error (and not a segfault!) // when the XmlReader creation fails. But we can't test that here. // CHECK_DECODE(bxer_dec_int, "", integer, 0); } testcase encode_integer_omit() runs on TINT { var r_int rec := { omit } var universal charstring expected := "\n"; CHECK_METHOD(cxer_enc_r_int, rec, expected); CHECK_METHOD(bxer_enc_r_int, rec, expected & lf); CHECK_METHOD(exer_enc_r_int, rec, expected & lf); rec.i := 33; expected := "\n\t33\n\n\n"; CHECK_METHOD(bxer_enc_r_int, rec, expected); CHECK_METHOD(exer_enc_r_int, rec, expected); flatten(expected); CHECK_METHOD(cxer_enc_r_int, rec, expected & lf); } testcase decode_integer_omit() runs on TINT { var r_int expected := { omit } const charstring omitted := "\n"; CHECK_DECODE(cxer_dec_r_int, omitted, r_int, expected); CHECK_DECODE(bxer_dec_r_int, omitted, r_int, expected); const charstring supplied := "37\n"; expected.i := 37; CHECK_DECODE(cxer_dec_r_int, supplied, r_int, expected); CHECK_DECODE(bxer_dec_r_int, supplied, r_int, expected); } testcase encode_integer_choice() runs on TINT { var u_int rec := { i := 17 } var universal charstring expected := "\n\t17\n\n\n"; CHECK_METHOD(bxer_enc_u_int, rec, expected); CHECK_METHOD(exer_enc_u_int, rec, expected); flatten(expected); CHECK_METHOD(cxer_enc_u_int, rec, expected & lf); } testcase decode_integer_choice() runs on TINT { var u_int expected := { i := 19 } const charstring omitted := "\n\t19\n\n"; CHECK_DECODE(cxer_dec_u_int, omitted, u_int, expected); CHECK_DECODE(bxer_dec_u_int, omitted, u_int, expected); } control { execute(encode_int()); execute(decode_int()); execute(encode_integer_omit()) execute(decode_integer_omit()) execute(encode_integer_choice()); execute(decode_integer_choice()); } } with { encode "XML"; extension "version R8J"; // I is forbidden }