diff --git a/BUILD.gn b/BUILD.gn
index de7f21b..66a18bb 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1796,6 +1796,7 @@
       "xfa/fde/css/cfde_cssstylesheet_unittest.cpp",
       "xfa/fde/css/cfde_cssvaluelistparser_unittest.cpp",
       "xfa/fde/xml/fde_xml_imp_unittest.cpp",
+      "xfa/fgas/layout/fgas_rtfbreak_unittest.cpp",
       "xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp",
       "xfa/fxfa/app/cxfa_textparser_unittest.cpp",
       "xfa/fxfa/app/xfa_ffapp_unittest.cpp",
diff --git a/xfa/fgas/layout/fgas_rtfbreak.h b/xfa/fgas/layout/fgas_rtfbreak.h
index 4d999ec..2dfc024 100644
--- a/xfa/fgas/layout/fgas_rtfbreak.h
+++ b/xfa/fgas/layout/fgas_rtfbreak.h
@@ -169,6 +169,9 @@
                         bool bCharCode) const;
 
   CFX_RTFBreakType AppendChar(FX_WCHAR wch);
+
+  CFX_RTFLine* GetCurrentLineForTesting() const { return m_pCurLine; }
+
   CFX_RTFBreakType AppendChar_Combination(CFX_RTFChar* pCurChar);
   CFX_RTFBreakType AppendChar_Tab(CFX_RTFChar* pCurChar);
   CFX_RTFBreakType AppendChar_Control(CFX_RTFChar* pCurChar);
diff --git a/xfa/fgas/layout/fgas_rtfbreak_unittest.cpp b/xfa/fgas/layout/fgas_rtfbreak_unittest.cpp
new file mode 100644
index 0000000..aba440a
--- /dev/null
+++ b/xfa/fgas/layout/fgas_rtfbreak_unittest.cpp
@@ -0,0 +1,87 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fgas/layout/fgas_rtfbreak.h"
+
+#include <memory>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/test_support.h"
+#include "third_party/base/ptr_util.h"
+#include "xfa/fgas/font/cfgas_fontmgr.h"
+#include "xfa/fgas/font/cfgas_gefont.h"
+
+class RTFBreakTest : public testing::Test {
+ public:
+  void SetUp() override {
+    CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo(
+        IFX_SystemFontInfo::CreateDefault(nullptr));
+
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+    font_mgr_ = CFGAS_FontMgr::Create(FX_GetDefFontEnumerator());
+#else
+    font_source_ = pdfium::MakeUnique<CFX_FontSourceEnum_File>();
+    font_mgr_ = CFGAS_FontMgr::Create(font_source_.get());
+#endif
+
+    font_ = CFGAS_GEFont::LoadFont(L"Arial Black", 0, 0, font_mgr_.get());
+    ASSERT(font_.Get() != nullptr);
+  }
+
+  std::unique_ptr<CFX_RTFBreak> CreateBreak(int32_t args) {
+    auto b = pdfium::MakeUnique<CFX_RTFBreak>(args);
+    b->SetFont(font_);
+    return b;
+  }
+
+ private:
+  std::unique_ptr<CFGAS_FontMgr> font_mgr_;
+  CFX_RetainPtr<CFGAS_GEFont> font_;
+
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+  std::unique_ptr<CFX_FontSourceEnum_File> font_source_;
+#endif
+};
+
+// As soon as you get one of the control characters the break is complete
+// and must be consumed before you get any more characters ....
+
+TEST_F(RTFBreakTest, AddChars) {
+  auto b = CreateBreak(FX_RTFLAYOUTSTYLE_ExpandTab);
+
+  CFX_WideString str(L"Input String.");
+  for (int32_t i = 0; i < str.GetLength(); i++)
+    EXPECT_EQ(CFX_RTFBreakType::None, b->AppendChar(str.GetAt(i)));
+
+  EXPECT_EQ(CFX_RTFBreakType::Paragraph, b->AppendChar(L'\n'));
+  ASSERT_EQ(1, b->CountBreakPieces());
+  EXPECT_EQ(str + L"\n", b->GetBreakPiece(0)->GetString());
+
+  b->ClearBreakPieces();
+  b->Reset();
+  EXPECT_EQ(0, b->GetCurrentLineForTesting()->GetLineEnd());
+
+  str = L"Second str.";
+  for (int32_t i = 0; i < str.GetLength(); i++)
+    EXPECT_EQ(CFX_RTFBreakType::None, b->AppendChar(str.GetAt(i)));
+
+  // Force the end of the break at the end of the string.
+  b->EndBreak(CFX_RTFBreakType::Paragraph);
+  ASSERT_EQ(1, b->CountBreakPieces());
+  EXPECT_EQ(str, b->GetBreakPiece(0)->GetString());
+}
+
+TEST_F(RTFBreakTest, ControlCharacters) {
+  auto b = CreateBreak(FX_RTFLAYOUTSTYLE_ExpandTab);
+  EXPECT_EQ(CFX_RTFBreakType::Line, b->AppendChar(L'\v'));
+  EXPECT_EQ(CFX_RTFBreakType::Page, b->AppendChar(L'\f'));
+  // 0x2029 is the Paragraph Separator unicode character.
+  EXPECT_EQ(CFX_RTFBreakType::Paragraph, b->AppendChar(0x2029));
+  EXPECT_EQ(CFX_RTFBreakType::Paragraph, b->AppendChar(L'\n'));
+
+  ASSERT_EQ(1, b->CountBreakPieces());
+  EXPECT_EQ(L"\v", b->GetBreakPiece(0)->GetString());
+}
