diff --git a/fpdfsdk/fpdf_dataavail_embeddertest.cpp b/fpdfsdk/fpdf_dataavail_embeddertest.cpp
index 666b028..df966b5 100644
--- a/fpdfsdk/fpdf_dataavail_embeddertest.cpp
+++ b/fpdfsdk/fpdf_dataavail_embeddertest.cpp
@@ -9,9 +9,9 @@
 #include <vector>
 
 #include "core/fxcrt/bytestring.h"
-#include "core/fxcrt/widestring.h"
 #include "public/fpdfview.h"
 #include "testing/embedder_test.h"
+#include "testing/fx_string_testhelpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/range_set.h"
 #include "testing/utils/file_util.h"
@@ -318,9 +318,7 @@
   // Info was remapped to a dictionary with Type "Catalog"
   unsigned short buffer[100] = {0};
   EXPECT_TRUE(FPDF_GetMetaText(document(), "Type", buffer, sizeof(buffer)));
-  constexpr wchar_t kExpectedValue[] = L"Catalog";
-  EXPECT_EQ(WideString(kExpectedValue),
-            WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedValue)));
+  EXPECT_EQ(L"Catalog", GetPlatformWString(buffer));
 }
 
 TEST_F(FPDFDataAvailEmbedderTest, TryLoadInvalidInfo) {
diff --git a/fpdfsdk/fpdf_doc_embeddertest.cpp b/fpdfsdk/fpdf_doc_embeddertest.cpp
index e1fdddb..5517cd5 100644
--- a/fpdfsdk/fpdf_doc_embeddertest.cpp
+++ b/fpdfsdk/fpdf_doc_embeddertest.cpp
@@ -6,7 +6,7 @@
 #include <vector>
 
 #include "core/fpdfapi/parser/cpdf_document.h"
-#include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/bytestring.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
 #include "public/cpp/fpdf_scopers.h"
 #include "public/fpdf_doc.h"
@@ -476,7 +476,7 @@
   FPDF_BOOKMARK child = FPDFBookmark_GetFirstChild(document(), nullptr);
   EXPECT_TRUE(child);
   EXPECT_EQ(34u, FPDFBookmark_GetTitle(child, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(L"A Good Beginning"), WideString::FromUTF16LE(buf, 16));
+  EXPECT_EQ(L"A Good Beginning", GetPlatformWString(buf));
 
   FPDF_DEST dest = FPDFBookmark_GetDest(document(), child);
   EXPECT_FALSE(dest);  // TODO(tsepez): put real dest into bookmarks.pdf
@@ -490,7 +490,7 @@
   FPDF_BOOKMARK sibling = FPDFBookmark_GetNextSibling(document(), child);
   EXPECT_TRUE(sibling);
   EXPECT_EQ(28u, FPDFBookmark_GetTitle(sibling, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(L"A Good Ending"), WideString::FromUTF16LE(buf, 13));
+  EXPECT_EQ(L"A Good Ending", GetPlatformWString(buf));
 
   EXPECT_EQ(nullptr, FPDFBookmark_GetNextSibling(document(), sibling));
 }
@@ -508,7 +508,7 @@
 
   // Check that the string matches.
   EXPECT_EQ(34u, FPDFBookmark_GetTitle(child, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(L"A Good Beginning"), WideString::FromUTF16LE(buf, 16));
+  EXPECT_EQ(L"A Good Beginning", GetPlatformWString(buf));
 
   // Check that it is them same as the one returned by GetFirstChild.
   EXPECT_EQ(child, FPDFBookmark_GetFirstChild(document(), nullptr));
@@ -612,32 +612,24 @@
   ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Keywords", buf, sizeof(buf)));
   ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Producer", buf, sizeof(buf)));
 
-  constexpr wchar_t kExpectedCreator[] = L"Microsoft Word";
   ASSERT_EQ(30u, FPDF_GetMetaText(document(), "Creator", buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedCreator),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreator)));
+  EXPECT_EQ(L"Microsoft Word", GetPlatformWString(buf));
 
-  constexpr wchar_t kExpectedCreationDate[] = L"D:20160411190039+00'00'";
   ASSERT_EQ(48u,
             FPDF_GetMetaText(document(), "CreationDate", buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedCreationDate),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreationDate)));
+  EXPECT_EQ(L"D:20160411190039+00'00'", GetPlatformWString(buf));
 
