diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 75d7fe7..12be2da 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -418,7 +418,7 @@
   // The generated stream for the empty form should be an empty string.
   CPDF_PageContentGenerator generator(pTestForm.get());
   fxcrt::ostringstream buf;
-  generator.ProcessPageObjects(&buf);
+  EXPECT_FALSE(generator.ProcessPageObjects(&buf));
   EXPECT_EQ("", ByteString(buf));
 }
 
@@ -440,7 +440,7 @@
 
   CPDF_PageContentGenerator generator(pTestForm.get());
   fxcrt::ostringstream process_buf;
-  generator.ProcessPageObjects(&process_buf);
+  ASSERT_TRUE(generator.ProcessPageObjects(&process_buf));
   EXPECT_EQ(
       "q 3.102 4.6700001 m 5.4500012 .28999999 l 4.2399998 3.14"
       "99999 4.6500001 2.98 3.4560001 .23999999 c 3.102 4.6700001 l h f Q\n",
diff --git a/core/fpdfapi/parser/cpdf_array_unittest.cpp b/core/fpdfapi/parser/cpdf_array_unittest.cpp
index 1c3cf95..18745d5 100644
--- a/core/fpdfapi/parser/cpdf_array_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_array_unittest.cpp
@@ -148,8 +148,8 @@
         auto obj = pdfium::MakeRetain<CPDF_Number>(elems[i][j]);
         // Starts object number from 1.
         int obj_num = i * kNumOfColumns + j + 1;
-        obj_holder->ReplaceIndirectObjectIfHigherGeneration(obj_num,
-                                                            std::move(obj));
+        ASSERT_TRUE(obj_holder->ReplaceIndirectObjectIfHigherGeneration(
+            obj_num, std::move(obj)));
         arr_elem->InsertNewAt<CPDF_Reference>(j, obj_holder.get(), obj_num);
       }
       arr->InsertAt(i, std::move(arr_elem));
