From 764c24ef4046fbfd3cb1a25d0cb8a47a84e82d3a Mon Sep 17 00:00:00 2001 From: Arthur Sonzogni Date: Sun, 17 Apr 2022 15:47:20 +0200 Subject: [PATCH] Add code coverage support. (#378) --- .github/workflows/build.yaml | 97 +++++++++++++------ CMakeLists.txt | 6 ++ cmake/ftxui_benchmark.cmake | 9 +- cmake/ftxui_coverage.cmake | 8 ++ cmake/ftxui_test.cmake | 21 ++-- src/ftxui/component/animation.cpp | 4 +- src/ftxui/component/button.cpp | 1 + src/ftxui/component/component_test.cpp | 4 +- src/ftxui/component/container_test.cpp | 6 +- src/ftxui/component/input_test.cpp | 4 +- src/ftxui/component/menu_test.cpp | 4 +- src/ftxui/component/radiobox_test.cpp | 4 +- src/ftxui/component/receiver_test.cpp | 4 +- .../component/screen_interactive_test.cpp | 4 +- .../component/terminal_input_parser_test.cpp | 4 +- src/ftxui/dom/benchmark_test.cpp | 4 +- src/ftxui/dom/flexbox_helper_test.cpp | 5 +- src/ftxui/dom/flexbox_test.cpp | 4 +- src/ftxui/dom/gauge_test.cpp | 9 +- src/ftxui/dom/gridbox_test.cpp | 32 +++--- src/ftxui/dom/hbox_test.cpp | 24 ++--- src/ftxui/dom/table_test.cpp | 4 +- src/ftxui/dom/text_test.cpp | 4 +- src/ftxui/dom/vbox_test.cpp | 31 +++--- src/ftxui/screen/screen.cpp | 2 +- src/ftxui/screen/string_test.cpp | 3 +- 26 files changed, 206 insertions(+), 96 deletions(-) create mode 100644 cmake/ftxui_coverage.cmake diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index b164dc9..4faaef0 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -19,54 +19,93 @@ jobs: include: - name: Linux GCC os: ubuntu-latest - compiler: g++-9 - test: true + compiler: gcc + gcov_executable: gcov - name: Linux Clang os: ubuntu-latest - compiler: clang++ - test: true + compiler: llvm + gcov_executable: "llvm-cov gcov" - name: MacOS clang os: macos-latest - compiler: clang++ - test: true + compiler: llvm + gcov_executable: "llvm-cov gcov" - name: Windows MSVC os: windows-latest compiler: cl - test: false runs-on: ${{ matrix.os }} steps: - name: "Checkout repository" uses: actions/checkout@v2 - - name: "Enable MSVC command prompt" - if: matrix.os == 'windows-latest' - uses: ilammy/msvc-dev-cmd@v1 + - name: "Setup Cpp" + uses: aminya/setup-cpp@v1 + with: + compiler: ${{ matrix.compiler }} + vcvarsall: ${{ contains(matrix.os, 'windows' )}} + cmake: true + ninja: true + clangtidy: true + cppcheck: false + gcovr: true + opencppcoverage: true - - name: "Install cmake" - uses: lukka/get-cmake@latest - - - name: "Build debug mode" + # make sure coverage is only enabled for Debug builds, since it sets -O0 + # to make sure coverage has meaningful results + - name: "Configure CMake" run: > - mkdir build; - cd build; - cmake .. - -DCMAKE_CXX_COMPILER=${{ matrix.compiler }} - -DFTXUI_BUILD_DOCS=OFF - -DFTXUI_BUILD_EXAMPLES=ON - -DFTXUI_BUILD_TESTS=ON - -DFTXUI_BUILD_TESTS_FUZZER=OFF - -DFTXUI_ENABLE_INSTALL=ON ; - cmake --build . --config Debug; + cmake -S . + -B ./build + -DCMAKE_BUILD_TYPE:STRING=Debug + -DFTXUI_ENABLE_COVERAGE:BOOL=ON + -DFTXUI_BUILD_DOCS:BOOL=OFF + -DFTXUI_BUILD_EXAMPLES:BOOL=ON + -DFTXUI_BUILD_TESTS:BOOL=ON + -DFTXUI_BUILD_TESTS_FUZZER:BOOL=OFF + -DFTXUI_ENABLE_INSTALL:BOOL=ON ; - - name: "Run tests" - if: matrix.test + - name: "Build" run: > - cd build; - ./tests + cmake + --build ./build + + - name: Unix - Test and coverage + if: runner.os != 'Windows' + working-directory: ./build + run: > + ctest -C Debug; + gcovr + -j ${{env.nproc}} + --delete + --root ../ + --exclude "../examples" + --exclude ".*google.*" + --print-summary + --xml-pretty + --xml + coverage.xml + . + --gcov-executable '${{ matrix.gcov_executable }}'; + + - name: Windows - Test and coverage + if: runner.os == 'Windows' + working-directory: ./build + run: > + OpenCppCoverage.exe + --export_type cobertura:coverage.xml + --cover_children + -- + ctest -C Debug + + - name: Publish to codecov + uses: codecov/codecov-action@v2 + with: + flags: ${{ runner.os }} + name: ${{ runner.os }}-coverage + files: ./build/coverage.xml # Create a release on new v* tags release: @@ -117,7 +156,7 @@ jobs: -DFTXUI_BUILD_TESTS=OFF -DFTXUI_BUILD_TESTS_FUZZER=OFF -DFTXUI_ENABLE_INSTALL=ON; - cmake --build . --config Release --target package; + cmake --build . --target package; - uses: shogo82148/actions-upload-release-asset@v1 with: upload_url: ${{ needs.release.outputs.upload_url }} diff --git a/CMakeLists.txt b/CMakeLists.txt index b5ce566..4d2d1c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ option(FTXUI_BUILD_TESTS "Set to ON to build tests" OFF) option(FTXUI_BUILD_TESTS_FUZZER "Set to ON to enable fuzzing" OFF) option(FTXUI_ENABLE_INSTALL "Generate the install target" ON) option(FTXUI_CLANG_TIDY "Execute clang-tidy" OFF) +option(FTXUI_ENABLE_COVERAGE "Execute code coverage" OFF) set(FTXUI_MICROSOFT_TERMINAL_FALLBACK_HELP_TEXT "On windows, assume the \ terminal used will be one of Microsoft and use a set of reasonnable fallback \ @@ -139,6 +140,11 @@ ftxui_set_options(screen) ftxui_set_options(dom) ftxui_set_options(component) +include(cmake/ftxui_coverage.cmake) +ftxui_check_coverage(screen) +ftxui_check_coverage(dom) +ftxui_check_coverage(component) + if (FTXUI_BUILD_TESTS AND ${CMAKE_VERSION} VERSION_GREATER "3.11.4") include(cmake/ftxui_test.cmake) endif() diff --git a/cmake/ftxui_benchmark.cmake b/cmake/ftxui_benchmark.cmake index 0740476..79670f0 100644 --- a/cmake/ftxui_benchmark.cmake +++ b/cmake/ftxui_benchmark.cmake @@ -2,12 +2,19 @@ if (NOT WIN32) FetchContent_Declare(googlebenchmark GIT_REPOSITORY "https://github.com/google/benchmark" GIT_TAG 62937f91b5c763a8e119d0c20c67b87bde8eff1c + GIT_PROGRESS TRUE ) FetchContent_GetProperties(googlebenchmark) + set (BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE INTERNAL "") + set (BENCHMARK_ENABLE_TESTING OFF CACHE INTERNAL "") if(NOT googlebenchmark_POPULATED) FetchContent_Populate(googlebenchmark) - add_subdirectory(${googlebenchmark_SOURCE_DIR} ${googlebenchmark_BINARY_DIR} EXCLUDE_FROM_ALL) + add_subdirectory( + ${googlebenchmark_SOURCE_DIR} + ${googlebenchmark_BINARY_DIR} + EXCLUDE_FROM_ALL + ) endif() add_executable(ftxui_benchmark diff --git a/cmake/ftxui_coverage.cmake b/cmake/ftxui_coverage.cmake new file mode 100644 index 0000000..b92db44 --- /dev/null +++ b/cmake/ftxui_coverage.cmake @@ -0,0 +1,8 @@ +function(ftxui_check_coverage library) + if (FTXUI_ENABLE_COVERAGE) + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + target_compile_options(${library} INTERFACE --coverage -O0 -g) + target_link_libraries(${library} INTERFACE --coverage) + endif() + endif() +endfunction() diff --git a/cmake/ftxui_test.cmake b/cmake/ftxui_test.cmake index f438866..2ed92ba 100644 --- a/cmake/ftxui_test.cmake +++ b/cmake/ftxui_test.cmake @@ -1,17 +1,25 @@ enable_testing() -set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) option(FETCHCONTENT_UPDATES_DISCONNECTED TRUE) +option(FETCHCONTENT_QUIET FALSE) include(FetchContent) FetchContent_Declare(googletest GIT_REPOSITORY "https://github.com/google/googletest" GIT_TAG 23ef29555ef4789f555f1ba8c51b4c52975f0907 + GIT_PROGRESS TRUE ) FetchContent_GetProperties(googletest) if(NOT googletest_POPULATED) FetchContent_Populate(googletest) - add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL) + set(BUILD_GMOCK OFF CACHE INTERNAL "") + set(INSTALL_GTEST OFF CACHE INTERNAL "") + set(gtest_force_shared_crt ON CACHE INTERNAL "") + add_subdirectory( + ${googletest_SOURCE_DIR} + ${googletest_BINARY_DIR} + EXCLUDE_FROM_ALL + ) endif() add_executable(tests @@ -38,16 +46,17 @@ add_executable(tests target_link_libraries(tests PRIVATE component PRIVATE gtest - PRIVATE gmock PRIVATE gtest_main ) target_include_directories(tests PRIVATE src ) +ftxui_set_options(tests) -if (NOT MSVC) - include(cmake/ftxui_benchmark.cmake) -endif() +include(GoogleTest) +gtest_discover_tests(tests) + +include(cmake/ftxui_benchmark.cmake) if (FTXUI_BUILD_TESTS_FUZZER) include(cmake/ftxui_fuzzer.cmake) diff --git a/src/ftxui/component/animation.cpp b/src/ftxui/component/animation.cpp index 49cc3cd..cbee0a2 100644 --- a/src/ftxui/component/animation.cpp +++ b/src/ftxui/component/animation.cpp @@ -189,8 +189,8 @@ float ElasticIn(float p) { // Modeled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + // 1 float ElasticOut(float p) { - return std::sin(-13.F * kPi2 * (p + 1)) * std::pow(2.F, -10.F * p) + - 1; // NOLINT + // NOLINTNEXTLINE + return std::sin(-13.F * kPi2 * (p + 1)) * std::pow(2.F, -10.F * p) + 1; } // Modeled after the piecewise exponentially-damped sine wave: diff --git a/src/ftxui/component/button.cpp b/src/ftxui/component/button.cpp index 30ebfec..2fcd191 100644 --- a/src/ftxui/component/button.cpp +++ b/src/ftxui/component/button.cpp @@ -55,6 +55,7 @@ Element DefaultTransform(EntryState params) { // NOLINT /// │Click to quit│ /// └─────────────┘ /// ``` +// NOLINTNEXTLINE(readability-function-cognitive-complexity) Component Button(ConstStringRef label, std::function on_click, Ref option) { diff --git a/src/ftxui/component/component_test.cpp b/src/ftxui/component/component_test.cpp index 42a6814..8c0029a 100644 --- a/src/ftxui/component/component_test.cpp +++ b/src/ftxui/component/component_test.cpp @@ -7,7 +7,7 @@ #include "ftxui/component/component_base.hpp" // for ComponentBase, Component #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, SuiteApiResolver, TEST, TestFactoryImpl -using namespace ftxui; +namespace ftxui { namespace { Component Make() { @@ -172,6 +172,8 @@ TEST(ComponentTest, NonFocusableAreNotFocused) { EXPECT_EQ(child->ActiveChild(), nullptr); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/container_test.cpp b/src/ftxui/component/container_test.cpp index 1c5d914..902d4a3 100644 --- a/src/ftxui/component/container_test.cpp +++ b/src/ftxui/component/container_test.cpp @@ -8,14 +8,16 @@ #include "ftxui/component/event.hpp" // for Event, Event::Tab, Event::TabReverse, Event::ArrowDown, Event::ArrowLeft, Event::ArrowRight, Event::ArrowUp #include "gtest/gtest_pred_impl.h" // for AssertionResult, EXPECT_EQ, EXPECT_FALSE, EXPECT_TRUE, Test, TEST -using namespace ftxui; +namespace ftxui { +namespace { Component Focusable() { return Button("", [] {}); } Component NonFocusable() { return Container::Horizontal({}); } +} // namespace TEST(ContainerTest, HorizontalEvent) { auto container = Container::Horizontal({}); @@ -333,6 +335,8 @@ TEST(ContainerTest, TabFocusable) { EXPECT_FALSE(c->Focused()); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/input_test.cpp b/src/ftxui/component/input_test.cpp index 7cd16f9..0621c04 100644 --- a/src/ftxui/component/input_test.cpp +++ b/src/ftxui/component/input_test.cpp @@ -15,7 +15,7 @@ #include "ftxui/util/ref.hpp" // for Ref #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; +namespace ftxui { TEST(InputTest, Init) { std::string content; @@ -372,6 +372,8 @@ TEST(InputTest, MouseClickComplex) { EXPECT_EQ(option.cursor_position(), 4u); } +} // namespace ftxui + // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/menu_test.cpp b/src/ftxui/component/menu_test.cpp index f7088db..fd84a26 100644 --- a/src/ftxui/component/menu_test.cpp +++ b/src/ftxui/component/menu_test.cpp @@ -12,7 +12,7 @@ #include "ftxui/util/ref.hpp" // for Ref #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; +namespace ftxui { TEST(MenuTest, RemoveEntries) { int focused_entry = 0; @@ -43,6 +43,8 @@ TEST(MenuTest, RemoveEntries) { EXPECT_EQ(focused_entry, 1); } +} // namespace ftxui + // Copyright 2022 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/radiobox_test.cpp b/src/ftxui/component/radiobox_test.cpp index 08a4550..d057560 100644 --- a/src/ftxui/component/radiobox_test.cpp +++ b/src/ftxui/component/radiobox_test.cpp @@ -12,7 +12,7 @@ #include "ftxui/util/ref.hpp" // for Ref #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST -using namespace ftxui; +namespace ftxui { TEST(RadioboxTest, Navigation) { int selected = 0; @@ -145,6 +145,8 @@ TEST(RadioboxTest, RemoveEntries) { EXPECT_EQ(focused_entry, 1); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/receiver_test.cpp b/src/ftxui/component/receiver_test.cpp index bd4e1cb..a327ac8 100644 --- a/src/ftxui/component/receiver_test.cpp +++ b/src/ftxui/component/receiver_test.cpp @@ -6,7 +6,7 @@ #include "ftxui/component/receiver.hpp" #include "gtest/gtest_pred_impl.h" // for AssertionResult, Test, EXPECT_EQ -using namespace ftxui; +namespace ftxui { TEST(Receiver, Basic) { auto receiver = MakeReceiver(); @@ -75,6 +75,8 @@ TEST(Receiver, BasicWithThread) { t23.join(); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/screen_interactive_test.cpp b/src/ftxui/component/screen_interactive_test.cpp index 53f4a3e..9592d93 100644 --- a/src/ftxui/component/screen_interactive_test.cpp +++ b/src/ftxui/component/screen_interactive_test.cpp @@ -7,7 +7,7 @@ #include "ftxui/dom/elements.hpp" // for text, Element #include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ -using namespace ftxui; +namespace ftxui { namespace { bool TestSignal(int signal) { @@ -47,6 +47,8 @@ TEST(ScreenInteractive, Signal_SIGFPE) { TestSignal(SIGFPE); } +} // namespace ftxui + // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/component/terminal_input_parser_test.cpp b/src/ftxui/component/terminal_input_parser_test.cpp index f2bb0e2..863f974 100644 --- a/src/ftxui/component/terminal_input_parser_test.cpp +++ b/src/ftxui/component/terminal_input_parser_test.cpp @@ -9,7 +9,7 @@ #include "ftxui/component/terminal_input_parser.hpp" #include "gtest/gtest_pred_impl.h" // for AssertionResult, Test, EXPECT_EQ, EXPECT_TRUE, EXPECT_FALSE, TEST -using namespace ftxui; +namespace ftxui { // Test char |c| to are trivially converted into |Event::Character(c)|. TEST(Event, Character) { @@ -232,6 +232,8 @@ TEST(Event, UTF8) { } } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/benchmark_test.cpp b/src/ftxui/dom/benchmark_test.cpp index 800b620..76a028d 100644 --- a/src/ftxui/dom/benchmark_test.cpp +++ b/src/ftxui/dom/benchmark_test.cpp @@ -5,7 +5,7 @@ #include "ftxui/screen/color.hpp" // for ftxui #include "ftxui/screen/screen.hpp" // for Screen -using namespace ftxui; +namespace ftxui { static void BencharkBasic(benchmark::State& state) { while (state.KeepRunning()) { @@ -30,6 +30,8 @@ static void BencharkBasic(benchmark::State& state) { } BENCHMARK(BencharkBasic)->DenseRange(0, 256, 16); +} // namespace ftxui + // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file.l diff --git a/src/ftxui/dom/flexbox_helper_test.cpp b/src/ftxui/dom/flexbox_helper_test.cpp index ab6af7b..09d5b20 100644 --- a/src/ftxui/dom/flexbox_helper_test.cpp +++ b/src/ftxui/dom/flexbox_helper_test.cpp @@ -5,8 +5,7 @@ #include "ftxui/dom/flexbox_helper.hpp" #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST -using namespace ftxui; -using namespace ftxui; +namespace ftxui { TEST(FlexboxHelperTest, BasicRow) { flexbox_helper::Block block_10_5; @@ -228,6 +227,8 @@ TEST(FlexboxHelperTest, BasicColumnInversed) { EXPECT_EQ(g.blocks[4].dim_y, 5); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/flexbox_test.cpp b/src/ftxui/dom/flexbox_test.cpp index c284dc5..841711f 100644 --- a/src/ftxui/dom/flexbox_test.cpp +++ b/src/ftxui/dom/flexbox_test.cpp @@ -9,7 +9,7 @@ #include "ftxui/screen/screen.hpp" // for Screen #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; +namespace ftxui { TEST(FlexboxTest, BasicRow) { auto root = flexbox( @@ -433,6 +433,8 @@ TEST(FlexboxTest, GapY) { " "); } +} // namespace ftxui + // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/gauge_test.cpp b/src/ftxui/dom/gauge_test.cpp index 8165426..454850e 100644 --- a/src/ftxui/dom/gauge_test.cpp +++ b/src/ftxui/dom/gauge_test.cpp @@ -8,8 +8,7 @@ #include "ftxui/screen/screen.hpp" // for Screen #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; -using namespace ftxui; +namespace ftxui { TEST(GaugeTest, ZeroHorizontal) { auto root = gauge(0); @@ -24,7 +23,11 @@ TEST(GaugeTest, HalfHorizontal) { Screen screen(11, 1); Render(screen, root); +#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK) + EXPECT_EQ("█████▌ ", screen.ToString()); +#else EXPECT_EQ("█████▍ ", screen.ToString()); +#endif } TEST(GaugeTest, OneHorizontal) { @@ -95,6 +98,8 @@ TEST(GaugeTest, OneVertical) { screen.ToString()); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/gridbox_test.cpp b/src/ftxui/dom/gridbox_test.cpp index aa200c1..30c6e4c 100644 --- a/src/ftxui/dom/gridbox_test.cpp +++ b/src/ftxui/dom/gridbox_test.cpp @@ -10,7 +10,7 @@ #include "ftxui/screen/screen.hpp" // for Screen #include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ -using namespace ftxui; +namespace ftxui { namespace { std::string rotate(std::string str) { @@ -175,7 +175,7 @@ TEST(GridboxTest, Horizontal_NoFlex_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -203,7 +203,7 @@ TEST(GridboxTest, Vertical_NoFlex_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -233,7 +233,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_NoFlex_NoFlex) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -261,7 +261,7 @@ TEST(GridboxTest, Vertical_FlexGrow_NoFlex_NoFlex) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -291,7 +291,7 @@ TEST(GridboxTest, Horizontal_NoFlex_FlexGrow_NoFlex) { "012abc ABC", // "012abc ABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -321,7 +321,7 @@ TEST(GridboxTest, Horizontal_NoFlex_NoFlex_FlexGrow) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -353,7 +353,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_NoFlex_FlexGrow) { "012 abcABC ", // "012 abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -387,7 +387,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_FlexGrow_FlexGrow) { "012 abc ABC ", // "012 abc ABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -419,7 +419,7 @@ TEST(GridboxTest, Horizontal_FlexShrink_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -449,7 +449,7 @@ TEST(GridboxTest, Horizontal_NoFlex_FlexShrink_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -479,7 +479,7 @@ TEST(GridboxTest, Horizontal_NoFlex_NoFlex_FlexShrink) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -508,7 +508,7 @@ TEST(GridboxTest, Horizontal_FlexShrink_NoFlex_FlexShrink) { "012abcABC", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -539,7 +539,7 @@ TEST(GridboxTest, Horizontal_FlexShrink_FlexShrink_FlexShrink) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -570,7 +570,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_NoFlex_FlewShrink) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -596,6 +596,8 @@ TEST(GridboxTest, MissingCells) { " "); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/hbox_test.cpp b/src/ftxui/dom/hbox_test.cpp index a084c81..05fefe1 100644 --- a/src/ftxui/dom/hbox_test.cpp +++ b/src/ftxui/dom/hbox_test.cpp @@ -33,7 +33,7 @@ TEST(HBoxTest, NoFlex_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -61,7 +61,7 @@ TEST(HBoxTest, FlexGrow_NoFlex_NoFlex) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -89,7 +89,7 @@ TEST(HBoxTest, NoFlex_FlexGrow_NoFlex) { "012abc ABC", // "012abc ABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -117,7 +117,7 @@ TEST(HBoxTest, NoFlex_NoFlex_FlexGrow) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -147,7 +147,7 @@ TEST(HBoxTest, FlexGrow_NoFlex_FlexGrow) { "012 abcABC ", // "012 abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -179,7 +179,7 @@ TEST(HBoxTest, FlexGrow_FlexGrow_FlexGrow) { "012 abc ABC ", // "012 abc ABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -209,7 +209,7 @@ TEST(HBoxTest, FlexShrink_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -237,7 +237,7 @@ TEST(HBoxTest, NoFlex_FlexShrink_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -265,7 +265,7 @@ TEST(HBoxTest, NoFlex_NoFlex_FlexShrink) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -292,7 +292,7 @@ TEST(HBoxTest, FlexShrink_NoFlex_FlexShrink) { "012abcABC", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -321,7 +321,7 @@ TEST(HBoxTest, FlexShrink_FlexShrink_FlexShrink) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); @@ -350,7 +350,7 @@ TEST(HBoxTest, FlexGrow_NoFlex_FlewShrink) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(i, 1); Render(screen, root); EXPECT_EQ(expectations[i], screen.ToString()); diff --git a/src/ftxui/dom/table_test.cpp b/src/ftxui/dom/table_test.cpp index 0cb4a92..b055d27 100644 --- a/src/ftxui/dom/table_test.cpp +++ b/src/ftxui/dom/table_test.cpp @@ -9,7 +9,7 @@ #include "ftxui/screen/screen.hpp" // for Screen #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; +namespace ftxui { TEST(TableTest, Empty) { auto table = Table(); @@ -711,6 +711,8 @@ TEST(TableTest, RowFlexTwo) { screen.ToString()); } +} // namespace ftxui + // Copyright 2021 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/text_test.cpp b/src/ftxui/dom/text_test.cpp index d763932..10ba7cc 100644 --- a/src/ftxui/dom/text_test.cpp +++ b/src/ftxui/dom/text_test.cpp @@ -8,7 +8,7 @@ #include "ftxui/screen/screen.hpp" // for Screen #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; +namespace ftxui { TEST(TextTest, ScreenHeightSmaller) { auto element = text("test"); @@ -103,6 +103,8 @@ TEST(TextTest, CombiningCharacters) { EXPECT_EQ(t, screen.ToString()); } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/dom/vbox_test.cpp b/src/ftxui/dom/vbox_test.cpp index 4a11bf1..9812c35 100644 --- a/src/ftxui/dom/vbox_test.cpp +++ b/src/ftxui/dom/vbox_test.cpp @@ -10,7 +10,8 @@ #include "ftxui/screen/screen.hpp" // for Screen #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST -using namespace ftxui; +namespace ftxui { +namespace { std::string rotate(std::string str) { str.erase(std::remove(str.begin(), str.end(), '\r'), str.end()); @@ -18,6 +19,8 @@ std::string rotate(std::string str) { return str; } +} // namespace + TEST(VBoxText, NoFlex_NoFlex_NoFlex) { auto root = vbox({ vtext("012"), @@ -39,7 +42,7 @@ TEST(VBoxText, NoFlex_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -67,7 +70,7 @@ TEST(VBoxText, FlexGrow_NoFlex_NoFlex) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -95,7 +98,7 @@ TEST(VBoxText, NoFlex_FlexGrow_NoFlex) { "012abc ABC", // "012abc ABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -123,7 +126,7 @@ TEST(VBoxText, NoFlex_NoFlex_FlexGrow) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -153,7 +156,7 @@ TEST(VBoxText, FlexGrow_NoFlex_FlexGrow) { "012 abcABC ", // "012 abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -185,7 +188,7 @@ TEST(VBoxText, FlexGrow_FlexGrow_FlexGrow) { "012 abc ABC ", // "012 abc ABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -215,7 +218,7 @@ TEST(VBoxText, FlexShrink_NoFlex_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -243,7 +246,7 @@ TEST(VBoxText, NoFlex_FlexShrink_NoFlex) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -271,7 +274,7 @@ TEST(VBoxText, NoFlex_NoFlex_FlexShrink) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -298,7 +301,7 @@ TEST(VBoxText, FlexShrink_NoFlex_FlexShrink) { "012abcABC", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -327,7 +330,7 @@ TEST(VBoxText, FlexShrink_FlexShrink_FlexShrink) { "012abcABC ", // "012abcABC ", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); @@ -356,13 +359,15 @@ TEST(VBoxText, FlexGrow_NoFlex_FlewShrink) { "012 abcABC", // "012 abcABC", // }; - for (int i = 0; i < expectations.size(); ++i) { + for (size_t i = 0; i < expectations.size(); ++i) { Screen screen(1, i); Render(screen, root); EXPECT_EQ(expectations[i], rotate(screen.ToString())); } } +} // namespace ftxui + // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file. diff --git a/src/ftxui/screen/screen.cpp b/src/ftxui/screen/screen.cpp index 529eb45..c3d9555 100644 --- a/src/ftxui/screen/screen.cpp +++ b/src/ftxui/screen/screen.cpp @@ -1,4 +1,4 @@ -#include // for uint8_t +#include // for uint8_t #include // for operator<<, stringstream, basic_ostream, flush, cout, ostream #include // for _Rb_tree_const_iterator, map, operator!=, operator== #include // for allocator diff --git a/src/ftxui/screen/string_test.cpp b/src/ftxui/screen/string_test.cpp index 0aff5ad..5518d24 100644 --- a/src/ftxui/screen/string_test.cpp +++ b/src/ftxui/screen/string_test.cpp @@ -5,7 +5,7 @@ #include "ftxui/screen/string.hpp" #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST -using namespace ftxui; +namespace ftxui { TEST(StringTest, StringWidth) { // Basic: @@ -120,6 +120,7 @@ TEST(StringTest, CellToGlyphIndex) { EXPECT_EQ(combining[2], 2); } +} // Copyright 2020 Arthur Sonzogni. All rights reserved. // Use of this source code is governed by the MIT license that can be found in // the LICENSE file.