Add code coverage support. (#378)

This commit is contained in:
Arthur Sonzogni 2022-04-17 15:47:20 +02:00 committed by GitHub
parent b2896aba49
commit 764c24ef40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 206 additions and 96 deletions

View File

@ -19,54 +19,93 @@ jobs:
include: include:
- name: Linux GCC - name: Linux GCC
os: ubuntu-latest os: ubuntu-latest
compiler: g++-9 compiler: gcc
test: true gcov_executable: gcov
- name: Linux Clang - name: Linux Clang
os: ubuntu-latest os: ubuntu-latest
compiler: clang++ compiler: llvm
test: true gcov_executable: "llvm-cov gcov"
- name: MacOS clang - name: MacOS clang
os: macos-latest os: macos-latest
compiler: clang++ compiler: llvm
test: true gcov_executable: "llvm-cov gcov"
- name: Windows MSVC - name: Windows MSVC
os: windows-latest os: windows-latest
compiler: cl compiler: cl
test: false
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- name: "Checkout repository" - name: "Checkout repository"
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: "Enable MSVC command prompt" - name: "Setup Cpp"
if: matrix.os == 'windows-latest' uses: aminya/setup-cpp@v1
uses: ilammy/msvc-dev-cmd@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" # make sure coverage is only enabled for Debug builds, since it sets -O0
uses: lukka/get-cmake@latest # to make sure coverage has meaningful results
- name: "Configure CMake"
- name: "Build debug mode"
run: > run: >
mkdir build; cmake -S .
cd build; -B ./build
cmake .. -DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_CXX_COMPILER=${{ matrix.compiler }} -DFTXUI_ENABLE_COVERAGE:BOOL=ON
-DFTXUI_BUILD_DOCS=OFF -DFTXUI_BUILD_DOCS:BOOL=OFF
-DFTXUI_BUILD_EXAMPLES=ON -DFTXUI_BUILD_EXAMPLES:BOOL=ON
-DFTXUI_BUILD_TESTS=ON -DFTXUI_BUILD_TESTS:BOOL=ON
-DFTXUI_BUILD_TESTS_FUZZER=OFF -DFTXUI_BUILD_TESTS_FUZZER:BOOL=OFF
-DFTXUI_ENABLE_INSTALL=ON ; -DFTXUI_ENABLE_INSTALL:BOOL=ON ;
cmake --build . --config Debug;
- name: "Run tests" - name: "Build"
if: matrix.test
run: > run: >
cd build; cmake
./tests --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 # Create a release on new v* tags
release: release:
@ -117,7 +156,7 @@ jobs:
-DFTXUI_BUILD_TESTS=OFF -DFTXUI_BUILD_TESTS=OFF
-DFTXUI_BUILD_TESTS_FUZZER=OFF -DFTXUI_BUILD_TESTS_FUZZER=OFF
-DFTXUI_ENABLE_INSTALL=ON; -DFTXUI_ENABLE_INSTALL=ON;
cmake --build . --config Release --target package; cmake --build . --target package;
- uses: shogo82148/actions-upload-release-asset@v1 - uses: shogo82148/actions-upload-release-asset@v1
with: with:
upload_url: ${{ needs.release.outputs.upload_url }} upload_url: ${{ needs.release.outputs.upload_url }}

View File

@ -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_BUILD_TESTS_FUZZER "Set to ON to enable fuzzing" OFF)
option(FTXUI_ENABLE_INSTALL "Generate the install target" ON) option(FTXUI_ENABLE_INSTALL "Generate the install target" ON)
option(FTXUI_CLANG_TIDY "Execute clang-tidy" OFF) 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 \ 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 \ 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(dom)
ftxui_set_options(component) 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") if (FTXUI_BUILD_TESTS AND ${CMAKE_VERSION} VERSION_GREATER "3.11.4")
include(cmake/ftxui_test.cmake) include(cmake/ftxui_test.cmake)
endif() endif()

View File

