/***********************************************************************//** * @brief Write observations into XML document * * @param[in] xml XML document. * * Write observations into the first observation library that is found in the * XML document. In case that no observation library exists, one is added to * the document. ***************************************************************************/ void GObservations::write(GXml& xml) const { // If there is no observation library then append one if (xml.elements("observation_list") == 0) { xml.append(new GXmlElement("observation_list title=\"observation list\"")); } // Get pointer on observation library GXmlElement* lib = xml.element("observation_list", 0); // Write all observations into library for (int i = 0; i < size(); ++i) { // Initialise pointer on observation GXmlElement* obs = NULL; // Search corresponding observation int n = xml.elements("observation"); for (int k = 0; k < n; ++k) { GXmlElement* element = static_cast<GXmlElement*>(xml.element("observation", k)); if (element->attribute("name") == m_obs[i]->name() && element->attribute("id") == m_obs[i]->id() && element->attribute("instrument") == m_obs[i]->instrument()) { obs = element; break; } } // If no observation with corresponding name, ID and instrument was found // then append one now if (obs == NULL) { obs = new GXmlElement("observation"); obs->attribute("name", m_obs[i]->name()); obs->attribute("id", m_obs[i]->id()); obs->attribute("instrument", m_obs[i]->instrument()); lib->append(obs); } // Write now observation m_obs[i]->write(*obs); } // endfor: looped over all observaitons // Return return; }
/***********************************************************************//** * @brief Write Test Suites into XML document * * @param[in] xml XML document. * * Write test suites into the XML document. ***************************************************************************/ void GTestSuites::write(GXml& xml) const { // Create XML element for Test Suites GXmlElement *element_testsuites = new GXmlElement("testsuites"); // Set attributes element_testsuites->attribute("name", "GammaLib"); /* element_testsuites->attribute("test",str(tests())); element_testsuites->attribute("errors",str(errors())); element_testsuites->attribute("failures",str(failures())); element_testsuites->attribute("time","0"); // not used element_testsuites->attribute("timestamp",str(timestamp())); */ // Loop over all test suites in the container for (int i = 0; i < m_testsuites.size(); ++i) { // Get a pointer on the current test suite GTestSuite *testsuite = m_testsuites[i]; // Create XML element for this test suite GXmlElement *element_testsuite = new GXmlElement("testsuite"); // Set attributes element_testsuite->attribute("disabled",""); // not used element_testsuite->attribute("errors",str(testsuite->errors())); element_testsuite->attribute("failures",str(testsuite->failures())); element_testsuite->attribute("hostname",""); // not used element_testsuite->attribute("id",str(i)); element_testsuite->attribute("name",testsuite->name()); element_testsuite->attribute("package",""); // not used element_testsuite->attribute("skipped",""); // not used element_testsuite->attribute("tests",str(testsuite->size())); element_testsuite->attribute("time",str(testsuite->duration())); element_testsuite->attribute("timestamp",str(testsuite->timestamp())); // Loop over all test cases in the test suite for (int j = 0; j < testsuite->size(); ++j) { // Reference to the current test case GTestCase& testcase = (*testsuite)[j]; // Create XML element for this test case GXmlElement *element_testcase = new GXmlElement("testcase"); // Set attributes element_testcase->attribute("assertions",""); // not used element_testcase->attribute("classname",name()); element_testcase->attribute("name",testcase.name()); element_testcase->attribute("status",""); // not used element_testcase->attribute("time",str(testcase.duration())); // If a failure or error occured then append the message to the // XML element. if (!testcase.passed()) { // Create XML element for the test case problem GXmlElement* element_testcase_problem = new GXmlElement(); // Set attributes element_testcase_problem->attribute("message",testcase.message()); element_testcase_problem->attribute("type",testcase.type()); // Set tag name dependent on the type of problem if (testcase.kind() == GTestCase::ERROR_TEST) { element_testcase_problem->name("error"); } else { element_testcase_problem->name("failure"); } // Append problem to test case element element_testcase->append(element_testcase_problem); } // endif: failure or error occured // Append test case to testsuite element. element_testsuite->append(element_testcase); } // endfor: looped over all test cases // Append test suite to test suites element element_testsuites->append(element_testsuite); } // endfor: looped over all test suites // Append test suites to XML document xml.append(element_testsuites); // Return return; }
/***********************************************************************//** * @brief Test XML constructors **************************************************************************/ void TestGXml::test_GXml_construct(void) { // Test void constructor test_try("Test void constructor"); try { GXml xml; test_try_success(); } catch (std::exception &e) { test_try_failure(e); } // Test load constructor test_try("Test load constructor"); try { GXml xml(m_xml_file); test_try_success(); } catch (std::exception &e) { test_try_failure(e); } // Test copy constructor test_try("Test copy constructor"); try { GXml xml1(m_xml_file); GXml xml2 = xml1; test_try_success(); } catch (std::exception &e) { test_try_failure(e); } // Test XML file creation test_try("Test XML file creation"); try { GXml xml; xml.append(GXmlComment("This is a comment.")); xml.append(GXmlElement("source_library")); GXmlElement* lib = xml.element("source_library", 0); lib->append(GXmlElement("source name=\"LMC\" type=\"DiffuseSource\"")); GXmlNode* src = lib->element("source", 0); src->append(GXmlElement("spectrum type=\"PLSuperExpCutoff\"")); GXmlNode* spec = src->element("spectrum", 0); spec->append(GXmlElement("parameter free=\"1\" max=\"1000\" min=\"1e-07\"" " name=\"Prefactor\" scale=\"1e-07\"" " value=\"0.02754520844\"")); spec->append(GXmlElement("parameter free=\"1\" max=\"5\" min=\"-5\"" " name=\"Index1\" scale=\"1\" value=\"-2.0458781\"")); GXmlElement* par = spec->element("parameter", 0); par->attribute("value", "1.01"); par->attribute("error", "3.145"); par = spec->element("parameter", 1); par->attribute("value", "-2.100"); par->attribute("error", "9.876"); src->append(GXmlElement("spatialModel file=\"LMC.fits\" type=\"SpatialMap\"")); GXmlNode* spat = src->element("spatialModel", 0); spat->append(GXmlElement("parameter free=\"0\" max=\"1000\" min=\"0.001\"" " name=\"Prefactor\" scale=\"1\" value=\"1\"")); test_try_success(); } catch (std::exception &e) { test_try_failure(e); } // Return return; }