diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 4faaef076b7ad97949078c919b09dd19338d6a8c..18b5514bac18a1be379884cb52753fabacf674d5 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -15,6 +15,7 @@ jobs:
   test:
     name: "Tests"
     strategy:
+      fail-fast: false
       matrix:
         include:
           - name: Linux GCC
diff --git a/README.md b/README.md
index 2312fecf23406325c374e0516fec8c341c13a670..47781f803196ff679a0f6958ff8781faa81f9e89 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,10 @@
   <a href="#"><img src="https://img.shields.io/github/repo-size/ArthurSonzogni/FTXUI"></img></a>
   <a href="https://github.com/ArthurSonzogni/FTXUI/issues"><img src="https://img.shields.io/github/issues/ArthurSonzogni/FTXUI"></img></a>
   <a href="https://github.com/ArthurSonzogni/FTXUI/graphs/contributors"><img src="https://img.shields.io/github/contributors/arthursonzogni/FTXUI?color=blue"></img></a>
+  <a href="https://codecov.io/gh/ArthurSonzogni/FTXUI">
+    <img src="https://codecov.io/gh/ArthurSonzogni/FTXUI/branch/master/graph/badge.svg?token=C41FdRpNVA"/>
+  </a>
+
   
   <br/>
   <a href="https://arthursonzogni.github.io/FTXUI/">Documentation</a> ·
diff --git a/cmake/ftxui_test.cmake b/cmake/ftxui_test.cmake
index 2ed92badf3d3bd02c6bf6ff0fffb1dea678a728d..fd1dd79ecd99cdf676ac816aaf3bedf53b805699 100644
--- a/cmake/ftxui_test.cmake
+++ b/cmake/ftxui_test.cmake
@@ -32,6 +32,12 @@ add_executable(tests
   src/ftxui/component/screen_interactive_test.cpp
   src/ftxui/component/terminal_input_parser_test.cpp
   src/ftxui/component/toggle_test.cpp
+  src/ftxui/dom/blink_test.cpp
+  src/ftxui/dom/bold_test.cpp
+  src/ftxui/dom/border_test.cpp
+  src/ftxui/dom/separator_test.cpp
+  src/ftxui/dom/color_test.cpp
+  src/ftxui/dom/dim_test.cpp
   src/ftxui/dom/flexbox_helper_test.cpp
   src/ftxui/dom/flexbox_test.cpp
   src/ftxui/dom/gauge_test.cpp
@@ -39,7 +45,9 @@ add_executable(tests
   src/ftxui/dom/hbox_test.cpp
   src/ftxui/dom/table_test.cpp
   src/ftxui/dom/text_test.cpp
+  src/ftxui/dom/underlined_test.cpp
   src/ftxui/dom/vbox_test.cpp
+  src/ftxui/screen/color_test.cpp
   src/ftxui/screen/string_test.cpp
 )
 
@@ -54,7 +62,10 @@ target_include_directories(tests
 ftxui_set_options(tests)
 
 include(GoogleTest)
-gtest_discover_tests(tests)
+gtest_discover_tests(tests
+  DISCOVERY_TIMEOUT 600
+)
+
 
 include(cmake/ftxui_benchmark.cmake)
 
diff --git a/include/ftxui/screen/terminal.hpp b/include/ftxui/screen/terminal.hpp
index 91574d885fe45152287b2403eabc5630bd6c4f26..2ec3bbb7453469bc98a3d5130ffeb12eb610eee5 100644
--- a/include/ftxui/screen/terminal.hpp
+++ b/include/ftxui/screen/terminal.hpp
@@ -18,6 +18,8 @@ enum Color {
   TrueColor,
 };
 Color ColorSupport();
+void SetColorSupport(Color color);
+
 }  // namespace Terminal
 
 }  // namespace ftxui
