RegisterWizard_Test.cpp
Go to the documentation of this file.
00001 #include <gtest/gtest.h>
00002 #include <boost/shared_ptr.hpp>
00003 #include "robot_instance/RegisterWizard.h"
00004 
00005 class TestProperties : public RegisterProperties
00006 {
00007 public:
00008     TestProperties();
00009     virtual ~TestProperties() {};
00010 };
00011 
00012 TestProperties::TestProperties()
00013 {
00014     REGISTER_CERTIFICATE_VALUE = 0x4000;
00015     REGISTER_CERTIFICATE_MASK  = 0xF000;
00016 
00017     isWritable = true;
00018 
00019     registerProperty["flag1"] = PropertyDef("flag1", "0=disable,1=enable", BitMinion::BIT_ZERO_INDEX,   BitMinion::ONE_BIT_MASK);
00020     registerProperty["flag2"] = PropertyDef("flag2", "0=engage,1=release", BitMinion::BIT_ONE_INDEX,    BitMinion::ONE_BIT_MASK);
00021     registerProperty["value"] = PropertyDef("value", "repeat count",       BitMinion::BIT_EIGHT_INDEX,  BitMinion::FOUR_BIT_MASK);
00022 
00023     for (PropertyDefMap::iterator it = registerProperty.begin(); it != registerProperty.end(); it++)
00024     {
00025         registerPropertyVector.push_back(&(it->second));
00026     }
00027 
00028     sort(registerPropertyVector.begin(), registerPropertyVector.end(), comparePropertyDefPointers());
00029 }
00030 
00031 class RegisterWizardTest : public ::testing::Test
00032 {
00033 protected:
00034     virtual void SetUp()
00035     {
00036         testProperties.reset(new TestProperties());
00037         registerWizard.reset(new RegisterWizard(testProperties));
00038     }
00039 
00040     virtual void TearDown()
00041     {
00042     }
00043 
00044     boost::shared_ptr<TestProperties> testProperties;
00045     boost::shared_ptr<RegisterWizard> registerWizard;
00046     BitWizard<uint16_t>               bw;
00047     std::string                       prop;
00048     BitMinion::BitIndexEnumType       bitIndex;
00049     uint16_t                          registerValue;
00050     uint16_t                          checkValue;
00051 };
00052 
00053 TEST(RegisterWizardTest_NoFixture, Constructors)
00054 {
00055     boost::shared_ptr<TestProperties> testProperties;
00056     ASSERT_NO_THROW(RegisterWizard registerWizard(testProperties));
00057 }
00058 
00059 TEST_F(RegisterWizardTest, CheckAndMaskRegister)
00060 {
00061     registerValue = 0;
00062     registerWizard->certifyRegister(registerValue);
00063     EXPECT_EQ(testProperties->REGISTER_CERTIFICATE_VALUE, registerValue);
00064 
00065     registerValue = 0xF000;
00066     registerWizard->certifyRegister(registerValue);
00067     EXPECT_EQ(testProperties->REGISTER_CERTIFICATE_VALUE, registerValue);
00068 
00069     registerValue = 0x00FF;
00070     registerWizard->certifyRegister(registerValue);
00071     EXPECT_EQ(testProperties->REGISTER_CERTIFICATE_VALUE | 0x00FF, registerValue);
00072 }
00073 
00074 TEST_F(RegisterWizardTest, IsRegisterValid)
00075 {
00076     registerValue = 0;
00077     EXPECT_FALSE(registerWizard->isRegisterCertified(registerValue));
00078 
00079     registerValue = 0x1278;
00080     EXPECT_FALSE(registerWizard->isRegisterCertified(registerValue));
00081 
00082     registerValue = testProperties->REGISTER_CERTIFICATE_VALUE;
00083     EXPECT_TRUE(registerWizard->isRegisterCertified(registerValue));
00084 
00085     registerValue = 0x1278;
00086     registerWizard->certifyRegister(registerValue);
00087     EXPECT_TRUE(registerWizard->isRegisterCertified(registerValue));
00088 }
00089 
00090 TEST_F(RegisterWizardTest, GetSetFlag1)
00091 {
00092     prop = std::string("flag1");
00093     bitIndex = BitMinion::BIT_ZERO_INDEX;
00094 
00095     registerValue = 0;
00096     checkValue = testProperties->REGISTER_CERTIFICATE_VALUE;
00097 
00098     registerWizard->setRegisterValue(true, prop, registerValue);
00099     bw.setBit(true, bitIndex, checkValue);
00100     EXPECT_EQ(checkValue, registerValue);
00101     EXPECT_EQ(0x1, registerWizard->getRegisterValue(prop, registerValue));
00102 
00103     registerWizard->setRegisterValue(false, prop, registerValue);
00104     EXPECT_EQ(testProperties->REGISTER_CERTIFICATE_VALUE, registerValue);
00105     EXPECT_EQ(0x0, registerWizard->getRegisterValue(prop, registerValue));
00106 }
00107 
00108 TEST_F(RegisterWizardTest, GetSetFlag2)
00109 {
00110     prop     = std::string("flag2");
00111     bitIndex = BitMinion::BIT_ONE_INDEX;
00112 
00113     registerValue = 0;
00114     checkValue    = testProperties->REGISTER_CERTIFICATE_VALUE;
00115 
00116     registerWizard->setRegisterValue(true, prop, registerValue);
00117     bw.setBit(true, bitIndex, checkValue);
00118     EXPECT_EQ(checkValue, registerValue);
00119     EXPECT_EQ(0x1, registerWizard->getRegisterValue(prop, registerValue));
00120 
00121     registerWizard->setRegisterValue(false, prop, registerValue);
00122     EXPECT_EQ(testProperties->REGISTER_CERTIFICATE_VALUE, registerValue);
00123     EXPECT_EQ(0x0, registerWizard->getRegisterValue(prop, registerValue));
00124 }
00125 
00126 TEST_F(RegisterWizardTest, GetSetValue)
00127 {
00128     prop     = std::string("value");
00129     bitIndex = BitMinion::BIT_EIGHT_INDEX;
00130 
00131     registerValue = 0;
00132     checkValue    = testProperties->REGISTER_CERTIFICATE_VALUE;
00133 
00134     uint16_t controlValue = 12;
00135 
00136     registerWizard->setRegisterValue(controlValue, prop, registerValue);
00137     bw.setBits(controlValue, bitIndex, BitMinion::FOUR_BIT_MASK, checkValue);
00138     EXPECT_EQ(checkValue, registerValue);
00139     EXPECT_EQ(controlValue, registerWizard->getRegisterValue(prop, registerValue));
00140 
00141     registerWizard->setRegisterValue(0x0, prop, registerValue);
00142     EXPECT_EQ(testProperties->REGISTER_CERTIFICATE_VALUE, registerValue);
00143     EXPECT_EQ(0x0, registerWizard->getRegisterValue(prop, registerValue));
00144 }
00145 
00146 TEST_F(RegisterWizardTest, GetSetInvalid)
00147 {
00148     prop = std::string("INVALID");
00149 
00150     uint16_t temp = 0;
00151 
00152     EXPECT_THROW(registerWizard->setRegisterValue(true, prop, temp), std::out_of_range);
00153     EXPECT_THROW(registerWizard->getRegisterValue(prop, temp), std::out_of_range);
00154 }
00155 
00156 TEST_F(RegisterWizardTest, RegisterToString)
00157 {
00158     registerValue = 0;
00159     EXPECT_EQ(std::string("Register is invalid."), registerWizard->registerToString(registerValue));
00160 
00161     registerValue = 0x4303;
00162     EXPECT_NE(std::string("Register is invalid."), registerWizard->registerToString(registerValue));
00163     std::cout << registerWizard->registerToString(registerValue) << std::endl;
00164 }
00165 
00166 TEST_F(RegisterWizardTest, ChangedRegisterProperties)
00167 {
00168     uint16_t flag0 = 0;
00169     uint16_t flag1 = (1 << BitMinion::BIT_ZERO_INDEX);
00170     uint16_t flag2 = (1 << BitMinion::BIT_ONE_INDEX);
00171     uint16_t flag3 = flag1 | flag2;
00172 
00173     std::vector< std::string > changed;
00174     EXPECT_NO_THROW(changed = registerWizard->changedRegisterProperties(0, 0));
00175 
00176     changed = registerWizard->changedRegisterProperties(flag0, flag0);
00177     EXPECT_EQ(0, changed.size());
00178 
00179     changed = registerWizard->changedRegisterProperties(flag0, flag1);
00180     EXPECT_EQ(1, changed.size());
00181     EXPECT_STREQ("flag1", changed[0].c_str());
00182 
00183     changed = registerWizard->changedRegisterProperties(flag1, flag0);
00184     EXPECT_EQ(1, changed.size());
00185     EXPECT_STREQ("flag1", changed[0].c_str());
00186 
00187     changed = registerWizard->changedRegisterProperties(flag0, flag2);
00188     EXPECT_EQ(1, changed.size());
00189     EXPECT_STREQ("flag2", changed[0].c_str());
00190 
00191     changed = registerWizard->changedRegisterProperties(flag2, flag0);
00192     EXPECT_EQ(1, changed.size());
00193     EXPECT_STREQ("flag2", changed[0].c_str());
00194 
00195     changed = registerWizard->changedRegisterProperties(flag0, flag3);
00196     EXPECT_EQ(2, changed.size());
00197     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag1") != changed.end());
00198     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag2") != changed.end());
00199 
00200     changed = registerWizard->changedRegisterProperties(flag3, flag0);
00201     EXPECT_EQ(2, changed.size());
00202     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag1") != changed.end());
00203     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag2") != changed.end());
00204 }
00205 
00206 TEST_F(RegisterWizardTest, ChangedRegisterPropertiesMasked)
00207 {
00208     uint16_t flag0 = 0;
00209     uint16_t flag1 = (1 << BitMinion::BIT_ZERO_INDEX);
00210     uint16_t flag2 = (1 << BitMinion::BIT_ONE_INDEX);
00211     uint16_t flag3 = flag1 | flag2;
00212 
00213     std::vector< std::string > changed;
00214     EXPECT_NO_THROW(changed = registerWizard->changedRegisterProperties(0, 0, 0));
00215 
00216     changed = registerWizard->changedRegisterProperties(flag0, flag0, flag0);
00217     EXPECT_EQ(0, changed.size());
00218 
00219     changed = registerWizard->changedRegisterProperties(flag0, flag0, flag1);
00220     EXPECT_EQ(0, changed.size());
00221 
00222     changed = registerWizard->changedRegisterProperties(flag0, flag1, flag1);
00223     EXPECT_EQ(1, changed.size());
00224     EXPECT_STREQ("flag1", changed[0].c_str());
00225 
00226     changed = registerWizard->changedRegisterProperties(flag0, flag1, flag2);
00227     EXPECT_EQ(0, changed.size());
00228 
00229     changed = registerWizard->changedRegisterProperties(flag0, flag1, flag3);
00230     EXPECT_EQ(1, changed.size());
00231     EXPECT_STREQ("flag1", changed[0].c_str());
00232 
00233     changed = registerWizard->changedRegisterProperties(flag0, flag3, flag1);
00234     EXPECT_EQ(1, changed.size());
00235     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag1") != changed.end());
00236 
00237     changed = registerWizard->changedRegisterProperties(flag0, flag3, flag3);
00238     EXPECT_EQ(2, changed.size());
00239     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag1") != changed.end());
00240     EXPECT_TRUE(std::find(changed.begin(), changed.end(), "flag2") != changed.end());
00241 }
00242 
00243 TEST_F(RegisterWizardTest, Has)
00244 {
00245     EXPECT_TRUE(registerWizard->has("flag1"));
00246     EXPECT_TRUE(registerWizard->has("flag2"));
00247     EXPECT_TRUE(registerWizard->has("value"));
00248     EXPECT_FALSE(registerWizard->has("asdf"));
00249 }
00250 
00251 TEST_F(RegisterWizardTest, GetRegisterProperties)
00252 {
00253     std::vector< std::string > properties = registerWizard->getRegisterProperties();
00254 
00255     EXPECT_EQ(3, properties.size());
00256     EXPECT_STREQ("flag1", properties[0].c_str());
00257     EXPECT_STREQ("flag2", properties[1].c_str());
00258     EXPECT_STREQ("value", properties[2].c_str());
00259 }
00260 
00261 TEST_F(RegisterWizardTest, IsWritable)
00262 {
00263     EXPECT_TRUE(registerWizard->isWritable());
00264 }
00265 
00266 int main(int argc, char** argv)
00267 {
00268     testing::InitGoogleTest(&argc, argv);
00269     return RUN_ALL_TESTS();
00270 }


robot_instance
Author(s):
autogenerated on Sat Jun 8 2019 20:43:12