@ -2,12 +2,19 @@ if (NOT WIN32)
FetchContent_Declare(googlebenchmark FetchContent_Declare(googlebenchmark
GIT_REPOSITORY "https://github.com/google/benchmark" GIT_REPOSITORY "https://github.com/google/benchmark"
GIT_TAG 62937f91b5c763a8e119d0c20c67b87bde8eff1c GIT_TAG 62937f91b5c763a8e119d0c20c67b87bde8eff1c
GIT_PROGRESS TRUE
) )
FetchContent_GetProperties(googlebenchmark) FetchContent_GetProperties(googlebenchmark)
set (BENCHMARK_ENABLE_GTEST_TESTS OFF CACHE INTERNAL "")
set (BENCHMARK_ENABLE_TESTING OFF CACHE INTERNAL "")
if(NOT googlebenchmark_POPULATED) if(NOT googlebenchmark_POPULATED)
FetchContent_Populate(googlebenchmark) 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() endif()
add_executable(ftxui_benchmark add_executable(ftxui_benchmark

View File

@ -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()

View File

@ -1,17 +1,25 @@
enable_testing() enable_testing()
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
option(FETCHCONTENT_UPDATES_DISCONNECTED TRUE) option(FETCHCONTENT_UPDATES_DISCONNECTED TRUE)
option(FETCHCONTENT_QUIET FALSE)
include(FetchContent) include(FetchContent)
FetchContent_Declare(googletest FetchContent_Declare(googletest
GIT_REPOSITORY "https://github.com/google/googletest" GIT_REPOSITORY "https://github.com/google/googletest"
GIT_TAG 23ef29555ef4789f555f1ba8c51b4c52975f0907 GIT_TAG 23ef29555ef4789f555f1ba8c51b4c52975f0907
GIT_PROGRESS TRUE
) )
FetchContent_GetProperties(googletest) FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED) if(NOT googletest_POPULATED)
FetchContent_Populate(googletest) 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() endif()
add_executable(tests add_executable(tests
@ -38,16 +46,17 @@ add_executable(tests
target_link_libraries(tests target_link_libraries(tests
PRIVATE component PRIVATE component
PRIVATE gtest PRIVATE gtest
PRIVATE gmock
PRIVATE gtest_main PRIVATE gtest_main
) )
target_include_directories(tests target_include_directories(tests
PRIVATE src PRIVATE src
) )
ftxui_set_options(tests)
include(GoogleTest)
gtest_discover_tests(tests)
if (NOT MSVC)
include(cmake/ftxui_benchmark.cmake) include(cmake/ftxui_benchmark.cmake)
endif()
if (FTXUI_BUILD_TESTS_FUZZER) if (FTXUI_BUILD_TESTS_FUZZER)
include(cmake/ftxui_fuzzer.cmake) include(cmake/ftxui_fuzzer.cmake)

View File

@ -189,8 +189,8 @@ float ElasticIn(float p) {
// Modeled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + // Modeled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) +
// 1 // 1
float ElasticOut(float p) { float ElasticOut(float p) {
return std::sin(-13.F * kPi2 * (p + 1)) * std::pow(2.F, -10.F * p) + // NOLINTNEXTLINE
1; // NOLINT return std::sin(-13.F * kPi2 * (p + 1)) * std::pow(2.F, -10.F * p) + 1;
} }
// Modeled after the piecewise exponentially-damped sine wave: // Modeled after the piecewise exponentially-damped sine wave:

View File

@ -55,6 +55,7 @@ Element DefaultTransform(EntryState params) { // NOLINT
/// │Click to quit│ /// │Click to quit│
/// └─────────────┘ /// └─────────────┘
/// ``` /// ```
// NOLINTNEXTLINE(readability-function-cognitive-complexity)
Component Button(ConstStringRef label, Component Button(ConstStringRef label,
std::function<void()> on_click, std::function<void()> on_click,
Ref<ButtonOption> option) { Ref<ButtonOption> option) {

View File

@ -7,7 +7,7 @@
#include "ftxui/component/component_base.hpp" // for ComponentBase, Component #include "ftxui/component/component_base.hpp" // for ComponentBase, Component
#include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, SuiteApiResolver, TEST, TestFactoryImpl #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, SuiteApiResolver, TEST, TestFactoryImpl
using namespace ftxui; namespace ftxui {
namespace { namespace {
Component Make() { Component Make() {
@ -172,6 +172,8 @@ TEST(ComponentTest, NonFocusableAreNotFocused) {
EXPECT_EQ(child->ActiveChild(), nullptr); EXPECT_EQ(child->ActiveChild(), nullptr);
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -8,14 +8,16 @@
#include "ftxui/component/event.hpp" // for Event, Event::Tab, Event::TabReverse, Event::ArrowDown, Event::ArrowLeft, Event::ArrowRight, Event::ArrowUp #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 #include "gtest/gtest_pred_impl.h" // for AssertionResult, EXPECT_EQ, EXPECT_FALSE, EXPECT_TRUE, Test, TEST
using namespace ftxui; namespace ftxui {
namespace {
Component Focusable() { Component Focusable() {
return Button("", [] {}); return Button("", [] {});
} }
Component NonFocusable() { Component NonFocusable() {
return Container::Horizontal({}); return Container::Horizontal({});
} }
} // namespace
TEST(ContainerTest, HorizontalEvent) { TEST(ContainerTest, HorizontalEvent) {
auto container = Container::Horizontal({}); auto container = Container::Horizontal({});
@ -333,6 +335,8 @@ TEST(ContainerTest, TabFocusable) {
EXPECT_FALSE(c->Focused()); EXPECT_FALSE(c->Focused());
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -15,7 +15,7 @@
#include "ftxui/util/ref.hpp" // for Ref #include "ftxui/util/ref.hpp" // for Ref
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
TEST(InputTest, Init) { TEST(InputTest, Init) {
std::string content; std::string content;
@ -372,6 +372,8 @@ TEST(InputTest, MouseClickComplex) {
EXPECT_EQ(option.cursor_position(), 4u); EXPECT_EQ(option.cursor_position(), 4u);
} }
} // namespace ftxui
// Copyright 2021 Arthur Sonzogni. All rights reserved. // Copyright 2021 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -12,7 +12,7 @@
#include "ftxui/util/ref.hpp" // for Ref #include "ftxui/util/ref.hpp" // for Ref
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
TEST(MenuTest, RemoveEntries) { TEST(MenuTest, RemoveEntries) {
int focused_entry = 0; int focused_entry = 0;
@ -43,6 +43,8 @@ TEST(MenuTest, RemoveEntries) {
EXPECT_EQ(focused_entry, 1); EXPECT_EQ(focused_entry, 1);
} }
} // namespace ftxui
// Copyright 2022 Arthur Sonzogni. All rights reserved. // Copyright 2022 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -12,7 +12,7 @@
#include "ftxui/util/ref.hpp" // for Ref #include "ftxui/util/ref.hpp" // for Ref
#include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST
using namespace ftxui; namespace ftxui {
TEST(RadioboxTest, Navigation) { TEST(RadioboxTest, Navigation) {
int selected = 0; int selected = 0;
@ -145,6 +145,8 @@ TEST(RadioboxTest, RemoveEntries) {
EXPECT_EQ(focused_entry, 1); EXPECT_EQ(focused_entry, 1);
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -6,7 +6,7 @@
#include "ftxui/component/receiver.hpp" #include "ftxui/component/receiver.hpp"
#include "gtest/gtest_pred_impl.h" // for AssertionResult, Test, EXPECT_EQ #include "gtest/gtest_pred_impl.h" // for AssertionResult, Test, EXPECT_EQ
using namespace ftxui; namespace ftxui {
TEST(Receiver, Basic) { TEST(Receiver, Basic) {
auto receiver = MakeReceiver<char>(); auto receiver = MakeReceiver<char>();
@ -75,6 +75,8 @@ TEST(Receiver, BasicWithThread) {
t23.join(); t23.join();
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -7,7 +7,7 @@
#include "ftxui/dom/elements.hpp" // for text, Element #include "ftxui/dom/elements.hpp" // for text, Element
#include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ #include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ
using namespace ftxui; namespace ftxui {
namespace { namespace {
bool TestSignal(int signal) { bool TestSignal(int signal) {
@ -47,6 +47,8 @@ TEST(ScreenInteractive, Signal_SIGFPE) {
TestSignal(SIGFPE); TestSignal(SIGFPE);
} }
} // namespace ftxui
// Copyright 2021 Arthur Sonzogni. All rights reserved. // Copyright 2021 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -9,7 +9,7 @@
#include "ftxui/component/terminal_input_parser.hpp" #include "ftxui/component/terminal_input_parser.hpp"
#include "gtest/gtest_pred_impl.h" // for AssertionResult, Test, EXPECT_EQ, EXPECT_TRUE, EXPECT_FALSE, TEST #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 char |c| to are trivially converted into |Event::Character(c)|.
TEST(Event, Character) { TEST(Event, Character) {
@ -232,6 +232,8 @@ TEST(Event, UTF8) {
} }
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -5,7 +5,7 @@
#include "ftxui/screen/color.hpp" // for ftxui #include "ftxui/screen/color.hpp" // for ftxui
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
using namespace ftxui; namespace ftxui {
static void BencharkBasic(benchmark::State& state) { static void BencharkBasic(benchmark::State& state) {
while (state.KeepRunning()) { while (state.KeepRunning()) {
@ -30,6 +30,8 @@ static void BencharkBasic(benchmark::State& state) {
} }
BENCHMARK(BencharkBasic)->DenseRange(0, 256, 16); BENCHMARK(BencharkBasic)->DenseRange(0, 256, 16);
} // namespace ftxui
// Copyright 2021 Arthur Sonzogni. All rights reserved. // Copyright 2021 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.l // the LICENSE file.l

View File

@ -5,8 +5,7 @@
#include "ftxui/dom/flexbox_helper.hpp" #include "ftxui/dom/flexbox_helper.hpp"
#include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST
using namespace ftxui; namespace ftxui {
using namespace ftxui;
TEST(FlexboxHelperTest, BasicRow) { TEST(FlexboxHelperTest, BasicRow) {
flexbox_helper::Block block_10_5; flexbox_helper::Block block_10_5;
@ -228,6 +227,8 @@ TEST(FlexboxHelperTest, BasicColumnInversed) {
EXPECT_EQ(g.blocks[4].dim_y, 5); EXPECT_EQ(g.blocks[4].dim_y, 5);
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -9,7 +9,7 @@
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
TEST(FlexboxTest, BasicRow) { TEST(FlexboxTest, BasicRow) {
auto root = flexbox( auto root = flexbox(
@ -433,6 +433,8 @@ TEST(FlexboxTest, GapY) {
" "); " ");
} }
} // namespace ftxui
// Copyright 2021 Arthur Sonzogni. All rights reserved. // Copyright 2021 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -8,8 +8,7 @@
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
using namespace ftxui;
TEST(GaugeTest, ZeroHorizontal) { TEST(GaugeTest, ZeroHorizontal) {
auto root = gauge(0); auto root = gauge(0);
@ -24,7 +23,11 @@ TEST(GaugeTest, HalfHorizontal) {
Screen screen(11, 1); Screen screen(11, 1);
Render(screen, root); Render(screen, root);
#if defined(FTXUI_MICROSOFT_TERMINAL_FALLBACK)
EXPECT_EQ("█████▌ ", screen.ToString());
#else
EXPECT_EQ("█████▍ ", screen.ToString()); EXPECT_EQ("█████▍ ", screen.ToString());
#endif
} }
TEST(GaugeTest, OneHorizontal) { TEST(GaugeTest, OneHorizontal) {
@ -95,6 +98,8 @@ TEST(GaugeTest, OneVertical) {
screen.ToString()); screen.ToString());
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -10,7 +10,7 @@
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
#include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ #include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ
using namespace ftxui; namespace ftxui {
namespace { namespace {
std::string rotate(std::string str) { std::string rotate(std::string str) {
@ -175,7 +175,7 @@ TEST(GridboxTest, Horizontal_NoFlex_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -203,7 +203,7 @@ TEST(GridboxTest, Vertical_NoFlex_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -233,7 +233,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_NoFlex_NoFlex) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -261,7 +261,7 @@ TEST(GridboxTest, Vertical_FlexGrow_NoFlex_NoFlex) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -291,7 +291,7 @@ TEST(GridboxTest, Horizontal_NoFlex_FlexGrow_NoFlex) {
"012abc ABC", // "012abc ABC", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -321,7 +321,7 @@ TEST(GridboxTest, Horizontal_NoFlex_NoFlex_FlexGrow) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -353,7 +353,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_NoFlex_FlexGrow) {
"012 abcABC ", // "012 abcABC ", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -387,7 +387,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_FlexGrow_FlexGrow) {
"012 abc ABC ", // "012 abc ABC ", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -419,7 +419,7 @@ TEST(GridboxTest, Horizontal_FlexShrink_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -449,7 +449,7 @@ TEST(GridboxTest, Horizontal_NoFlex_FlexShrink_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -479,7 +479,7 @@ TEST(GridboxTest, Horizontal_NoFlex_NoFlex_FlexShrink) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -508,7 +508,7 @@ TEST(GridboxTest, Horizontal_FlexShrink_NoFlex_FlexShrink) {
"012abcABC", // "012abcABC", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -539,7 +539,7 @@ TEST(GridboxTest, Horizontal_FlexShrink_FlexShrink_FlexShrink) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -570,7 +570,7 @@ TEST(GridboxTest, Horizontal_FlexGrow_NoFlex_FlewShrink) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -596,6 +596,8 @@ TEST(GridboxTest, MissingCells) {
" "); " ");
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -33,7 +33,7 @@ TEST(HBoxTest, NoFlex_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -61,7 +61,7 @@ TEST(HBoxTest, FlexGrow_NoFlex_NoFlex) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -89,7 +89,7 @@ TEST(HBoxTest, NoFlex_FlexGrow_NoFlex) {
"012abc ABC", // "012abc ABC", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -117,7 +117,7 @@ TEST(HBoxTest, NoFlex_NoFlex_FlexGrow) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -147,7 +147,7 @@ TEST(HBoxTest, FlexGrow_NoFlex_FlexGrow) {
"012 abcABC ", // "012 abcABC ", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -179,7 +179,7 @@ TEST(HBoxTest, FlexGrow_FlexGrow_FlexGrow) {
"012 abc ABC ", // "012 abc ABC ", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -209,7 +209,7 @@ TEST(HBoxTest, FlexShrink_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -237,7 +237,7 @@ TEST(HBoxTest, NoFlex_FlexShrink_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -265,7 +265,7 @@ TEST(HBoxTest, NoFlex_NoFlex_FlexShrink) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -292,7 +292,7 @@ TEST(HBoxTest, FlexShrink_NoFlex_FlexShrink) {
"012abcABC", // "012abcABC", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -321,7 +321,7 @@ TEST(HBoxTest, FlexShrink_FlexShrink_FlexShrink) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(i, 1); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());
@ -350,7 +350,7 @@ TEST(HBoxTest, FlexGrow_NoFlex_FlewShrink) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(i, 1);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], screen.ToString()); EXPECT_EQ(expectations[i], screen.ToString());

View File

@ -9,7 +9,7 @@
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
TEST(TableTest, Empty) { TEST(TableTest, Empty) {
auto table = Table(); auto table = Table();
@ -711,6 +711,8 @@ TEST(TableTest, RowFlexTwo) {
screen.ToString()); screen.ToString());
} }
} // namespace ftxui
// Copyright 2021 Arthur Sonzogni. All rights reserved. // Copyright 2021 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -8,7 +8,7 @@
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
TEST(TextTest, ScreenHeightSmaller) { TEST(TextTest, ScreenHeightSmaller) {
auto element = text("test"); auto element = text("test");
@ -103,6 +103,8 @@ TEST(TextTest, CombiningCharacters) {
EXPECT_EQ(t, screen.ToString()); EXPECT_EQ(t, screen.ToString());
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -10,7 +10,8 @@
#include "ftxui/screen/screen.hpp" // for Screen #include "ftxui/screen/screen.hpp" // for Screen
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, TEST
using namespace ftxui; namespace ftxui {
namespace {
std::string rotate(std::string str) { std::string rotate(std::string str) {
str.erase(std::remove(str.begin(), str.end(), '\r'), str.end()); str.erase(std::remove(str.begin(), str.end(), '\r'), str.end());
@ -18,6 +19,8 @@ std::string rotate(std::string str) {
return str; return str;
} }
} // namespace
TEST(VBoxText, NoFlex_NoFlex_NoFlex) { TEST(VBoxText, NoFlex_NoFlex_NoFlex) {
auto root = vbox({ auto root = vbox({
vtext("012"), vtext("012"),
@ -39,7 +42,7 @@ TEST(VBoxText, NoFlex_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -67,7 +70,7 @@ TEST(VBoxText, FlexGrow_NoFlex_NoFlex) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -95,7 +98,7 @@ TEST(VBoxText, NoFlex_FlexGrow_NoFlex) {
"012abc ABC", // "012abc ABC", //
"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); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -123,7 +126,7 @@ TEST(VBoxText, NoFlex_NoFlex_FlexGrow) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -153,7 +156,7 @@ TEST(VBoxText, FlexGrow_NoFlex_FlexGrow) {
"012 abcABC ", // "012 abcABC ", //
"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); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -185,7 +188,7 @@ TEST(VBoxText, FlexGrow_FlexGrow_FlexGrow) {
"012 abc ABC ", // "012 abc ABC ", //
"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); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -215,7 +218,7 @@ TEST(VBoxText, FlexShrink_NoFlex_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -243,7 +246,7 @@ TEST(VBoxText, NoFlex_FlexShrink_NoFlex) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -271,7 +274,7 @@ TEST(VBoxText, NoFlex_NoFlex_FlexShrink) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -298,7 +301,7 @@ TEST(VBoxText, FlexShrink_NoFlex_FlexShrink) {
"012abcABC", // "012abcABC", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -327,7 +330,7 @@ TEST(VBoxText, FlexShrink_FlexShrink_FlexShrink) {
"012abcABC ", // "012abcABC ", //
"012abcABC ", // "012abcABC ", //
}; };
for (int i = 0; i < expectations.size(); ++i) { for (size_t i = 0; i < expectations.size(); ++i) {
Screen screen(1, i); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
@ -356,13 +359,15 @@ TEST(VBoxText, FlexGrow_NoFlex_FlewShrink) {
"012 abcABC", // "012 abcABC", //
"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); Screen screen(1, i);
Render(screen, root); Render(screen, root);
EXPECT_EQ(expectations[i], rotate(screen.ToString())); EXPECT_EQ(expectations[i], rotate(screen.ToString()));
} }
} }
} // namespace ftxui
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.

View File

@ -1,4 +1,4 @@
#include <stdint.h> // for uint8_t #include <cstdint> // for uint8_t
#include <iostream> // for operator<<, stringstream, basic_ostream, flush, cout, ostream #include <iostream> // for operator<<, stringstream, basic_ostream, flush, cout, ostream
#include <map> // for _Rb_tree_const_iterator, map, operator!=, operator== #include <map> // for _Rb_tree_const_iterator, map, operator!=, operator==
#include <memory> // for allocator #include <memory> // for allocator

View File

@ -5,7 +5,7 @@
#include "ftxui/screen/string.hpp" #include "ftxui/screen/string.hpp"
#include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST #include "gtest/gtest_pred_impl.h" // for EXPECT_EQ, Test, TEST
using namespace ftxui; namespace ftxui {
TEST(StringTest, StringWidth) { TEST(StringTest, StringWidth) {
// Basic: // Basic:
@ -120,6 +120,7 @@ TEST(StringTest, CellToGlyphIndex) {
EXPECT_EQ(combining[2], 2); EXPECT_EQ(combining[2], 2);
} }
}
// Copyright 2020 Arthur Sonzogni. All rights reserved. // Copyright 2020 Arthur Sonzogni. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in // Use of this source code is governed by the MIT license that can be found in
// the LICENSE file. // the LICENSE file.