File tree Expand file tree Collapse file tree 6 files changed +155
-0
lines changed
Expand file tree Collapse file tree 6 files changed +155
-0
lines changed Original file line number Diff line number Diff line change 1+ name : Unit Tests
2+
3+ on :
4+ pull_request :
5+ paths :
6+ - " .github/workflows/unit-tests.yml"
7+ - ' extras/test/**'
8+ - ' src/**'
9+
10+ push :
11+ paths :
12+ - " .github/workflows/unit-tests.yml"
13+ - ' extras/test/**'
14+ - ' src/**'
15+
16+ jobs :
17+ test :
18+ name : Run unit tests
19+ runs-on : ubuntu-latest
20+
21+ env :
22+ COVERAGE_DATA_PATH : extras/coverage-data/coverage.info
23+
24+ steps :
25+ - name : Checkout
26+ uses : actions/checkout@v4
27+
28+ - uses : arduino/cpp-test-action@main
29+ with :
30+ runtime-paths : |
31+ - extras/test/build/bin/testArduinoIoTCloud
32+ coverage-exclude-paths : |
33+ - '*/extras/test/*'
34+ - '/usr/*'
35+ - '*/src/cbor/lib/*'
36+ coverage-data-path : ${{ env.COVERAGE_DATA_PATH }}
37+
38+ # A token is used to avoid intermittent spurious job failures caused by rate limiting.
39+ - name : Set up Codecov upload token
40+ run : |
41+ if [[ "${{ github.repository }}" == "arduino-libraries/ArduinoIoTCloud" ]]; then
42+ # In order to avoid uploads of data from forks, only use the token for runs in the parent repo.
43+ # Token is intentionally exposed.
44+ # See: https://community.codecov.com/t/upload-issues-unable-to-locate-build-via-github-actions-api/3954
45+ CODECOV_TOKEN="47827969-3fda-4ba1-9506-e8d0834ed88c"
46+ else
47+ # codecov/codecov-action does unauthenticated upload if empty string is passed via the `token` input.
48+ CODECOV_TOKEN=""
49+ fi
50+ echo "CODECOV_TOKEN=$CODECOV_TOKEN" >> "$GITHUB_ENV"
51+
52+ - name : Upload coverage report to Codecov
53+ uses : codecov/codecov-action@v3
54+ with :
55+ file : " ${{ env.COVERAGE_DATA_PATH }}"
56+ fail_ci_if_error : true
57+ token : ${{ env.CODECOV_TOKEN }}
Original file line number Diff line number Diff line change 1+ cmake_minimum_required (VERSION 3.5)
2+ project (testArduinoCloudUtils)
3+
4+ Include (FetchContent)
5+
6+ FetchContent_Declare(
7+ Catch2
8+ GIT_REPOSITORY https://github.com/catchorg/Catch2.git
9+ GIT_TAG v3.4.0
10+ )
11+
12+ FetchContent_MakeAvailable(Catch2)
13+
14+ set (TEST_TARGET ${CMAKE_PROJECT_NAME} )
15+
16+ ##########################################################################
17+
18+ set (CMAKE_CXX_STANDARD 11)
19+
20+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
21+
22+ include_directories (../../src)
23+ include_directories (../../src/lzss)
24+
25+ set (TEST_SRCS
26+ src/lzss/test_lzssDecoder.cpp
27+ )
28+
29+ set (TEST_DUT_SRCS
30+ ../../src/lzss/lzssDecoder.cpp
31+ )
32+
33+ ##########################################################################
34+
35+ add_compile_definitions (HOST)
36+ add_compile_options (-Wall -Wextra -Wpedantic -Werror)
37+ add_compile_options (-Wno-cast-function-type )
38+
39+ set (CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "--coverage" )
40+ set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "--coverage -Wno-deprecated-copy" )
41+
42+ add_executable ( ${TEST_TARGET} ${TEST_SRCS} ${TEST_DUT_SRCS} )
43+
44+ target_link_libraries ( ${TEST_TARGET} Catch2WithMain )
Original file line number Diff line number Diff line change 1+ # adding tests
2+
3+ follow guide in https://github.com/catchorg/Catch2/tree/devel/docs in order to add more tests
4+
5+ Add the source file for the test in ` extras/test/CMakeLists.txt ` inside of ` ${TEST_SRCS} ` variable and eventually the source file you want to test in ` ${TEST_DUT_SRCS} `
Original file line number Diff line number Diff line change 1+ #include < catch2/catch_test_macros.hpp>
2+
3+ #include < lzssDecoder.h>
4+ #include < stdio.h>
5+
6+ using namespace arduino ::lzss;
7+
8+ SCENARIO ( " Decoding an LZSS stream of data" , " [lzss::Decoder]" ) {
9+ GIVEN ( " A LZSS compressed file and an LZSS Decoder" ) {
10+ // the lzss file provided as test when decompressed are made by incrementing a 4 byte integer
11+ // starting from 0, up to (file size-1)/4, thus it is easy to validate the correctness of the result
12+
13+ FILE *f = fopen (" test_files/test-64k.lzss" , " r" );
14+ uint32_t value = 0 ;
15+ uint64_t position = 0 ;
16+
17+ auto decoder = arduino::lzss::Decoder ([&value, &position](const uint8_t b) {
18+ REQUIRE (((value >> ((3 -(position%4 ))<<3 )) & 0xFF ) == b); // make this an assertion, not a require
19+
20+ if (position % 4 == 0 && position != 0 ) {
21+ value++;
22+ }
23+ position++;
24+ });
25+
26+ THEN ( " File is open" ) {
27+ REQUIRE ( f != nullptr );
28+ }
29+
30+ WHEN ( " Decompress is called on the decoder" ) {
31+ uint8_t buf[64 ];
32+ size_t read_bytes;
33+ do {
34+ read_bytes = fread (buf, 1 , 64 , f);
35+
36+ if (read_bytes > 0 ) {
37+ decoder.decompress (buf, read_bytes);
38+ }
39+ } while (read_bytes > 0 );
40+
41+ REQUIRE (value == (1 <<14 ) -1 );
42+ }
43+ THEN ( " There is no error on the file" ) {
44+ REQUIRE (feof (f) == 0 );
45+ REQUIRE (ferror (f) == 0 );
46+ REQUIRE (fclose (f) == 0 );
47+ }
48+ }
49+ }
You can’t perform that action at this time.
0 commit comments