diff --git a/core/fpdfapi/parser/cpdf_object_unittest.cpp b/core/fpdfapi/parser/cpdf_object_unittest.cpp
index 520e977..184d448 100644
--- a/core/fpdfapi/parser/cpdf_object_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_object_unittest.cpp
@@ -806,8 +806,8 @@
   auto arr1 = pdfium::MakeRetain<CPDF_Array>();
   // Create two arrays of references by different AddReference() APIs.
   for (size_t i = 0; i < std::size(indirect_objs); ++i) {
-    holder->ReplaceIndirectObjectIfHigherGeneration(obj_nums[i],
-                                                    indirect_objs[i]);
+    ASSERT_TRUE(holder->ReplaceIndirectObjectIfHigherGeneration(
+        obj_nums[i], indirect_objs[i]));
     arr->AppendNew<CPDF_Reference>(holder.get(), obj_nums[i]);
     arr1->AppendNew<CPDF_Reference>(holder.get(),
                                     indirect_objs[i]->GetObjNum());
diff --git a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
index bb3006a..dda0fa7 100644
--- a/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_read_validator_unittest.cpp
@@ -175,7 +175,8 @@
   ASSERT_FALSE(validator->has_read_problems());
 
   // Data is unavailable
-  validator->ReadBlockAtOffset(pdfium::make_span(test_data).first(100), 0);
+  ASSERT_FALSE(
+      validator->ReadBlockAtOffset(pdfium::make_span(test_data).first(100), 0));
   EXPECT_TRUE(validator->has_read_problems());
   EXPECT_TRUE(validator->has_unavailable_data());
   EXPECT_FALSE(validator->read_error());
@@ -187,7 +188,8 @@
 
     file_avail.SetAvailableRange(0, 100);
     // Read fail.
-    validator->ReadBlockAtOffset(pdfium::make_span(test_data).first(100), 0);
+    ASSERT_FALSE(validator->ReadBlockAtOffset(
+        pdfium::make_span(test_data).first(100), 0));
     EXPECT_TRUE(validator->has_read_problems());
     EXPECT_TRUE(validator->has_unavailable_data());
     EXPECT_TRUE(validator->read_error());
@@ -213,7 +215,8 @@
   ASSERT_FALSE(validator->has_read_problems());
 
   // Data is unavailable
-  validator->ReadBlockAtOffset(pdfium::make_span(test_data).first(100), 0);
+  ASSERT_FALSE(
+      validator->ReadBlockAtOffset(pdfium::make_span(test_data).first(100), 0));
   EXPECT_TRUE(validator->has_read_problems());
   EXPECT_TRUE(validator->has_unavailable_data());
   EXPECT_FALSE(validator->read_error());
@@ -225,7 +228,8 @@
 
     file_avail.SetAvailableRange(0, 100);
     // Read fail.
-    validator->ReadBlockAtOffset(pdfium::make_span(test_data).first(100), 0);
+    ASSERT_FALSE(validator->ReadBlockAtOffset(
+        pdfium::make_span(test_data).first(100), 0));
     EXPECT_TRUE(validator->has_read_problems());
     EXPECT_TRUE(validator->has_unavailable_data());
     EXPECT_TRUE(validator->read_error());
diff --git a/core/fxge/dib/cstretchengine_unittest.cpp b/core/fxge/dib/cstretchengine_unittest.cpp
index d85a577..dbfac83 100644
--- a/core/fxge/dib/cstretchengine_unittest.cpp
+++ b/core/fxge/dib/cstretchengine_unittest.cpp
@@ -76,7 +76,7 @@
   RetainPtr<CPDF_Stream> stream =
       pdfium::MakeRetain<CPDF_Stream>(std::move(dict_obj));
   auto dib_source = pdfium::MakeRetain<CPDF_DIB>(nullptr, stream);
-  dib_source->Load();
+  EXPECT_FALSE(dib_source->Load());  // Fail to load due to dimensions.
   CStretchEngine engine(nullptr, FXDIB_Format::k8bppRgb, 500, 500, clip_rect,
                         dib_source, FXDIB_ResampleOptions());
   EXPECT_TRUE(engine.GetResampleOptionsForTest().bInterpolateBilinear);
diff --git a/core/fxge/fx_font_unittest.cpp b/core/fxge/fx_font_unittest.cpp
index 324cca8..a505a4e 100644
--- a/core/fxge/fx_font_unittest.cpp
+++ b/core/fxge/fx_font_unittest.cpp
@@ -34,7 +34,7 @@
 
 TEST(FXFontTest, ReadFontNameFromMicrosoftEntries) {
   std::string test_data_dir;
-  PathService::GetTestDataDir(&test_data_dir);
+  ASSERT_TRUE(PathService::GetTestDataDir(&test_data_dir));
   DCHECK(!test_data_dir.empty());
 
   CFX_FontMapper font_mapper(nullptr);
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index fdec13a..2f27f48 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -5304,7 +5304,7 @@
   static constexpr int kExpectedWidth = 200;
   static constexpr int kExpectedHeight = 200;
 
-  OpenDocument("form_object_with_text.pdf");
+  ASSERT_TRUE(OpenDocument("form_object_with_text.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
diff --git a/fpdfsdk/fpdf_editimg_embeddertest.cpp b/fpdfsdk/fpdf_editimg_embeddertest.cpp
index 67574ed..52f1eba 100644
--- a/fpdfsdk/fpdf_editimg_embeddertest.cpp
+++ b/fpdfsdk/fpdf_editimg_embeddertest.cpp
@@ -181,7 +181,7 @@
   static constexpr char kExpectedChecksum[] =
       "617b1d57c30c516beee86e0781ff7810";
 
-  OpenDocument("bug_2132.pdf");
+  ASSERT_TRUE(OpenDocument("bug_2132.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
@@ -230,7 +230,7 @@
   static constexpr char kExpectedChecksum[] =
       "fcb9007fd901d2052e2bd1c147b82800";
 
-  OpenDocument("form_object_with_image.pdf");
+  ASSERT_TRUE(OpenDocument("form_object_with_image.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
diff --git a/fpdfsdk/fpdf_editpath_embeddertest.cpp b/fpdfsdk/fpdf_editpath_embeddertest.cpp
index f295c23..fff2f8b 100644
--- a/fpdfsdk/fpdf_editpath_embeddertest.cpp
+++ b/fpdfsdk/fpdf_editpath_embeddertest.cpp
@@ -91,7 +91,7 @@
 }
 
 TEST_F(FPDFEditPathEmbedderTest, GetAndSetMatrixForPath) {
-  OpenDocument("rectangles_double_flipped.pdf");
+  ASSERT_TRUE(OpenDocument("rectangles_double_flipped.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
@@ -136,7 +136,7 @@
 }
 
 TEST_F(FPDFEditPathEmbedderTest, GetAndSetMatrixForFormWithPath) {
-  OpenDocument("form_object_with_path.pdf");
+  ASSERT_TRUE(OpenDocument("form_object_with_path.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
@@ -200,7 +200,7 @@
 }
 
 TEST_F(FPDFEditPathEmbedderTest, AddPathToRectangles) {
-  OpenDocument("rectangles.pdf");
+  ASSERT_TRUE(OpenDocument("rectangles.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
@@ -235,7 +235,7 @@
 }
 
 TEST_F(FPDFEditPathEmbedderTest, AddPathToRectanglesWithLeakyCTM) {
-  OpenDocument("rectangles_with_leaky_ctm.pdf");
+  ASSERT_TRUE(OpenDocument("rectangles_with_leaky_ctm.pdf"));
   ScopedEmbedderTestPage page = LoadScopedPage(0);
   ASSERT_TRUE(page);
 
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
index e767935..e2500c7 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
@@ -104,8 +104,8 @@
   EXPECT_FALSE(writer.SetEndChar('\0'));
   EXPECT_FALSE(writer.SetEndChar('@'));
 
-  writer.SetStartChar('N');
-  writer.SetEndChar('*');
+  EXPECT_TRUE(writer.SetStartChar('N'));
+  EXPECT_TRUE(writer.SetEndChar('*'));
 
   static const char kExpected[] =
       "#  #  # ## "  // N (same as B) Start
diff --git a/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp b/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
index 65acb76..c29ae16 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
@@ -25,8 +25,7 @@
   EXPECT_TRUE(writer.SetWideNarrowRatio(3));
   EXPECT_FALSE(writer.SetWideNarrowRatio(4));
   EXPECT_FALSE(writer.SetWideNarrowRatio(100));
-
-  writer.SetWideNarrowRatio(3);
+  EXPECT_TRUE(writer.SetWideNarrowRatio(3));
 
   static const char kExpected1[] =
       "#   # ### ### # "  // * Start
@@ -42,7 +41,7 @@
   for (size_t i = 0; i < UNSAFE_TODO(strlen(kExpected1)); i++) {
     UNSAFE_TODO(EXPECT_EQ(kExpected1[i] != ' ', !!encoded[i])) << i;
   }
-  writer.SetWideNarrowRatio(2);
+  EXPECT_TRUE(writer.SetWideNarrowRatio(2));
 
   static const char kExpected2[] =
       "#  # ## ## # "  // * Start
diff --git a/fxjs/cfx_globaldata_unittest.cpp b/fxjs/cfx_globaldata_unittest.cpp
index 569d159..a3ab452 100644
--- a/fxjs/cfx_globaldata_unittest.cpp
+++ b/fxjs/cfx_globaldata_unittest.cpp
@@ -64,11 +64,11 @@
   pInstance->SetGlobalVariableBoolean("boolean", true);
   pInstance->SetGlobalVariableNull("null");
   pInstance->SetGlobalVariableObject("array", std::move(array));
-  pInstance->SetGlobalVariablePersistent("double", true);
-  pInstance->SetGlobalVariablePersistent("string", true);
-  pInstance->SetGlobalVariablePersistent("boolean", true);
-  pInstance->SetGlobalVariablePersistent("null", true);
-  pInstance->SetGlobalVariablePersistent("array", true);
+  EXPECT_TRUE(pInstance->SetGlobalVariablePersistent("double", true));
+  EXPECT_TRUE(pInstance->SetGlobalVariablePersistent("string", true));
+  EXPECT_TRUE(pInstance->SetGlobalVariablePersistent("boolean", true));
+  EXPECT_TRUE(pInstance->SetGlobalVariablePersistent("null", true));
+  EXPECT_TRUE(pInstance->SetGlobalVariablePersistent("array", true));
   ASSERT_TRUE(pInstance->Release());
 
   pInstance = CFX_GlobalData::GetRetainedInstance(&delegate);
@@ -148,19 +148,19 @@
   pInstance->SetGlobalVariableNull("null");
   EXPECT_EQ(4, pInstance->GetSize());
 
-  pInstance->DeleteGlobalVariable("nonesuch");
+  EXPECT_FALSE(pInstance->DeleteGlobalVariable("nonesuch"));
   EXPECT_EQ(4, pInstance->GetSize());
 
-  pInstance->DeleteGlobalVariable("boolean");
+  EXPECT_TRUE(pInstance->DeleteGlobalVariable("boolean"));
   EXPECT_EQ(3, pInstance->GetSize());
 
-  pInstance->DeleteGlobalVariable("string");
+  EXPECT_TRUE(pInstance->DeleteGlobalVariable("string"));
   EXPECT_EQ(2, pInstance->GetSize());
 
-  pInstance->DeleteGlobalVariable("double");
+  EXPECT_TRUE(pInstance->DeleteGlobalVariable("double"));
   EXPECT_EQ(1, pInstance->GetSize());
 
-  pInstance->DeleteGlobalVariable("null");
+  EXPECT_TRUE(pInstance->DeleteGlobalVariable("null"));
   EXPECT_EQ(0, pInstance->GetSize());
 
   ASSERT_TRUE(pInstance->Release());
diff --git a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
index 6edbfc6..a04d79c 100644
--- a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
@@ -762,7 +762,7 @@
   const uint8_t test_string[] = {
       0x4c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x22, 0xc3,
       0x85, 0xc3, 0x85, 0xc3, 0x85, 0x22, 0x29};  // Lower("ÅÅÅ")
-  Execute(ByteStringView(pdfium::make_span(test_string)));
+  EXPECT_TRUE(Execute(ByteStringView(pdfium::make_span(test_string))));
 }
 
 TEST_F(CFXJSEFormCalcContextEmbedderTest, Ltrim) {
diff --git a/xfa/fde/cfde_textout_unittest.cpp b/xfa/fde/cfde_textout_unittest.cpp
index b0a014d..adfd9dc 100644
--- a/xfa/fde/cfde_textout_unittest.cpp
+++ b/xfa/fde/cfde_textout_unittest.cpp
@@ -38,7 +38,7 @@
                                 FXDIB_Format::kBgra));
 
     device_ = std::make_unique<CFX_DefaultRenderDevice>();
-    device_->Attach(bitmap_);
+    ASSERT_TRUE(device_->Attach(bitmap_));
 
     font_ = LoadFont();
     ASSERT_TRUE(font_);
diff --git a/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp b/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp
index 5d3e137..33614b5 100644
--- a/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp
+++ b/xfa/fxfa/formcalc/cxfa_fmexpression_unittest.cpp
@@ -33,7 +33,8 @@
       heap()->GetAllocationHandle(), exp, std::move(args), true);
 
   WideTextBuffer js;
-  callExp->ToJavaScript(&js, CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(callExp->ToJavaScript(
+      &js, CXFA_FMAssignExpression::ReturnType::kInferred));
 
   // Generate the result javascript string.
   WideString result = L"sign(";
@@ -58,8 +59,8 @@
   WideTextBuffer accumulator;
   auto* exp = cppgc::MakeGarbageCollected<CXFA_FMStringExpression>(
       heap()->GetAllocationHandle(), L"");
-  exp->ToJavaScript(&accumulator,
-                    CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(exp->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(L"", accumulator.AsStringView());
 }
 
@@ -68,8 +69,8 @@
   WideTextBuffer accumulator;
   auto* exp = cppgc::MakeGarbageCollected<CXFA_FMStringExpression>(
       heap()->GetAllocationHandle(), L"a");
-  exp->ToJavaScript(&accumulator,
-                    CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(exp->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(L"a", accumulator.AsStringView());
 }
 
@@ -78,8 +79,8 @@
   WideTextBuffer accumulator;
   auto* exp = cppgc::MakeGarbageCollected<CXFA_FMStringExpression>(
       heap()->GetAllocationHandle(), L".abcd.");
-  exp->ToJavaScript(&accumulator,
-                    CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(exp->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(L"\"abcd\"", accumulator.AsStringView());
 }
 
@@ -89,8 +90,8 @@
   std::vector<WideStringView::UnsignedType> vec(140000, L'A');
   auto* exp = cppgc::MakeGarbageCollected<CXFA_FMStringExpression>(
       heap()->GetAllocationHandle(), WideString(WideStringView(vec)));
-  exp->ToJavaScript(&accumulator,
-                    CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(exp->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(140000u, accumulator.GetLength());
 }
 
@@ -99,8 +100,8 @@
   WideTextBuffer accumulator;
   auto* exp = cppgc::MakeGarbageCollected<CXFA_FMStringExpression>(
       heap()->GetAllocationHandle(), L".Simon says \"\"run\"\".");
-  exp->ToJavaScript(&accumulator,
-                    CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(exp->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(L"\"Simon says \\\"run\\\"\"", accumulator.AsStringView());
 }
 
@@ -110,8 +111,8 @@
 
   auto* expr = cppgc::MakeGarbageCollected<CXFA_FMVarExpression>(
       heap()->GetAllocationHandle(), L"s", nullptr);
-  expr->ToJavaScript(&accumulator,
-                     CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(expr->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(
       LR"***(var s = "";
 )***",
@@ -126,8 +127,8 @@
       heap()->GetAllocationHandle(), LR"("")");
   auto* expr = cppgc::MakeGarbageCollected<CXFA_FMVarExpression>(
       heap()->GetAllocationHandle(), L"s", init);
-  expr->ToJavaScript(&accumulator,
-                     CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(expr->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(
       LR"***(var s = "";
 s = pfm_rt.var_filter(s);
@@ -143,8 +144,8 @@
       heap()->GetAllocationHandle(), LR"("foo")");
   auto* expr = cppgc::MakeGarbageCollected<CXFA_FMVarExpression>(
       heap()->GetAllocationHandle(), L"s", init);
-  expr->ToJavaScript(&accumulator,
-                     CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(expr->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(
       LR"***(var s = "foo";
 s = pfm_rt.var_filter(s);
@@ -160,8 +161,8 @@
       heap()->GetAllocationHandle(), L"112");
   auto* expr = cppgc::MakeGarbageCollected<CXFA_FMVarExpression>(
       heap()->GetAllocationHandle(), L"s", init);
-  expr->ToJavaScript(&accumulator,
-                     CXFA_FMAssignExpression::ReturnType::kInferred);
+  EXPECT_TRUE(expr->ToJavaScript(
+      &accumulator, CXFA_FMAssignExpression::ReturnType::kInferred));
   EXPECT_EQ(
       LR"***(var s = 112;
 s = pfm_rt.var_filter(s);
diff --git a/xfa/fxfa/parser/cxfa_nodeiteratortemplate_unittest.cpp b/xfa/fxfa/parser/cxfa_nodeiteratortemplate_unittest.cpp
index 807c772..b4740bf 100644
--- a/xfa/fxfa/parser/cxfa_nodeiteratortemplate_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_nodeiteratortemplate_unittest.cpp
@@ -109,14 +109,14 @@
 
 TEST_F(CXFANodeIteratorTemplateTest, Current) {
   Iterator iter(root());
-  iter.SetCurrent(child1());
+  EXPECT_TRUE(iter.SetCurrent(child1()));
   EXPECT_EQ(root(), iter.GetRoot());
   EXPECT_EQ(child1(), iter.GetCurrent());
 }
 
 TEST_F(CXFANodeIteratorTemplateTest, CurrentOutsideRootDisallowed) {
   Iterator iter(child1());
-  iter.SetCurrent(root());
+  EXPECT_FALSE(iter.SetCurrent(root()));
   EXPECT_EQ(child1(), iter.GetRoot());
   EXPECT_FALSE(iter.GetCurrent());
 }
@@ -125,7 +125,7 @@
   Iterator iter(root());
   EXPECT_EQ(child1(), iter.MoveToNext());
 
-  iter.SetCurrent(nullptr);
+  EXPECT_FALSE(iter.SetCurrent(nullptr));  // ???
   EXPECT_FALSE(iter.GetCurrent());
 
   EXPECT_FALSE(iter.MoveToNext());
@@ -134,7 +134,7 @@
 
 TEST_F(CXFANodeIteratorTemplateTest, MoveToPrev) {
   Iterator iter(root());
-  iter.SetCurrent(child9());
+  EXPECT_TRUE(iter.SetCurrent(child9()));
 
   EXPECT_EQ(child8(), iter.MoveToPrev());
   EXPECT_EQ(child8(), iter.GetCurrent());
@@ -172,7 +172,7 @@
 
 TEST_F(CXFANodeIteratorTemplateTest, MoveToNext) {
   Iterator iter(root());
-  iter.SetCurrent(child2());
+  EXPECT_TRUE(iter.SetCurrent(child2()));
 
   EXPECT_EQ(child3(), iter.MoveToNext());
   EXPECT_EQ(child3(), iter.GetCurrent());
@@ -204,7 +204,7 @@
 
 TEST_F(CXFANodeIteratorTemplateTest, SkipChildrenAndMoveToNext) {
   Iterator iter(root());
-  iter.SetCurrent(child3());
+  EXPECT_TRUE(iter.SetCurrent(child3()));
   EXPECT_EQ(child7(), iter.SkipChildrenAndMoveToNext());
   EXPECT_EQ(child9(), iter.SkipChildrenAndMoveToNext());
   EXPECT_FALSE(iter.SkipChildrenAndMoveToNext());
@@ -232,7 +232,7 @@
 
 TEST_F(CXFANodeIteratorTemplateTest, PrevFromAfterTheEnd) {
   Iterator iter(root());
-  iter.SetCurrent(child9());
+  EXPECT_TRUE(iter.SetCurrent(child9()));
   EXPECT_FALSE(iter.MoveToNext());
   EXPECT_EQ(child9(), iter.MoveToPrev());
 }
@@ -241,14 +241,14 @@
   Iterator iter(child3());
   EXPECT_FALSE(iter.MoveToPrev());
 
-  iter.SetCurrent(child4());
+  EXPECT_TRUE(iter.SetCurrent(child4()));
   EXPECT_EQ(child3(), iter.MoveToPrev());
   EXPECT_FALSE(iter.MoveToPrev());
 }
 
 TEST_F(CXFANodeIteratorTemplateTest, ChildAsRootNext) {
   Iterator iter(child3());
-  iter.SetCurrent(child4());
+  EXPECT_TRUE(iter.SetCurrent(child4()));
   EXPECT_EQ(child5(), iter.MoveToNext());
   EXPECT_EQ(child6(), iter.MoveToNext());
   EXPECT_FALSE(iter.MoveToNext());
