Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ WinCC_OA_Test/Results/
WinCC_OA_Test/Projects/TfCustomizedQG/log/
WinCC_OA_Test/Projects/TfCustomizedQG/config/config
*.dump
WinCC_OA_Test/CoverageReports/
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// SPDX-License-Identifier: GPL-3.0-only
//

#uses "stdVar"
#uses "std"

class OaLogger
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#uses "classes/QualityGates/QgBase"
#uses "classes/QualityGates/QgSettings"
#uses "fileSys"
#uses "fileSystem"


class QgOverloadedFilesCheck
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ class QgSettings
return makeDynString("FunctionData", "PanelCheck",
"PanelFileShape", "PicturesFile",
"InternalCheck", "OverloadedFilesCheck",
"SyntaxCheck", "ScriptData",
"SyntaxCheck", "QgCtrlCodeScriptData",
"ScriptFile", "StaticCodeDir",
"StaticDir");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
@note Call function calculate() before you want acces some file information.
C-tor does not read the file to eliminate performacne.
*/
class ScriptData
class QgCtrlCodeScriptData
{
//--------------------------------------------------------------------------------
//@public members
Expand All @@ -43,7 +43,7 @@ class ScriptData
Default c-tor
@param filePath Full native path to file there shall be checked.
*/
public ScriptData(const string filePath = "")
public QgCtrlCodeScriptData(const string filePath = "")
{
setPath(filePath);
}
Expand Down Expand Up @@ -166,7 +166,7 @@ class ScriptData
*/
public static int getMaxCountOfFunctions()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.countOfFunctions");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.countOfFunctions");
return (int)settings.getHighLimit(DEFAULT_FUNCCOUNT_HIGH);
}

Expand All @@ -177,7 +177,7 @@ class ScriptData
*/
public static int getMinCountOfFunctions()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.countOfFunctions");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.countOfFunctions");
return (int)settings.getLowLimit(DEFAULT_FUNCCOUNT_LOW);
}

Expand All @@ -189,7 +189,7 @@ class ScriptData
*/
public static int getMaxNLOC()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.NLOC");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.NLOC");
return (int)settings.getHighLimit(DEFAULT_NLOC_HIGH);
}

Expand All @@ -201,7 +201,7 @@ class ScriptData
*/
public static int getMinNLOC()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.NLOC");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.NLOC");
return (int)settings.getLowLimit(DEFAULT_NLOC_LOW);
}

Expand All @@ -213,7 +213,7 @@ class ScriptData
*/
public static float getMaxAvgCCN()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.avgCCN");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.avgCCN");
return (float)settings.getHighLimit(DEFAULT_AVGCCN_HIGH);
}

Expand Down Expand Up @@ -256,7 +256,7 @@ class ScriptData

if (rc != 0)
{
DebugFTN("ScriptData", __FUNCTION__, "!!! check if lizard is installed", rc, args, stdErr);
DebugFTN("QgCtrlCodeScriptData", __FUNCTION__, "!!! check if lizard is installed", rc, args, stdErr);
return -2;
}

Expand Down Expand Up @@ -353,7 +353,7 @@ class ScriptData
*/
protected int validateIsCalucalted()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.isCalculated");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.isCalculated");

if (settings.isEnabled())
{
Expand Down Expand Up @@ -389,7 +389,7 @@ class ScriptData
*/
protected validateCountOfFunctions()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.countOfFunctions");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.countOfFunctions");

