/*! * \file test_i2c_impl.cpp * * Copyright (C) 2018 Christos Choutouridis * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * */ #include #include /*! * \warning * This is not right way of testing communication interfaces. We have to * implement a Mock object to simulate the slave's behavior. Until then * we have the following. */ namespace test_i2c { using namespace utl; // implementer class stub class I2C : public i2c_bb_i { friend i2c_bb_i; void SCL (bool x) { } // imaginary SCL pin functionality bool SDA (SDAMode mode, bool x) { // always read 0 back (which means always ACK) return 0; } void delay (uint32_t u) { // Pseudo-delay for (int i =0 ; i<10 ; ++i) ; } public: I2C (uint32_t clk =100000) noexcept : i2c_bb_i(clk) { start(); } }; TEST(Test_i2c_impl, TestConcept) { I2C i2c {}; EXPECT_EQ(I2c_i, true); } TEST(Test_i2c_impl, TestConstruction) { I2C i2c {}; EXPECT_EQ(i2c.clock(), 100000UL); } TEST(Test_i2c_impl, TestFunctionality) { I2C i2c {}; uint8_t b = 42; i2c.clock(200000UL); EXPECT_EQ(i2c.clock(), 200000UL); EXPECT_EQ(i2c.tx_data(b), true); EXPECT_EQ(i2c.rx_data(true), 0x00); EXPECT_EQ(i2c.rx_data(false), 0x00); } }