GCC Code Coverage Report


Directory: ./
File: src/main.cpp
Date: 2025-04-25 19:19:43
Exec Total Coverage
Lines: 69 76 90.8%
Branches: 137 158 86.7%

Line Branch Exec Source
1
2 /***************************************
3 Auteur : Pierre Aubert
4 Mail : pierre.aubert@lapp.in2p3.fr
5 Licence : CeCILL-C
6 ****************************************/
7
8 #include <iostream>
9
10 #include "OptionParser.h"
11
12 #include "project_generator.h"
13
14 ///Create the OptionParser of this program
15 /** @return OptionParser of this program
16 */
17 10 OptionParser createOptionParser(){
18
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 OptionParser parser(true, __PROGRAM_VERSION__);
19
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 parser.setExampleLongOption("phoenix_filegenerator class --name=some_source");
20
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 parser.setExampleShortOption("phoenix_filegenerator class -n some_source");
21
22
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 parser.addMode("class");
23
1/1
✓ Branch 1 taken 10 times.
10 PString defaultClassName("");
24
5/5
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
✓ Branch 13 taken 10 times.
10 parser.addOption("name", "n", defaultClassName, "base name of the file to be created");
25
1/1
✓ Branch 1 taken 10 times.
10 PString templateDef("");
26
5/5
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
✓ Branch 13 taken 10 times.
10 parser.addOption("template", "t", templateDef, "template definition of the class (ex: 'typename T' or 'typename T, typename U', etc)");
27
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("config", "c", OptionType::FILENAME, false, "Configuration file to create a class (*.pdata)");
28
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("datastream", "s", OptionType::NONE, false, "Enable PhoenixDataStream use to save/load generated class automatically");
29
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("typestream", "y", OptionType::NONE, false, "Enable PhoenixTypeStream use to get the class name automatically");
30
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("tests", "u", OptionType::NONE, false, "Enable unit tests generation");
31
1/1
✓ Branch 1 taken 10 times.
10 parser.closeMode();
32
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 parser.addMode("source");
33
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("name", "n", OptionType::STRING, true, "base name of the file to be created");
34
1/1
✓ Branch 1 taken 10 times.
10 parser.closeMode();
35
36
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 parser.addMode("project");
37
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("description", "d", OptionType::FILENAME, false, "description of the full project (*.toml)");
38
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("config", "c", OptionType::FILENAME, false, "Configuration file to create a class (*.pdata)");
39
40
4/4
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 10 taken 10 times.
10 parser.addOption("pythonwrapper", "w", OptionType::NONE, false, "Enable python wrapper generation");
41
1/1
✓ Branch 1 taken 10 times.
10 parser.closeMode();
42 20 return parser;
43 10 }
44
45 ///Class creator
46 /** @param classMode : set of argument passe in the class mode
47 * @return true on success, false otherwise
48 */
49 8 bool createClass(const OptionMode & classMode){
50
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 PString className, templatedef;
51
1/1
✓ Branch 1 taken 8 times.
8 PPath classConfig;
52
53
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 classMode.getValue(className, "name");
54
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 classMode.getValue(classConfig, "config");
55
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 classMode.getValue(templatedef, "template");
56
57
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 bool enableDataStream = classMode.isOptionExist("datastream");
58
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 bool enableTypeStream = classMode.isOptionExist("typestream");
59
2/2
✓ Branch 1 taken 8 times.
✓ Branch 4 taken 8 times.
8 bool enableUnitTest = classMode.isOptionExist("tests");
60
61
3/3
✓ Branch 1 taken 8 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 3 times.
8 if(classConfig != ""){
62
2/2
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 2 times.
5 if(className == ""){
63
3/3
✓ Branch 1 taken 3 times.
✓ Branch 4 taken 3 times.
✓ Branch 7 taken 3 times.
3 className = classConfig.getFileName().eraseExtension();
64 }
65
7/7
✓ Branch 1 taken 5 times.
✓ Branch 4 taken 5 times.
✓ Branch 7 taken 5 times.
✓ Branch 10 taken 5 times.
✓ Branch 13 taken 5 times.
✓ Branch 19 taken 1 times.
✓ Branch 20 taken 4 times.
5 if(!saveParserClassConfig(className, classConfig, enableDataStream, enableTypeStream, enableUnitTest)){
66
4/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
1 std::cerr << "createClass : can't save file '"<<className<<"'[.h or .cpp]" << std::endl;
67 1 return false;
68 }
69 }else{
70
1/1
✓ Branch 1 taken 3 times.
3 PClassGenerator generator;
71
1/1
✓ Branch 1 taken 3 times.
3 generator.setClassName(className);
72
1/1
✓ Branch 1 taken 3 times.
3 generator.setTemplateDefVar(templatedef);
73
74
4/4
✓ Branch 1 taken 3 times.
✓ Branch 4 taken 3 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 2 times.
3 if(!generator.saveFileImplDef(className)){
75
4/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
1 std::cerr << "createClass : can't save file '"<<className<<"'[.h or .cpp]" << std::endl;
76 1 return false;
77 }
78
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
3 }
79 6 return true;
80 8 }
81
82 ///Create header and source file name
83 /** @param sourceMode : arguments passed in the source mode
84 * @return true on success, false otherwise
85 */
86 2 bool createHeaderSource(const OptionMode & sourceMode){
87
2/2
✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
2 PPath headerName("header");
88
2/2
✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
2 sourceMode.getValue(headerName, "name");
89
2/2
✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
2 PPath baseHeaderName(headerName.eraseExtension());
90
7/7
✓ Branch 1 taken 2 times.
✓ Branch 4 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 10 taken 2 times.
✓ Branch 13 taken 2 times.
✓ Branch 16 taken 2 times.
✓ Branch 19 taken 2 times.
2 saveHeaderSourceFile(PPath(baseHeaderName + ".h"), PPath(baseHeaderName + ".cpp"));
91 2 return true;
92 2 }
93
94 ///Create project
95 /** @param projectMode : arguments passed in the project mode
96 * @return true on success, false otherwise
97 */
98 bool createProjectSource(const OptionMode & projectMode){
99 PPath configFile, descriptionFile;
100 projectMode.getValue(configFile, "config");
101 projectMode.getValue(descriptionFile, "description");
102 bool enablePythonWrapper = projectMode.isOptionExist("pythonwrapper");
103 return project_generator(descriptionFile, configFile, enablePythonWrapper);
104 }
105
106 10 int main(int argc, char** argv){
107
1/1
✓ Branch 1 taken 10 times.
10 OptionParser parser = createOptionParser();
108
1/1
✓ Branch 1 taken 10 times.
10 parser.parseArgument(argc, argv);
109
110
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 const OptionMode & classMode = parser.getMode("class");
111
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 const OptionMode & sourceMode = parser.getMode("source");
112
2/2
✓ Branch 1 taken 10 times.
✓ Branch 4 taken 10 times.
10 const OptionMode & projectMode = parser.getMode("project");
113 10 bool b(true);
114
3/3
✓ Branch 1 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
10 if(classMode.isParsed()){ //We are using the class mode
115
1/1
✓ Branch 1 taken 8 times.
8 b &= createClass(classMode);
116 }
117
3/3
✓ Branch 1 taken 10 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 8 times.
10 if(sourceMode.isParsed()){ //We are using the source mode
118
1/1
✓ Branch 1 taken 2 times.
2 b &= createHeaderSource(sourceMode);
119 }
120
2/3
✓ Branch 1 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
10 if(projectMode.isParsed()){ //We are using the source mode
121 b &= createProjectSource(projectMode);
122 }
123 10 return b - 1;
124 10 }
125
126
127
128