123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- // Copyright 2017 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 <memory>
- #include "base/bind.h"
- #include "media/base/overlay_info.h"
- #include "media/base/renderer_factory_selector.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace media {
- class RendererFactorySelectorTest : public testing::Test {
- public:
- class FakeFactory : public RendererFactory {
- public:
- explicit FakeFactory(RendererType type) : type_(type) {}
- std::unique_ptr<Renderer> CreateRenderer(
- const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
- const scoped_refptr<base::TaskRunner>& worker_task_runner,
- AudioRendererSink* audio_renderer_sink,
- VideoRendererSink* video_renderer_sink,
- RequestOverlayInfoCB request_overlay_info_cb,
- const gfx::ColorSpace& target_color_space) override {
- return nullptr;
- }
- RendererType factory_type() { return type_; }
- private:
- RendererType type_;
- };
- RendererFactorySelectorTest() = default;
- RendererFactorySelectorTest(const RendererFactorySelectorTest&) = delete;
- RendererFactorySelectorTest& operator=(const RendererFactorySelectorTest&) =
- delete;
- void AddBaseFactory(RendererType type) {
- selector_.AddBaseFactory(type, std::make_unique<FakeFactory>(type));
- }
- void AddFactory(RendererType type) {
- selector_.AddFactory(type, std::make_unique<FakeFactory>(type));
- }
- void AddConditionalFactory(RendererType type) {
- condition_met_map_[type] = false;
- selector_.AddConditionalFactory(
- type, std::make_unique<FakeFactory>(type),
- base::BindRepeating(&RendererFactorySelectorTest::IsConditionMet,
- base::Unretained(this), type));
- }
- RendererType GetCurrentlySelectedRendererType() {
- return reinterpret_cast<FakeFactory*>(selector_.GetCurrentFactory())
- ->factory_type();
- }
- bool IsConditionMet(RendererType type) {
- DCHECK(condition_met_map_.count(type));
- return condition_met_map_[type];
- }
- protected:
- RendererFactorySelector selector_;
- std::map<RendererType, bool> condition_met_map_;
- };
- TEST_F(RendererFactorySelectorTest, SingleFactory) {
- AddBaseFactory(RendererType::kDefault);
- EXPECT_EQ(RendererType::kDefault, GetCurrentlySelectedRendererType());
- }
- TEST_F(RendererFactorySelectorTest, MultipleFactory) {
- AddBaseFactory(RendererType::kDefault);
- AddFactory(RendererType::kMojo);
- EXPECT_EQ(RendererType::kDefault, GetCurrentlySelectedRendererType());
- selector_.SetBaseRendererType(RendererType::kMojo);
- EXPECT_EQ(RendererType::kMojo, GetCurrentlySelectedRendererType());
- }
- TEST_F(RendererFactorySelectorTest, ConditionalFactory) {
- AddBaseFactory(RendererType::kDefault);
- AddFactory(RendererType::kMojo);
- AddConditionalFactory(RendererType::kCourier);
- EXPECT_EQ(RendererType::kDefault, GetCurrentlySelectedRendererType());
- condition_met_map_[RendererType::kCourier] = true;
- EXPECT_EQ(RendererType::kCourier, GetCurrentlySelectedRendererType());
- selector_.SetBaseRendererType(RendererType::kMojo);
- EXPECT_EQ(RendererType::kCourier, GetCurrentlySelectedRendererType());
- condition_met_map_[RendererType::kCourier] = false;
- EXPECT_EQ(RendererType::kMojo, GetCurrentlySelectedRendererType());
- }
- TEST_F(RendererFactorySelectorTest, MultipleConditionalFactories) {
- AddBaseFactory(RendererType::kDefault);
- AddConditionalFactory(RendererType::kFlinging);
- AddConditionalFactory(RendererType::kCourier);
- EXPECT_EQ(RendererType::kDefault, GetCurrentlySelectedRendererType());
- condition_met_map_[RendererType::kFlinging] = false;
- condition_met_map_[RendererType::kCourier] = true;
- EXPECT_EQ(RendererType::kCourier, GetCurrentlySelectedRendererType());
- condition_met_map_[RendererType::kFlinging] = true;
- condition_met_map_[RendererType::kCourier] = false;
- EXPECT_EQ(RendererType::kFlinging, GetCurrentlySelectedRendererType());
- // It's up to the implementation detail to decide which one to use.
- condition_met_map_[RendererType::kFlinging] = true;
- condition_met_map_[RendererType::kCourier] = true;
- EXPECT_TRUE(GetCurrentlySelectedRendererType() == RendererType::kFlinging ||
- GetCurrentlySelectedRendererType() == RendererType::kCourier);
- }
- } // namespace media
|