1 #include <gtest/gtest.h>
2 #include <gmock/gmock.h>
6 #include <libnova/julian_day.h>
13 using ::testing::StrEq;
19 uint8_t *b1 = (uint8_t *)buf;
20 uint8_t *b2 = (uint8_t *)arg;
22 for (
int i = 0; i < n; i++)
26 *result_listener <<
"byte number " << i + 1 <<
" do not mach: " \
27 << (int)b1[i] <<
" != " << (
int)b2[i];
49 vsprintf(response, fmt, args);
53 MOCK_METHOD3(serial_write,
int (
const char *
cmd,
int nbytes,
int *nbytes_written));
65 TEST(CelestronDriverTest, set_simulation)
70 EXPECT_CALL(driver, serial_write(_, _, _)).Times(0);
71 EXPECT_CALL(driver, serial_read(_, _)).Times(0);
72 EXPECT_TRUE(driver.
echo());
75 TEST(CelestronDriverTest, echoCommand)
80 EXPECT_CALL(driver, serial_write(_, 2, _));
81 EXPECT_TRUE(driver.
echo());
84 TEST(CelestronDriverTest, syncCommand)
89 EXPECT_CALL(driver, serial_write(StrEq(
"S2000,2000"), 10, _));
90 EXPECT_TRUE(driver.
sync(3.0, 45.0,
false));
92 EXPECT_CALL(driver, serial_write(StrEq(
"s20000000,20000000"), 18, _));
93 EXPECT_TRUE(driver.
sync(3.0, 45.0,
true));
96 TEST(CelestronDriverTest, gotoCommands)
101 EXPECT_CALL(driver, serial_write(StrEq(
"R2000,2000"), 10, _));
102 EXPECT_TRUE(driver.
slew_radec(3.0, 45.0,
false));
104 EXPECT_CALL(driver, serial_write(StrEq(
"r20000000,20000000"), 18, _));
105 EXPECT_TRUE(driver.
slew_radec(3.0, 45.0,
true));
107 EXPECT_CALL(driver, serial_write(StrEq(
"B2000,2000"), 10, _));
108 EXPECT_TRUE(driver.
slew_azalt(45.0, 45.0,
false));
110 EXPECT_CALL(driver, serial_write(StrEq(
"b20000000,20000000"), 18, _));
111 EXPECT_TRUE(driver.
slew_azalt(45.0, 45.0,
true));
114 TEST(CelestronDriverTest, getCoordsCommands)
116 double ra,
dec, az, alt;
120 EXPECT_CALL(driver, serial_write(StrEq(
"E"), 1, _));
122 ASSERT_FLOAT_EQ(3.0,
ra);
123 ASSERT_FLOAT_EQ(45.0,
dec);
126 EXPECT_CALL(driver, serial_write(StrEq(
"e"), 1, _));
128 ASSERT_FLOAT_EQ(3.0,
ra);
129 ASSERT_FLOAT_EQ(45.0,
dec);
132 EXPECT_CALL(driver, serial_write(StrEq(
"Z"), 1, _));
133 EXPECT_TRUE(driver.
get_azalt(&az, &alt,
false));
134 ASSERT_FLOAT_EQ(45.0, az);
135 ASSERT_FLOAT_EQ(45.0, alt);
138 EXPECT_CALL(driver, serial_write(StrEq(
"z"), 1, _));
139 EXPECT_TRUE(driver.
get_azalt(&az, &alt,
true));
140 ASSERT_FLOAT_EQ(45.0, az);
141 ASSERT_FLOAT_EQ(45.0, alt);
144 TEST(CelestronDriverTest, slewingCommands)
150 TEST(CelestronDriverTest, getVersionCommands)
156 EXPECT_CALL(driver, serial_write(StrEq(
"V"), 1, _));
157 EXPECT_CALL(driver, serial_read(3, _));
159 ASSERT_STREQ(version,
"4.41");
162 uint8_t cmd1[] = {
'P', 1, 0x10, 0xfe, 0, 0, 0, 2};
163 EXPECT_CALL(driver, serial_write(MemEq(cmd1, 8), 8, _));
164 EXPECT_CALL(driver, serial_read(3, _));
166 ASSERT_STREQ(version,
"5.07");
169 uint8_t cmd2[] = {
'P', 1, 0x11, 0xfe, 0, 0, 0, 2};
170 EXPECT_CALL(driver, serial_write(MemEq(cmd2, 8), 8, _));
171 EXPECT_CALL(driver, serial_read(3, _));
173 ASSERT_STREQ(version,
"3.38");
176 TEST(CelestronDriverTest, setDateTime)
189 uint8_t cmd1[] = {
'H', 8, 35, 43, 12, 18, 17, 254, 0};
190 EXPECT_CALL(driver, serial_write(MemEq(cmd1, 9), 9, _));
194 TEST(CelestronDriverTest, setLocation)
199 uint8_t cmd1[] = {
'W', 40, 25, 0, 0, 3, 42, 1, 1};
200 EXPECT_CALL(driver, serial_write(MemEq(cmd1, 9), 9, _));
204 TEST(CelestronDriverTest, hibernate)
208 EXPECT_CALL(driver, serial_write(StrEq(
"x"), 1, _));
209 EXPECT_CALL(driver, serial_read(_, _)).Times(0);
250 ASSERT_EQ(0x0000U,
dd2nex(0.0));
251 ASSERT_EQ(0x2000U,
dd2nex(45.0));
252 ASSERT_EQ(0xc000U,
dd2nex(270.0));
253 ASSERT_EQ(0x0000U,
dd2nex(360.0));
254 ASSERT_EQ(0x12ceU,
dd2nex(26.4441));
256 ASSERT_EQ(0x12ceU,
dd2nex(360 + 26.4441));
257 ASSERT_EQ(0xc000U,
dd2nex(-90.0));
262 ASSERT_EQ(0x00000000U,
dd2pnex(0.0));
263 ASSERT_EQ(0x20000000U,
dd2pnex(45.0));
264 ASSERT_EQ(0xc0000000U,
dd2pnex(270.0));
265 ASSERT_EQ(0x00000000U,
dd2pnex(360.0));
266 ASSERT_EQ(0x12ab0500U,
dd2pnex(26.25193834305));
268 ASSERT_EQ(0x12ab0500U,
dd2pnex(360 + 26.25193834305));
269 ASSERT_EQ(0xc0000000U,
dd2pnex(-90.0));
274 ASSERT_FLOAT_EQ(0.0,
nex2dd(0x0000));
275 ASSERT_FLOAT_EQ(45.0,
nex2dd(0x2000));
276 ASSERT_FLOAT_EQ(270.0,
nex2dd(0xc000));
277 ASSERT_FLOAT_EQ(337.5,
nex2dd(0xf000));
278 ASSERT_FLOAT_EQ(26.4441,
nex2dd(0x12ce));
283 ASSERT_FLOAT_EQ(0.0,
pnex2dd(0x00000000));
284 ASSERT_FLOAT_EQ(45.0,
pnex2dd(0x20000000));
285 ASSERT_FLOAT_EQ(270.0,
pnex2dd(0xc0000000));
286 ASSERT_FLOAT_EQ(337.5,
pnex2dd(0xf0000000));
287 ASSERT_FLOAT_EQ(26.25193834305,
pnex2dd(0x12ab0500));
291 int main(
int argc,
char **argv)
296 ::testing::InitGoogleTest(&argc, argv);
297 ::testing::InitGoogleMock(&argc, argv);
298 return RUN_ALL_TESTS();
#define CELESTRON_DEV_DEC
bool slew_radec(double ra, double dec, bool precise)
bool get_azalt(double *az, double *alt, bool precise)
bool set_datetime(struct ln_date *utc, double utc_offset, bool dst=false, bool precise=false)
bool set_location(double longitude, double latitude)
bool sync(double ra, double dec, bool precise)
bool get_dev_firmware(int dev, char *version, size_t size)
bool get_radec(double *ra, double *dec, bool precise)
void set_simulation(bool enable)
bool get_version(char *version, size_t size)
bool slew_azalt(double az, double alt, bool precise)
MOCK_METHOD3(serial_write, int(const char *cmd, int nbytes, int *nbytes_written))
MOCK_METHOD2(serial_read, int(int nbytes, int *nbytes_read))
void set_response(const char *fmt,...)
int serial_read_section(char stop_char, int *nbytes_read)
double pnex2dd(uint32_t value)
uint32_t dd2pnex(double angle)
uint16_t dd2nex(double angle)
double trimDecAngle(double angle)
double nex2dd(uint32_t value)
static const loggerConf file_off
void configure(const std::string &outputFile, const loggerConf configuration, const int fileVerbosityLevel, const int screenVerbosityLevel)
Method to configure the logger. Called by the DEBUG_CONF() macro. To make implementation easier,...
static Logger & getInstance()
Method to get a reference to the object (i.e., Singleton) It is a static method.
MATCHER_P2(MemEq, buf, n, "")
int main(int argc, char **argv)
TEST(CelestronDriverTest, set_simulation)