diff --git a/src/ftxui/dom/blink_test.cpp b/src/ftxui/dom/blink_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1b02a4feda97734260666652655e77a0f0d917bc
--- /dev/null
+++ b/src/ftxui/dom/blink_test.cpp
@@ -0,0 +1,21 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(BlinkTest, Basic) {
+  auto element = text("text") | blink;
+  Screen screen(5, 1);
+  Render(screen, element);
+  EXPECT_TRUE(screen.PixelAt(0,0).blink);
+}
+
+} // 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/dom/bold_test.cpp b/src/ftxui/dom/bold_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d1f87caba549cf9d2d55e7f6203a16e6922850f4
--- /dev/null
+++ b/src/ftxui/dom/bold_test.cpp
@@ -0,0 +1,21 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(BoldTest, Basic) {
+  auto element = text("text") | bold;
+  Screen screen(5, 1);
+  Render(screen, element);
+  EXPECT_TRUE(screen.PixelAt(0,0).bold);
+}
+
+} // 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/dom/border_test.cpp b/src/ftxui/dom/border_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..153de6be55764942b145e6d11e331d2ddffc01f1
--- /dev/null
+++ b/src/ftxui/dom/border_test.cpp
@@ -0,0 +1,96 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(BorderTest, Default) {
+  auto element = text("text") | border;
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "╭───╮\r\n"
+            "│tex│\r\n"
+            "╰───╯");
+}
+
+TEST(BorderTest, Light) {
+  auto element = text("text") | borderLight;
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "┌───┐\r\n"
+            "│tex│\r\n"
+            "└───┘");
+}
+
+TEST(BorderTest, Double) {
+  auto element = text("text") | borderDouble;
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "╔═══╗\r\n"
+            "║tex║\r\n"
+            "╚═══╝");
+}
+
+TEST(BorderTest, Rounded) {
+  auto element = text("text") | borderRounded;
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "╭───╮\r\n"
+            "│tex│\r\n"
+            "╰───╯");
+}
+
+TEST(BorderTest, Heavy) {
+  auto element = text("text") | borderHeavy;
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "┏━━━┓\r\n"
+            "┃tex┃\r\n"
+            "┗━━━┛");
+}
+
+TEST(BorderTest, Empty) {
+  auto element = text("text") | borderEmpty;
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "     \r\n"
+            " tex \r\n"
+            "     ");
+}
+
+TEST(BorderTest, Styled) {
+  auto element = text("text") | borderStyled(DOUBLE);
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "╔═══╗\r\n"
+            "║tex║\r\n"
+            "╚═══╝");
+}
+
+TEST(BorderTest, WithPixel) {
+  Pixel pixel;
+  pixel.character = "o";
+  auto element = text("text") | borderWith(pixel);
+  Screen screen(5, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "ooooo\r\n"
+            "otexo\r\n"
+            "ooooo");
+}
+
+} // 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/dom/color_test.cpp b/src/ftxui/dom/color_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b49306e8ebb698efd68867579e945be242090d51
--- /dev/null
+++ b/src/ftxui/dom/color_test.cpp
@@ -0,0 +1,30 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(ColorTest, Foreground) {
+  auto element = text("text") | color(Color::Red);
+  Screen screen(5, 1);
+  Render(screen, element);
+  EXPECT_EQ(screen.PixelAt(0, 0).foreground_color, Color::Red);
+  EXPECT_EQ(screen.PixelAt(0, 0).background_color, Color());
+}
+
+TEST(ColorTest, Background) {
+  auto element = text("text") | bgcolor(Color::Red);
+  Screen screen(5, 1);
+  Render(screen, element);
+  EXPECT_EQ(screen.PixelAt(0, 0).foreground_color, Color());
+  EXPECT_EQ(screen.PixelAt(0, 0).background_color, Color::Red);
+}
+
+} // 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/dom/dim_test.cpp b/src/ftxui/dom/dim_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b0e0056a27990f22d759a79432a495154797f9a1
--- /dev/null
+++ b/src/ftxui/dom/dim_test.cpp
@@ -0,0 +1,21 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(DimTest, Basic) {
+  auto element = text("text") | dim;
+  Screen screen(5, 1);
+  Render(screen, element);
+  EXPECT_TRUE(screen.PixelAt(0,0).dim);
+}
+
+} // 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/dom/separator_test.cpp b/src/ftxui/dom/separator_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f678da914c8caffd929cbedc091b60e94ee36e49
--- /dev/null
+++ b/src/ftxui/dom/separator_test.cpp
@@ -0,0 +1,114 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(SeparatorTest, Default) {
+  auto element = vbox({
+      text("top"),
+      separator(),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "────\r\n"
+            "down");
+}
+
+TEST(SeparatorTest, Light) {
+  auto element = vbox({
+      text("top"),
+      separatorLight(),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "────\r\n"
+            "down");
+}
+
+TEST(SeparatorTest, Double) {
+  auto element = vbox({
+      text("top"),
+      separatorDouble(),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "════\r\n"
+            "down");
+}
+
+TEST(SeparatorTest, Heavy) {
+  auto element = vbox({
+      text("top"),
+      separatorHeavy(),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "━━━━\r\n"
+            "down");
+}
+
+TEST(SeparatorTest, Empty) {
+  auto element = vbox({
+      text("top"),
+      separatorEmpty(),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "    \r\n"
+            "down");
+}
+
+TEST(SeparatorTest, Styled) {
+  auto element = vbox({
+      text("top"),
+      separatorStyled(DOUBLE),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "════\r\n"
+            "down");
+}
+
+TEST(SeparatorTest, WithPixel) {
+  Pixel pixel;
+  pixel.character = "o";
+  auto element = vbox({
+      text("top"),
+      separator(pixel),
+      text("down"),
+  });
+  Screen screen(4, 3);
+  Render(screen, element);
+  EXPECT_EQ(screen.ToString(),
+            "top \r\n"
+            "oooo\r\n"
+            "down");
+}
+
+} // 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/dom/underlined_test.cpp b/src/ftxui/dom/underlined_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2b0e6b88006998a6769a644383e11ebe2b63c7a6
--- /dev/null
+++ b/src/ftxui/dom/underlined_test.cpp
@@ -0,0 +1,21 @@
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for SuiteApiResolver, TestFactoryImpl, TestPartResult
+#include "gtest/gtest_pred_impl.h"       // for Test, EXPECT_EQ, TEST
+#include <string>                   // for allocator
+#include "ftxui/dom/elements.hpp"        // for text, flexbox
+#include "ftxui/screen/screen.hpp"       // for Screen
+
+namespace ftxui {
+
+TEST(UnderlinedTest, Basic) {
+  auto element = text("text") | underlined;
+  Screen screen(5, 1);
+  Render(screen, element);
+  EXPECT_TRUE(screen.PixelAt(0,0).underlined);
+}
+
+} // 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/screen/color.cpp b/src/ftxui/screen/color.cpp
index 0394f40af132edc8e7707738910a771d7c584ce3..33e1d075675d9ceba82d1060c6d2607122145329 100644
--- a/src/ftxui/screen/color.cpp
+++ b/src/ftxui/screen/color.cpp
@@ -53,12 +53,12 @@ std::string Color::Print(bool is_background_color) const {
       return (is_background_color ? "48;5;"s : "38;5;"s) + std::to_string(red_);
 
     case ColorType::TrueColor:
+    default:
       return (is_background_color ? "48;2;"s : "38;2;"s)  //
              + std::to_string(red_) + ";"                 //
              + std::to_string(green_) + ";"               //
              + std::to_string(blue_);                     //
   }
-  return "";
 }
 
 /// @brief Build a transparent color.
@@ -96,7 +96,7 @@ Color::Color(uint8_t red, uint8_t green, uint8_t blue)
     return;
   }
 
-  // Find the closest coor from the database:
+  // Find the closest Color from the database:
   const int max_distance = 256 * 256 * 3;
   int closest = max_distance;
   int best = 0;
diff --git a/src/ftxui/screen/color_test.cpp b/src/ftxui/screen/color_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..07c771d69e2ab8afeaaf25b99a97d34a7053d09a
--- /dev/null
+++ b/src/ftxui/screen/color_test.cpp
@@ -0,0 +1,47 @@
+#include "ftxui/screen/color.hpp"
+#include <gtest/gtest-message.h>  // for Message
+#include <gtest/gtest-test-part.h>  // for TestPartResult, SuiteApiResolver, TestFactoryImpl
+#include "ftxui/screen/terminal.hpp"
+#include "gtest/gtest_pred_impl.h"  // for EXPECT_EQ, Test, TEST
+
+namespace ftxui {
+
+TEST(ColorTest, PrintTransparent) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  EXPECT_EQ(Color().Print(false), "39");
+  EXPECT_EQ(Color().Print(true), "49");
+}
+
+TEST(ColorTest, PrintColor16) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  EXPECT_EQ(Color(Color::Red).Print(false), "31");
+  EXPECT_EQ(Color(Color::Red).Print(true), "41");
+}
+
+TEST(ColorTest, PrintColor256) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  EXPECT_EQ(Color(Color::DarkRed).Print(false), "38;5;52");
+  EXPECT_EQ(Color(Color::DarkRed).Print(true), "48;5;52");
+}
+
+TEST(ColorTest, PrintTrueCOlor) {
+  Terminal::SetColorSupport(Terminal::Color::TrueColor);
+  EXPECT_EQ(Color::RGB(1,2,3).Print(false), "38;2;1;2;3");
+  EXPECT_EQ(Color::RGB(1,2,3).Print(true), "48;2;1;2;3");
+}
+
+TEST(ColorTest, FallbackTo256) {
+  Terminal::SetColorSupport(Terminal::Color::Palette256);
+  EXPECT_EQ(Color::RGB(1,2,3).Print(false), "38;5;16");
+}
+
+TEST(ColorTest, FallbackTo16) {
+  Terminal::SetColorSupport(Terminal::Color::Palette16);
+  EXPECT_EQ(Color::RGB(1,2,3).Print(false), "30");
+}
+
+}  // 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/screen/terminal.cpp b/src/ftxui/screen/terminal.cpp
index e6341eaa761902a5653b60b2c6b7ee1e5bfb3028..971db344a680117c001bfbb9516ed3b2fa36aa36 100644
--- a/src/ftxui/screen/terminal.cpp
+++ b/src/ftxui/screen/terminal.cpp
@@ -19,6 +19,10 @@
 namespace ftxui {
 
 namespace {
+
+bool g_cached = false;
+Terminal::Color g_cached_supported_color;
+
 Dimensions& FallbackSize() {
 #if defined(__EMSCRIPTEN__)
   // This dimension was chosen arbitrarily to be able to display:
@@ -76,7 +80,8 @@ Terminal::Color ComputeColorSupport() {
 
 }  // namespace
 
-Dimensions Terminal::Size() {
+namespace Terminal {
+Dimensions Size() {
 #if defined(__EMSCRIPTEN__)
   // This dimension was chosen arbitrarily to be able to display:
   // https://arthursonzogni.com/FTXUI/examples
@@ -106,20 +111,24 @@ Dimensions Terminal::Size() {
 
 /// @brief Override terminal size in case auto-detection fails
 /// @param fallbackSize Terminal dimensions to fallback to
-void Terminal::SetFallbackSize(const Dimensions& fallbackSize) {
+void SetFallbackSize(const Dimensions& fallbackSize) {
   FallbackSize() = fallbackSize;
 }
 
-Terminal::Color Terminal::ColorSupport() {
-  static bool cached = false;
-  static Terminal::Color cached_supported_color;
-  if (!cached) {
-    cached = true;
-    cached_supported_color = ComputeColorSupport();
+Color ColorSupport() {
+  if (!g_cached) {
+    g_cached = true;
+    g_cached_supported_color = ComputeColorSupport();
   }
-  return cached_supported_color;
+  return g_cached_supported_color;
+}
+
+void SetColorSupport(Color color) {
+  g_cached = true;
+  g_cached_supported_color = color;
 }
 
+}  // namespace Terminal
 }  // namespace ftxui
 
 // Copyright 2020 Arthur Sonzogni. All rights reserved.