@@ -47,13 +47,25 @@ void TestCppcheckLibraryData::unhandledElement()
4747 loadCfgFile (" :/files/memory_resource_unhandled_element.cfg" , fileLibraryData, result);
4848 QCOMPARE (result.isNull (), false );
4949 qDebug () << result;
50+
51+ loadCfgFile (" :/files/container_unhandled_element.cfg" , fileLibraryData, result);
52+ QCOMPARE (result.isNull (), false );
53+ qDebug () << result;
54+
55+ loadCfgFile (" :/files/reflection_unhandled_element.cfg" , fileLibraryData, result);
56+ QCOMPARE (result.isNull (), false );
57+ qDebug () << result;
5058}
5159
5260void TestCppcheckLibraryData::mandatoryAttributeMissing ()
5361{
5462 loadCfgFile (" :/files/mandatory_attribute_missing.cfg" , fileLibraryData, result);
5563 QCOMPARE (result.isNull (), false );
5664 qDebug () << result;
65+
66+ loadCfgFile (" :/files/reflection_mandatory_attribute_missing.cfg" , fileLibraryData, result);
67+ QCOMPARE (result.isNull (), false );
68+ qDebug () << result;
5769}
5870
5971void TestCppcheckLibraryData::podtypeValid ()
@@ -337,6 +349,114 @@ void TestCppcheckLibraryData::memoryResourceValid()
337349 }
338350}
339351
352+ void TestCppcheckLibraryData::defineValid ()
353+ {
354+ // Load library data from file
355+ loadCfgFile (" :/files/define_valid.cfg" , fileLibraryData, result);
356+ QCOMPARE (result.isNull (), true );
357+
358+ // Swap libray data read from file to other object
359+ libraryData.swap (fileLibraryData);
360+
361+ // Do size and content checks against swapped data.
362+ QCOMPARE (libraryData.defines .size (), 2 );
363+ QCOMPARE (libraryData.defines [0 ].name , " INT8_MIN" );
364+ QCOMPARE (libraryData.defines [0 ].value , " -128" );
365+ QCOMPARE (libraryData.defines [1 ].name .isEmpty (), true );
366+ QCOMPARE (libraryData.defines [1 ].value .isEmpty (), true );
367+
368+ // Save library data to file
369+ saveCfgFile (TempCfgFile, libraryData);
370+
371+ fileLibraryData.clear ();
372+ QCOMPARE (fileLibraryData.defines .size (), 0 );
373+
374+ // Reload library data from file
375+ loadCfgFile (TempCfgFile, fileLibraryData, result, true );
376+ QCOMPARE (result.isNull (), true );
377+
378+ // Verify no data got lost or modified
379+ QCOMPARE (libraryData.defines .size (), fileLibraryData.defines .size ());
380+ QCOMPARE (libraryData.defines .size (), 2 );
381+ for (int idx=0 ; idx < libraryData.defines .size (); idx++) {
382+ QCOMPARE (libraryData.defines [idx].name , fileLibraryData.defines [idx].name );
383+ QCOMPARE (libraryData.defines [idx].value , fileLibraryData.defines [idx].value );
384+ }
385+ }
386+
387+ void TestCppcheckLibraryData::undefineValid ()
388+ {
389+ // Load library data from file
390+ loadCfgFile (" :/files/undefine_valid.cfg" , fileLibraryData, result);
391+ QCOMPARE (result.isNull (), true );
392+
393+ // Swap libray data read from file to other object
394+ libraryData.swap (fileLibraryData);
395+
396+ // Do size and content checks against swapped data.
397+ QCOMPARE (libraryData.undefines .size (), 2 );
398+ QCOMPARE (libraryData.undefines [0 ], " INT8_MIN" );
399+ QCOMPARE (libraryData.undefines [1 ].isEmpty (), true );
400+
401+ // Save library data to file
402+ saveCfgFile (TempCfgFile, libraryData);
403+
404+ fileLibraryData.clear ();
405+ QCOMPARE (fileLibraryData.undefines .size (), 0 );
406+
407+ // Reload library data from file
408+ loadCfgFile (TempCfgFile, fileLibraryData, result, true );
409+ QCOMPARE (result.isNull (), true );
410+
411+ // Verify no data got lost or modified
412+ QCOMPARE (libraryData.undefines .size (), fileLibraryData.undefines .size ());
413+ QCOMPARE (libraryData.undefines .size (), 2 );
414+ QCOMPARE (libraryData.undefines , fileLibraryData.undefines );
415+ }
416+
417+ void TestCppcheckLibraryData::reflectionValid ()
418+ {
419+ // Load library data from file
420+ loadCfgFile (" :/files/reflection_valid.cfg" , fileLibraryData, result);
421+ QCOMPARE (result.isNull (), true );
422+
423+ // Swap libray data read from file to other object
424+ libraryData.swap (fileLibraryData);
425+
426+ // Do size and content checks against swapped data.
427+ QCOMPARE (libraryData.reflections .size (), 2 );
428+ QCOMPARE (libraryData.reflections [0 ].calls .size (), 2 );
429+ QCOMPARE (libraryData.reflections [0 ].calls [0 ].arg , 2 );
430+ QCOMPARE (libraryData.reflections [0 ].calls [0 ].name , " invokeMethod" );
431+ QCOMPARE (libraryData.reflections [0 ].calls [1 ].arg , 1 );
432+ QCOMPARE (libraryData.reflections [0 ].calls [1 ].name , " callFunction" );
433+ QCOMPARE (libraryData.reflections [1 ].calls .isEmpty (), true );
434+
435+ // Save library data to file
436+ saveCfgFile (TempCfgFile, libraryData);
437+
438+ fileLibraryData.clear ();
439+ QCOMPARE (fileLibraryData.reflections .size (), 0 );
440+
441+ // Reload library data from file
442+ loadCfgFile (TempCfgFile, fileLibraryData, result, true );
443+ QCOMPARE (result.isNull (), true );
444+
445+ // Verify no data got lost or modified
446+ QCOMPARE (libraryData.reflections .size (), fileLibraryData.reflections .size ());
447+ QCOMPARE (libraryData.reflections .size (), 2 );
448+ for (int idx=0 ; idx < libraryData.reflections .size (); idx++) {
449+ CppcheckLibraryData::Reflection lhs = libraryData.reflections [idx];
450+ CppcheckLibraryData::Reflection rhs = fileLibraryData.reflections [idx];
451+
452+ QCOMPARE (lhs.calls .size (), rhs.calls .size ());
453+ for (int num=0 ; num < lhs.calls .size (); num++) {
454+ QCOMPARE (lhs.calls [num].arg , rhs.calls [num].arg );
455+ QCOMPARE (lhs.calls [num].name , rhs.calls [num].name );
456+ }
457+ }
458+ }
459+
340460void TestCppcheckLibraryData::loadCfgFile (QString filename, CppcheckLibraryData &data, QString &result, bool removeFile)
341461{
342462 QFile file (filename);
0 commit comments