-  constexpr wchar_t kExpectedModDate[] = L"D:20160411190039+00'00'";
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedModDate),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
+  EXPECT_EQ(L"D:20160411190039+00'00'", GetPlatformWString(buf));
 }
 
 TEST_F(FPDFDocEmbedderTest, Bug_182) {
   ASSERT_TRUE(OpenDocument("bug_182.pdf"));
 
   unsigned short buf[128];
-  constexpr wchar_t kExpectedTitle[] = L"Super Visual Formade 印刷";
 
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "Title", buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedTitle),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedTitle)));
+  EXPECT_EQ(L"Super Visual Formade 印刷", GetPlatformWString(buf));
 }
 
 TEST_F(FPDFDocEmbedderTest, GetMetaTextSameObjectNumber) {
@@ -647,10 +639,8 @@
   // (1 0). Both objects are /Info dictionaries, but contain different data.
   // Make sure ModDate is the date of the last modification.
   unsigned short buf[128];
-  constexpr wchar_t kExpectedModDate[] = L"D:20170612232940-04'00'";
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedModDate),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
+  EXPECT_EQ(L"D:20170612232940-04'00'", GetPlatformWString(buf));
 }
 
 TEST_F(FPDFDocEmbedderTest, GetMetaTextInAttachmentFile) {
@@ -658,10 +648,8 @@
 
   // Make sure this is the date from the PDF itself and not the attached PDF.
   unsigned short buf[128];
-  constexpr wchar_t kExpectedModDate[] = L"D:20170712214448-07'00'";
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedModDate),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
+  EXPECT_EQ(L"D:20170712214448-07'00'", GetPlatformWString(buf));
 }
 
 TEST_F(FPDFDocEmbedderTest, GetMetaTextFromNewDocument) {
@@ -722,40 +710,26 @@
   EXPECT_EQ(0u, FPDF_GetPageLabel(document(), -2, buf, sizeof(buf)));
   EXPECT_EQ(0u, FPDF_GetPageLabel(document(), -1, buf, sizeof(buf)));
 
-  const wchar_t kExpectedPageLabel0[] = L"i";
   ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 0, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel0),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel0)));
+  EXPECT_EQ(L"i", GetPlatformWString(buf));
 
-  const wchar_t kExpectedPageLabel1[] = L"ii";
   ASSERT_EQ(6u, FPDF_GetPageLabel(document(), 1, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel1),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel1)));
+  EXPECT_EQ(L"ii", GetPlatformWString(buf));
 
-  const wchar_t kExpectedPageLabel2[] = L"1";
   ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 2, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel2),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel2)));
+  EXPECT_EQ(L"1", GetPlatformWString(buf));
 
-  const wchar_t kExpectedPageLabel3[] = L"2";
   ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 3, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel3),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel3)));
+  EXPECT_EQ(L"2", GetPlatformWString(buf));
 
-  const wchar_t kExpectedPageLabel4[] = L"zzA";
   ASSERT_EQ(8u, FPDF_GetPageLabel(document(), 4, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel4),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel4)));
+  EXPECT_EQ(L"zzA", GetPlatformWString(buf));
 
-  const wchar_t kExpectedPageLabel5[] = L"zzB";
   ASSERT_EQ(8u, FPDF_GetPageLabel(document(), 5, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel5),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel5)));
+  EXPECT_EQ(L"zzB", GetPlatformWString(buf));
 
-  const wchar_t kExpectedPageLabel6[] = L"";
   ASSERT_EQ(2u, FPDF_GetPageLabel(document(), 6, buf, sizeof(buf)));
-  EXPECT_EQ(WideString(kExpectedPageLabel6),
-            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel6)));
+  EXPECT_EQ(L"", GetPlatformWString(buf));
 
   ASSERT_EQ(0u, FPDF_GetPageLabel(document(), 7, buf, sizeof(buf)));
   ASSERT_EQ(0u, FPDF_GetPageLabel(document(), 8, buf, sizeof(buf)));
diff --git a/fpdfsdk/fpdf_structtree_embeddertest.cpp b/fpdfsdk/fpdf_structtree_embeddertest.cpp
index 425c5b0..858bd48 100644
--- a/fpdfsdk/fpdf_structtree_embeddertest.cpp
+++ b/fpdfsdk/fpdf_structtree_embeddertest.cpp
@@ -2,7 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/fxcrt/fx_string.h"
 #include "public/fpdf_structtree.h"
 #include "testing/embedder_test.h"
 #include "testing/fx_string_testhelpers.h"
@@ -64,9 +63,7 @@
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(gchild_element));
     ASSERT_EQ(24U, FPDF_StructElement_GetAltText(gchild_element, buffer,
                                                  sizeof(buffer)));
-    const wchar_t kExpected[] = L"Black Image";
-    EXPECT_EQ(WideString(kExpected),
-              WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
+    EXPECT_EQ(L"Black Image", GetPlatformWString(buffer));
 
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(gchild_element));
     FPDF_STRUCTELEMENT ggchild_element =