if (settings.isEnabled())
{
Expand All @@ -413,7 +413,7 @@ class ScriptData
{
if (getCountOfFunctions() > 1) // only when has more then 1 function
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.avgCCN");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.avgCCN");

if (settings.isEnabled())
{
Expand All @@ -435,7 +435,7 @@ class ScriptData
*/
protected validateNLOC()
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.NLOC");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.NLOC");

if (settings.isEnabled())
{
Expand All @@ -458,7 +458,7 @@ class ScriptData
{
if (getCountOfFunctions() > 1) // only when has more then 1 function
{
shared_ptr<QgSettings> settings = new QgSettings("ScriptData.script.avgNLOC");
shared_ptr<QgSettings> settings = new QgSettings("QgCtrlCodeScriptData.script.avgNLOC");

if (settings.isEnabled())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
//

#uses "classes/QualityGates/QgBase"
#uses "classes/QualityGates/QgStaticCheck/CtrlCode/ScriptData"
#uses "classes/QualityGates/QgStaticCheck/CtrlCode/QgCtrlCodeScriptData"
#uses "classes/FileSys/QgFile"
#uses "classes/QualityGates/QgSettings"

Expand Down Expand Up @@ -194,7 +194,7 @@ class ScriptFile : QgFile
//------------------------------------------------------------------------------
public shared_ptr <QgVersionResult> result; //!< Quality gate result

protected ScriptData _scriptData = ScriptData();
protected QgCtrlCodeScriptData _scriptData = QgCtrlCodeScriptData();

static dyn_string _enabledExtensions = makeDynString();
string _extension;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
// SPDX-License-Identifier: GPL-3.0-only
//

#uses "classes/QualityGates/QgStaticCheck/CtrlCode/ScriptData"
#uses "classes/QualityGates/QgStaticCheck/CtrlCode/QgCtrlCodeScriptData"

class PanelFileScript : ScriptData
class PanelFileScript : QgCtrlCodeScriptData
{
public PanelFileScript(const string name = "")
{
Expand Down Expand Up @@ -71,7 +71,7 @@ class PanelFileScript : ScriptData
fputs(getScript(), f);
fclose(f);

if (ScriptData::calculate())
if (QgCtrlCodeScriptData::calculate())
return -1;

remove(_filePath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#uses "classes/QualityGates/QgBase"
#uses "classes/QualityGates/QgStaticCheck/StaticDir"
#uses "classes/QualityGates/QgSettings"
#uses "stdVar"
#uses "std"

class StaticCodeDir : StaticDir
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

//--------------------------------------------------------------------------------
// used libraries (#uses)
#uses "stdVar"
#uses "std"

//--------------------------------------------------------------------------------
// declare variables and constans
Expand Down
68 changes: 1 addition & 67 deletions WinCCOA_QualityChecks/scripts/libs/fileSys.ctl
Original file line number Diff line number Diff line change
Expand Up @@ -3,68 +3,11 @@
// CtrlppCheck
// a static code analysis tool for WinCC OA's Ctrl language
//
// Copyright 2023 SIEMENS AG
// Copyright 2026 SIEMENS AG
//
// SPDX-License-Identifier: GPL-3.0-only
//

//---------------------------------------------------------------------------------------------------------------------------------------
/**
@brief Function returns list with all files recursive, relative to dir.
@details Files are absolute and native pathes.

@param dir Directory path
@param pattern Pattern for filter. See also getFileNames()
@param filter Filter. See also getFileNames()
@return List with paths to filtered files.
*/
dyn_string getFileNamesRecursive(string dir, string pattern = "*", int filter = FILTER_FILES)
{
if ((dir == "") || !isdir(dir))
return makeDynString();

dyn_string dirs = getFileNames(dir, "*", FILTER_DIRS);
dyn_string filtered = getFileNames(dir, pattern, filter);
dyn_string result;

int len = dynlen(filtered);

for (int i = 1; i <= len; i++)
{
string subDir = filtered[i];

if (!_isValidDirName(subDir))
continue;

dynAppend(result, makeNativePath(dir + "/" + subDir));
}

len = dynlen(dirs);

for (int i = 1; i <= len; i++)
{
string subDir = dirs[i];

if (!_isValidDirName(subDir))
continue;

dynAppend(result, getFileNamesRecursive(makeNativePath(dir + "/" + subDir), pattern, filter));
}

string delims = makeNativePath("//");
string delim = makeNativePath("/");

for (int i = 1; i <= dynlen(result); i++)
{
strreplace(result[i], delims, delim);
}

dynUnique(result);
dynSort(result);

return result;
}

//---------------------------------------------------------------------------------------------------------------------------------------
dyn_string getSubProjPathes()
{
Expand All @@ -77,12 +20,3 @@ dyn_string getSubProjPathes()

return pathes;
}

//---------------------------------------------------------------------------------------------------------------------------------------
private bool _isValidDirName(const string name)
{
if ((name == "..") || (name == "") || (name == "."))
return FALSE;

return TRUE;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

//---------------------------------------------------------------------------------------------------------------------------------------
#uses "classes/QualityGates/Qg"
#uses "classes/QualityGates/QgStaticCheck/CtrlCode/ScriptData"
#uses "classes/QualityGates/QgStaticCheck/CtrlCode/QgCtrlCodeScriptData"
#uses "classes/QualityGates/Tools/CppCheck/CppCheck"
#uses "panel"

Expand Down Expand Up @@ -100,7 +100,7 @@ void ctrlPPCheck()

{
// in new scope to eliminate memory usage
ScriptData script;
QgCtrlCodeScriptData script;
script.setPath(path);
script.calculate();
// script.validate();
Expand Down
2 changes: 2 additions & 0 deletions WinCC_OA_Test/Projects/TfCustomizedQG/scripts/astyle.ctl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
//--------------------------------------------------------------------------------
// Libraries used (#uses)

#uses "fileSystem"

//--------------------------------------------------------------------------------
// Variables and Constants

Expand Down
2 changes: 2 additions & 0 deletions WinCC_OA_Test/Projects/TfCustomizedQG/scripts/copyright.ctl
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
//--------------------------------------------------------------------------------
// Variables and Constants

#uses "fileSystem"

//--------------------------------------------------------------------------------
/**
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,71 @@ class HookTfTestProject : TfTestProject
dynAppend(list, "WinCCOA_QualityChecks");
return list;
}


protected ProjEnvComponent gedi = new ProjEnvComponent(UI_COMPONENT);

//------------------------------------------------------------------------------
/** Checks if the IDE is enabled or not.
*/
private bool useIDE()
{
string startIDE = getenv("startIDE");

if (!this.isLocalProject || (startIDE == "") || (startIDE != "true"))
{
return false;
}

return true;
}

//------------------------------------------------------------------------------
/** Start Gedi (WinCC OA IDE) in case of startIDE is enabled.
*/
protected int _afterStarted()
{
int rc = TfTestProject::_afterStarted();

if (rc)
return rc;

if (useIDE())
{
dyn_string arguments = makeDynString("-m", "gedi");

if (!this.isProjWithDb(_packageSelection))
{
// project without DB start Gedi with -n (no event / db connection)
dynAppend(arguments, "-n");
}

gedi.setProj(this.getId());
gedi.setOptions(arguments);
gedi.setAsync(TRUE);
gedi.setDetached(TRUE);
gedi.start();
}

return 0;
}

//------------------------------------------------------------------------------
/** Start pause panel in case of startIDE is enabled.
* @note Tests are executed the panel is closed.
*/
protected int _beforeStartTestManagers()
{
if (useIDE())
{
ProjEnvComponent pausePanel = new ProjEnvComponent(UI_COMPONENT);

pausePanel.setOptions(makeDynString("-p", "OaTest/pause.pnl", "-n"));
pausePanel.setProj(this.getId());
pausePanel.start();
gedi.stop();
}

return TfTestProject::_beforeStartTestManagers();
}
};
Loading