TEST(Generator, addDescription) { const char *d = "This is the description."; Generator g; g.addDescription(d); EXPECT_STREQ(d, g.desc); EXPECT_NE(d, g.desc) << "Description was not coppied."; }
Generator *Generator::fromXML ( const rapidxml::xml_node<> *src ) { using namespace rapidxml; std::vector<const char*> cmd; Generator *g = new Generator(); xml_node<> *n = src->first_node(XML::target_generator_descriptionNName); if ( n != NULL ) { g->addDescription(n->value()); } if (src->first_node(XML::target_generator_commandNName)) { cmd.empty(); n = src->first_node(XML::target_generator_commandNName); do { if (n->first_node(XML::target_generator_command_argumentNName)) { xml_node<> *o = n->last_node(XML::target_generator_command_argumentNName); // We are going backwords in hope of minimising vector resizes. do { unsigned int pos; sscanf(o->last_attribute(XML::target_generator_command_argument_posAName)->value(), "%u", &pos); if ( pos >= cmd.size() ) cmd.resize(pos+1, NULL); cmd[pos] = strdup(o->value()); } while ( o = o->previous_sibling(XML::target_generator_command_argumentNName) ); } g->addCommand(cmd); } while ( n = n->next_sibling(XML::target_generator_commandNName) ); } return g; }