// Copyright(c) 2018, Intel Corporation // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. #include "gtest/gtest.h" #include using namespace opae::fpga::types; /** * @test except_01 * Given a src_location object
* When the object is constructed with OPAECXX_HERE
* Then it represents the current location in the source file.
*/ TEST(except_cxx_core, except_01) { src_location loc(OPAECXX_HERE); EXPECT_STREQ("test_except_cxx_core.cpp", loc.file()); EXPECT_STREQ("TestBody", loc.fn()); EXPECT_EQ(39, loc.line()); } /** * @test except_02 * Given an except object
* When the object is constructed with a src_location only
* Then then the fpga_result value is FPGA_EXCEPTION.
*/ TEST(except_cxx_core, except_02) { except e(OPAECXX_HERE); EXPECT_EQ(FPGA_EXCEPTION, e); } /** * @test except_03 * Given an except object
* When the object is constructed with an fpga_result and src_location
* Then then the fpga_result value matches the value passed to the * constructor
And the string returned by what() represents the fpga_result * and src_location.
*/ TEST(except_cxx_core, except_03) { except e(FPGA_INVALID_PARAM, OPAECXX_HERE); EXPECT_EQ(FPGA_INVALID_PARAM, e); EXPECT_STREQ("failed with error invalid parameter at: " "test_except_cxx_core.cpp:TestBody():67", e.what()); } /** * @test except_04 * Given a src_location
* When the object is copy-assigned
* Then the new object is a copy of the original.
*/ TEST(except_cxx_core, except_04) { src_location locA(__FILE__, __func__, __LINE__); src_location locB("someotherfile.txt", "some_other_fn", __LINE__); locB = locA; EXPECT_STREQ(locB.file(), locA.file()); EXPECT_STREQ(locB.fn(), locA.fn()); EXPECT_EQ(locB.line(), locA.line()); } /** * @test assert_ok_invalid_param * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_INVALID_PARAM * Then an exception of type invalid_param is thrown */ TEST(except_cxx_core, assert_ok_invalid_param) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_INVALID_PARAM), invalid_param); } /** * @test assert_ok_busy * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_BUSY * Then an exception of type busy is thrown */ TEST(except_cxx_core, assert_ok_busy) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_BUSY), busy); } /** * @test assert_ok_exception * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_EXCEPTION * Then an exception of type exception is thrown */ TEST(except_cxx_core, assert_ok_exception) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_EXCEPTION), exception); } /** * @test assert_ok_not_found * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_NOT_FOUND * Then an exception of type not_found is thrown */ TEST(except_cxx_core, assert_ok_not_found) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_NOT_FOUND), not_found); } /** * @test assert_ok_no_memory * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_NO_MEMORY * Then an exception of type no_memory is thrown */ TEST(except_cxx_core, assert_ok_no_memory) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_NO_MEMORY), no_memory); } /** * @test assert_ok_not_supported * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_NOT_SUPPORTED * Then an exception of type not_supported is thrown */ TEST(except_cxx_core, assert_ok_not_supported) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_NOT_SUPPORTED), not_supported); } /** * @test assert_ok_no_driver * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_NO_DRIVER * Then an exception of type no_driver is thrown */ TEST(except_cxx_core, assert_ok_no_driver) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_NO_DRIVER), no_driver); } /** * @test assert_ok_no_daemon * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_NO_DAEMON * Then an exception of type no_daemon is thrown */ TEST(except_cxx_core, assert_ok_no_daemon) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_NO_DAEMON), no_daemon); } /** * @test assert_ok_no_access * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_NO_ACCESS * Then an exception of type no_access is thrown */ TEST(except_cxx_core, assert_ok_no_access) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_NO_ACCESS), no_access); } /** * @test assert_ok_reconf_error * Given an assertion macro, ASSERT_FPGA_OK * When I use the macro with a result code of FPGA_RECONF_ERROR * Then an exception of type reconf_error is thrown */ TEST(except_cxx_core, assert_ok_reconf_error) { EXPECT_THROW(ASSERT_FPGA_OK(FPGA_RECONF_ERROR), reconf_error); }