static int CreatorClient_setattr(PyCreatorClient *self, char *name, PyObject *v) { if (self->m_mind == NULL) { return -1; } if (self->CreatorClient_attr == NULL) { self->CreatorClient_attr = PyDict_New(); if (self->CreatorClient_attr == NULL) { return -1; } } if (strcmp(name, "map") == 0) { return -1; } LocatedEntity * thing = self->m_mind; //std::string attr(name); //if (v == NULL) { //thing->attributes.erase(attr); //return 0; //} Element obj; if (PyObject_asMessageElement(v, obj) == 0 && !obj.isMap() && !obj.isList()) { thing->setAttr(name, obj); return 0; } // If we get here, then the attribute is not Atlas compatable, so we // need to store it in a python dictionary return PyDict_SetItemString(self->CreatorClient_attr, name, v); }
void LocatedEntitytest::test_coverage() { m_entity->setScript(new Script()); // Installing a second one should delete the first. m_entity->setScript(new Script()); m_entity->onContainered(nullptr); m_entity->onUpdated(); EntityExerciser ee(*m_entity); // Throw an op of every type at the entity ee.runOperations(); // Subscribe the entity to every class of op std::set<std::string> opNames; ee.addAllOperations(opNames); std::set<std::string> attrNames; attrNames.insert("id"); // Make sure we have all the default attributes assert(ee.checkAttributes(attrNames)); attrNames.insert("test_int"); attrNames.insert("test_float"); attrNames.insert("test_list_string"); attrNames.insert("test_list_int"); attrNames.insert("test_list_float"); attrNames.insert("test_map_string"); attrNames.insert("test_map_int"); attrNames.insert("test_map_float"); // Make sure we don't have the test attributes yet assert(!ee.checkAttributes(attrNames)); // Add the test attributes m_entity->setAttr("test_int", 1); m_entity->setAttr("test_float", 1.f); m_entity->setAttr("test_list_string", "test_value"); m_entity->setAttr("test_list_int", ListType(1, 1)); m_entity->setAttr("test_list_float", ListType(1, 1.f)); m_entity->setAttr("test_map_string", ListType(1, "test_value")); MapType test_map; test_map["test_key"] = 1; m_entity->setAttr("test_map_int", test_map); test_map["test_key"] = 1.f; m_entity->setAttr("test_map_float", test_map); test_map["test_key"] = "test_value"; m_entity->setAttr("test_map_string", test_map); // Make sure we have the test attributes now assert(ee.checkAttributes(attrNames)); MapType entityAsAtlas; m_entity->merge(entityAsAtlas); // Throw an op of every type at the entity again now it is subscribed, // and full of data. ee.runOperations(); }