/******************************************************************************
 * Copyright (c) 2000-2021 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
 *
 * Contributors:
 *   Balasko, Jeno
 *
 ******************************************************************************/
//^In TTCN\-3 module \`C_FR_SE\'\:$//
// This module
// 1. provides a module with "public import from B_APU_SE all; public import from B_APU_SE {import from all};" to test import statement located in prev. next modules and this module
// 2. provides a module which a friend of A_SE
// 3. provides a module which is a friend of B_CEFR_SE
module C_FR_SE {

public modulepar charstring tsp_C_ch := "This is a modulepar in C"

public import from B_CEFR_SE all; 
public import from B_CEFR_SE {import all};

type component MTC {};


//==CONST===
const integer c_C_i := 0;
public const integer c_C_i_pu := 0;
friend const integer c_C_i_fr := 0;
private const integer c_C_i_pr := 0;

//==TEMPLATES===
template integer t_C_i := 0;
public template integer t_C_i_pu := 0;
friend template integer t_C_i_fr := 0;
private template integer t_C_i_pr := 0;

//===TYPES===
type integer C_MyInt;
public type integer C_MyInt_pu;
private type integer C_MyInt_pr;
friend type integer C_MyInt_fr;

//==functions
/* public */ function f_C() { log("This is f_C") } 
public function f_C_pu() { log("This is f_C_pu") } 
friend function f_C_fr() { log("This is f_C_fr") } 
private function f_C_pr() { log("This is f_C_pr") }

//=============Testcases=========================================

// Public members of A are visible and
// "public import from A_SE all;" of B_APU is visible via "public import from B_APU_SE {import from all};" , 
// therefore public objects defined in A are imported
testcase tc_A() runs on MTC { //^In testcase definition `tc_A'://
  var integer i:=c_A_i;
  i:=c_A_i_pu;
  i:=valueof(t_A_i);
  i:=valueof(t_A_i_pu); 
  var A_MyInt myInt; 
  var A_MyInt_pu myInt_pu; 
  f_A(); 
  f_A_pu();

  i:=c_A_i_fr; //^In variable assignment:// //^error: There is no local or imported definition with name `c_A_i_fr'// 
  i:=valueof(t_A_i_fr); //^In variable assignment:// //In the operand of operation `valueof\(\)'// //^error: There is no local or imported definition with name `t_A_i_fr'//  
  var A_MyInt_fr myInt_fr; //^In variable definition `myInt_fr'// //^error: There is no local or imported definition with name `A_MyInt_fr'//
  f_A_fr();//^In function or altstep instance:// //^error: There is no local or imported definition with name `f_A_fr'//
  
  i:=c_A_i_pr;//^In variable assignment:// //^error: There is no local or imported definition with name `c_A_i_pr'//
  i:=valueof(t_A_i_pr);//^In variable assignment:// //In the operand of operation `valueof\(\)'// //^error: There is no local or imported definition with name `t_A_i_pr'//
  var A_MyInt_pr a_myInt_pr;//^In variable definition `a_myInt_pr'// //^error: There is no local or imported definition with name `A_MyInt_pr'//
  f_A_pr();//^In function or altstep instance:// //^error: There is no local or imported definition with name `f_A_pr'//
  setverdict(pass);  
}

//Only public and friend members of B_APU are visible and imported:

testcase tc_B() runs on MTC { //^In testcase definition `tc_B'://
  var integer i:=c_B_i; 
  i:=c_B_i_pu;
  i:=valueof(t_B_i_pu); 
  i:=valueof(t_B_i); 
  var B_MyInt myInt; 
  var B_MyInt_pu myInt_pu; 
  f_B(); 
  f_B_pu();

  i:=c_B_i_fr; 
  i:=valueof(t_B_i_fr); 
  var B_MyInt_fr myInt_fr; 
  f_B_fr();

  i:=c_B_i_pr;//^In variable assignment\:$// //^error: There is no local or imported definition with name `c_B_i_pr'//
  i:=valueof(t_B_i_pr);//^In variable assignment:// //In the operand of operation `valueof\(\)'// //^error: There is no local or imported definition with name `t_B_i_pr'//
  var B_MyInt_pr b_myInt_pr; //^In variable definition `b_myInt_pr'////^error: There is no local or imported definition with name `B_MyInt_pr'//
  f_B_pr(); //^In function or altstep instance:// //^error: There is no local or imported definition with name `f_B_pr'//
  setverdict(pass);  
}


}
