blob: eb86379837be714f9c88c3e30bb3fbfed869e9cd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Johannes Kepler University
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Alois Zoitl - initial API and implementation and/or initial documentation
*******************************************************************************/
#include <boost/test/unit_test.hpp>
#include <basicfb.h>
#ifdef FORTE_ENABLE_GENERATED_SOURCE_CPP
# include "internalvartests_gen.cpp"
#else
# include "stringlist.h"
#endif
const SFBInterfaceSpec gcEmptyInterface = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
class CInternalVarTestFB : public CBasicFB{
public:
CInternalVarTestFB(const SInternalVarsInformation *paVarInternals, TForteByte *paBasicFBVarsData) :
CBasicFB(0, &gcEmptyInterface, CStringDictionary::scm_nInvalidStringId,
paVarInternals, 0, paBasicFBVarsData) {
}
CIEC_ANY *getVarInternal(unsigned int paVarIntNum){
return CBasicFB::getVarInternal(paVarIntNum);
}
virtual CStringDictionary::TStringId getFBTypeId() const {
return CStringDictionary::scm_nInvalidStringId;
}
virtual void executeEvent(int){
//nothiing to do here
}
};
BOOST_AUTO_TEST_SUITE(internal_vars)
BOOST_AUTO_TEST_CASE(checkNullInternalVarsAreAllowed){
//check that we can create an FB where we have a 0 internal struct which has all parts set to zero
TForteByte varsDataBuffer[10];
CStringDictionary::TStringId namelist[1] = {g_nStringIdDT};
CInternalVarTestFB testFB(0, varsDataBuffer);
BOOST_CHECK(0 == testFB.getVar(namelist, 1));
//check that we should at least get the ECC variable
namelist[0] = CStringDictionary::getInstance().insert("$ECC");
BOOST_CHECK(0 != testFB.getVar(namelist, 1));
}
BOOST_AUTO_TEST_CASE(checkEmptyInternalVarsAreAllowed){
//check that we can create an FB where we have a var internal struct which has all parts set to zero
SInternalVarsInformation varData = {0,0,0};
TForteByte varsDataBuffer[10];
CStringDictionary::TStringId namelist[1] = {g_nStringIdDT};
CInternalVarTestFB testFB(&varData, varsDataBuffer);
BOOST_CHECK(0 == testFB.getVar(namelist, 1));
//check that we should at least get the ECC variable
namelist[0] = CStringDictionary::getInstance().insert("$ECC");
BOOST_CHECK(0 != testFB.getVar(namelist, 1));
}
BOOST_AUTO_TEST_CASE(sampleInteralVarList){
CStringDictionary::TStringId varInternalNames[] = {g_nStringIdQU, g_nStringIdQD, g_nStringIdCV};
CStringDictionary::TStringId varInternalTypeIds[] = {g_nStringIdBOOL, g_nStringIdBOOL, g_nStringIdUINT};
SInternalVarsInformation varData{3, varInternalNames, varInternalTypeIds};
TForteByte varsDataBuffer[CBasicFB::genBasicFBVarsDataSizeTemplate<0, 0, 3, 0>::value];
CInternalVarTestFB testFB(&varData, varsDataBuffer);
for(size_t i = 0; i < varData.m_nNumIntVars; i++){
CIEC_ANY *var = testFB.getVar(&(varInternalNames[i]), 1);
BOOST_CHECK(0 != var);
BOOST_CHECK_EQUAL(var, testFB.getVarInternal(static_cast<unsigned int>(i)));
}
BOOST_CHECK_EQUAL(CIEC_ANY::e_BOOL, testFB.getVarInternal(0)->getDataTypeID());
BOOST_CHECK_EQUAL(CIEC_ANY::e_BOOL, testFB.getVarInternal(1)->getDataTypeID());
BOOST_CHECK_EQUAL(CIEC_ANY::e_UINT, testFB.getVarInternal(2)->getDataTypeID());
}
BOOST_AUTO_TEST_SUITE_END()