Giter Site home page Giter Site logo

arduino-ci / arduino_ci Goto Github PK

View Code? Open in Web Editor NEW
110.0 9.0 34.0 2.31 MB

Unit testing and Continuous Integration (CI) for Arduino libraries, from a Ruby gem

License: Apache License 2.0

Ruby 0.82% Shell 0.01% C++ 0.89% C 98.27%
arduino ci unit-testing-framework

arduino_ci's Issues

Add Windows & Appveyor CI support

Issue / Feature Request Summary

It's time to add Windows as a supported OS. There should be no technical limitation here beyond the difficulty of developing it without a Windows machine (relying instead on Appveyor directly).

At the moment, that failure due to lack of OS support (originally raised by @tomduff) is expressed in this form:

C:\User\someone\GitHub\arduino_ci\SampleProjects\DoSomething>bundle exec arduino_ci_remote.rb
Installing library under test... Traceback (most recent call last):
        5: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/bin/arduino_ci_remote.rb:23:in `<main>'
        4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/bin/arduino_ci_remote.rb:23:in `load'
        3: from C:/User/someone/Documents/GitHub/arduino_ci/exe/arduino_ci_remote.rb:66:in `<top (required)>'
        2: from C:/User/someone/Documents/GitHub/arduino_ci/exe/arduino_ci_remote.rb:58:in `assure'
        1: from C:/User/someone/Documents/GitHub/arduino_ci/exe/arduino_ci_remote.rb:32:in `perform_action'
C:/User/someone/GitHub/arduino_ci/exe/arduino_ci_remote.rb:66:in `block in <top (required)>': undefined method `install_local_library' for nil:NilClass (NoMethodError)

How to set up arduino_ci-enable test environment on Windows 7 Pro SP1

Hello,

I'm trying Arduino_CI on a different system (at work)...

I can't really understand what's going on...
(installing all this is a pain with Windows...)

Here is my install procedure:

  1. Install Ruby (I choosed https://rubyinstaller.org/downloads/ Ruby+Devkit 2.5.3-1 (x64))

  2. Install MinGW http://www.mingw.org/ to have gcc / g++

  3. Add C:\MinGW\bin to PATH to have g++ available from any directory

  4. gem install --http-proxy http://cache.mydomain.fr:3128 bundler

  5. cd my_project

  6. bundle install

(after setting http_proxy variable... which is a bit different depending if you are doing this on Git Bash or on Windows command terminal cmd)

  1. bundle exec arduino_ci_remote.rb

System

Feel free to delete this section if you're submitting a feature request

  • OS: Windows 7 Pro - SP1

  • ruby -v:

    ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]

  • bundle -v:

    Bundler version 2.0.1

  • bundle info arduino_ci:

  * arduino_ci (0.1.16)
        Summary: Tools for building and unit testing Arduino libraries
        Homepage: http://github.com/ianfixes/arduino_ci
        Path: C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16
  • g++ -v:
$ g++ -v
Using built-in specs.
COLLECT_GCC=C:\MinGW\bin\g++.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/8.2.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-8.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-8.2.0-1' --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-isl=/mingw --enable-libgomp --disable-libvtv --enable-nls --disable-build-format-warnings
Thread model: win32
gcc version 8.2.0 (MinGW.org GCC-8.2.0-1)
  • Arduino IDE version: 1.8.8
  • java -version: can't find java executable... but Arduino IDE is running (fine)

(Issue Summary / Feature Request)

$ bundle exec arduino_ci_remote.rb
Located Arduino binary...       C:\Program Files (x86)\Arduino/arduino_debug.exe
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version...
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/8.2.0/lto-wrapper.exe
    Target: mingw32
    Configured with: ../src/gcc-8.2.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-8.2.0-1' --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-isl=/mingw --enable-libgomp --disable-libvtv --enable-nls --disable-build-format-warnings
    Thread model: win32
    gcc version 8.2.0 (MinGW.org GCC-8.2.0-1)
...Checking g++ version                                                        ✓
libasan availability for g++...                                            false
Requested unittest platform 'uno' is defined in 'platforms' YML...             ✓
Unit testing test_application.cpp with g++...

Last command:  $ g++ -std=c++0x -o U:/github/scls19fr/gokart_multilaptimer/unittest_test_application.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest -IU:/github/scls19fr/gokart_multilaptimer/multilaptimer C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp U:/github/scls19fr/gokart_multilaptimer/test/test_application.cpp

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.h:4,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from U:/github/scls19fr/gokart_multilaptimer/test/test_application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
...Unit testing test_application.cpp with g++                                  ✗
Unit testing test_laptimer.cpp with g++...

Last command:  $ g++ -std=c++0x -o U:/github/scls19fr/gokart_multilaptimer/unittest_test_laptimer.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest -IU:/github/scls19fr/gokart_multilaptimer/multilaptimer C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp U:/github/scls19fr/gokart_multilaptimer/test/test_laptimer.cpp

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.h:4,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from U:/github/scls19fr/gokart_multilaptimer/test/test_laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
...Unit testing test_laptimer.cpp with g++                                     ✗
Unit testing test_utils.cpp with g++...

Last command:  $ g++ -std=c++0x -o U:/github/scls19fr/gokart_multilaptimer/unittest_test_utils.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino -IC:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest -IU:/github/scls19fr/gokart_multilaptimer/multilaptimer C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp U:/github/scls19fr/gokart_multilaptimer/test/test_utils.cpp

In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Godmode.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/application.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/laptimer.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/Arduino.h:13,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.h:4,
                 from U:/github/scls19fr/gokart_multilaptimer/multilaptimer/utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\cstdio:42,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ext\string_conversions.h:43,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\basic_string.h:6391,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\string:52,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\stdexcept:39,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/arduino/WString.h:4,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Compare.h:3,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/Assertion.h:7,
                 from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/arduino_ci-0.1.16/cpp/unittest/ArduinoUnitTests.h:3,
                 from U:/github/scls19fr/gokart_multilaptimer/test/test_utils.cpp:1:
