/******************************************************************************
 * Copyright (c) 2000-2025 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_SE\'\:$//
// This module
// 1. provides a module with "[private] import from A_SE all;" to test import statement located in next modules and this module
// 2. provides a module which is NOT a friend of A

module C_SE {

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

import from B_SE all;  
import from B_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 but
// "import from A_SE all;" of B is not visible, therefore objects defined in A are not imported
testcase tc_A() runs on MTC { //^In testcase definition `tc_A'://
  var integer i:=c_A_i;  //^In variable definition `i':// //^error: There is no local or imported definition with name `c_A_i'//
  i:=valueof(t_A_i);     //^In variable assignment:// //In the operand of operation `valueof\(\)'// //^error: There is no local or imported definition with name `t_A_i'//
  i:=valueof(t_A_i_pu);  //^In variable assignment:// //In the operand of operation `valueof\(\)'// //^error: There is no local or imported definition with name `t_A_i_pu'//
  var A_MyInt myInt;     //^In variable definition `myInt'// //^error: There is no local or imported definition with name `A_MyInt'//
  var A_MyInt_pu myInt_pu; //^In variable definition `myInt_pu'// //^error: There is no local or imported definition with name `A_MyInt_pu'//
  f_A(); //^In function or altstep instance:// //^error: There is no local or imported definition with name `f_A'//
  f_A_pu();//^In function or altstep instance:// //^error: There is no local or imported definition with name `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 members of B 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; //^In variable assignment\:$// //^error: There is no local or imported definition with name `c_B_i_fr'//
  i:=valueof(t_B_i_fr); //^In variable assignment:// //In the operand of operation `valueof\(\)'// //^error: There is no local or imported definition with name `t_B_i_fr'//
  var B_MyInt_fr myInt_fr;//^In variable definition \`myInt_fr\'\:$// //^error: There is no local or imported definition with name `B_MyInt_fr'//
  f_B_fr();//^In function or altstep instance:// //^error: There is no local or imported definition with name `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);  
}


}
