///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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: EPTF_LoggingDSGUI_TestCases
// 
//  Purpose:
//    This module provides test for GUI handling of the Logging client/server
//    functionality
// 
//  Module Parameters:
//    -
// 
//  Module depends on:
//    <>
// 
//  Current Owner:
//    ELSZSKU
// 
//  Last Review Date:
//    2008-
// 
//  Detailed Comments:
// 
///////////////////////////////////////////////////////////
module EPTF_LoggingDSGUI_TestCases
{
import from EPTF_CLL_Base_Functions all;
import from EPTF_CLL_UIHandler_Definitions all;
import from EPTF_CLL_UIHandler_WidgetFunctions all;
import from EPTF_LoggingDS_TestCases all;
import from EPTF_CLL_Logging_Functions all;

modulepar charstring tsp_gui := "gui.xml"
modulepar boolean tsp_useGUI := false;

type component LoggingDSGUI_Test_CT extends LoggingDS_Test_CT, EPTF_UIHandler_CT{}
private function f_LoggingDSGUI_initConfig()
runs on LoggingDSGUI_Test_CT{
  f_EPTF_UIHandler_init_CT(c_clientName1, tsp_useGUI);
  f_LoggingDS_initConfig(true);
  f_LoggingDS_registerNewSelection();
  //timer t1
  //t1.start
}

private function f_LoggingDS_registerNewSelection()
runs on LoggingDS_Test_CT{
  var integer vl_selection := f_EPTF_Logging_registerSelection("Traffic");
  //Register CLLBoth class
  v_LoggingDS_logTypeIdCLLBoth := f_EPTF_Logging_registerComponentMasks("AppLib_A", {"Traffic errors: "}, vl_selection);
  f_EPTF_Logging_enableLocalMask(v_LoggingDS_logTypeIdCLLBoth, 0);
}

///////////////////////////////////////////////////////////
//  Testcase: tc_LoggingDS_GUI
// 
//  Purpose:
//    Build up a configuration described in <tc_LoggingDS_elements>.
//    Then it tries to build up a GUI. Since the DataSource-level is
//    tested <tc_LoggingDS_elements> accurately, this test verifies
//    only if the DataSource names are still backward compatible.
//    
///////////////////////////////////////////////////////////
testcase tc_LoggingDS_GUI() runs on LoggingDSGUI_Test_CT
{
  f_LoggingDSGUI_initConfig();
  f_EPTF_UIHandler_clearGUI();
  var boolean vl_dummy := 
  f_EPTF_UIHandler_addWindow();
  vl_dummy := 
  f_EPTF_UIHandler_createGUIFromFile(tsp_gui);
  f_EPTF_Base_stop(pass);
}

control{
  execute(tc_LoggingDS_GUI());
}

}  // end of module
