| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/infobars/overlays/infobar_overlay_util.h" |
| |
| #import "ios/chrome/browser/infobars/test/fake_infobar_ios.h" |
| #import "ios/chrome/browser/overlays/public/common/infobars/infobar_overlay_request_config.h" |
| #import "ios/chrome/browser/overlays/public/overlay_request_queue.h" |
| #import "ios/chrome/browser/overlays/test/overlay_test_macros.h" |
| #import "ios/web/public/test/fakes/fake_web_state.h" |
| #import "testing/platform_test.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace { |
| DEFINE_TEST_OVERLAY_REQUEST_CONFIG(NonInfobarConfig); |
| |
| } |
| |
| using InfobarOverlayUtilTest = PlatformTest; |
| |
| // Tests that GetOverlayRequestInfobar() returns the InfoBar used to configure |
| // the request, or null if the request was not configured with an InfoBar. |
| TEST_F(InfobarOverlayUtilTest, GetOverlayRequestInfobar) { |
| FakeInfobarIOS infobar; |
| |
| auto infobar_request = |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &infobar, InfobarOverlayType::kBanner, infobar.high_priority()); |
| EXPECT_EQ(&infobar, GetOverlayRequestInfobar(infobar_request.get())); |
| |
| auto non_infobar_request = |
| OverlayRequest::CreateWithConfig<NonInfobarConfig>(); |
| EXPECT_FALSE(GetOverlayRequestInfobar(non_infobar_request.get())); |
| } |
| |
| // Tests that GetOverlayRequestInfobarType() returns the InfoBar's type. |
| TEST_F(InfobarOverlayUtilTest, GetOverlayRequestInfobarType) { |
| FakeInfobarIOS confirm_infobar; |
| auto confirm_infobar_request = |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &confirm_infobar, InfobarOverlayType::kBanner, |
| confirm_infobar.high_priority()); |
| EXPECT_EQ(InfobarType::kInfobarTypeConfirm, |
| GetOverlayRequestInfobarType(confirm_infobar_request.get())); |
| |
| FakeInfobarIOS translate_infobar(InfobarType::kInfobarTypeTranslate); |
| auto translate_infobar_request = |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &translate_infobar, InfobarOverlayType::kBanner, |
| translate_infobar.high_priority()); |
| EXPECT_EQ(InfobarType::kInfobarTypeTranslate, |
| GetOverlayRequestInfobarType(translate_infobar_request.get())); |
| } |
| |
| // Tests that GetOverlayRequestInfobarOverlayType() returns the InfoBar's |
| // overlay type. |
| TEST_F(InfobarOverlayUtilTest, GetOverlayRequestInfobarOverlayType) { |
| FakeInfobarIOS infobar; |
| auto banner_request = |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &infobar, InfobarOverlayType::kBanner, infobar.high_priority()); |
| EXPECT_EQ(InfobarOverlayType::kBanner, |
| GetOverlayRequestInfobarOverlayType(banner_request.get())); |
| |
| auto modal_request = |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &infobar, InfobarOverlayType::kModal, infobar.high_priority()); |
| EXPECT_EQ(InfobarOverlayType::kModal, |
| GetOverlayRequestInfobarOverlayType(modal_request.get())); |
| } |
| |
| // Tests that GetInfobarOverlayRequestIndex() returns the correct indices. |
| TEST_F(InfobarOverlayUtilTest, GetInfobarOverlayRequestIndex) { |
| web::FakeWebState web_state; |
| FakeInfobarIOS infobar0; |
| FakeInfobarIOS infobar1; |
| FakeInfobarIOS infobar2; |
| FakeInfobarIOS infobar4; |
| |
| OverlayRequestQueue* queue = |
| OverlayRequestQueue::FromWebState(&web_state, OverlayModality::kTesting); |
| queue->AddRequest( |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &infobar0, InfobarOverlayType::kBanner, infobar0.high_priority())); |
| queue->AddRequest( |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &infobar1, InfobarOverlayType::kBanner, infobar1.high_priority())); |
| queue->AddRequest( |
| OverlayRequest::CreateWithConfig<InfobarOverlayRequestConfig>( |
| &infobar2, InfobarOverlayType::kBanner, infobar2.high_priority())); |
| |
| size_t index = 0; |
| EXPECT_TRUE(GetInfobarOverlayRequestIndex(queue, &infobar0, &index)); |
| EXPECT_EQ(0U, index); |
| EXPECT_TRUE(GetInfobarOverlayRequestIndex(queue, &infobar1, &index)); |
| EXPECT_EQ(1U, index); |
| EXPECT_TRUE(GetInfobarOverlayRequestIndex(queue, &infobar2, &index)); |
| EXPECT_EQ(2U, index); |
| |
| EXPECT_FALSE(GetInfobarOverlayRequestIndex(queue, &infobar4, &index)); |
| } |