diff options
| author | deva <deva> | 2009-08-07 13:00:10 +0000 | 
|---|---|---|
| committer | deva <deva> | 2009-08-07 13:00:10 +0000 | 
| commit | 1e1217e49bcac9228e37c7b6868d63da900ab07f (patch) | |
| tree | f963957dcbc8ffe313e6eb41fc6fbb8f939b2993 | |
| parent | 83722ef5a1c46ee3e9a15d9c16daf227f06e56cb (diff) | |
Unit test and header documentation.
| -rw-r--r-- | server/src/widgetgenerator.cc | 121 | ||||
| -rw-r--r-- | server/src/widgetgenerator.h | 15 | 
2 files changed, 136 insertions, 0 deletions
| diff --git a/server/src/widgetgenerator.cc b/server/src/widgetgenerator.cc index f8f3790..1e60479 100644 --- a/server/src/widgetgenerator.cc +++ b/server/src/widgetgenerator.cc @@ -198,3 +198,124 @@ std::string widgetgenerator(std::string cpr, Macro ¯o, LUAQueryMapper &mappe    return send_macro_widget(macro, macro.widgets, "      ", mapper, values);  } + +#ifdef TEST_WIDGETGENERATOR + +#include <time.h> + +#define PATIENTID "1234567890" + +int main() +{ +  time_t now = time(NULL); + +  printf("Test pretty printer:\n"); +  { +    Macro macro; +    macro.widgets.attributes["tagname"] = "lineedit"; +    macro.widgets.attributes["name"] = "mywidget"; +    macro.widgets.attributes["value"] = "myvalue"; +    macro.widgets.attributes["map"] = "mapvalue"; +    macro.widgets.widgets.push_back(macro.widgets); + +    Database db("testdb", "", "", "", "", ""); +    LUAQueryMapper mapper; +    std::string result; +    Fields fields; +    QueryResult queryresult; + +    // Test simple +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result != "      <lineedit name=\"mywidget\" value=\"myvalue\">\n" +       "        <lineedit name=\"mywidget\" value=\"myvalue\"/>\n" +       "      </lineedit>\n") return 1; +  } + +  printf("Positive tests:\n"); +  { +    Macro macro; +    macro.widgets.attributes["tagname"] = "lineedit"; +    macro.widgets.attributes["name"] = "mywidget"; +    macro.widgets.attributes["value"] = "myvalue"; +    macro.widgets.attributes["map"] = "mapvalue"; + +    Database db("testdb", "", "", "", "", ""); +    LUAQueryMapper mapper; +    std::string result; +    Fields fields; +    QueryResult queryresult; + +    // Test simple +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result != "      <lineedit name=\"mywidget\" value=\"myvalue\"/>\n") return 1; + +    // Make a database commit and test if the value shows up +    fields["mywidget"] = "testval"; +    db.commitTransaction("testuser", PATIENTID, macro, fields, now); +     +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result != "      <lineedit name=\"mywidget\" value=\"testval\" prefilled=\"pracro\"/>\n") return 1; +     +    // Make a query result (newer than the db value) and see if it shows up +    queryresult.timestamp = now + 1; +    queryresult.source = "testsource"; +    queryresult.values["mapvalue"] = "mymapvalue"; +    mapper.addQueryResult(queryresult); +     +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result != "      <lineedit name=\"mywidget\" value=\"mymapvalue\" prefilled=\"testsource\"/>\n") return 1; +     +    // Make another db value (newer than the query result) and see if it shows up. +    fields["mywidget"] = "testval2"; +    db.commitTransaction("testuser", PATIENTID, macro, fields, now + 2); +     +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result != "      <lineedit name=\"mywidget\" value=\"testval2\" prefilled=\"pracro\"/>\n") return 1; +  } + +  printf("Negative tests:\n"); +  { +    Macro macro; +    macro.widgets.attributes["tagname"] = "lineedit"; +    macro.widgets.attributes["name"] = "mywidget"; +    macro.widgets.attributes["value"] = "myvalue"; +    macro.widgets.attributes["map"] = "mapvalue"; + +    Database db("testdb", "", "", "", "", ""); +    LUAQueryMapper mapper; +    std::string result; +    Fields fields; +    QueryResult queryresult; + +    // Test simple +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result != "      <lineedit name=\"mywidget\" value=\"myvalue\"/>\n") return 1; + +    // Make a database commit too old, and test if the value shows up +    fields["mywidget"] = "testval"; +    db.commitTransaction("testuser", PATIENTID, macro, fields, now - Conf::db_max_ttl - 1); +     +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result == "      <lineedit name=\"mywidget\" value=\"testval\" prefilled=\"pracro\"/>\n") return 1; +     +    // Make a too old query result (newer than the db value) and see if it shows up +    queryresult.timestamp = now - Conf::pentominos_max_ttl - 1; +    queryresult.source = "testsource"; +    queryresult.values["mapvalue"] = "mymapvalue"; +    mapper.addQueryResult(queryresult); +     +    result = widgetgenerator(PATIENTID, macro, mapper, db); +    printf("[%s]\n", result.c_str()); +    if(result == "      <lineedit name=\"mywidget\" value=\"mymapvalue\" prefilled=\"testsource\"/>\n") return 1; +  } +  return 0; +} + +#endif/*TEST_WIDGETGENERATOR*/ diff --git a/server/src/widgetgenerator.h b/server/src/widgetgenerator.h index 6a27ab0..17160fc 100644 --- a/server/src/widgetgenerator.h +++ b/server/src/widgetgenerator.h @@ -34,6 +34,21 @@  #include "luaquerymapper.h"  #include "database.h" +/** + * This prettyprints the Macro datastructure as XML. + * Furthermore it fills out the values of all the widgets, according to their value, + * and map attributes. + * If the value exists in the database it will be used if recent enough. + * If the map points to a value that is more recent than the one in the database (if + * there is one) it will be used. + * If no data is available from the database or the map (or they are too old), the + * value of the 'value' attribute will be used.  + * @param cpr An std::string containing the patient id to use with the database lookup. + * @param macro The Macro to prettyprint. + * @param mapper The LUAQueryMapper to look for mappings in. + * @param db The Database to search for recent values. + * @return An std::srting containing the prettyprinted version of the Macro. + */  std::string widgetgenerator(std::string cpr,                              Macro ¯o,                              LUAQueryMapper &mapper, | 
