GCC Code Coverage Report


Directory: src/
File: main.cpp
Date: 2025-08-06 13:33:37
Exec Total Coverage
Lines: 69 77 89.6%
Functions: 4 5 80.0%
Branches: 136 147 92.5%

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