///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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                                 //
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
//  Module: paramDemoAppLib_Definitions
// 
//  Purpose:
//    This module demonstrates the usage of the LGenBase feature
// 
//  Module Parameters:
//    -
// 
//  Module depends on:
// 
//  Current Owner:
//    ELSZSKU
// 
//  Last Review Date:
//    2008-02-18
// 
// 
///////////////////////////////////////////////////////////
module paramDemoAppLib_Definitions{

import from EPTF_CLL_LGenBase_Definitions all;
import from EPTF_CLL_LGenBase_Functions all;

type component LGenBaseTest_CT extends EPTF_LGenBase_CT{
  var integer v_registerCounterSucc := 0;
  var integer v_registerCounterFail := 0;
  var integer v_reRegisterCounterStopped := 0;
  var boolean vl_checkTraffic := false; 
  var boolean vl_trafficStarted := false;
  var boolean v_finished := false;
  var integer v_dummyInt 
}   

}