From 78077c2bfa20496e938fd47fa0cc0c2e77a1b581 Mon Sep 17 00:00:00 2001 From: Miles Burton Date: Thu, 23 Jan 2025 19:07:39 +0000 Subject: [PATCH] fix: Restore basic unit tests --- .arduino-ci.yml | 12 +++- .arduino_ci/.arduino-ci.cpp | 6 ++ .arduino_ci/util/crc16.h | 25 +++++++ .github/workflows/arduino-ci.yml | 82 +++++++++++++++++++++++ .github/workflows/arduino_test_runner.yml | 39 ----------- Gemfile | 3 + test/TestDallasTemperature.cpp | 20 ++++++ test/TestDallasTemperature.cpp.disabled | 22 ------ test/basic_test.cpp | 8 --- 9 files changed, 145 insertions(+), 72 deletions(-) create mode 100644 .arduino_ci/.arduino-ci.cpp create mode 100644 .arduino_ci/util/crc16.h create mode 100644 .github/workflows/arduino-ci.yml delete mode 100644 .github/workflows/arduino_test_runner.yml create mode 100644 Gemfile create mode 100644 test/TestDallasTemperature.cpp delete mode 100644 test/TestDallasTemperature.cpp.disabled delete mode 100644 test/basic_test.cpp diff --git a/.arduino-ci.yml b/.arduino-ci.yml index 6890fc4..06ba67d 100644 --- a/.arduino-ci.yml +++ b/.arduino-ci.yml @@ -1,9 +1,15 @@ +# .arduino-ci.yml + +# Compilation settings compile: platforms: - uno libraries: - "OneWire" -skip_unittest: true -aux_libraries_for_ci: - - "OneWire" \ No newline at end of file +# Unit testing settings +unittest: + platforms: + - uno + libraries: + - "OneWire" \ No newline at end of file diff --git a/.arduino_ci/.arduino-ci.cpp b/.arduino_ci/.arduino-ci.cpp new file mode 100644 index 0000000..b1d76c5 --- /dev/null +++ b/.arduino_ci/.arduino-ci.cpp @@ -0,0 +1,6 @@ +#define ARDUINO_CI 1 + +// Mock OneWire GPIO functions +uint8_t digitalPinToBitMask(uint8_t pin) { return 1 << (pin % 8); } +void* digitalPinToPort(uint8_t pin) { static uint8_t dummy; return &dummy; } +void* portModeRegister(void* port) { return port; } \ No newline at end of file diff --git a/.arduino_ci/util/crc16.h b/.arduino_ci/util/crc16.h new file mode 100644 index 0000000..8da0e9a --- /dev/null +++ b/.arduino_ci/util/crc16.h @@ -0,0 +1,25 @@ +#ifndef CRC16_H +#define CRC16_H + +#ifdef __cplusplus +extern "C" { +#endif + +// Pure C implementation to replace the ASM version +static inline uint16_t _crc16_update(uint16_t crc, uint8_t data) { + unsigned int i; + crc ^= data; + for (i = 0; i < 8; ++i) { + if (crc & 1) + crc = (crc >> 1) ^ 0xA001; + else + crc = (crc >> 1); + } + return crc; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/.github/workflows/arduino-ci.yml b/.github/workflows/arduino-ci.yml new file mode 100644 index 0000000..cbec5ea --- /dev/null +++ b/.github/workflows/arduino-ci.yml @@ -0,0 +1,82 @@ +name: Arduino-Temperature-Control-Library Github Workflow + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install AVR dependencies + run: | + sudo apt-get update + sudo apt-get install -y gcc-avr avr-libc + + - name: Create required directories + run: | + mkdir -p $GITHUB_WORKSPACE/libraries + mkdir -p $GITHUB_WORKSPACE/.arduino15 + mkdir -p $GITHUB_WORKSPACE/Arduino + + - name: Setup Arduino CLI + uses: arduino/setup-arduino-cli@v1 + + - name: Configure Arduino CLI and install cores + run: | + arduino-cli config init + arduino-cli config set library.enable_unsafe_install true + arduino-cli config add board_manager.additional_urls https://arduino.esp8266.com/stable/package_esp8266com_index.json + arduino-cli core update-index + arduino-cli core install arduino:avr + arduino-cli core install esp8266:esp8266 + + - name: Install OneWire library + run: | + arduino-cli lib install OneWire + # Replace the CRC implementation directly in the OneWire library + cat > /home/runner/Arduino/libraries/OneWire/util/crc16.h << 'EOF' + #ifndef CRC16_H + #define CRC16_H + #include + + static inline uint16_t _crc16_update(uint16_t crc, uint8_t a) + { + crc ^= a; + for (uint8_t i = 0; i < 8; ++i) { + if (crc & 1) + crc = (crc >> 1) ^ 0xA001; + else + crc = (crc >> 1); + } + return crc; + } + + #endif + EOF + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2.0' + + - name: Install bundler + run: | + gem install bundler + + - name: Install dependencies + run: | + bundle install + + - name: List repository contents (for debugging) + run: | + ls -R + + - name: Remove Blacklisted Example Sketches + run: | + echo "Removing blacklisted example sketches..." + rm -f examples/ESP-WebServer/ESP-WebServer.ino + + - name: Run tests + run: | + bundle exec arduino_ci.rb diff --git a/.github/workflows/arduino_test_runner.yml b/.github/workflows/arduino_test_runner.yml deleted file mode 100644 index 75a9b82..0000000 --- a/.github/workflows/arduino_test_runner.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Arduino CI - -on: [push, pull_request] - -jobs: - test: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Create required directories - run: | - mkdir -p $GITHUB_WORKSPACE/libraries - mkdir -p $GITHUB_WORKSPACE/.arduino15 - mkdir -p $GITHUB_WORKSPACE/Arduino - - - name: Setup Arduino CLI - uses: arduino/setup-arduino-cli@v1 - - - name: Configure Arduino CLI - run: | - arduino-cli config init - arduino-cli config set library.enable_unsafe_install true - arduino-cli core update-index - arduino-cli core install arduino:avr - - - name: Install OneWire library - run: | - arduino-cli lib install OneWire - - - name: Set up Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '2.6' - - - name: Install Arduino CI - run: | - gem install arduino_ci -v 1.5.0 \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..4c747ca --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "arduino_ci", "~> 1.6.2" diff --git a/test/TestDallasTemperature.cpp b/test/TestDallasTemperature.cpp new file mode 100644 index 0000000..2f94e63 --- /dev/null +++ b/test/TestDallasTemperature.cpp @@ -0,0 +1,20 @@ +#include +#include + +unittest(test_initialization) { + OneWire oneWire(2); // Simulate OneWire on pin 2 + DallasTemperature sensors(&oneWire); + + sensors.begin(); + assertEqual(0, sensors.getDeviceCount()); +} + +unittest(test_parasite_power_mode) { + OneWire oneWire(2); + DallasTemperature sensors(&oneWire); + + sensors.begin(); + assertFalse(sensors.isParasitePowerMode()); +} + +unittest_main() \ No newline at end of file diff --git a/test/TestDallasTemperature.cpp.disabled b/test/TestDallasTemperature.cpp.disabled deleted file mode 100644 index 0abff11..0000000 --- a/test/TestDallasTemperature.cpp.disabled +++ /dev/null @@ -1,22 +0,0 @@ -// DISABLED AS NOT ALL STD LIBRARIES ARE MOCKED / INCLUDEABLE - -// #include -// #include - -// unittest(test_initialization) { -// OneWire oneWire(2); // Simulate OneWire on pin 2 -// DallasTemperature sensors(&oneWire); - -// sensors.begin(); -// assertEqual(0, sensors.getDeviceCount()); -// } - -// unittest(test_parasite_power_mode) { -// OneWire oneWire(2); -// DallasTemperature sensors(&oneWire); - -// sensors.begin(); -// assertFalse(sensors.isParasitePowerMode()); -// } - -// -------- \ No newline at end of file diff --git a/test/basic_test.cpp b/test/basic_test.cpp deleted file mode 100644 index 16f2b01..0000000 --- a/test/basic_test.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include - -unittest(basic_sanity_check) { - assertTrue(true); -} - -unittest_main()