| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /*************************************** | ||
| 2 | Auteur : Pierre Aubert | ||
| 3 | Mail : pierre.aubert@lapp.in2p3.fr | ||
| 4 | Licence : LGPL-3.0-only | ||
| 5 | ****************************************/ | ||
| 6 | |||
| 7 | #include "rust_type_utils.h" | ||
| 8 | #include "RustTraitGetterSetter.h" | ||
| 9 | |||
| 10 | ///Consctructor of RustTraitGetterSetter | ||
| 11 | 1 | RustTraitGetterSetter::RustTraitGetterSetter() | |
| 12 | 1 | :PAbstractRustTraitBackend() | |
| 13 | 1 | {} | |
| 14 | |||
| 15 | ///Desctructor of RustTraitGetterSetter | ||
| 16 | 2 | RustTraitGetterSetter::~RustTraitGetterSetter(){} | |
| 17 | |||
| 18 | ///Implementation of the impl block methods | ||
| 19 | /** @param[out] fs : file to be completed | ||
| 20 | * @param classConfig : PClassConfig to be used | ||
| 21 | * @param mode : mode of the generator | ||
| 22 | */ | ||
| 23 | 2 | void RustTraitGetterSetter::implMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{ | |
| 24 |
1/2✗ Branch 0 (3→4) not taken.
✓ Branch 1 (3→5) taken 2 times.
|
2 | if(classConfig.getIsEnum()){return;} |
| 25 | 2 | const PVecClassAttribute & vecAttr(classConfig.getListAttribute()); | |
| 26 |
2/2✓ Branch 0 (179→7) taken 5 times.
✓ Branch 1 (179→180) taken 2 times.
|
14 | for(PVecClassAttribute::const_iterator it(vecAttr.begin()); it != vecAttr.end(); ++it){ |
| 27 |
4/4✓ Branch 0 (9→10) taken 5 times.
✓ Branch 2 (10→11) taken 5 times.
✓ Branch 4 (13→14) taken 5 times.
✓ Branch 6 (14→15) taken 5 times.
|
15 | PString varType(it->getType()), fieldName(it->getName().toSnakeCase()); |
| 28 |
3/3✓ Branch 0 (15→16) taken 5 times.
✓ Branch 2 (16→17) taken 1 times.
✓ Branch 3 (16→85) taken 4 times.
|
5 | if(getIsPointerType(varType)){ |
| 29 |
3/3✓ Branch 0 (17→18) taken 1 times.
✓ Branch 2 (18→19) taken 1 times.
✓ Branch 4 (19→20) taken 1 times.
|
1 | PString pointeeType(getRustType(varType.eraseFirstLastChar(" \n\t*"))); |
| 30 |
1/2✓ Branch 0 (22→23) taken 1 times.
✗ Branch 1 (22→59) not taken.
|
1 | if(mode.enableGetter){ |
| 31 |
7/7✓ Branch 0 (23→24) taken 1 times.
✓ Branch 2 (26→27) taken 1 times.
✓ Branch 4 (27→28) taken 1 times.
✓ Branch 6 (28→29) taken 1 times.
✓ Branch 8 (29→30) taken 1 times.
✓ Branch 10 (30→31) taken 1 times.
✓ Branch 12 (31→32) taken 1 times.
|
2 | fs << "\t///Gets the " << it->getName() << " of the " << classConfig.getName() << "\n"; |
| 32 |
5/5✓ Branch 0 (32→33) taken 1 times.
✓ Branch 2 (33→34) taken 1 times.
✓ Branch 4 (34→35) taken 1 times.
✓ Branch 6 (35→36) taken 1 times.
✓ Branch 8 (36→37) taken 1 times.
|
1 | fs << "\tpub fn get_" << fieldName << "(&self) -> Option<&" << pointeeType << ">{\n"; |
| 33 |
3/3✓ Branch 0 (37→38) taken 1 times.
✓ Branch 2 (38→39) taken 1 times.
✓ Branch 4 (39→40) taken 1 times.
|
1 | fs << "\t\tself." << fieldName << ".as_deref()\n"; |
| 34 |
1/1✓ Branch 0 (40→41) taken 1 times.
|
1 | fs << "\t}\n\n"; |
| 35 |
7/7✓ Branch 0 (41→42) taken 1 times.
✓ Branch 2 (44→45) taken 1 times.
✓ Branch 4 (45→46) taken 1 times.
✓ Branch 6 (46→47) taken 1 times.
✓ Branch 8 (47→48) taken 1 times.
✓ Branch 10 (48→49) taken 1 times.
✓ Branch 12 (49→50) taken 1 times.
|
2 | fs << "\t///Gets a mutable reference to the " << it->getName() << " of the " << classConfig.getName() << "\n"; |
| 36 |
5/5✓ Branch 0 (50→51) taken 1 times.
✓ Branch 2 (51→52) taken 1 times.
✓ Branch 4 (52→53) taken 1 times.
✓ Branch 6 (53→54) taken 1 times.
✓ Branch 8 (54→55) taken 1 times.
|
1 | fs << "\tpub fn get_" << fieldName << "_mut(&mut self) -> Option<&mut " << pointeeType << ">{\n"; |
| 37 |
3/3✓ Branch 0 (55→56) taken 1 times.
✓ Branch 2 (56→57) taken 1 times.
✓ Branch 4 (57→58) taken 1 times.
|
1 | fs << "\t\tself." << fieldName << ".as_deref_mut()\n"; |
| 38 |
1/1✓ Branch 0 (58→59) taken 1 times.
|
1 | fs << "\t}\n\n"; |
| 39 | } | ||
| 40 |
1/2✓ Branch 0 (59→60) taken 1 times.
✗ Branch 1 (59→82) not taken.
|
1 | if(mode.enableSetter){ |
| 41 |
7/7✓ Branch 0 (60→61) taken 1 times.
✓ Branch 2 (63→64) taken 1 times.
✓ Branch 4 (64→65) taken 1 times.
✓ Branch 6 (65→66) taken 1 times.
✓ Branch 8 (66→67) taken 1 times.
✓ Branch 10 (67→68) taken 1 times.
✓ Branch 12 (68→69) taken 1 times.
|
2 | fs << "\t///Sets the " << it->getName() << " of the " << classConfig.getName() << "\n"; |
| 42 |
7/7✓ Branch 0 (69→70) taken 1 times.
✓ Branch 2 (70→71) taken 1 times.
✓ Branch 4 (71→72) taken 1 times.
✓ Branch 6 (72→73) taken 1 times.
✓ Branch 8 (73→74) taken 1 times.
✓ Branch 10 (74→75) taken 1 times.
✓ Branch 12 (75→76) taken 1 times.
|
1 | fs << "\tpub fn set_" << fieldName << "(&mut self, " << fieldName << ": " << pointeeType << "){\n"; |
| 43 |
5/5✓ Branch 0 (76→77) taken 1 times.
✓ Branch 2 (77→78) taken 1 times.
✓ Branch 4 (78→79) taken 1 times.
✓ Branch 6 (79→80) taken 1 times.
✓ Branch 8 (80→81) taken 1 times.
|
1 | fs << "\t\tself." << fieldName << " = Some(Box::new(" << fieldName << "));\n"; |
| 44 |
1/1✓ Branch 0 (81→82) taken 1 times.
|
1 | fs << "\t}\n\n"; |
| 45 | } | ||
| 46 | 1 | continue; | |
| 47 | 1 | } | |
| 48 |
1/1✓ Branch 0 (85→86) taken 4 times.
|
4 | PString rustType(getRustType(varType)); |
| 49 |
1/1✓ Branch 0 (86→87) taken 4 times.
|
4 | bool isCopy(getRustTypeIsCopy(varType)); |
| 50 |
1/2✓ Branch 0 (87→88) taken 4 times.
✗ Branch 1 (87→134) not taken.
|
4 | if(mode.enableGetter){ |
| 51 |
7/7✓ Branch 0 (88→89) taken 4 times.
✓ Branch 2 (91→92) taken 4 times.
✓ Branch 4 (92→93) taken 4 times.
✓ Branch 6 (93→94) taken 4 times.
✓ Branch 8 (94→95) taken 4 times.
✓ Branch 10 (95→96) taken 4 times.
✓ Branch 12 (96→97) taken 4 times.
|
8 | fs << "\t///Gets the " << it->getName() << " of the " << classConfig.getName() << "\n"; |
| 52 |
2/2✓ Branch 0 (97→98) taken 2 times.
✓ Branch 1 (97→106) taken 2 times.
|
4 | if(isCopy){ |
| 53 |
5/5✓ Branch 0 (98→99) taken 2 times.
✓ Branch 2 (99→100) taken 2 times.
✓ Branch 4 (100→101) taken 2 times.
✓ Branch 6 (101→102) taken 2 times.
✓ Branch 8 (102→103) taken 2 times.
|
2 | fs << "\tpub fn get_" << fieldName << "(&self) -> " << rustType << "{\n"; |
| 54 |
3/3✓ Branch 0 (103→104) taken 2 times.
✓ Branch 2 (104→105) taken 2 times.
✓ Branch 4 (105→114) taken 2 times.
|
2 | fs << "\t\tself." << fieldName << "\n"; |
| 55 | }else{ | ||
| 56 |
5/5✓ Branch 0 (106→107) taken 2 times.
✓ Branch 2 (107→108) taken 2 times.
✓ Branch 4 (108→109) taken 2 times.
✓ Branch 6 (109→110) taken 2 times.
✓ Branch 8 (110→111) taken 2 times.
|
2 | fs << "\tpub fn get_" << fieldName << "(&self) -> &" << rustType << "{\n"; |
| 57 |
3/3✓ Branch 0 (111→112) taken 2 times.
✓ Branch 2 (112→113) taken 2 times.
✓ Branch 4 (113→114) taken 2 times.
|
2 | fs << "\t\t&self." << fieldName << "\n"; |
| 58 | } | ||
| 59 |
1/1✓ Branch 0 (114→115) taken 4 times.
|
4 | fs << "\t}\n\n"; |
| 60 |
2/2✓ Branch 0 (115→116) taken 2 times.
✓ Branch 1 (115→134) taken 2 times.
|
4 | if(!isCopy){ |
| 61 |
7/7✓ Branch 0 (116→117) taken 2 times.
✓ Branch 2 (119→120) taken 2 times.
✓ Branch 4 (120→121) taken 2 times.
✓ Branch 6 (121→122) taken 2 times.
✓ Branch 8 (122→123) taken 2 times.
✓ Branch 10 (123→124) taken 2 times.
✓ Branch 12 (124→125) taken 2 times.
|
4 | fs << "\t///Gets a mutable reference to the " << it->getName() << " of the " << classConfig.getName() << "\n"; |
| 62 |
5/5✓ Branch 0 (125→126) taken 2 times.
✓ Branch 2 (126→127) taken 2 times.
✓ Branch 4 (127→128) taken 2 times.
✓ Branch 6 (128→129) taken 2 times.
✓ Branch 8 (129→130) taken 2 times.
|
2 | fs << "\tpub fn get_" << fieldName << "_mut(&mut self) -> &mut " << rustType << "{\n"; |
| 63 |
3/3✓ Branch 0 (130→131) taken 2 times.
✓ Branch 2 (131→132) taken 2 times.
✓ Branch 4 (132→133) taken 2 times.
|
2 | fs << "\t\t&mut self." << fieldName << "\n"; |
| 64 |
1/1✓ Branch 0 (133→134) taken 2 times.
|
2 | fs << "\t}\n\n"; |
| 65 | } | ||
| 66 | } | ||
| 67 |
1/2✓ Branch 0 (134→135) taken 4 times.
✗ Branch 1 (134→157) not taken.
|
4 | if(mode.enableSetter){ |
| 68 |
7/7✓ Branch 0 (135→136) taken 4 times.
✓ Branch 2 (138→139) taken 4 times.
✓ Branch 4 (139→140) taken 4 times.
✓ Branch 6 (140→141) taken 4 times.
✓ Branch 8 (141→142) taken 4 times.
✓ Branch 10 (142→143) taken 4 times.
✓ Branch 12 (143→144) taken 4 times.
|
8 | fs << "\t///Sets the " << it->getName() << " of the " << classConfig.getName() << "\n"; |
| 69 |
7/7✓ Branch 0 (144→145) taken 4 times.
✓ Branch 2 (145→146) taken 4 times.
✓ Branch 4 (146→147) taken 4 times.
✓ Branch 6 (147→148) taken 4 times.
✓ Branch 8 (148→149) taken 4 times.
✓ Branch 10 (149→150) taken 4 times.
✓ Branch 12 (150→151) taken 4 times.
|
4 | fs << "\tpub fn set_" << fieldName << "(&mut self, " << fieldName << ": " << rustType << "){\n"; |
| 70 |
5/5✓ Branch 0 (151→152) taken 4 times.
✓ Branch 2 (152→153) taken 4 times.
✓ Branch 4 (153→154) taken 4 times.
✓ Branch 6 (154→155) taken 4 times.
✓ Branch 8 (155→156) taken 4 times.
|
4 | fs << "\t\tself." << fieldName << " = " << fieldName << ";\n"; |
| 71 |
1/1✓ Branch 0 (156→157) taken 4 times.
|
4 | fs << "\t}\n\n"; |
| 72 | } | ||
| 73 |
4/4✓ Branch 0 (160→161) taken 4 times.
✓ Branch 1 (160→162) taken 1 times.
✓ Branch 2 (165→166) taken 4 times.
✓ Branch 3 (165→168) taken 1 times.
|
10 | } |
| 74 | } | ||
| 75 | |||
| 76 | ///Implementation of test function | ||
| 77 | /** @param[out] fs : file to be completed | ||
| 78 | * @param classConfig : PClassConfig to be used | ||
| 79 | * @param mode : mode of the generator | ||
| 80 | */ | ||
| 81 | 3 | void RustTraitGetterSetter::testFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{ | |
| 82 |
7/11✓ Branch 0 (2→3) taken 3 times.
✓ Branch 2 (3→4) taken 2 times.
✓ Branch 3 (3→7) taken 1 times.
✓ Branch 4 (4→5) taken 2 times.
✗ Branch 5 (4→7) not taken.
✗ Branch 6 (5→6) not taken.
✓ Branch 7 (5→8) taken 2 times.
✗ Branch 8 (6→7) not taken.
✗ Branch 9 (6→8) not taken.
✓ Branch 10 (9→10) taken 1 times.
✓ Branch 11 (9→11) taken 2 times.
|
3 | if(classConfig.getIsEnum() || !mode.enableUnitTest || (!mode.enableGetter && !mode.enableSetter)){return;} |
| 83 |
2/2✓ Branch 0 (11→12) taken 2 times.
✓ Branch 2 (12→13) taken 2 times.
|
2 | PString name(classConfig.getName()); |
| 84 |
1/1✓ Branch 0 (13→14) taken 2 times.
|
2 | fs << "#[test]\n"; |
| 85 |
4/4✓ Branch 0 (14→15) taken 2 times.
✓ Branch 2 (15→16) taken 2 times.
✓ Branch 4 (16→17) taken 2 times.
✓ Branch 6 (17→18) taken 2 times.
|
2 | fs << "fn test_" << name.toSnakeCase() << "_getter_setter(){\n"; |
| 86 |
3/3✓ Branch 0 (19→20) taken 2 times.
✓ Branch 2 (20→21) taken 2 times.
✓ Branch 4 (21→22) taken 2 times.
|
2 | fs << "\tlet mut obj = " << name << "::default();\n"; |
| 87 |
1/1✓ Branch 0 (22→23) taken 2 times.
|
2 | const PVecClassAttribute & vecAttr(classConfig.getListAttribute()); |
| 88 |
2/2✓ Branch 0 (106→24) taken 5 times.
✓ Branch 1 (106→107) taken 2 times.
|
14 | for(PVecClassAttribute::const_iterator it(vecAttr.begin()); it != vecAttr.end(); ++it){ |
| 89 |
4/4✓ Branch 0 (26→27) taken 5 times.
✓ Branch 2 (27→28) taken 5 times.
✓ Branch 4 (30→31) taken 5 times.
✓ Branch 6 (31→32) taken 5 times.
|
15 | PString varType(it->getType()), fieldName(it->getName().toSnakeCase()); |
| 90 |
3/3✓ Branch 0 (32→33) taken 5 times.
✓ Branch 2 (33→34) taken 1 times.
✓ Branch 3 (33→57) taken 4 times.
|
5 | if(getIsPointerType(varType)){ |
| 91 |
3/3✓ Branch 0 (34→35) taken 1 times.
✓ Branch 2 (35→36) taken 1 times.
✓ Branch 4 (36→37) taken 1 times.
|
1 | PString pointeeType(getRustType(varType.eraseFirstLastChar(" \n\t*"))); |
| 92 |
5/5✓ Branch 0 (39→40) taken 1 times.
✓ Branch 2 (40→41) taken 1 times.
✓ Branch 4 (41→42) taken 1 times.
✓ Branch 6 (42→43) taken 1 times.
✓ Branch 8 (43→44) taken 1 times.
|
1 | fs << "\tlet next_" << fieldName << " = " << pointeeType << "::default();\n"; |
| 93 |
5/5✓ Branch 0 (44→45) taken 1 times.
✓ Branch 2 (45→46) taken 1 times.
✓ Branch 4 (46→47) taken 1 times.
✓ Branch 6 (47→48) taken 1 times.
✓ Branch 8 (48→49) taken 1 times.
|
1 | fs << "\tobj.set_" << fieldName << "(next_" << fieldName << ".clone());\n"; |
| 94 |
5/5✓ Branch 0 (49→50) taken 1 times.
✓ Branch 2 (50→51) taken 1 times.
✓ Branch 4 (51→52) taken 1 times.
✓ Branch 6 (52→53) taken 1 times.
✓ Branch 8 (53→54) taken 1 times.
|
1 | fs << "\tassert_eq!(*obj.get_" << fieldName << "().unwrap(), next_" << fieldName << ");\n"; |
| 95 | 1 | continue; | |
| 96 | 1 | } | |
| 97 |
1/1✓ Branch 0 (59→60) taken 4 times.
|
8 | PString testValue(getRustTestValue(*it)); |
| 98 |
2/3✓ Branch 0 (60→61) taken 4 times.
✗ Branch 2 (61→62) not taken.
✓ Branch 3 (61→63) taken 4 times.
|
4 | if(testValue == ""){continue;} //list/nested type : no generic literal test value, skip |
| 99 |
1/1✓ Branch 0 (63→64) taken 4 times.
|
4 | bool isCopy(getRustTypeIsCopy(varType)); |
| 100 |
5/5✓ Branch 0 (64→65) taken 4 times.
✓ Branch 2 (65→66) taken 4 times.
✓ Branch 4 (66→67) taken 4 times.
✓ Branch 6 (67→68) taken 4 times.
✓ Branch 8 (68→69) taken 4 times.
|
4 | fs << "\tobj.set_" << fieldName << "(" << testValue << ");\n"; |
| 101 |
2/2✓ Branch 0 (69→70) taken 2 times.
✓ Branch 1 (69→75) taken 2 times.
|
4 | if(isCopy){ |
| 102 |
5/5✓ Branch 0 (70→71) taken 2 times.
✓ Branch 2 (71→72) taken 2 times.
✓ Branch 4 (72→73) taken 2 times.
✓ Branch 6 (73→74) taken 2 times.
✓ Branch 8 (74→80) taken 2 times.
|
2 | fs << "\tassert_eq!(obj.get_" << fieldName << "(), " << testValue << ");\n"; |
| 103 | }else{ | ||
| 104 |
5/5✓ Branch 0 (75→76) taken 2 times.
✓ Branch 2 (76→77) taken 2 times.
✓ Branch 4 (77→78) taken 2 times.
✓ Branch 6 (78→79) taken 2 times.
✓ Branch 8 (79→80) taken 2 times.
|
2 | fs << "\tassert_eq!(*obj.get_" << fieldName << "(), " << testValue << ");\n"; |
| 105 | } | ||
| 106 |
5/6✓ Branch 0 (82→83) taken 4 times.
✗ Branch 1 (82→84) not taken.
✓ Branch 2 (87→88) taken 4 times.
✓ Branch 3 (87→89) taken 1 times.
✓ Branch 4 (92→93) taken 4 times.
✓ Branch 5 (92→95) taken 1 times.
|
14 | } |
| 107 |
1/1✓ Branch 0 (107→108) taken 2 times.
|
2 | fs << "}\n\n"; |
| 108 | 2 | } | |
| 109 |