/******************************************************************************
* Copyright (c) 2000-2019 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
//
//  File:               TCCEncoding_Example.ttcn
//  Description:        TCC Useful Functions: Message Encoding Functions.
//  Rev:                R36B
//  Prodnr:             CNL 113 472
//  Updated:            2013-02-05
//  Contact:            http://ttcn.ericsson.se
//////////////////////////////////////////////////////////////////////////////

module TCCEncoding_Example {

import from TCCEncoding_Functions all;

type component test_CT {
  var charstring base64;
  var octetstring msg, dec;
}

testcase TC() runs on test_CT {
  msg := char2oct("Test message.");
  log("Message is: ", msg);
  base64 := enc_MIME_Base64(msg);
  log("MIME Base64 encoded message is: ", base64);
  dec := dec_MIME_Base64(base64);
  log("Decoded message is: ", dec);
  if(dec != msg) {
    setverdict(fail);
  } else {
    setverdict(pass);
  }
}

testcase TC2() runs on test_CT {

  var ISUP_Called_Party_Number v_ISUP_Called_Party_Number := 
  {  
    natureOfAddressIndicator := networkRoutingNumberNationalNrFormat,
    numberingPlanIndicator := ISDN_E_164,
    iNN := numberComplete,
    addressSignalDigits := '123456789'H 
  }

  var octetstring v_oct := f_encode_ISUP_Called_Party_Number(v_ISUP_Called_Party_Number)
  log(v_oct);
  if (v_oct == '86102143658709'O) {setverdict(pass)} 
  else {setverdict(fail)}

  v_ISUP_Called_Party_Number.numberingPlanIndicator := national; 
  v_oct := f_encode_ISUP_Called_Party_Number(v_ISUP_Called_Party_Number);
  log(v_oct);
  if (v_oct == ''O) {setverdict(pass)} 
  else {setverdict(fail)}

  v_ISUP_Called_Party_Number.natureOfAddressIndicator := internationalNumber;
  v_ISUP_Called_Party_Number.numberingPlanIndicator := telex;
  v_ISUP_Called_Party_Number.iNN := numberIncomplete;
  v_ISUP_Called_Party_Number.addressSignalDigits :='1234567895'H

  v_oct := f_encode_ISUP_Called_Party_Number(v_ISUP_Called_Party_Number)
  log(v_oct);
  if (v_oct == '04C02143658759'O) {setverdict(pass)} 
  else {setverdict(fail)} 

}

testcase TC3() runs on test_CT {

  var ISUP_Calling_Party_Number v_ISUP_Calling_Party_Number := 
  {  
    natureOfAddressIndicator := internationalNumber,
    screening_indicator := network_provided,
    address_presentation_restricted_indicator := presentation_restricted,
    numberingPlanIndicator := ISDN_E_164,
    iNN := numberComplete,
    addressSignalDigits := '123456789'H 
  }

  var octetstring v_oct := f_encode_ISUP_Calling_Party_Number(v_ISUP_Calling_Party_Number)
  log(v_oct);
  if (v_oct == '84172143658709'O) {setverdict(pass)} 
  else {setverdict(fail)}

  v_ISUP_Calling_Party_Number.addressSignalDigits :='1234567895'H
  v_oct := f_encode_ISUP_Calling_Party_Number(v_ISUP_Calling_Party_Number) 
  log(v_oct);
  if (v_oct == '04172143658759'O) {setverdict(pass)} 
  else {setverdict(fail)} 
}

testcase TC4() runs on test_CT {

  var MobileL3_CalledPartyBCDNumber v_MobileL3_CalledPartyBCDNumber:=
  {
    numberingPlanIdentification := data,
    typeOfNumber := dedicatedAccess,
    numberDigits := '123456789'H
  }

  var octetstring v_oct :=f_encode_MobileL3_CalledPartyBCDNumber(v_MobileL3_CalledPartyBCDNumber);
  log(v_oct);
  if (v_oct == 'C321436587F9'O) {setverdict(pass)} 
  else {setverdict(fail)}


  v_MobileL3_CalledPartyBCDNumber.numberDigits := '1234567895'H
  v_oct :=f_encode_MobileL3_CalledPartyBCDNumber(v_MobileL3_CalledPartyBCDNumber);
  log(v_oct);
  if (v_oct == 'C32143658759'O) {setverdict(pass)} 
  else {setverdict(fail)}

}

testcase tc_005_artf265694() runs on test_CT {

  var hexstring vl_number_odd  := '123456789AB'H;
  var hexstring vl_number_even := '123456789ABC'H;

  var octetstring vl_oct := f_enc_TBCD_hex(vl_number_odd);
  if (vl_oct == '21436587A9FB'O) {setverdict(pass);} 
  else {
    log("reference: ", '21436587A9FB'O);
    log("encoded: ", vl_oct);
    setverdict(fail);
  }

  vl_oct := f_enc_TBCD_hex(vl_number_even);
  if (vl_oct == '21436587A9CB'O) {setverdict(pass);} 
  else {
    log("reference: ", '21436587A9CB'O);
    log("encoded: ", vl_oct);
    setverdict(fail);
  }

}


control {
  execute(TC());
  execute(TC2());
  execute(TC3());  
  execute(TC4());   
  execute(tc_005_artf265694());   
}

} with {extension "version R36B"}