diff --git a/hal/src/main/native/include/MockData/DriverStationData.h b/hal/src/main/native/include/MockData/DriverStationData.h index b5df191d37..93cccb685b 100644 --- a/hal/src/main/native/include/MockData/DriverStationData.h +++ b/hal/src/main/native/include/MockData/DriverStationData.h @@ -86,6 +86,10 @@ void HALSIM_RegisterDriverStationAllCallbacks(HAL_NotifyCallback callback, void HALSIM_NotifyDriverStationNewData(void); +void HALSIM_RegisterDriverStationAllCallbacks(HAL_NotifyCallback callback, + void* param, + HAL_Bool initialNotify); + #ifdef __cplusplus } // extern "C" #endif diff --git a/hal/src/test/native/cpp/MockData/AnalogInDataTests.cpp b/hal/src/test/native/cpp/MockData/AnalogInDataTests.cpp new file mode 100644 index 0000000000..ad99ad5fdf --- /dev/null +++ b/hal/src/test/native/cpp/MockData/AnalogInDataTests.cpp @@ -0,0 +1,80 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/AnalogInput.h" +#include "HAL/HAL.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/AnalogInData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestAnalogInCallbackName; +HAL_Value gTestAnalogInCallbackValue; + +void TestAnalogInInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestAnalogInCallbackName = name; + gTestAnalogInCallbackValue = *value; +} + +TEST(AnalogInSimTests, TestAnalogInInitialization) { + const int INDEX_TO_TEST = 1; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterAnalogInInitializedCallback( + INDEX_TO_TEST, &TestAnalogInInitializationCallback, &callbackParam, + false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + HAL_PortHandle portHandle; + HAL_DigitalHandle analogInHandle; + + // Use out of range index + status = 0; + portHandle = 8000; + gTestAnalogInCallbackName = "Unset"; + analogInHandle = HAL_InitializeAnalogInputPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, analogInHandle); + EXPECT_EQ(PARAMETER_OUT_OF_RANGE, status); + EXPECT_STREQ("Unset", gTestAnalogInCallbackName.c_str()); + + // Successful setup + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestAnalogInCallbackName = "Unset"; + analogInHandle = HAL_InitializeAnalogInputPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != analogInHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestAnalogInCallbackName.c_str()); + + // Double initialize... should fail + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestAnalogInCallbackName = "Unset"; + analogInHandle = HAL_InitializeAnalogInputPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, analogInHandle); + EXPECT_EQ(RESOURCE_IS_ALLOCATED, status); + EXPECT_STREQ("Unset", gTestAnalogInCallbackName.c_str()); + + // Reset, should allow you to re-register + hal::HandleBase::ResetGlobalHandles(); + HALSIM_ResetAnalogInData(INDEX_TO_TEST); + callbackId = HALSIM_RegisterAnalogInInitializedCallback( + INDEX_TO_TEST, &TestAnalogInInitializationCallback, &callbackParam, + false); + + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestAnalogInCallbackName = "Unset"; + analogInHandle = HAL_InitializeAnalogInputPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != analogInHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestAnalogInCallbackName.c_str()); +} +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/AnalogOutDataTests.cpp b/hal/src/test/native/cpp/MockData/AnalogOutDataTests.cpp new file mode 100644 index 0000000000..0b7a908154 --- /dev/null +++ b/hal/src/test/native/cpp/MockData/AnalogOutDataTests.cpp @@ -0,0 +1,80 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/AnalogOutput.h" +#include "HAL/HAL.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/AnalogOutData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestAnalogOutCallbackName; +HAL_Value gTestAnalogOutCallbackValue; + +void TestAnalogOutInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestAnalogOutCallbackName = name; + gTestAnalogOutCallbackValue = *value; +} + +TEST(AnalogOutSimTests, TestAnalogOutInitialization) { + const int INDEX_TO_TEST = 1; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterAnalogOutInitializedCallback( + INDEX_TO_TEST, &TestAnalogOutInitializationCallback, &callbackParam, + false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + HAL_PortHandle portHandle; + HAL_DigitalHandle analogOutHandle; + + // Use out of range index + status = 0; + portHandle = 8000; + gTestAnalogOutCallbackName = "Unset"; + analogOutHandle = HAL_InitializeAnalogOutputPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, analogOutHandle); + EXPECT_EQ(PARAMETER_OUT_OF_RANGE, status); + EXPECT_STREQ("Unset", gTestAnalogOutCallbackName.c_str()); + + // Successful setup + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestAnalogOutCallbackName = "Unset"; + analogOutHandle = HAL_InitializeAnalogOutputPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != analogOutHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestAnalogOutCallbackName.c_str()); + + // Double initialize... should fail + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestAnalogOutCallbackName = "Unset"; + analogOutHandle = HAL_InitializeAnalogOutputPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, analogOutHandle); + EXPECT_EQ(RESOURCE_IS_ALLOCATED, status); + EXPECT_STREQ("Unset", gTestAnalogOutCallbackName.c_str()); + + // Reset, should allow you to re-register + hal::HandleBase::ResetGlobalHandles(); + HALSIM_ResetAnalogOutData(INDEX_TO_TEST); + callbackId = HALSIM_RegisterAnalogOutInitializedCallback( + INDEX_TO_TEST, &TestAnalogOutInitializationCallback, &callbackParam, + false); + + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestAnalogOutCallbackName = "Unset"; + analogOutHandle = HAL_InitializeAnalogOutputPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != analogOutHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestAnalogOutCallbackName.c_str()); +} +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/DIODataTests.cpp b/hal/src/test/native/cpp/MockData/DIODataTests.cpp new file mode 100644 index 0000000000..4529c7814e --- /dev/null +++ b/hal/src/test/native/cpp/MockData/DIODataTests.cpp @@ -0,0 +1,81 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/DIO.h" +#include "HAL/HAL.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/DIOData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestDigitalIoCallbackName; +HAL_Value gTestDigitalIoCallbackValue; + +void TestDigitalIoInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestDigitalIoCallbackName = name; + gTestDigitalIoCallbackValue = *value; +} + +TEST(DigitalIoSimTests, TestDigitalIoInitialization) { + const int INDEX_TO_TEST = 3; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterDIOInitializedCallback( + INDEX_TO_TEST, &TestDigitalIoInitializationCallback, &callbackParam, + false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + HAL_PortHandle portHandle; + HAL_DigitalHandle digitalIoHandle; + + // Use out of range index + status = 0; + portHandle = 8000; + gTestDigitalIoCallbackName = "Unset"; + digitalIoHandle = HAL_InitializeDIOPort(portHandle, true, &status); + EXPECT_EQ(HAL_kInvalidHandle, digitalIoHandle); + EXPECT_EQ(PARAMETER_OUT_OF_RANGE, status); + EXPECT_STREQ("Unset", gTestDigitalIoCallbackName.c_str()); + + // Successful setup + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestDigitalIoCallbackName = "Unset"; + digitalIoHandle = HAL_InitializeDIOPort(portHandle, true, &status); + EXPECT_TRUE(HAL_kInvalidHandle != digitalIoHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestDigitalIoCallbackName.c_str()); + + // Double initialize... should fail + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestDigitalIoCallbackName = "Unset"; + digitalIoHandle = HAL_InitializeDIOPort(portHandle, true, &status); + EXPECT_EQ(HAL_kInvalidHandle, digitalIoHandle); + EXPECT_EQ(RESOURCE_IS_ALLOCATED, status); + EXPECT_STREQ("Unset", gTestDigitalIoCallbackName.c_str()); + + // Reset, should allow you to re-register + hal::HandleBase::ResetGlobalHandles(); + HALSIM_ResetDIOData(INDEX_TO_TEST); + callbackId = HALSIM_RegisterDIOInitializedCallback( + INDEX_TO_TEST, &TestDigitalIoInitializationCallback, &callbackParam, + false); + + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestDigitalIoCallbackName = "Unset"; + digitalIoHandle = HAL_InitializeDIOPort(portHandle, true, &status); + EXPECT_TRUE(HAL_kInvalidHandle != digitalIoHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestDigitalIoCallbackName.c_str()); +} + +} // namespace hal diff --git a/hal/src/test/native/cpp/DriverStationTests.cpp b/hal/src/test/native/cpp/MockData/DriverStationDataTests.cpp similarity index 100% rename from hal/src/test/native/cpp/DriverStationTests.cpp rename to hal/src/test/native/cpp/MockData/DriverStationDataTests.cpp diff --git a/hal/src/test/native/cpp/MockData/I2CDataTests.cpp b/hal/src/test/native/cpp/MockData/I2CDataTests.cpp new file mode 100644 index 0000000000..25baf98868 --- /dev/null +++ b/hal/src/test/native/cpp/MockData/I2CDataTests.cpp @@ -0,0 +1,43 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/HAL.h" +#include "HAL/I2C.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/I2CData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestI2CCallbackName; +HAL_Value gTestI2CCallbackValue; + +void TestI2CInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestI2CCallbackName = name; + gTestI2CCallbackValue = *value; +} + +TEST(I2CSimTests, TestI2CInitialization) { + const int INDEX_TO_TEST = 1; + + int32_t status; + HAL_I2CPort port; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterI2CInitializedCallback( + INDEX_TO_TEST, &TestI2CInitializationCallback, &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + status = 0; + port = HAL_I2C_kMXP; + gTestI2CCallbackName = "Unset"; + HAL_InitializeI2C(port, &status); + EXPECT_STREQ("Initialized", gTestI2CCallbackName.c_str()); +} + +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/PCMDataTests.cpp b/hal/src/test/native/cpp/MockData/PCMDataTests.cpp new file mode 100644 index 0000000000..27f66a69ae --- /dev/null +++ b/hal/src/test/native/cpp/MockData/PCMDataTests.cpp @@ -0,0 +1,83 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/HAL.h" +#include "HAL/Solenoid.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/PCMData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestSolenoidCallbackName; +HAL_Value gTestSolenoidCallbackValue; + +void TestSolenoidInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestSolenoidCallbackName = name; + gTestSolenoidCallbackValue = *value; +} + +TEST(SolenoidSimTests, TestSolenoidInitialization) { + const int MODULE_TO_TEST = 2; + const int CHANNEL_TO_TEST = 3; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterPCMSolenoidInitializedCallback( + MODULE_TO_TEST, CHANNEL_TO_TEST, &TestSolenoidInitializationCallback, + &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + HAL_PortHandle portHandle; + HAL_DigitalHandle solenoidHandle; + + // Use out of range index + status = 0; + portHandle = 8000; + gTestSolenoidCallbackName = "Unset"; + solenoidHandle = HAL_InitializeSolenoidPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, solenoidHandle); + EXPECT_EQ(HAL_HANDLE_ERROR, status); + EXPECT_STREQ("Unset", gTestSolenoidCallbackName.c_str()); + + // Successful setup + status = 0; + portHandle = HAL_GetPortWithModule(MODULE_TO_TEST, CHANNEL_TO_TEST); + gTestSolenoidCallbackName = "Unset"; + solenoidHandle = HAL_InitializeSolenoidPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != solenoidHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("SolenoidInitialized", gTestSolenoidCallbackName.c_str()); + + // Double initialize... should fail + status = 0; + portHandle = HAL_GetPortWithModule(MODULE_TO_TEST, CHANNEL_TO_TEST); + gTestSolenoidCallbackName = "Unset"; + solenoidHandle = HAL_InitializeSolenoidPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, solenoidHandle); + EXPECT_EQ(NO_AVAILABLE_RESOURCES, status); + EXPECT_STREQ("Unset", gTestSolenoidCallbackName.c_str()); + + // Reset, should allow you to re-register + hal::HandleBase::ResetGlobalHandles(); + HALSIM_ResetPCMData(MODULE_TO_TEST); + callbackId = HALSIM_RegisterPCMSolenoidInitializedCallback( + MODULE_TO_TEST, CHANNEL_TO_TEST, &TestSolenoidInitializationCallback, + &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + status = 0; + portHandle = HAL_GetPortWithModule(MODULE_TO_TEST, CHANNEL_TO_TEST); + gTestSolenoidCallbackName = "Unset"; + solenoidHandle = HAL_InitializeSolenoidPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != solenoidHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("SolenoidInitialized", gTestSolenoidCallbackName.c_str()); +} + +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/PDPDataTests.cpp b/hal/src/test/native/cpp/MockData/PDPDataTests.cpp new file mode 100644 index 0000000000..a745e70aa0 --- /dev/null +++ b/hal/src/test/native/cpp/MockData/PDPDataTests.cpp @@ -0,0 +1,43 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/HAL.h" +#include "HAL/PDP.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/PDPData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestPdpCallbackName; +HAL_Value gTestPdpCallbackValue; + +void TestPdpInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestPdpCallbackName = name; + gTestPdpCallbackValue = *value; +} + +TEST(PdpSimTests, TestPdpInitialization) { + const int INDEX_TO_TEST = 1; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterPDPInitializedCallback( + INDEX_TO_TEST, &TestPdpInitializationCallback, &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + + // Use out of range index + status = 0; + gTestPdpCallbackName = "Unset"; + HAL_InitializePDP(INDEX_TO_TEST, &status); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestPdpCallbackName.c_str()); +} + +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/PWMDataTests.cpp b/hal/src/test/native/cpp/MockData/PWMDataTests.cpp new file mode 100644 index 0000000000..9210845c1e --- /dev/null +++ b/hal/src/test/native/cpp/MockData/PWMDataTests.cpp @@ -0,0 +1,78 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/HAL.h" +#include "HAL/PWM.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/PWMData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestPwmCallbackName; +HAL_Value gTestPwmCallbackValue; + +void TestPwmInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestPwmCallbackName = name; + gTestPwmCallbackValue = *value; +} + +TEST(PWMSimTests, TestPwmInitialization) { + const int INDEX_TO_TEST = 7; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterPWMInitializedCallback( + INDEX_TO_TEST, &TestPwmInitializationCallback, &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + HAL_PortHandle portHandle; + HAL_DigitalHandle pwmHandle; + + // Use out of range index + status = 0; + portHandle = 8000; + gTestPwmCallbackName = "Unset"; + pwmHandle = HAL_InitializePWMPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, pwmHandle); + EXPECT_EQ(PARAMETER_OUT_OF_RANGE, status); + EXPECT_STREQ("Unset", gTestPwmCallbackName.c_str()); + + // Successful setup + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestPwmCallbackName = "Unset"; + pwmHandle = HAL_InitializePWMPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != pwmHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestPwmCallbackName.c_str()); + + // Double initialize... should fail + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestPwmCallbackName = "Unset"; + pwmHandle = HAL_InitializePWMPort(portHandle, &status); + EXPECT_EQ(HAL_kInvalidHandle, pwmHandle); + EXPECT_EQ(RESOURCE_IS_ALLOCATED, status); + EXPECT_STREQ("Unset", gTestPwmCallbackName.c_str()); + + // Reset, should allow you to re-register + hal::HandleBase::ResetGlobalHandles(); + HALSIM_ResetPWMData(INDEX_TO_TEST); + callbackId = HALSIM_RegisterPWMInitializedCallback( + INDEX_TO_TEST, &TestPwmInitializationCallback, &callbackParam, false); + + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestPwmCallbackName = "Unset"; + pwmHandle = HAL_InitializePWMPort(portHandle, &status); + EXPECT_TRUE(HAL_kInvalidHandle != pwmHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("Initialized", gTestPwmCallbackName.c_str()); +} +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/RelayDataTests.cpp b/hal/src/test/native/cpp/MockData/RelayDataTests.cpp new file mode 100644 index 0000000000..0015dac1a2 --- /dev/null +++ b/hal/src/test/native/cpp/MockData/RelayDataTests.cpp @@ -0,0 +1,79 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/HAL.h" +#include "HAL/Relay.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/RelayData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestRelayCallbackName; +HAL_Value gTestRelayCallbackValue; + +void TestRelayInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestRelayCallbackName = name; + gTestRelayCallbackValue = *value; +} + +TEST(RelaySimTests, TestRelayInitialization) { + const int INDEX_TO_TEST = 3; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterRelayInitializedForwardCallback( + INDEX_TO_TEST, &TestRelayInitializationCallback, &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + int32_t status; + HAL_PortHandle portHandle; + HAL_DigitalHandle pdpHandle; + + // Use out of range index + status = 0; + portHandle = 8000; + gTestRelayCallbackName = "Unset"; + pdpHandle = HAL_InitializeRelayPort(portHandle, true, &status); + EXPECT_EQ(HAL_kInvalidHandle, pdpHandle); + EXPECT_EQ(PARAMETER_OUT_OF_RANGE, status); + EXPECT_STREQ("Unset", gTestRelayCallbackName.c_str()); + + // Successful setup + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestRelayCallbackName = "Unset"; + pdpHandle = HAL_InitializeRelayPort(portHandle, true, &status); + EXPECT_TRUE(HAL_kInvalidHandle != pdpHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("InitializedForward", gTestRelayCallbackName.c_str()); + + // Double initialize... should fail + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestRelayCallbackName = "Unset"; + pdpHandle = HAL_InitializeRelayPort(portHandle, true, &status); + EXPECT_EQ(HAL_kInvalidHandle, pdpHandle); + EXPECT_EQ(RESOURCE_IS_ALLOCATED, status); + EXPECT_STREQ("Unset", gTestRelayCallbackName.c_str()); + + // Reset, should allow you to re-register + hal::HandleBase::ResetGlobalHandles(); + HALSIM_ResetRelayData(INDEX_TO_TEST); + callbackId = HALSIM_RegisterRelayInitializedForwardCallback( + INDEX_TO_TEST, &TestRelayInitializationCallback, &callbackParam, false); + + status = 0; + portHandle = HAL_GetPort(INDEX_TO_TEST); + gTestRelayCallbackName = "Unset"; + pdpHandle = HAL_InitializeRelayPort(portHandle, true, &status); + EXPECT_TRUE(HAL_kInvalidHandle != pdpHandle); + EXPECT_EQ(0, status); + EXPECT_STREQ("InitializedForward", gTestRelayCallbackName.c_str()); +} + +} // namespace hal diff --git a/hal/src/test/native/cpp/MockData/SPIDataTests.cpp b/hal/src/test/native/cpp/MockData/SPIDataTests.cpp new file mode 100644 index 0000000000..e75fe02d76 --- /dev/null +++ b/hal/src/test/native/cpp/MockData/SPIDataTests.cpp @@ -0,0 +1,43 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2015-2017 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "HAL/HAL.h" +#include "HAL/SPI.h" +#include "HAL/handles/HandlesInternal.h" +#include "MockData/SPIData.h" +#include "gtest/gtest.h" + +namespace hal { + +std::string gTestSpiCallbackName; +HAL_Value gTestSpiCallbackValue; + +void TestSpiInitializationCallback(const char* name, void* param, + const struct HAL_Value* value) { + gTestSpiCallbackName = name; + gTestSpiCallbackValue = *value; +} + +TEST(SpiSimTests, TestSpiInitialization) { + const int INDEX_TO_TEST = 2; + + int32_t status; + HAL_SPIPort port; + + int callbackParam = 0; + int callbackId = HALSIM_RegisterSPIInitializedCallback( + INDEX_TO_TEST, &TestSpiInitializationCallback, &callbackParam, false); + ASSERT_TRUE(0 != callbackId); + + status = 0; + port = HAL_SPI_kOnboardCS2; + gTestSpiCallbackName = "Unset"; + HAL_InitializeSPI(port, &status); + EXPECT_STREQ("Initialized", gTestSpiCallbackName.c_str()); +} + +} // namespace hal