2010-07-15 00:40:13 +01:00
|
|
|
// Cyphesis Online RPG Server and AI Engine
|
|
|
|
|
// Copyright (C) 2005 Alistair Riddoch
|
|
|
|
|
//
|
|
|
|
|
// This program is free software; you can redistribute it and/or modify
|
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
// (at your option) any later version.
|
|
|
|
|
//
|
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
|
//
|
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
|
// along with this program; if not, write to the Free Software Foundation,
|
|
|
|
|
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
|
|
|
|
|
2011-02-15 09:30:46 +00:00
|
|
|
#ifdef NDEBUG
|
|
|
|
|
#undef NDEBUG
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef DEBUG
|
|
|
|
|
#define DEBUG
|
|
|
|
|
#endif
|
|
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
#include "TestBase.h"
|
2010-07-15 00:40:13 +01:00
|
|
|
#include "TestWorld.h"
|
|
|
|
|
|
2018-11-03 16:43:33 +01:00
|
|
|
#include "rules/simulation/World.h"
|
|
|
|
|
#include "rules/python/Python_API.h"
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
#include "server/Ruleset.h"
|
|
|
|
|
#include "server/EntityBuilder.h"
|
|
|
|
|
#include "server/EntityFactory.h"
|
2013-10-23 22:36:55 +02:00
|
|
|
#include "server/ArchetypeFactory.h"
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
#include "common/Inheritance.h"
|
2011-12-17 18:37:28 +00:00
|
|
|
#include "common/TypeNode.h"
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
#include <Atlas/Objects/Anonymous.h>
|
2017-07-05 15:24:55 +02:00
|
|
|
#include <Atlas/Objects/Operation.h>
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
#include <cassert>
|
|
|
|
|
|
|
|
|
|
using Atlas::Message::MapType;
|
|
|
|
|
using Atlas::Objects::Entity::Anonymous;
|
2012-12-22 12:21:06 +00:00
|
|
|
using Atlas::Objects::Entity::RootEntity;
|
2010-07-15 00:40:13 +01:00
|
|
|
using Atlas::Objects::Root;
|
|
|
|
|
|
|
|
|
|
class ExposedEntityBuilder : public EntityBuilder {
|
|
|
|
|
public:
|
2011-09-21 12:45:18 +01:00
|
|
|
explicit ExposedEntityBuilder() : EntityBuilder() {
|
2010-07-15 00:40:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const FactoryDict & factoryDict() const { return m_entityFactories; }
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2012-12-22 12:21:06 +00:00
|
|
|
/// Integrations to try: Installation of all types of rules into
|
|
|
|
|
/// builders and factories. Creation of entity has all the right things.
|
|
|
|
|
/// Installation of rules via Admin. Persistence calls from Ruleset.
|
2012-12-20 19:11:23 +00:00
|
|
|
class Rulesetintegration : public Cyphesis::TestBase
|
2010-07-15 00:40:13 +01:00
|
|
|
{
|
2012-12-20 19:11:23 +00:00
|
|
|
protected:
|
2018-08-05 14:31:04 +02:00
|
|
|
Ref<World> m_entity;
|
2012-12-20 19:11:23 +00:00
|
|
|
TestWorld * m_test_world;
|
2013-02-18 23:29:24 +00:00
|
|
|
ExposedEntityBuilder * m_entity_builder;
|
2012-12-20 19:11:23 +00:00
|
|
|
public:
|
|
|
|
|
Rulesetintegration();
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
void setup();
|
|
|
|
|
void teardown();
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
void test_init();
|
|
|
|
|
void test_sequence();
|
2013-02-18 23:29:24 +00:00
|
|
|
void test_property_type();
|
2018-04-25 20:09:14 +02:00
|
|
|
|
|
|
|
|
Inheritance* m_inheritance;
|
2012-12-20 19:11:23 +00:00
|
|
|
};
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
Rulesetintegration::Rulesetintegration()
|
|
|
|
|
{
|
|
|
|
|
ADD_TEST(Rulesetintegration::test_init);
|
|
|
|
|
ADD_TEST(Rulesetintegration::test_sequence);
|
2013-02-18 23:29:24 +00:00
|
|
|
ADD_TEST(Rulesetintegration::test_property_type);
|
2012-12-20 19:11:23 +00:00
|
|
|
}
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
void Rulesetintegration::setup()
|
|
|
|
|
{
|
2018-04-25 20:09:14 +02:00
|
|
|
m_inheritance = new Inheritance();
|
2012-12-20 19:11:23 +00:00
|
|
|
m_entity = new World("1", 1);
|
2018-08-05 14:31:04 +02:00
|
|
|
m_test_world = new TestWorld(m_entity);
|
2013-02-18 23:29:24 +00:00
|
|
|
m_entity_builder = new ExposedEntityBuilder();
|
2012-12-20 19:11:23 +00:00
|
|
|
}
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
void Rulesetintegration::teardown()
|
|
|
|
|
{
|
2013-02-18 23:29:24 +00:00
|
|
|
delete m_entity_builder;
|
2012-12-20 19:11:23 +00:00
|
|
|
delete m_test_world;
|
2018-04-25 20:09:14 +02:00
|
|
|
delete m_inheritance;
|
2012-12-20 19:11:23 +00:00
|
|
|
}
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
void Rulesetintegration::test_init()
|
|
|
|
|
{
|
2018-05-10 00:21:30 +02:00
|
|
|
assert(!Ruleset::hasInstance());
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2018-05-10 00:21:30 +02:00
|
|
|
boost::asio::io_service io_service;
|
|
|
|
|
{
|
|
|
|
|
Ruleset ruleset(nullptr, io_service);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2018-05-10 00:21:30 +02:00
|
|
|
assert(Ruleset::hasInstance());
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2018-05-10 00:21:30 +02:00
|
|
|
}
|
|
|
|
|
assert(!Ruleset::hasInstance());
|
2012-12-20 19:11:23 +00:00
|
|
|
}
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2018-04-29 11:58:35 +02:00
|
|
|
Atlas::Objects::Root composeDeclaration(std::string class_name, std::string parent, Atlas::Message::MapType rawAttributes) {
|
|
|
|
|
|
|
|
|
|
Atlas::Objects::Root decl;
|
|
|
|
|
decl->setObjtype("class");
|
|
|
|
|
decl->setId(class_name);
|
|
|
|
|
decl->setParent(parent);
|
|
|
|
|
|
|
|
|
|
Atlas::Message::MapType composed;
|
|
|
|
|
for (const auto& entry : rawAttributes) {
|
|
|
|
|
composed[entry.first] = Atlas::Message::MapType{
|
2018-07-30 13:24:52 +02:00
|
|
|
{"default", entry.second}
|
2018-04-29 11:58:35 +02:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
decl->setAttr("attributes", composed);
|
|
|
|
|
return decl;
|
|
|
|
|
};
|
|
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
void Rulesetintegration::test_sequence()
|
|
|
|
|
{
|
2010-07-15 00:40:13 +01:00
|
|
|
{
|
|
|
|
|
Atlas::Message::Element val;
|
|
|
|
|
|
|
|
|
|
// Instance of Ruleset with all protected methods exposed
|
|
|
|
|
// for testing
|
2018-08-04 01:12:45 +02:00
|
|
|
EntityBuilder * test_eb = EntityBuilder::instancePtr();
|
2013-02-18 23:29:24 +00:00
|
|
|
assert(test_eb == m_entity_builder);
|
2018-05-10 00:21:30 +02:00
|
|
|
boost::asio::io_service io_service;
|
|
|
|
|
Ruleset test_ruleset(test_eb, io_service);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2018-04-29 11:58:35 +02:00
|
|
|
|
|
|
|
|
{
|
|
|
|
|
auto decl = composeDeclaration("thing", "game_entity", {});
|
2018-05-10 00:21:30 +02:00
|
|
|
std::map<const TypeNode*, TypeNode::PropertiesUpdate> changes;
|
|
|
|
|
test_ruleset.installItem(decl->getId(), decl, changes);
|
2018-04-29 11:58:35 +02:00
|
|
|
}
|
|
|
|
|
|
2010-07-15 00:40:13 +01:00
|
|
|
// Attributes for test entities being created
|
|
|
|
|
Anonymous attributes;
|
|
|
|
|
|
|
|
|
|
// Create an entity which is an instance of one of the core classes
|
2018-08-05 14:31:04 +02:00
|
|
|
auto test_ent = test_eb->newEntity("1", 1,
|
2013-01-17 10:17:07 +00:00
|
|
|
"thing",
|
|
|
|
|
attributes,
|
|
|
|
|
*m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Check that creating an entity of a type we know we have not yet
|
|
|
|
|
// installed results in a null pointer.
|
2018-07-25 00:16:09 +02:00
|
|
|
assert(!test_eb->newEntity("1", 1, "custom_type", attributes, *m_test_world));
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Set up a type description for a new type, and install it.
|
|
|
|
|
{
|
|
|
|
|
Root custom_type_description;
|
|
|
|
|
MapType attrs;
|
|
|
|
|
MapType test_custom_type_attr;
|
|
|
|
|
test_custom_type_attr["default"] = "test_value";
|
|
|
|
|
attrs["test_custom_type_attr"] = test_custom_type_attr;
|
|
|
|
|
custom_type_description->setAttr("attributes", attrs);
|
|
|
|
|
custom_type_description->setId("custom_type");
|
2017-07-24 13:39:22 +02:00
|
|
|
custom_type_description->setParent("thing");
|
2011-09-18 15:11:04 +01:00
|
|
|
custom_type_description->setObjtype("class");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
int ret = test_ruleset.installRule("custom_type", "custom",
|
2012-01-19 19:34:20 +00:00
|
|
|
custom_type_description);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
assert(ret == 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check that the factory dictionary now contains a factory for
|
|
|
|
|
// the custom type we just installed.
|
2013-10-23 22:36:55 +02:00
|
|
|
EntityFactoryBase * custom_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(custom_type_factory != 0);
|
2011-12-17 18:37:28 +00:00
|
|
|
assert(custom_type_factory->m_type != 0);
|
|
|
|
|
assert(custom_type_factory->m_type ==
|
|
|
|
|
Inheritance::instance().getType("custom_type"));
|
|
|
|
|
|
2018-10-27 13:13:45 +02:00
|
|
|
const Root & check_class = Inheritance::instance().getClass("custom_type", Visibility::PRIVATE);
|
2011-12-17 18:37:28 +00:00
|
|
|
assert(check_class.isValid());
|
|
|
|
|
assert(check_class->getId() == "custom_type");
|
2017-07-24 13:39:22 +02:00
|
|
|
assert(check_class->getParent() == "thing");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Check the factory has the attributes we described on the custom
|
|
|
|
|
// type.
|
|
|
|
|
MapType::const_iterator J = custom_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J != custom_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_value");
|
|
|
|
|
|
2011-12-17 18:37:28 +00:00
|
|
|
J = custom_type_factory->m_classAttributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J != custom_type_factory->m_classAttributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
TypeNode * custom_type_node = custom_type_factory->m_type;
|
|
|
|
|
PropertyDict::const_iterator K = custom_type_node->defaults().find("test_custom_type_attr");
|
|
|
|
|
assert(K != custom_type_node->defaults().end());
|
|
|
|
|
Atlas::Message::Element custom_type_val;
|
|
|
|
|
assert(K->second->get(custom_type_val) == 0);
|
|
|
|
|
assert(custom_type_val == "test_value");
|
|
|
|
|
|
2010-07-15 00:40:13 +01:00
|
|
|
// Create an instance of our custom type, ensuring that it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type has the attribute described when the
|
|
|
|
|
// custom type was installed.
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
// Check that creating an entity of a type we know we have not yet
|
|
|
|
|
// installed results in a null pointer.
|
2018-07-25 00:16:09 +02:00
|
|
|
assert(!test_eb->newEntity("1", 1, "custom_inherited_type", attributes, *m_test_world));
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Set up a type description for a second new type which inherits
|
|
|
|
|
// from the first, and install it.
|
|
|
|
|
{
|
|
|
|
|
Root custom_inherited_type_description;
|
|
|
|
|
MapType attrs;
|
|
|
|
|
MapType test_custom_type_attr;
|
|
|
|
|
test_custom_type_attr["default"] = "test_inherited_value";
|
|
|
|
|
attrs["test_custom_inherited_type_attr"] = test_custom_type_attr;
|
|
|
|
|
custom_inherited_type_description->setAttr("attributes", attrs);
|
|
|
|
|
custom_inherited_type_description->setId("custom_inherited_type");
|
2017-07-24 13:39:22 +02:00
|
|
|
custom_inherited_type_description->setParent("custom_type");
|
2011-09-18 15:11:04 +01:00
|
|
|
custom_inherited_type_description->setObjtype("class");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
std::string dependent, reason;
|
2012-12-20 19:11:23 +00:00
|
|
|
int ret = test_ruleset.installRule("custom_inherited_type",
|
|
|
|
|
"custom",
|
2012-01-19 19:34:20 +00:00
|
|
|
custom_inherited_type_description);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
assert(ret == 0);
|
|
|
|
|
assert(dependent.empty());
|
|
|
|
|
assert(reason.empty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check that the factory dictionary does contain the factory for
|
|
|
|
|
// the second newly installed type
|
2013-10-23 22:36:55 +02:00
|
|
|
EntityFactoryBase * custom_inherited_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_inherited_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(custom_inherited_type_factory != 0);
|
|
|
|
|
|
|
|
|
|
// Check that the factory has inherited the attributes from the
|
|
|
|
|
// first custom type
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J != custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
// Check that the factory has the attributes specified when installing
|
|
|
|
|
// it
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_inherited_type_attr");
|
|
|
|
|
assert(J != custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_inherited_value");
|
|
|
|
|
|
|
|
|
|
// Creat an instance of the second custom type, ensuring it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_inherited_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the instance of the second custom type has the attribute
|
|
|
|
|
// described when the first custom type was installed.
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type has the attribute described when the
|
|
|
|
|
// second custom type was installed
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_inherited_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "test_inherited_value");
|
|
|
|
|
|
|
|
|
|
// FIXME TODO Modify a type, and ensure attribute propagate to inherited types.
|
|
|
|
|
|
|
|
|
|
// Make sure than attempting to modify a non-existant type fails
|
|
|
|
|
{
|
|
|
|
|
Anonymous nonexistant_description;
|
|
|
|
|
MapType attrs;
|
|
|
|
|
MapType test_custom_type_attr;
|
|
|
|
|
|
|
|
|
|
test_custom_type_attr["default"] = "no_value";
|
|
|
|
|
attrs["no_custom_type_attr"] = test_custom_type_attr;
|
|
|
|
|
|
|
|
|
|
nonexistant_description->setId("nonexistant");
|
|
|
|
|
nonexistant_description->setAttr("attributes", attrs);
|
|
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
int ret = test_ruleset.modifyRule("nonexistant",
|
|
|
|
|
nonexistant_description);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
assert(ret != 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Modify the second custom type removing its custom attribute
|
|
|
|
|
{
|
|
|
|
|
Anonymous new_custom_inherited_type_description;
|
2011-09-18 11:13:24 +01:00
|
|
|
new_custom_inherited_type_description->setObjtype("class");
|
2010-07-15 00:40:13 +01:00
|
|
|
new_custom_inherited_type_description->setId("custom_inherited_type");
|
|
|
|
|
new_custom_inherited_type_description->setAttr("attributes", MapType());
|
|
|
|
|
|
2017-07-24 13:39:22 +02:00
|
|
|
// No parent
|
2012-12-20 19:11:23 +00:00
|
|
|
int ret = test_ruleset.modifyRule("custom_inherited_type",
|
|
|
|
|
new_custom_inherited_type_description);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(ret != 0);
|
|
|
|
|
|
2017-07-24 13:39:22 +02:00
|
|
|
// empty parent
|
|
|
|
|
new_custom_inherited_type_description->setParent("");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
ret = test_ruleset.modifyRule("custom_inherited_type",
|
|
|
|
|
new_custom_inherited_type_description);
|
|
|
|
|
assert(ret != 0);
|
|
|
|
|
|
2017-07-24 13:39:22 +02:00
|
|
|
// wrong parent
|
|
|
|
|
new_custom_inherited_type_description->setParent("wrong_parent");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
ret = test_ruleset.modifyRule("custom_inherited_type",
|
|
|
|
|
new_custom_inherited_type_description);
|
|
|
|
|
assert(ret != 0);
|
|
|
|
|
|
2017-07-24 13:39:22 +02:00
|
|
|
new_custom_inherited_type_description->setParent("custom_type");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
ret = test_ruleset.modifyRule("custom_inherited_type",
|
|
|
|
|
new_custom_inherited_type_description);
|
|
|
|
|
|
|
|
|
|
assert(ret == 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check that the factory dictionary does contain the factory for
|
|
|
|
|
// the second newly installed type
|
2013-10-23 22:36:55 +02:00
|
|
|
custom_inherited_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_inherited_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(custom_inherited_type_factory != 0);
|
|
|
|
|
|
|
|
|
|
// Check that the factory has inherited the attributes from the
|
|
|
|
|
// first custom type
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J != custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
// Check that the factory no longer has the attributes we removed
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_inherited_type_attr");
|
|
|
|
|
assert(J == custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
|
|
|
|
|
// Creat an instance of the second custom type, ensuring it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_inherited_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Make sure test nonexistant attribute isn't present
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("nonexistant", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
// Make sure nonexistant attribute isn't present
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("nonexistant_attribute", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the instance of the second custom type has the attribute
|
|
|
|
|
// described when the first custom type was installed.
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type has the attribute described when the
|
|
|
|
|
// second custom type was installed
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_inherited_type_attr", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Modify the first custom type removing its custom attribute
|
|
|
|
|
{
|
|
|
|
|
Anonymous new_custom_type_description;
|
2011-09-18 11:13:24 +01:00
|
|
|
new_custom_type_description->setObjtype("class");
|
2010-07-15 00:40:13 +01:00
|
|
|
new_custom_type_description->setId("custom_type");
|
|
|
|
|
new_custom_type_description->setAttr("attributes", MapType());
|
2017-07-24 13:39:22 +02:00
|
|
|
new_custom_type_description->setParent("thing");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
int ret = test_ruleset.modifyRule("custom_type", new_custom_type_description);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
assert(ret == 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check that the factory dictionary now contains a factory for
|
|
|
|
|
// the custom type we just installed.
|
2013-10-23 22:36:55 +02:00
|
|
|
custom_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(custom_type_factory != 0);
|
|
|
|
|
|
|
|
|
|
// Check the factory has the attributes we described on the custom
|
|
|
|
|
// type.
|
|
|
|
|
J = custom_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J == custom_type_factory->m_attributes.end());
|
|
|
|
|
|
|
|
|
|
// Create an instance of our custom type, ensuring that it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type no longer has the custom attribute
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Check that the factory dictionary does contain the factory for
|
|
|
|
|
// the second newly installed type
|
2013-10-23 22:36:55 +02:00
|
|
|
custom_inherited_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_inherited_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(custom_inherited_type_factory != 0);
|
|
|
|
|
|
|
|
|
|
// Check that the factory no longer has inherited the attributes
|
|
|
|
|
// from the first custom type which we removed
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J == custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
|
|
|
|
|
// Check that the factory no longer has the attributes we removed
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_inherited_type_attr");
|
|
|
|
|
assert(J == custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
|
|
|
|
|
// Creat an instance of the second custom type, ensuring it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_inherited_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Make sure test nonexistant attribute isn't present
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("nonexistant", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
// Make sure nonexistant attribute isn't present
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("nonexistant_attribute", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the instance of the second custom type has the attribute
|
|
|
|
|
// described when the first custom type was installed.
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type has the attribute described when the
|
|
|
|
|
// second custom type was installed
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_inherited_type_attr", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Add more custom attributes to the first type
|
|
|
|
|
{
|
|
|
|
|
Anonymous new_custom_type_description;
|
2011-09-18 11:13:24 +01:00
|
|
|
new_custom_type_description->setObjtype("class");
|
2010-07-15 00:40:13 +01:00
|
|
|
MapType attrs;
|
|
|
|
|
MapType test_custom_type_attr;
|
|
|
|
|
|
|
|
|
|
test_custom_type_attr["default"] = "test_value";
|
|
|
|
|
attrs["test_custom_type_attr"] = test_custom_type_attr;
|
|
|
|
|
|
|
|
|
|
MapType new_custom_type_attr;
|
|
|
|
|
|
|
|
|
|
new_custom_type_attr["default"] = "new_value";
|
|
|
|
|
attrs["new_custom_type_attr"] = new_custom_type_attr;
|
|
|
|
|
|
|
|
|
|
new_custom_type_description->setId("custom_type");
|
|
|
|
|
new_custom_type_description->setAttr("attributes", attrs);
|
2017-07-24 13:39:22 +02:00
|
|
|
new_custom_type_description->setParent("thing");
|
2010-07-15 00:40:13 +01:00
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
int ret = test_ruleset.modifyRule("custom_type", new_custom_type_description);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
assert(ret == 0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check that the factory dictionary now contains a factory for
|
|
|
|
|
// the custom type we just installed.
|
2013-10-23 22:36:55 +02:00
|
|
|
custom_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Check the factory has the attributes we described on the custom
|
|
|
|
|
// type.
|
|
|
|
|
J = custom_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J != custom_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
J = custom_type_factory->m_attributes.find("new_custom_type_attr");
|
|
|
|
|
assert(J != custom_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "new_value");
|
|
|
|
|
|
|
|
|
|
// Create an instance of our custom type, ensuring that it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type now has the custom attributes
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "test_value");
|
|
|
|
|
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("new_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "new_value");
|
|
|
|
|
|
|
|
|
|
// Check that the factory dictionary does contain the factory for
|
|
|
|
|
// the second newly installed type
|
2013-10-23 22:36:55 +02:00
|
|
|
custom_inherited_type_factory = dynamic_cast<EntityFactoryBase*>(test_eb->getClassFactory("custom_inherited_type"));
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(custom_inherited_type_factory != 0);
|
|
|
|
|
|
|
|
|
|
// Check that the factory now has inherited the attributes
|
|
|
|
|
// from the first custom type
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_type_attr");
|
|
|
|
|
assert(J != custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "test_value");
|
|
|
|
|
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("new_custom_type_attr");
|
|
|
|
|
assert(J != custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
assert(J->second.isString());
|
|
|
|
|
assert(J->second.String() == "new_value");
|
|
|
|
|
|
|
|
|
|
// Check that the factory no longer has the attributes we removed
|
|
|
|
|
J = custom_inherited_type_factory->m_attributes.find("test_custom_inherited_type_attr");
|
|
|
|
|
assert(J == custom_inherited_type_factory->m_attributes.end());
|
|
|
|
|
|
|
|
|
|
// Creat an instance of the second custom type, ensuring it works.
|
2012-12-26 00:04:56 +00:00
|
|
|
test_ent = test_eb->newEntity("1", 1, "custom_inherited_type", attributes, *m_test_world);
|
2018-08-05 20:47:09 +02:00
|
|
|
assert(test_ent);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Make sure test nonexistant attribute isn't present
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("nonexistant", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
// Make sure nonexistant attribute isn't present
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("nonexistant_attribute", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the instance of the second custom type has the attribute
|
|
|
|
|
// described when the first custom type was installed.
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "test_value");
|
|
|
|
|
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("new_custom_type_attr", val) == 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
assert(val.isString());
|
|
|
|
|
assert(val.String() == "new_value");
|
|
|
|
|
|
|
|
|
|
// Reset val.
|
|
|
|
|
val = Atlas::Message::Element();
|
|
|
|
|
assert(val.isNone());
|
|
|
|
|
|
|
|
|
|
// Check the custom type no longer has the attribute described when the
|
|
|
|
|
// second custom type was installed
|
2011-09-29 17:36:26 +01:00
|
|
|
assert(test_ent->getAttr("test_custom_inherited_type_attr", val) != 0);
|
2010-07-15 00:40:13 +01:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-09-06 13:48:40 +01:00
|
|
|
|
2013-02-18 23:29:24 +00:00
|
|
|
void Rulesetintegration::test_property_type()
|
|
|
|
|
{
|
|
|
|
|
// Stub back in PropertyManager, and stub out everything it depends
|
|
|
|
|
// on.
|
|
|
|
|
}
|
|
|
|
|
|
2012-12-20 19:11:23 +00:00
|
|
|
int main()
|
|
|
|
|
{
|
2012-12-22 12:21:06 +00:00
|
|
|
// init_python_api("6525a56d-7139-4016-8c1c-c2e77ab50039");
|
2012-12-20 19:11:23 +00:00
|
|
|
|
|
|
|
|
Rulesetintegration t;
|
|
|
|
|
|
|
|
|
|
return t.run();
|
|
|
|
|
}
|
|
|
|
|
|
2012-09-11 22:53:15 +01:00
|
|
|
|
2012-12-22 12:21:06 +00:00
|
|
|
|
|
|
|
|
// stubs
|
|
|
|
|
|
|
|
|
|
#include "server/Connection.h"
|
|
|
|
|
#include "server/CorePropertyManager.h"
|
|
|
|
|
#include "server/Juncture.h"
|
|
|
|
|
#include "server/Player.h"
|
|
|
|
|
#include "server/ServerAccount.h"
|
|
|
|
|
#include "server/ServerRouting.h"
|
2018-08-05 20:47:09 +02:00
|
|
|
#include "server/Account.h"
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-11-03 16:43:33 +01:00
|
|
|
#include "rules/python/PythonScriptFactory.h"
|
|
|
|
|
#include "rules/simulation/Task.h"
|
|
|
|
|
#include "rules/simulation/Stackable.h"
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2016-12-19 22:01:23 +01:00
|
|
|
#include "stubs/server/stubAdmin.h"
|
2018-11-03 16:43:33 +01:00
|
|
|
#include "stubs/rules/stubLocation.h"
|
|
|
|
|
#include "stubs/rules/python/stubScriptsProperty.h"
|
2018-08-04 01:12:45 +02:00
|
|
|
#include "stubs/common/stubMonitors.h"
|
2018-10-27 13:13:45 +02:00
|
|
|
#include "stubs/server/stubConnectableRouter.h"
|
2015-05-23 16:47:45 +02:00
|
|
|
#include "stubs/server/stubConnection.h"
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-10-30 19:31:27 +01:00
|
|
|
#define STUB_CorePropertyManager_addProperty
|
|
|
|
|
PropertyBase* CorePropertyManager::addProperty(const std::string & name, int type)
|
2012-12-22 12:21:06 +00:00
|
|
|
{
|
|
|
|
|
return new SoftProperty;
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-30 19:31:27 +01:00
|
|
|
#include "stubs/server/stubCorePropertyManager.h"
|
2013-10-23 22:36:55 +02:00
|
|
|
|
|
|
|
|
Stackable::Stackable(const std::string& id, long idInt)
|
|
|
|
|
:Thing::Thing(id, idInt)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Stackable::~Stackable(){}
|
|
|
|
|
|
|
|
|
|
void Stackable::CombineOperation(const Operation & op, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Stackable::DivideOperation(const Operation & op, OpVector &)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-04-29 16:26:32 +02:00
|
|
|
#define STUB_ArchetypeFactory_duplicateFactory
|
|
|
|
|
ArchetypeFactory* ArchetypeFactory::duplicateFactory()
|
2013-10-23 22:36:55 +02:00
|
|
|
{
|
|
|
|
|
ArchetypeFactory * f = new ArchetypeFactory(*this);
|
2012-12-22 12:21:06 +00:00
|
|
|
f->m_parent = this;
|
|
|
|
|
return f;
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-29 16:26:32 +02:00
|
|
|
#define STUB_ArchetypeFactory_newEntity
|
2018-07-24 21:18:50 +02:00
|
|
|
Ref<LocatedEntity> ArchetypeFactory::newEntity(const std::string & id, long intId, const Atlas::Objects::Entity::RootEntity & attributes, LocatedEntity* location)
|
2013-10-23 22:36:55 +02:00
|
|
|
{
|
|
|
|
|
return new Entity(id, intId);
|
|
|
|
|
}
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-04-29 16:26:32 +02:00
|
|
|
#include "stubs/server/stubArchetypeFactory.h"
|
2018-08-05 20:47:09 +02:00
|
|
|
#include "stubs/server/stubAccount.h"
|
2018-04-29 16:26:32 +02:00
|
|
|
|
2013-10-23 22:36:55 +02:00
|
|
|
class World;
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-10-27 13:13:45 +02:00
|
|
|
#include "stubs/server/stubJuncture.h"
|
|
|
|
|
#include "stubs/server/stubPlayer.h"
|
|
|
|
|
#include "stubs/server/stubServerAccount.h"
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-04-25 20:09:14 +02:00
|
|
|
#include "stubs/server/stubServerRouting.h"
|
2018-11-03 16:43:33 +01:00
|
|
|
#include "stubs/rules/simulation/stubEntity.h"
|
|
|
|
|
#include "stubs/rules/simulation/stubThing.h"
|
|
|
|
|
#include "stubs/rules/simulation/stubWorld.h"
|
2012-12-22 12:21:06 +00:00
|
|
|
|
2018-02-26 12:05:10 +01:00
|
|
|
#define STUB_LocatedEntity_getAttr
|
2012-12-22 12:21:06 +00:00
|
|
|
int LocatedEntity::getAttr(const std::string & name,
|
|
|
|
|
Atlas::Message::Element & attr) const
|
|
|
|
|
{
|
|
|
|
|
PropertyDict::const_iterator I = m_properties.find(name);
|
|
|
|
|
if (I != m_properties.end()) {
|
|
|
|
|
return I->second->get(attr);
|
|
|
|
|
}
|
|
|
|
|
if (m_type != 0) {
|
|
|
|
|
I = m_type->defaults().find(name);
|
|
|
|
|
if (I != m_type->defaults().end()) {
|
|
|
|
|
return I->second->get(attr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-09 14:50:45 +02:00
|
|
|
|
2018-02-26 12:05:10 +01:00
|
|
|
#define STUB_LocatedEntity_setType
|
2015-04-09 14:50:45 +02:00
|
|
|
void LocatedEntity::setType(const TypeNode* t) {
|
|
|
|
|
m_type = t;
|
|
|
|
|
}
|
2018-02-26 12:05:10 +01:00
|
|
|
|
2018-11-03 16:43:33 +01:00
|
|
|
#include "stubs/rules/stubLocatedEntity.h"
|
2018-02-26 12:05:10 +01:00
|
|
|
|
2012-12-22 12:21:06 +00:00
|
|
|
PythonClass::PythonClass(const std::string & package,
|
2018-07-24 21:18:50 +02:00
|
|
|
const std::string & type) : m_package(package),
|
2012-12-22 12:21:06 +00:00
|
|
|
m_type(type),
|
2018-07-24 21:18:50 +02:00
|
|
|
m_module(nullptr)
|
2012-12-22 12:21:06 +00:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PythonClass::~PythonClass()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int PythonClass::load()
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-24 21:18:50 +02:00
|
|
|
int PythonClass::getClass(const Py::Module& module)
|
2012-12-22 12:21:06 +00:00
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int PythonClass::refresh()
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
|
PythonScriptFactory<T>::PythonScriptFactory(const std::string & package,
|
|
|
|
|
const std::string & type) :
|
|
|
|
|
PythonClass(package,
|
2018-07-24 21:18:50 +02:00
|
|
|
type)
|
2012-12-22 12:21:06 +00:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
|
int PythonScriptFactory<T>::setup()
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
|
const std::string & PythonScriptFactory<T>::package() const
|
|
|
|
|
{
|
|
|
|
|
return m_package;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
|
int PythonScriptFactory<T>::addScript(T * entity) const
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
|
int PythonScriptFactory<T>::refreshClass()
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2013-01-17 10:17:07 +00:00
|
|
|
template class PythonScriptFactory<LocatedEntity>;
|
2018-11-03 16:43:33 +01:00
|
|
|
#include "stubs/rules/simulation/stubTask.h"
|
2012-12-22 12:21:06 +00:00
|
|
|
|
|
|
|
|
|
2018-04-30 23:34:58 +02:00
|
|
|
sigc::signal<void> python_reload_scripts;
|