From 972c26961df9994d9057cecd4d5311100cd3d646 Mon Sep 17 00:00:00 2001 From: Jeongseok Lee Date: Thu, 30 Mar 2017 00:56:11 -0400 Subject: [PATCH] Minor changes --- dart/common/Factory.hpp | 8 ++-- dart/common/detail/Factory-impl.hpp | 4 +- unittests/unit/test_Factory.cpp | 65 ++++++++++++++--------------- 3 files changed, 37 insertions(+), 40 deletions(-) diff --git a/dart/common/Factory.hpp b/dart/common/Factory.hpp index 1ff1dd7b46f73..6d28713cba48f 100644 --- a/dart/common/Factory.hpp +++ b/dart/common/Factory.hpp @@ -59,10 +59,10 @@ template ; - using Creator = std::function; - using CreatorMap = std::map; using This = Factory; + using CreatorReturnType = SmartPointerT; + using Creator = std::function; + using CreatorMap = std::map; using RegisterResult = std::pair; /// Registers a object creator function with a key. @@ -85,7 +85,7 @@ class Factory final /// Creates an object of the class that is registered with a key. Returns /// nullptr if there is no object creator function associated with the key. - static ReturnType create(const KeyT& key, Args&&... args); + static CreatorReturnType create(const KeyT& key, Args&&... args); // TODO(JS): Add create() for creating smart_pointers // (see: https://github.com/dartsim/dart/pull/845) diff --git a/dart/common/detail/Factory-impl.hpp b/dart/common/detail/Factory-impl.hpp index 64cd9e27f0cbb..768dd81641a58 100644 --- a/dart/common/detail/Factory-impl.hpp +++ b/dart/common/detail/Factory-impl.hpp @@ -93,7 +93,7 @@ typename Factory::RegisterResult Factory::registerCreator(const KeyT& key) { return registerCreator( - key, [](Args&&... args) -> ReturnType + key, [](Args&&... args) -> CreatorReturnType { return DefaultCreator::run( std::forward(args)...); @@ -138,7 +138,7 @@ template class SmartPointerT, typename... Args> -typename Factory::ReturnType +typename Factory::CreatorReturnType Factory::create( const KeyT& key, Args&&... args) { diff --git a/unittests/unit/test_Factory.cpp b/unittests/unit/test_Factory.cpp index 5a25fa3a92db3..bf25c587f0806 100644 --- a/unittests/unit/test_Factory.cpp +++ b/unittests/unit/test_Factory.cpp @@ -53,6 +53,10 @@ enum class ObjectTypeEnumClass class Fruit { public: + using FactoryEnum = common::Factory; + using FactoryEnumClass = common::Factory; + using FactoryString = common::Factory; + virtual std::string getName() const = 0; }; @@ -148,67 +152,61 @@ TEST(Factory, Create) //---------------------------------------------------------------------------- // enum class key type //---------------------------------------------------------------------------- - using FruitFactoryEnum = common::Factory; - - EXPECT_TRUE(!FruitFactoryEnum::create(OT_None)); + EXPECT_TRUE(!Fruit::FactoryEnum::create(OT_None)); - EXPECT_TRUE(FruitFactoryEnum::canCreate(OT_Apple)); - EXPECT_EQ(FruitFactoryEnum::create(OT_Apple)->getName(), "apple"); + EXPECT_TRUE(Fruit::FactoryEnum::canCreate(OT_Apple)); + EXPECT_EQ(Fruit::FactoryEnum::create(OT_Apple)->getName(), "apple"); // Can't create an orange since it's not registered yet. - EXPECT_TRUE(!FruitFactoryEnum::canCreate(OT_Orange)); + EXPECT_TRUE(!Fruit::FactoryEnum::canCreate(OT_Orange)); // Once it's registered we can create an orange. - FruitFactoryEnum::registerCreator(OT_Orange); - EXPECT_TRUE(FruitFactoryEnum::canCreate(OT_Orange)); - EXPECT_EQ(FruitFactoryEnum::create(OT_Orange)->getName(), "orange"); + Fruit::FactoryEnum::registerCreator(OT_Orange); + EXPECT_TRUE(Fruit::FactoryEnum::canCreate(OT_Orange)); + EXPECT_EQ(Fruit::FactoryEnum::create(OT_Orange)->getName(), "orange"); - FruitFactoryEnum::unregisterCreator(OT_Orange); - EXPECT_TRUE(!FruitFactoryEnum::canCreate(OT_Orange)); + Fruit::FactoryEnum::unregisterCreator(OT_Orange); + EXPECT_TRUE(!Fruit::FactoryEnum::canCreate(OT_Orange)); //---------------------------------------------------------------------------- // enum class key type //---------------------------------------------------------------------------- - using FruitFactoryEnumClass = common::Factory; - - EXPECT_TRUE(!FruitFactoryEnumClass::create(ObjectTypeEnumClass::None)); + EXPECT_TRUE(!Fruit::FactoryEnumClass::create(ObjectTypeEnumClass::None)); - EXPECT_TRUE(FruitFactoryEnumClass::canCreate(ObjectTypeEnumClass::Apple)); - EXPECT_EQ(FruitFactoryEnumClass::create( + EXPECT_TRUE(Fruit::FactoryEnumClass::canCreate(ObjectTypeEnumClass::Apple)); + EXPECT_EQ(Fruit::FactoryEnumClass::create( ObjectTypeEnumClass::Apple)->getName(), "apple"); // Can't create an orange since it's not registered yet. - EXPECT_TRUE(!FruitFactoryEnumClass::canCreate(ObjectTypeEnumClass::Orange)); + EXPECT_TRUE(!Fruit::FactoryEnumClass::canCreate(ObjectTypeEnumClass::Orange)); // Once it's registered we can create an orange. - FruitFactoryEnumClass::registerCreator(ObjectTypeEnumClass::Orange); - EXPECT_TRUE(FruitFactoryEnumClass::canCreate(ObjectTypeEnumClass::Orange)); - EXPECT_EQ(FruitFactoryEnumClass::create( + Fruit::FactoryEnumClass::registerCreator(ObjectTypeEnumClass::Orange); + EXPECT_TRUE(Fruit::FactoryEnumClass::canCreate(ObjectTypeEnumClass::Orange)); + EXPECT_EQ(Fruit::FactoryEnumClass::create( ObjectTypeEnumClass::Orange)->getName(), "orange"); - FruitFactoryEnumClass::unregisterCreator(ObjectTypeEnumClass::Orange); - EXPECT_TRUE(!FruitFactoryEnumClass::canCreate(ObjectTypeEnumClass::Orange)); + Fruit::FactoryEnumClass::unregisterCreator(ObjectTypeEnumClass::Orange); + EXPECT_TRUE(!Fruit::FactoryEnumClass::canCreate(ObjectTypeEnumClass::Orange)); //---------------------------------------------------------------------------- // std::string key type //---------------------------------------------------------------------------- - using FruitFactoryString = common::Factory; + EXPECT_TRUE(!Fruit::FactoryString::create("none")); - EXPECT_TRUE(!FruitFactoryString::create("none")); - - EXPECT_TRUE(FruitFactoryString::canCreate("apple")); - EXPECT_EQ(FruitFactoryString::create("apple")->getName(), "apple"); + EXPECT_TRUE(Fruit::FactoryString::canCreate("apple")); + EXPECT_EQ(Fruit::FactoryString::create("apple")->getName(), "apple"); // Can't create an orange since it's not registered yet. - EXPECT_TRUE(!FruitFactoryString::canCreate("orange")); + EXPECT_TRUE(!Fruit::FactoryString::canCreate("orange")); // Once it's registered we can create an orange. - FruitFactoryString::registerCreator("orange"); - EXPECT_TRUE(FruitFactoryString::canCreate("orange")); - EXPECT_EQ(FruitFactoryString::create("orange")->getName(), "orange"); + Fruit::FactoryString::registerCreator("orange"); + EXPECT_TRUE(Fruit::FactoryString::canCreate("orange")); + EXPECT_EQ(Fruit::FactoryString::create("orange")->getName(), "orange"); - FruitFactoryString::unregisterCreator("orange"); - EXPECT_TRUE(!FruitFactoryString::canCreate("orange")); + Fruit::FactoryString::unregisterCreator("orange"); + EXPECT_TRUE(!Fruit::FactoryString::canCreate("orange")); } //============================================================================== @@ -240,7 +238,6 @@ TEST(Factory, VariousCreatorFunctions) FruitFactory::registerCreator(std::string("orange"), createOrange); } - //============================================================================== TEST(Factory, CreateWithArguments) {