Add CPDFToUnicodeMapTest.NonBmpUnicodeLookup

Demonstrate CPDF_ToUnicodeMap::ReverseLookup() does not work as expected
for non-BMP Unicode characters. Also demonstrate the desired reverse
lookup cannot even be performed on platforms where wchar_t is 16-bit.

Bug: 374947848
Change-Id: Ib10ee249b5de3438cf95f3b96d8ebeb964daa74e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/125350
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
index 098621d..eb05a7a 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
@@ -119,3 +119,14 @@
     EXPECT_EQ(1u, map.GetUnicodeCountByCharcodeForTesting(0u));
   }
 }
+
+TEST(CPDFToUnicodeMapTest, NonBmpUnicodeLookup) {
+  static constexpr uint8_t kInput[] = "beginbfchar<01><d841de76>endbfchar";
+  CPDF_ToUnicodeMap map(pdfium::MakeRetain<CPDF_Stream>(kInput));
+  EXPECT_EQ(L"\xd841\xde76", map.Lookup(0x01));
+#if defined(WCHAR_T_IS_32_BIT)
+  // TODO(crbug.com/374947848): Should work if wchar_t is 16-bit.
+  // TODO(crbug.com/374947848): Should return 1u.
+  EXPECT_EQ(0u, map.ReverseLookup(0x20676));
+#endif
+}