IOT-897:OCRepresentation can check attribute type
authorhekra <hekra@cisco.com>
Mon, 7 Dec 2015 05:37:28 +0000 (21:37 -0800)
committerJon A. Cruz <jonc@osg.samsung.com>
Fri, 11 Dec 2015 19:45:57 +0000 (19:45 +0000)
Change-Id: I6a63bdb958b016385aa20b3467c61c44a1824327
Signed-off-by: Hugues Ekra <hekra@cisco.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/4429
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
resource/include/OCRepresentation.h
resource/unittests/OCRepresentationTest.cpp

index 687b64c..4d1d24a 100644 (file)
@@ -168,8 +168,16 @@ namespace OC
 
                 if(x!= m_values.end())
                 {
-                    val = boost::get<T>(x->second);
-                    return true;
+                    try
+                    {
+                        val = boost::get<T>(x->second);
+                        return true;
+                    }
+                    catch (boost::bad_get& e)
+                    {
+                        val = T();
+                        return false;
+                    }
                 }
                 else
                 {
@@ -193,7 +201,14 @@ namespace OC
                 auto x = m_values.find(str);
                 if(x != m_values.end())
                 {
-                    val = boost::get<T>(x->second);
+                    try
+                    {
+                        val = boost::get<T>(x->second);
+                    }
+                    catch (boost::bad_get& e)
+                    {
+                        return val;
+                    }
                 }
                 return val;
             }
@@ -250,7 +265,15 @@ namespace OC
                     template<typename T>
                     T getValue() const
                     {
-                        return boost::get<T>(m_values[m_attrName]);
+                        try
+                        {
+                            return boost::get<T>(m_values[m_attrName]);
+                        }
+                        catch (boost::bad_get& e)
+                        {
+                            T val = T();
+                            return val;
+                        }
                     }
 
                     std::string getValueToString() const;
index befcdcb..5701fc2 100644 (file)
@@ -421,9 +421,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(nullptr, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -442,9 +442,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -463,9 +463,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         int badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<int>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -492,9 +492,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout);
 
         int badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<int>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -513,7 +513,7 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         (void)badout;
     }
 
@@ -535,9 +535,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource.getUri(), repout2.getUri());
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -556,9 +556,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -577,9 +577,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -598,9 +598,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -619,9 +619,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -640,9 +640,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -662,9 +662,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -683,9 +683,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -704,9 +704,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -726,9 +726,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -747,9 +747,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -768,9 +768,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -790,9 +790,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(repsource, repout2);
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -818,9 +818,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(inner2.getUri(), repout2[1].getUri());
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -860,9 +860,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(inner4.getUri(), repout2[1][1].getUri());
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }
@@ -922,9 +922,9 @@ namespace OCRepresentationTest
         EXPECT_EQ(inner8.getUri(), repout2[1][1][1].getUri());
 
         double badout;
-        EXPECT_THROW(badout = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<double>(AttrName, badout));
         string badoutstr;
-        EXPECT_THROW(badoutstr = rep[AttrName], boost::bad_get);
+        EXPECT_FALSE(rep.getValue<string>(AttrName, badoutstr));
         (void)badout;
         (void)badoutstr;
     }