@@ -310,9 +307,7 @@
       EXPECT_EQ(0U, buffer[i]);
 
     ASSERT_EQ(18U, FPDF_StructElement_GetType(element, buffer, sizeof(buffer)));
-    const wchar_t kExpected[] = L"Document";
-    EXPECT_EQ(WideString(kExpected),
-              WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
+    EXPECT_EQ(L"Document", GetPlatformWString(buffer));
   }
 
   UnloadPage(page);
@@ -348,9 +343,7 @@
     ASSERT_EQ(20U,
               FPDF_StructElement_GetTitle(element, buffer, sizeof(buffer)));
 
-    const wchar_t kExpected[] = L"TitleText";
-    EXPECT_EQ(WideString(kExpected),
-              WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
+    EXPECT_EQ(L"TitleText", GetPlatformWString(buffer));
 
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(element));
     FPDF_STRUCTELEMENT child_element =
@@ -359,9 +352,7 @@
 
     ASSERT_EQ(26U, FPDF_StructElement_GetTitle(child_element, buffer,
                                                sizeof(buffer)));
-    const wchar_t kChildExpected[] = L"symbol: 100k";
-    EXPECT_EQ(WideString(kChildExpected),
-              WideString::FromUTF16LE(buffer, FXSYS_len(kChildExpected)));
+    EXPECT_EQ(L"symbol: 100k", GetPlatformWString(buffer));
   }
 
   UnloadPage(page);
@@ -395,9 +386,7 @@
     ASSERT_TRUE(object8);
     unsigned short buffer[12];
     ASSERT_EQ(18U, FPDF_StructElement_GetType(object8, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject8Type[] = L"Document";
-    EXPECT_EQ(WideString(kExpectedObject8Type),
-              WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject8Type)));
+    EXPECT_EQ(L"Document", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object8));
     ASSERT_EQ(2, FPDF_StructElement_CountChildren(object8));
 
@@ -407,10 +396,7 @@
     ASSERT_TRUE(object10);
     ASSERT_EQ(20U,
               FPDF_StructElement_GetType(object10, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject10Type[] = L"NonStruct";
-    EXPECT_EQ(
-        WideString(kExpectedObject10Type),
-        WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject10Type)));
+    EXPECT_EQ(L"NonStruct", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object10));
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(object10));
 
@@ -418,10 +404,7 @@
         FPDF_StructElement_GetChildAtIndex(object10, 0);
     ASSERT_TRUE(object12);
     ASSERT_EQ(4U, FPDF_StructElement_GetType(object12, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject12Type[] = L"P";
-    EXPECT_EQ(
-        WideString(kExpectedObject12Type),
-        WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject12Type)));
+    EXPECT_EQ(L"P", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object12));
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(object12));
 
@@ -430,10 +413,7 @@
     ASSERT_TRUE(object13);
     ASSERT_EQ(20U,
               FPDF_StructElement_GetType(object13, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject13Type[] = L"NonStruct";
-    EXPECT_EQ(
-        WideString(kExpectedObject13Type),
-        WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject13Type)));
+    EXPECT_EQ(L"NonStruct", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object13));
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(object13));
 
@@ -446,10 +426,7 @@
         FPDF_StructElement_GetChildAtIndex(object8, 1);
     ASSERT_TRUE(object11);
     ASSERT_EQ(4U, FPDF_StructElement_GetType(object11, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject11Type[] = L"P";
-    EXPECT_EQ(
-        WideString(kExpectedObject11Type),
-        WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject11Type)));
+    EXPECT_EQ(L"P", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object11));
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(object11));
 
@@ -458,10 +435,7 @@
     ASSERT_TRUE(object14);
     ASSERT_EQ(20U,
               FPDF_StructElement_GetType(object14, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject14Type[] = L"NonStruct";
-    EXPECT_EQ(
-        WideString(kExpectedObject14Type),
-        WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject14Type)));
+    EXPECT_EQ(L"NonStruct", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object14));
     ASSERT_EQ(2, FPDF_StructElement_CountChildren(object14));
 
@@ -472,10 +446,7 @@
     ASSERT_TRUE(object15);
     ASSERT_EQ(20U,
               FPDF_StructElement_GetType(object15, buffer, sizeof(buffer)));
-    const wchar_t kExpectedObject15Type[] = L"NonStruct";
-    EXPECT_EQ(
-        WideString(kExpectedObject15Type),
-        WideString::FromUTF16LE(buffer, FXSYS_len(kExpectedObject15Type)));
+    EXPECT_EQ(L"NonStruct", GetPlatformWString(buffer));
     EXPECT_EQ(-1, FPDF_StructElement_GetMarkedContentID(object15));
     ASSERT_EQ(1, FPDF_StructElement_CountChildren(object15));
 