c:\mingw\include\stdio.h:788:34: error: '__off64_t' does not name a type; did you mean '__time64_t'?
 typedef union { __int64 __value; __off64_t __offset; } fpos_t;
                                  ^~~~~~~~~
                                  __time64_t
...Unit testing test_utils.cpp with g++                                        ✗
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed successfully...
    C:\Users\scelles\Documents\Arduino/libraries/Adafruit_Circuit_Playground/Adafruit_CircuitPlayground.cpp
    
(skipped)

    C:\Users\scelles\Documents\Arduino/libraries/USBHost/README.adoc
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/examples/ADKTerminalTest/ADKTerminalTest.ino
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/examples/KeyboardController/KeyboardController.ino
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/examples/MouseController/MouseController.ino
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/keywords.txt
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/library.properties
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/KeyboardController.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/KeyboardController.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/MouseController.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/MouseController.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/Usb.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/Usb.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/address.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/adk.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/adk.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/confdescparser.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hid.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hid2.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hidboot.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hidboot.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/hidusagestr.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/parsetools.cpp
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/parsetools.h
    C:\Users\scelles\Documents\Arduino/libraries/USBHost/src/usb_ch9.h
    C:\Users\scelles\Documents\Arduino/libraries/readme.txt
...Library installed successfully                                              ✗
This may indicate a problem with ArduinoCI, or your configuration
Failures: 4
Last message:  $  C:\Program Files (x86)\Arduino/arduino_debug.exe --install-library USBHost
========== Stdout:
T▒l▒chargement du catalogue de biblioth▒ques...
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 0kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 23kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 46kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 69kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 95kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 119kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 142kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 166kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 191kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 216kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 242kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 271kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 293kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 320kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 342kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 369kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 392kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 418kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 441kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 467kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 490kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 517kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 539kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 566kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 588kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 615kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 637kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 664kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 687kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 713kb sur 741kb.
T▒l▒chargement du catalogue de biblioth▒ques... T▒l▒charg▒: 736kb sur 741kb.
Mise a jour de la liste des biblioth▒que install▒e
Library is already installed: USBHost:1.0.5
========== Stderr:
Chargement de la configuration
Initialisation des paquets...
Pr▒paration des cartes
Using proxy HTTP @ cache.my-domain.fr:3128

Improve bi-directional communication between test runner and unit test binaries

Feature Request

This issue is to track the (as yet undefined) method of passing rich data back and forth from the ruby test runner to the executable.

Use cases

  • Selecting/rejecting individual unit tests from a test (cpp) file from running
  • Reporting all test pass/fail/info data from the binary to the unit test runner

Re-enable RuboCop `Security/Open` warning

(Issue Summary / Feature Request)

lib/arduino_ci/arduino_downloader_windows.rb:30:7: C: Security/Open: The use of Kernel#open is a serious security risk.
      open(URI.parse(package_url), ssl_verify_mode: 0) do |url|
      ^^^^
lib/arduino_ci/arduino_downloader.rb:134:7: C: Security/Open: The use of Kernel#open is a serious security risk.
      open(package_url, ssl_verify_mode: 0, progress_proc: dot_printer) do |url|
      ^^^^

Add ability to report compilation warnings, optionally fail on them

verify_sketch stdout:
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/arduino_ci
Invalid library found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething: no headers files (.h) found in /Users/ikatz/Documents/Arduino/libraries/CompileSomething
Sketch uses 22084 bytes (4%) of program storage space. Maximum is 524288 bytes.

This can be found in the ret[:err] of ArduinoCmd.verify_sketch:

Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino: In function 'void setup()':
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino:1:21: warning: statement has no effect [-Wunused-value]
 void setup(void) { 0; }
                     ^
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino: In function 'void loop()':
/path/to/arduino_ci/spec/FakeSketch/FakeSketch.ino:2:20: warning: statement has no effect [-Wunused-value]
 void loop(void) { 0; }

Would need to

  1. get a regex that can find warning lines reliably
  2. need to reject lines that aren't part of the current project
  3. decide how to store them
  4. decide how to configure errors against them

Add or update board definitions -- arduino mega at least

Add new board definitions based on this gist

  #if defined(__AVR_ATmega168__)
    // Arduino Diecimila and older
    LINE("__AVR_ATmega168__", __AVR_ATmega168__);
  #endif
  
  #if defined(__AVR_ATmega328P__)
    // Arduino Duemilanove and Uno
    LINE("__AVR_ATmega328P__", __AVR_ATmega328P__);
  #endif
  
  #if defined(__AVR_ATmega2560__)
    // Arduino Mega 2560
    LINE("__AVR_ATmega2560__", __AVR_ATmega2560__);
  #endif
  
  #if defined(__AVR_ATmega1280__)
    // Arduino Mega
    LINE("__AVR_ATmega1280__", __AVR_ATmega1280__);
  #endif
  
  #if defined(__AVR_ATmega32U4__)
    // Arduino Leonardo
    LINE("__AVR_ATmega32U4__", __AVR_ATmega32U4__);
  #endif
  
  #if defined(__SAM3X8E__)
    // Arduino Due
    LINE("__SAM3X8E__", __SAM3X8E__);
  #endif
  
  // Determine board type
  #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    Serial.println("Regular Arduino");
  #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
    Serial.println("Arduino Mega"); 
  #elif defined(__AVR_ATmega32U4__)
    Serial.println("Arduino Leonardo");
  #elif defined(__SAM3X8E__)
    Serial.println("Arduino Due");
  #else
    Serial.println("Unknown");
  #endif

Set preprocessor defines for various boards in `default.yaml`

This looks like a good resource for what #defines might be available

https://arduino.stackexchange.com/questions/21137/arduino-how-to-get-the-board-type-in-code

