blob: f4f31c7e466e4a136116ac0ac6a066ed7e234df9 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
#include "ios/chrome/browser/overlays/test/overlay_test_macros.h"
#include "testing/platform_test.h"
namespace {
// Fake request config types for use in tests.
DEFINE_TEST_OVERLAY_REQUEST_CONFIG(FirstConfig);
DEFINE_TEST_OVERLAY_REQUEST_CONFIG(SecondConfig);
DEFINE_TEST_OVERLAY_REQUEST_CONFIG(ThirdConfig);
} // namespace
using OverlayRequestSupportTest = PlatformTest;
// Tests that OverlayRequestSupport::All() supports arbitrary requests.
TEST_F(OverlayRequestSupportTest, SupportAll) {
std::unique_ptr<OverlayRequest> first_request =
OverlayRequest::CreateWithConfig<FirstConfig>();
std::unique_ptr<OverlayRequest> second_request =
OverlayRequest::CreateWithConfig<SecondConfig>();
const OverlayRequestSupport* support = OverlayRequestSupport::All();
EXPECT_TRUE(support->IsRequestSupported(first_request.get()));
EXPECT_TRUE(support->IsRequestSupported(second_request.get()));
}
// Tests that OverlayRequestSupport::None() does not support config types.
TEST_F(OverlayRequestSupportTest, SupportNone) {
std::unique_ptr<OverlayRequest> first_request =
OverlayRequest::CreateWithConfig<FirstConfig>();
std::unique_ptr<OverlayRequest> second_request =
OverlayRequest::CreateWithConfig<SecondConfig>();
const OverlayRequestSupport* support = OverlayRequestSupport::None();
EXPECT_FALSE(support->IsRequestSupported(first_request.get()));
EXPECT_FALSE(support->IsRequestSupported(second_request.get()));
}
// Tests that the SupportsOverlayRequest template returns true only when
// IsRequestSupported() is called with a request with the config type used to
// create the template specialization.
TEST_F(OverlayRequestSupportTest, SupportsRequestTemplate) {
std::unique_ptr<OverlayRequestSupport> support =
std::make_unique<SupportsOverlayRequest<FirstConfig>>();
// Verify that FirstConfig requests are supported.
std::unique_ptr<OverlayRequest> supported_request =
OverlayRequest::CreateWithConfig<FirstConfig>();
EXPECT_TRUE(support->IsRequestSupported(supported_request.get()));
// Verify that SecondConfig requests are not supported.
std::unique_ptr<OverlayRequest> unsupported_request =
OverlayRequest::CreateWithConfig<SecondConfig>();
EXPECT_FALSE(support->IsRequestSupported(unsupported_request.get()));
}
// Tests that the vector constructor aggregates support.
TEST_F(OverlayRequestSupportTest, AggregateSupport) {
// Create an aggregate request support for FirstConfig and SecondConfig, then
// verify that OverlayResponses created with these two configs are supported.
OverlayRequestSupport support(
{FirstConfig::RequestSupport(), SecondConfig::RequestSupport()});
std::unique_ptr<OverlayRequest> first_request =
OverlayRequest::CreateWithConfig<FirstConfig>();
EXPECT_TRUE(support.IsRequestSupported(first_request.get()));
std::unique_ptr<OverlayRequest> second_request =
OverlayRequest::CreateWithConfig<SecondConfig>();
EXPECT_TRUE(support.IsRequestSupported(second_request.get()));
// Check that OverlayResponses created with a different config are not
// supported.
std::unique_ptr<OverlayRequest> unsupported_request =
OverlayRequest::CreateWithConfig<ThirdConfig>();
EXPECT_FALSE(support.IsRequestSupported(unsupported_request.get()));
}