#if defined(TEENSYDUINO) 

    //  --------------- Teensy -----------------

    #if defined(__AVR_ATmega32U4__)
        #define BOARD "Teensy 2.0"
    #elif defined(__AVR_AT90USB1286__)       
        #define BOARD "Teensy++ 2.0"
    #elif defined(__MK20DX128__)       
        #define BOARD "Teensy 3.0"
    #elif defined(__MK20DX256__)       
        #define BOARD "Teensy 3.2" // and Teensy 3.1 (obsolete)
    #elif defined(__MKL26Z64__)       
        #define BOARD "Teensy LC"
    #elif defined(__MK64FX512__)
        #define BOARD "Teensy 3.5"
    #elif defined(__MK66FX1M0__)
        #define BOARD "Teensy 3.6"
    #else
       #error "Unknown board"
    #endif

#else // --------------- Arduino ------------------

    #if   defined(ARDUINO_AVR_ADK)       
        #define BOARD "Mega Adk"
    #elif defined(ARDUINO_AVR_BT)    // Bluetooth
        #define BOARD "Bt"
    #elif defined(ARDUINO_AVR_DUEMILANOVE)       
        #define BOARD "Duemilanove"
    #elif defined(ARDUINO_AVR_ESPLORA)       
        #define BOARD "Esplora"
    #elif defined(ARDUINO_AVR_ETHERNET)       
        #define BOARD "Ethernet"
    #elif defined(ARDUINO_AVR_FIO)       
        #define BOARD "Fio"
    #elif defined(ARDUINO_AVR_GEMMA)
        #define BOARD "Gemma"
    #elif defined(ARDUINO_AVR_LEONARDO)       
        #define BOARD "Leonardo"
    #elif defined(ARDUINO_AVR_LILYPAD)
        #define BOARD "Lilypad"
    #elif defined(ARDUINO_AVR_LILYPAD_USB)
        #define BOARD "Lilypad Usb"
    #elif defined(ARDUINO_AVR_MEGA)       
        #define BOARD "Mega"
    #elif defined(ARDUINO_AVR_MEGA2560)       
        #define BOARD "Mega 2560"
    #elif defined(ARDUINO_AVR_MICRO)       
        #define BOARD "Micro"
    #elif defined(ARDUINO_AVR_MINI)       
        #define BOARD "Mini"
    #elif defined(ARDUINO_AVR_NANO)       
        #define BOARD "Nano"
    #elif defined(ARDUINO_AVR_NG)       
        #define BOARD "NG"
    #elif defined(ARDUINO_AVR_PRO)       
        #define BOARD "Pro"
    #elif defined(ARDUINO_AVR_ROBOT_CONTROL)       
        #define BOARD "Robot Ctrl"
    #elif defined(ARDUINO_AVR_ROBOT_MOTOR)       
        #define BOARD "Robot Motor"
    #elif defined(ARDUINO_AVR_UNO)       
        #define BOARD "Uno"
    #elif defined(ARDUINO_AVR_YUN)       
        #define BOARD "Yun"

    // These boards must be installed separately:
    #elif defined(ARDUINO_SAM_DUE)       
        #define BOARD "Due"
    #elif defined(ARDUINO_SAMD_ZERO)       
        #define BOARD "Zero"
    #elif defined(ARDUINO_ARC32_TOOLS)       
        #define BOARD "101"
    #else
       #error "Unknown board"
    #endif

#endif

Mock HID.h

(Issue Summary / Feature Request)

The source file is in Java/hardware/arduino/avr/libraries/

fix arduino zero and esp8266 entries

According to adafruit/arduino script, some changes to platforms:

[zero]="arduino:samd:arduino_zero_native" 
[esp8266]="esp8266:esp8266:huzzah:FlashSize=4M3M,CpuFrequency=80

Exception in thread "main" java.lang.NoSuchMethodError: com.apple.eawt.Application.isAboutMenuItemPresent()

System

  • OS: OSX
  • ruby -v:
    ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
    (tried with 2.4 as well)
  • bundle -v:
    Bundler version 1.16.1
  • bundle info arduino_ci:
  • g++ -v:
    Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
    Apple LLVM version 9.1.0 (clang-902.0.39.1)
    Target: x86_64-apple-darwin17.5.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  • Arduino IDE version: 1.8.5
  • URL of failing Travis CI job: -
  • URL of your Arduino project: https://github.com/mdlima/arduino_cob_led_controller

Issue / Feature Request Summary

Hi Ian, thanks for sharing this work, I've been trying to find a way to unit test my Arduino code and this looks very promising.

I've followed the README steps but am getting an error when executing the gem. I've tried running the example from the TestSomething folder here and got the exact same error. Tried looking for this error but got nowhere.

It would be very helpful if you can point me to where to look for finding a solution. Thanks in advance.

Here's the output:

TestSomething ❯❯❯ bundle exec arduino_ci_remote.rb                                      master ✱ ◼
Installing library under test...                                               ✓
Library installed at /Users/mdlima/Documents/Arduino/libraries/TestSomething... ✓
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version...
    Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
    Apple LLVM version 9.1.0 (clang-902.0.39.1)
    Target: x86_64-apple-darwin17.5.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin
...Checking g++ version                                                        ✓
Installing board package arduino:sam...                                        ✗
This may indicate a problem with ArduinoCI!
Failures: 1
Last message:  $  java -cp /Applications/Arduino.app/Contents/Java/* -DAPP_DIR=/Applications/Arduino.app/Contents/Java -Dfile.encoding=UTF-8 -Dapple.awt.UIElement=true -Xms128M -Xmx512M processing.app.Base --install-boards arduino:sam
========== Stdout:

========== Stderr:
Exception in thread "main" java.lang.NoSuchMethodError: com.apple.eawt.Application.isAboutMenuItemPresent()Z
	at processing.app.Base.main(Base.java:138)

The jar files are in the expected /Applications/Arduino.app/Contents/Java/ folder.

Arduino or Unit Test Code, Illustrating the Problem

Error returned when running bundle exec arduino_ci_remote.rb from the TestSomething example.

Arduino Architecture(s) Affected

Uno, all?

Provide instruction to test libraries / sketches with dependencies

Hello,

I think it should be useful to provide information in doc to test libraries / sketches with dependencies.

I see 2 kind of dependencies:

My opinion is that arduino-cli should manage this... (instead of everyone doing its own script)
I opened several issues related to this problem.

arduino-cli

A more general issue (that I didn't opened)
Library manager: Library dependencies arduino/Arduino#5795

The concept of environments could help to have several versions of a same library installed without hassle arduino/arduino-cli#108 ... but that's an other story.

What's you opinion about this @ianfixes?
What actions can be done?

Kind regards

Running a given test file

Hello,

I'm trying to use arduino_ci for test driven development.

Unfortunately I haven't seen a way to run a given test file.

I was expecting to run (only) one test file using for example:

bundle exec arduino_ci_remote.rb test/test_application.cpp

or just one unit test

bundle exec arduino_ci_remote.rb test/test_application.cpp::unittest_name

(it may be harder)

But being at least a test file could speedup development process.

Kind regards

Compilation fails due to files given multiple times as arguments to the compiler - `CppLibrary::vendor_bundle?` is hardcoded, not `$BUNDLE_PATH`

System

  • OS: Linux (Fedora 29)
  • ruby -v: ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
  • bundle -v: Bundler version 1.17.3
  • bundle info arduino_ci:
  * arduino_ci (0.1.14)
        Summary: Tools for building and unit testing Arduino libraries
        Homepage: http://github.com/ianfixes/arduino_ci
        Path: /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14
  • g++ -v:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 8.2.1 20181215 (Red Hat 8.2.1-6) (GCC) 
  • Arduino IDE version: 1.8.6
  • java -version:
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Issue Summary

I try to use arduino_ci as a unit test tool for local development, e.g. only on my machine, not in a github repo.

Something triggers arduino_ci to include some files twice, causing the compiler to fail because of duplicate definitions.

Arduino or Unit Test Code, Illustrating the Problem

I have created a minimal example to trigger this. Steps to reproduce:

$ mkdir /tmp/dummy
$ cd /tmp/dummy
$ cat > dummy.ino
void setup() {
}
void loop() {
}
$ mkdir test
$ cat > test/dummy.cpp
#include <ArduinoUnitTests.h>

unittest(dummy_test)
{
  assertEqual(4, 4);
}

unittest_main()
$ cat > Gemfile
source 'https://rubygems.org'
gem 'arduino_ci'
$ cat > .arduino-ci.yaml
compile:
  libraries: ~
  platforms:
    - uno

unittest:
  libraries: ~
  platforms:
    - uno
$ bundle install --path bundle_install
Fetching gem metadata from https://rubygems.org/............
Resolving dependencies...
Fetching os 1.0.0
Installing os 1.0.0
Fetching rubyzip 1.2.2
Installing rubyzip 1.2.2
Fetching arduino_ci 0.1.14
Installing arduino_ci 0.1.14
Using bundler 1.17.3
Bundle complete! 1 Gemfile dependency, 4 gems now installed.
Bundled gems are installed into `./bundle_install`
$

Then running arduino_ci fails:

$ bundle exec arduino_ci_remote.rb
Located Arduino binary...                  /home/download/arduino_ci_ide/arduino
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed at...                   /home/download/Arduino/libraries/dummy
The set of compilers (1) isn't empty...                                        ✓
Checking g++ version... 
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
    OFFLOAD_TARGET_NAMES=nvptx-none
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-redhat-linux
    Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 8.2.1 20181215 (Red Hat 8.2.1-6) (GCC) 
...Checking g++ version                                                        ✓
libasan availability for g++...                                            false
Requested unittest platform 'uno' is defined in 'platforms' YML...             ✓
Using built-in board package...                                      arduino:avr
Installing board package arduino:avr...                                        ✓
Switching to board for uno (arduino:avr:uno)...                                ✓
Unit testing dummy.cpp with g++... 

Last command:  $ g++ -std=c++0x -o /tmp/dummy/unittest_dummy.cpp.bin -DARDUINO=100 -D__AVR_ATmega328P__ -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci -I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp /tmp/dummy/test/dummy.cpp

/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `delayMicroseconds(unsigned long)':
Godmode.cpp:(.text+0x8b): multiple definition of `delayMicroseconds(unsigned long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x8b): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o:(.bss+0x0): multiple definition of `godmode'; /tmp/ccwmzxNZ.o:(.bss+0x0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `GODMODE()':
Godmode.cpp:(.text+0x0): multiple definition of `GODMODE()'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `millis()':
Godmode.cpp:(.text+0xb): multiple definition of `millis()'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0xb): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `micros()':
Godmode.cpp:(.text+0x3d): multiple definition of `micros()'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x3d): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `delay(unsigned long)':
Godmode.cpp:(.text+0x57): multiple definition of `delay(unsigned long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x57): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `randomSeed(unsigned long)':
Godmode.cpp:(.text+0xb8): multiple definition of `randomSeed(unsigned long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0xb8): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `random(long)':
Godmode.cpp:(.text+0xdc): multiple definition of `random(long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0xdc): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `random(long, long)':
Godmode.cpp:(.text+0x134): multiple definition of `random(long, long)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x134): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `digitalWrite(unsigned char, unsigned char)':
Godmode.cpp:(.text+0x170): multiple definition of `digitalWrite(unsigned char, unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x170): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `digitalRead(unsigned char)':
Godmode.cpp:(.text+0x1c9): multiple definition of `digitalRead(unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x1c9): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `analogWrite(unsigned char, int)':
Godmode.cpp:(.text+0x20c): multiple definition of `analogWrite(unsigned char, int)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x20c): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `analogRead(unsigned char)':
Godmode.cpp:(.text+0x25a): multiple definition of `analogRead(unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x25a): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `attachInterrupt(unsigned char, void (*)(), unsigned char)':
Godmode.cpp:(.text+0x29d): multiple definition of `attachInterrupt(unsigned char, void (*)(), unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x29d): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o: in function `detachInterrupt(unsigned char)':
Godmode.cpp:(.text+0x2f0): multiple definition of `detachInterrupt(unsigned char)'; /tmp/ccwmzxNZ.o:Godmode.cpp:(.text+0x2f0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o:(.bss+0x122a0): multiple definition of `Serial'; /tmp/ccwmzxNZ.o:(.bss+0x122a0): first defined here
/usr/bin/ld: /tmp/ccgeE0Cz.o:(.bss+0x12320): multiple definition of `SPI'; /tmp/ccwmzxNZ.o:(.bss+0x12320): first defined here
/usr/bin/ld: /tmp/ccogA35M.o:(.bss+0x0): multiple definition of `Test::sRoot'; /tmp/ccoeb2Za.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
...Unit testing dummy.cpp with g++                                             ✗
Skipping libraries; no examples found in /home/download/Arduino/libraries/dummy... 
    /tmp/dummy/Gemfile
    /tmp/dummy/Gemfile.lock
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/arduino_ci_remote.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/arduino_ci_remote.rb.orig
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/ensure_arduino_installation.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/bin/libasan.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/cache/arduino_ci-0.1.14.gem
    /tmp/dummy/bundle_install/ruby/2.5.0/cache/os-1.0.0.gem
    /tmp/dummy/bundle_install/ruby/2.5.0/cache/rubyzip-1.2.2.gem
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ArduinoDefines.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/AvrMath.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/HardwareSerial.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/PinHistory.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Print.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/SPI.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/SoftwareSerial.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Stream.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/WCharacter.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/WString.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/common.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/fuse.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io1200.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2313.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2323.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2333.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io2343.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io43u32x.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io43u35x.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io4414.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io4433.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io4434.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io76c711.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io8515.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io8534.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io8535.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io86r401.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm161.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm216.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm2b.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm316.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm3b.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwm81.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90pwmx.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/io90scr100.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5272.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5505.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5702m322.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5782.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5790.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5790n.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5791.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5795.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa5831.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6285.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6286.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6289.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6612c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6613c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6614q.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6616c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa6617c.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa664251.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa8210.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioa8510.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/ioat94k.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocan128.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocan32.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocan64.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iocanxx.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom103.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1280.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1281.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1284.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1284p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom1284rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128rfa1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom128rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom161.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom162.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom163.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom164pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom165pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom168pb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom169pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hva.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hva2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hvb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16hvbrevb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16m1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16u2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom16u4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom2560.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom2561.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom2564rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom256rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3000.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom323.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom324a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom324p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom324pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3250pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom325pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom328.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom328p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3290.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3290a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom3290pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom329pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32c1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32hvb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32hvbrevb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32m1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32u2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32u4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom32u6.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom406.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom48pb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom640.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom644rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom645.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6450.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6450a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6450p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom645a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom645p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom649.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6490.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6490a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom6490p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom649a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom649p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64c1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64hve.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64hve2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64m1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom64rfr2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8515.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8535.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88p.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88pa.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom88pb.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8hva.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iom8u2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomx8.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomxx0_1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomxx4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iomxxhva.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn10.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn11.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn12.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn13.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn13a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn15.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn1634.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn167.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn20.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn22.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn2313.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn2313a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn24.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn24a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn25.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn26.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn261.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn261a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn28.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn40.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn4313.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn43u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn44.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn441.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn44a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn45.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn461.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn461a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn48.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn828.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn84.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn841.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn84a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn85.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn861.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn861a.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn87.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn88.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotn9.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotnx4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotnx5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iotnx61.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb1286.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb1287.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb162.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb646.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb647.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousb82.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousbxx2.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iousbxx6_7.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a1u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128b1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128b3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox128d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16a4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16c4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox16e5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox192d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3b.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3bu.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox256d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32a4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32c4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox32e5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox384c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox384d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a1u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a3u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64a4u.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64b1.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64b3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64c3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64d3.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox64d4.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/iox8e5.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/lock.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/pgmspace.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/portpins.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/version.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr/xmega.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/binary.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/DeviceUsingBytes.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/ObservableDataStream.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/Queue.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci/Table.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/Assertion.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/Compare.h
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/arduino_ci_remote.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/arduino_ci_remote.rb.orig
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/ensure_arduino_installation.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/exe/libasan.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_linux.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_linux_builder.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_osx.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_cmd_windows.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader_linux.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader_osx.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_downloader_windows.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/arduino_installation.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/ci_config.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/cpp_library.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/host.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci/version.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/lib/arduino_ci.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/misc/default.yml
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/ChangeLog
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/Gemfile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/Gemfile.lock
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/LICENSE
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/README.rdoc
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/Rakefile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/VERSION
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/autotest/discover.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/lib/os.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/os.gemspec
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/linux_spec.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/os_spec.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/osx_spec.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/os-1.0.0/spec/spec_helper.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/Rakefile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/TODO
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/central_directory.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/compressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/constants.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/crypto/encryption.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/crypto/null_encryption.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/crypto/traditional_encryption.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/decompressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/deflater.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/dos_time.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/entry.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/entry_set.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/errors.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/generic.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/ntfs.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/old_unix.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/universal_time.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/unix.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/zip64.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field/zip64_placeholder.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/extra_field.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/file.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/filesystem.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/inflater.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/input_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/ioextras/abstract_input_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/ioextras/abstract_output_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/ioextras.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/null_compressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/null_decompressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/null_input_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/output_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/pass_thru_compressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/pass_thru_decompressor.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/streamable_directory.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/streamable_stream.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip/version.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/lib/zip.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/example.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/example_filesystem.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/example_recursive.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/gtk_ruby_zip.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/qtzip.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/write_simple.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/samples/zipfind.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/basic_zip_file_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/case_sensitivity_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/central_directory_entry_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/central_directory_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/crypto/null_encryption_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/crypto/traditional_encryption_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/WarnInvalidDate.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/file1.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/file1.txt.deflatedData
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/file2.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest/foo/bar/baz/foo.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest/foo.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest/food.txt
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/globTest.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/gpbit3stored.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/mimetype
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/notzippedruby.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/ntfs.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/oddExtraField.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/Makefile
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/absolute1.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/absolute2.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/dirsymlink.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/dirsymlink2a.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/dirsymlink2b.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/relative0.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/relative2.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/jwilk/symlink.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/relative1.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/tuzovakaoff/README.md
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/tuzovakaoff/absolutepath.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/path_traversal/tuzovakaoff/symlink.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/rubycode.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/rubycode2.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/test.xls
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/testDirectory.bin
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/zip64-sample.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/zipWithDirs.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/data/zipWithEncryption.zip
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/deflater_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/encryption_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/entry_set_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/entry_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/errors_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/extra_field_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_extract_directory_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_extract_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_permissions_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_split_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/file_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/dir_iterator_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/directory_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/file_mutating_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/file_nonmutating_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/filesystem/file_stat_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/gentestfiles.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/inflater_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/input_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/ioextras/abstract_input_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/ioextras/abstract_output_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/ioextras/fake_io_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/local_entry_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/output_stream_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/pass_thru_compressor_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/pass_thru_decompressor_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/path_traversal_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/samples/example_recursive_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/settings_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/test_helper.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/unicode_file_names_and_comments_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/zip64_full_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/gems/rubyzip-1.2.2/test/zip64_support_test.rb
    /tmp/dummy/bundle_install/ruby/2.5.0/specifications/arduino_ci-0.1.14.gemspec
    /tmp/dummy/bundle_install/ruby/2.5.0/specifications/os-1.0.0.gemspec
    /tmp/dummy/bundle_install/ruby/2.5.0/specifications/rubyzip-1.2.2.gemspec
    /tmp/dummy/dummy.ino
    /tmp/dummy/test/dummy.cpp
...Skipping libraries; no examples found in /home/download/Arduino/libraries/dummy 
Failures: 1
$

Breaking up the last command on separate lines makes it easy to see the duplicated files:

g++
-std=c++0x
-o
/tmp/dummy/unittest_dummy.cpp.bin
-DARDUINO=100
-D__AVR_ATmega328P__
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/avr
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/ci
-I/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Arduino.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/arduino/Godmode.cpp
/tmp/dummy/bundle_install/ruby/2.5.0/gems/arduino_ci-0.1.14/cpp/unittest/ArduinoUnitTests.cpp
/tmp/dummy/test/dummy.cpp

Arduino Architecture(s) Affected

Only tested for Uno, but I assume this is generic.

wrong number of arguments

System

Issue Summary

Locally (in OSX) and remotely the following error is displayed when running unit tests:

/home/travis/.rvm/gems/ruby-2.4.1/gems/arduino_ci-0.1.8/lib/arduino_ci/cpp_library.rb:185:in 
`build_for_test_with_configuration': wrong number of arguments (given 3, expected 4) (ArgumentError)

The broken code seems to be in arduino_ci_remote.rb

This line is missing a parameter:

exe = cpp_library.build_for_test_with_configuration(
            unittest_path,
            config.aux_libraries_for_unittest,
            config.gcc_config(p)
          )

It should be

exe = cpp_library.build_for_test_with_configuration(
            unittest_path,
            config.aux_libraries_for_unittest,
            gcc_binary,
            config.gcc_config(p)
          )

Suppress CLIXML output on Appveyor

System

Feel free to delete this section if you're submitting a feature request

Issue Summary

There's an obscene amount of CLIXML text in the output.

#< CLIXML
System.Management.Automation.PSCustomObjectSystem.Object1Preparing modules for first use.0-1-1Completed-1 2Preparing modules for first use.0-1-1Completed-1 3Preparing modules for first use.0-1-1Completed-1 0Expand-Archive0-11Processing-1The archive file 'arduino-1.8.5' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion is in progress...0Expand-Archive0-10Processing-1The archive file 'C:\projects\arduino-ci\arduino-1.8.5-windows.zip' expansion

We should suppress it.

Add OSX to CI

Summary

This project will be cross-platform as of #39. Update Travis CI to test both OSX and Linux:

os:
  - linux
  - osx

https://docs.travis-ci.com/user/multi-os/

The, update the build status in the README.md to be a table like in manticore-native

Platform | Version                   | Native | Distro    | Version | CI Status |
-------- | -------                   | ------ |  ------   | ------- |:------    |
iOS      | 7.0+                      | Obj C  | CocoaPods | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=objc&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)
MacOS    | 10.9+                     | Obj C  | CocoaPods | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=objc&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)
Android  | API 19+                   | Java   | JCenter   | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=java&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)
Windows  | XP (.Net4)                | C#     | NuGet     | none    | [![Build status](https://ci.appveyor.com/api/projects/status/sm23ige74y836v48?svg=true)](https://ci.appveyor.com/project/ifreecarve/manticore-native/branch/master)
Windows  | 7,8,Vista (v8  )          | C#     | NuGet     | none    | [![Build status](https://ci.appveyor.com/api/projects/status/sm23ige74y836v48?svg=true)](https://ci.appveyor.com/project/ifreecarve/manticore-native/branch/master)
Windows  | 8.1, 8.1 Phone, 10 (jint) | C#     | NuGet     | none    | [CI not running](https://github.com/paypal/manticore-native/issues/14)
_codegen_| 0.12                      | JS     | npm       | none    | [![Build Status](https://badges.herokuapp.com/travis/paypal/manticore-native?env=BUILD_ITEM=node&label=build&branch=master)](https://travis-ci.org/paypal/manticore-native)

Add GODMODE-configurable delay to system calls

Summary

Time is expected to pass in the real world. In the mocked unit test environment, it doesn't. This means that otherwise-normal code will infinitely loop in tests

Arduino or Unit Test Code, Illustrating the Problem

  while((millis() < wait_timer) && (!FLAG_ABORT_PENDING)) {
    // waiting for random wait to finish
  }

Proposed solution

Add a configurable delay (0 by default) to all system calls: millis() most importantly, but also things like analogRead and analogWrite.

Mock SPI.h

(Issue Summary / Feature Request)

fatal error: 'SPI.h' file not found
#include <SPI.h>
         ^~~~~~~

The source file is Java/hardware/arduino/avr/libraries/SPI/src/SPI.h

Failed downloads of Arduino are difficult to debug

System

  • OS: Linux

Summary

Downloading Arduino binary with wget should be followed by a trail of dots for a successful download (as a progress indicator). If that doesn't happen, the rest of the failure is very cryptic.

[tom@instance-2 DoSomething]$ bundle exec arduino_ci_remote.rb
Downloading Arduino binary with wget
Extracting archive with tar
tar: arduino-1.8.5-linux64.tar.xz: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
mv: cannot stat ‘arduino-1.8.5’: No such file or directory
Installing library under test... /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:66:in `block in <top (required)>': undefined method `install_local_library' for nil:NilClass (NoMethodError)
        from /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:32:in `perform_action'
        from /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:58:in `assure'
        from /home/tom/github/arduino_ci/exe/arduino_ci_remote.rb:66:in `<top (required)>'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/arduino_ci_remote.rb:23:in `load'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/arduino_ci_remote.rb:23:in `<main>'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `eval'
        from /home/tom/.rvm/gems/ruby-2.4.2/bin/ruby_executable_hooks:15:in `<main>'

Add CircleCI example

Feature Request

Add CircleCI to this project and report its status in the README

Example Code

.circleci/config.yml via @TomohiroHayashi

version: 2
jobs:
  build:
    machine: true    
    steps:
      - checkout

      - run:
          name: install and execute
          command: |
            bundle install
            bundle exec arduino_ci_remote.rb

Example README.md section

Platform Travis CI AppVeyor CircleCI
OSX OSX Build Status NEW BADGE HERE
Linux Linux Build Status NEW BADGE HERE
Windows Windows Build status

Fix g++ compile errors under OSX

System

  • OS: OSX
  • g++: builtin

Issue / Feature Request Summary

Generally, shore up the differences between OSX's g++ (really clang), g++-4.8 (on Travis), and g++-7 (tried it because it was available).

Reported in #24:

Fix for g++ compile errors under OSX.

/Library/Ruby/Gems/2.3.0/gems/arduino_ci-0.1.7/cpp/arduino/Print.h:57:86: error: unknown type name 'PGM_P'
/Library/Ruby/Gems/2.3.0/gems/arduino_ci-0.1.7/cpp/arduino/WString.h:39:16: error: no member named 'isnan' in namespace 'std'

Possibly useful

Simplify template logic in Compare.h and add float (epsilon) equality

https://stackoverflow.com/questions/41386688/template-specialisation-with-enable-if-and-is-arithmetic-for-a-class

I'm clearly not quite there with the following

#include <limits>

template <typename A = std::enable_if<std::is_integral<AA>::value, AA>::type, typename B = std::enable_if<std::is_integral<BB>::value, BB>::type> struct Compare<A, B>
{
  inline static int between(const A &a,const B &b)
  {
    if (a<b) return -1;
    if (b<a) return  1;
    return 0;
  } // between
  inline static bool equal(const A &a,const B &b)
  {
    if (std::numeric_limits<A>::is_exact && std::numeric_limits<B>::is_exact) return (!(a<b)) && (!(b<a));
    if (std::numeric_limits<A>::epsilon() > std::numeric_limits<B>::epsilon()) {
      return std::numeric_limits<A>::epsilon() > (a > b ? (a - b) : (b - a));
    } else {
      return std::numeric_limits<B>::epsilon() > (a > b ? (a - b) : (b - a));
    }
  } // equal
/* etc

arduino_ci doesn't seems to work properly with mega2560

Hello,

Here is a minimal (non) working example
https://github.com/scls19fr/mwe_arduino_ci

to show problem I was facing (see https://github.com/ianfixes/arduino_ci/issues/78#issuecomment-453776168 ) with Arduino Mega 2560.

Kind regards

PS : arduino_ci log finish with Failures: 1
It may be interesting to show how many tests / examples are being run...
because showing only Failures: 0 can be quite misleading... it can simply be because tests / examples haven't been found

Fix the signatures of `pgm_read_*` macros

Related to errors like this one

error: invalid operands to binary expression ('const uint8_t *' (aka 'const unsigned char *') and 'const uint8_t *')
                crc = pgm_read_byte(dscrc2x16_table + (crc & 0x0f)) ^
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^

The code in pgmspace.h that needs to change is this:

// this is the one I updated
#define pgm_read_byte(addr) (*(const uint8_t *)(addr))

// these ones need to be updated in similar fashion
#define pgm_read_word(x) (x)
#define pgm_read_dword(x) (x)
#define pgm_read_float(x) (x)
#define pgm_read_ptr(x) (x)
#define pgm_get_far_address(x) (x)

The problem is that at the moment I haven't dug into what these signatures should be.

unittest compiler list is not inherited

System

Windows

  • OS: Windows 10
  • ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mingw32]
  • bundle -v: Bundler version 1.16.1
  • bundle info arduino_ci: arduino_ci (0.1.9)
  • g++ -v: gcc version 7.3.0 (GCC)
  • Arduino IDE version: 1.8.5

Linux

  • OS: Centos 7
  • ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux]
  • bundle -v: Bundler version 1.16.1
  • bundle info arduino_ci: arduino_ci (0.1.9)
  • g++ -v: gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
  • Arduino IDE version: 1.8.5

Issue Summary

The unittest compiler list is not inherited from the base file resulting in the following error:
The set of compilers (0) isn't empty... ✗

Currently an explicit entry is required in .arduino-ci.yaml:

    # .arduino-ci.yaml
    unittest:
      platforms:
        - uno
        - due
      compilers:
        - g++

Arduino or Unit Test Code, Illustrating the Problem

arduino-ci/SampleProjects/DoSomething

Best practices to exclude folders from compilation?

Issue / Feature Request Summary

A configuration parameter to exclude folders from compilation.

Consider a case where all libraries are in ./lib so they can all be in a single git hub repo (using git submodules). arduino_ci walks the tree to find all the header files - irrespective of any compiler directives to use mock headers/classes instead, the libraries get pulled in too (which may break compilation).

Mock EEPROM.h

(Issue Summary / Feature Request)

The source file is in Java/hardware/arduino/avr/libraries/

Add pulseIn and pulseOut support

Issue / Feature Request Summary

This might be tricky, but PinHistory (with the help of #23) should be able to support pulseIn and pulseOut interactions

libraries aren't included properly during unit test compilation

Currently CppLibrary is using the "base name" of the directory, not the full path. Need to figure out a way to get the full library installation dir from ArduinoCmd.

Further, we are not yet following #include statements for any files that might come in from subdirectories.

There are at least 6 cases that need to be tested, each as its own subdir of SampleProjects.

  • Arduino 1.0.x compatible where all necessary files are in the root directory
  • Arduino 1.0.x compatible where some necessary files are included from a subdirectory
  • Arduino 1.0.x compatible where some subdirectories contain files that should not be included
  • Arduino 1.5 compatible where all necessary files are in src/
  • Arduino 1.5 compatible where some necessary files are included from other directories
  • Arduino 1.5 compatible where some subdirectories contain files that should not be included

repeat unit tests name and status at end of test log

Hello,

When facing a very long test log it's can be hard to find what test files are failling
(especially when errors are very long such as in this build https://travis-ci.com/scls19fr/mwe_arduino_ci/builds/97293666 )

Providing a more readable end of log will be great (such as this one)

Unit testing test_mwe_00.cpp with g++                                          ✗
Unit testing test_mwe_01.cpp with g++                                          ✗
Unit testing test_mwe_02.cpp with g++                                          ✗
Unit testing test_mwe_03.cpp with g++                                          ✗
Unit testing test_mwe_04.cpp with g++                                          ✗
Unit testing test_mwe_05.cpp with g++                                          ✗
Indexing libraries...                                                          ✓
Installing library under test...                                               ✓
Library installed at...            /home/travis/Arduino/libraries/mwe_arduino_ci
Requested library example platform 'mega2560' is defined in 'platforms' YML... ✓
Using built-in board package...                                      arduino:avr
Installing board package arduino:avr...                                        ✓
Setting compiler warning level...                                              ✓
Switching to board for mega2560 (arduino:avr:mega:cpu=atmega2560)...           ✓
Verifying mwe_arduino_ci_01.ino...                                             ✓
Verifying mwe_arduino_ci_00.ino...                                             ✓
Found: 6 test files - 5 examples
Failures: 6

Kind regards

PS... that's odd to see only 2 examples here... when there was 5 in previous build
https://travis-ci.com/scls19fr/mwe_arduino_ci/builds/97292804#L748-L752

It seems that it was a delay in Travis log display

undefined method `binary_path' for nil:NilClass (NoMethodError)

System

  • OS: Mac OS 10.13.5
  • ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin16]
  • bundle -v: Bundler version 1.16.4
  • bundle info arduino_ci:
  * arduino_ci (0.1.16)
	Summary: Tools for building and unit testing Arduino libraries
	Homepage: http://github.com/ianfixes/arduino_ci
	Path: /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16
  • g++ -v:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
  • Arduino IDE version: 1.8.6

  • java -version:

java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

Issue

I'm just trying to run unit test locally on my Mac...
(I'm not trying CI for now)

$ bundle exec arduino_ci_remote.rb
Arduino package seems to have been downloaded already
Extracting archive with Zip.....................................................................................................
Arduino package seems to have been installed already
Located Arduino binary... /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:311:in `block in <top (required)>': undefined method `binary_path' for nil:NilClass (NoMethodError)
	from /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:40:in `perform_action'
	from /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:75:in `inform'
	from /Users/scls/.rvm/gems/ruby-2.3.0/gems/arduino_ci-0.1.16/exe/arduino_ci_remote.rb:311:in `<top (required)>'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/arduino_ci_remote.rb:23:in `load'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/arduino_ci_remote.rb:23:in `<main>'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval'
	from /Users/scls/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `<main>'

Any idea?

Allow specific tests or groups of tests to be run selectively

Feature Request

When developing tests it would be useful not to have to run all tests in a project, only those under development or of particular interest.

Options could include:

  • test case by name
    bundle exec arduino_ci_remote.rb -test interesting-test
  • all tests in a file
    bundle exec arduino_ci_remote.rb -file interesting-tests-file
  • multiples and combinations of each
    bundle exec arduino_ci_remote.rb -file test-file -test some-test -test some-other-test

I'm not sure how args are handled by ruby/bundle exec so the above command lines are just for illustration of the concept

Improve boilerplate for test code

Seems like I should have a macro to replace

int main(int argc, char *argv[]) {
  return Test::run_and_report(argc, argv);
}

But I don't know what it should be, or if I should do it at all

Pros:

  • Gives Ruby full control over the executables, enables tighter coupling and more seamless transfer of settings there without intervention on the part of the Arduino library maintainer.

Cons:

  • What should the macro be, such that when you look at a test file you know it's a "normal" CPP file?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.