blob: b3c695a8e9b87546844f608f8aeb4291724b4203 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#define FML_USED_ON_EMBEDDER
#include <functional>
#include <future>
#include <memory>
#include "flutter/shell/common/renderer_context_manager.h"
#include "gtest/gtest.h"
#include "renderer_context_test.h"
namespace flutter {
namespace testing {
TEST_F(RendererContextTest, StartWithNoContextFlutterMakeCurrent) {
auto flutter_context = std::make_unique<TestRendererContext>(0);
auto flutter_resource_context = std::make_unique<TestRendererContext>(1);
RendererContextManager manager(std::move(flutter_context),
std::move(flutter_resource_context));
// started with current_context as -1
TestRendererContext::SetCurrentContext(-1);
ASSERT_EQ(TestRendererContext::GetCurrentContext(), -1);
{
// made flutter context to be the current
auto context_switch = manager.FlutterMakeCurrent();
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 0);
}
// flutter context is popped
ASSERT_EQ(TestRendererContext::GetCurrentContext(), -1);
}
TEST_F(RendererContextTest, StartWithNoContextFlutterResourceMakeCurrent) {
auto flutter_context = std::make_unique<TestRendererContext>(0);
auto flutter_resource_context = std::make_unique<TestRendererContext>(1);
RendererContextManager manager(std::move(flutter_context),
std::move(flutter_resource_context));
// started with current_context as -1
TestRendererContext::SetCurrentContext(-1);
ASSERT_EQ(TestRendererContext::GetCurrentContext(), -1);
{
// made resource context to be the current
auto context_switch = manager.FlutterResourceMakeCurrent();
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 1);
}
// flutter context is popped
ASSERT_EQ(TestRendererContext::GetCurrentContext(), -1);
}
TEST_F(RendererContextTest, StartWithSomeContextFlutterMakeCurrent) {
auto flutter_context = std::make_unique<TestRendererContext>(0);
auto flutter_resource_context = std::make_unique<TestRendererContext>(1);
auto some_context = std::make_unique<TestRendererContext>(2);
RendererContextManager manager(std::move(flutter_context),
std::move(flutter_resource_context));
// started with some_context
auto context_switch = manager.MakeCurrent(std::move(some_context));
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 2);
{
// made flutter context to be the current
auto context_switch2 = manager.FlutterMakeCurrent();
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 0);
}
// flutter context is popped
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 2);
}
TEST_F(RendererContextTest, StartWithSomeContextFlutterResourceMakeCurrent) {
auto flutter_context = std::make_unique<TestRendererContext>(0);
auto flutter_resource_context = std::make_unique<TestRendererContext>(1);
auto some_context = std::make_unique<TestRendererContext>(2);
RendererContextManager manager(std::move(flutter_context),
std::move(flutter_resource_context));
// started with some_context
auto context_switch = manager.MakeCurrent(std::move(some_context));
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 2);
{
// made resource context to be the current
auto context_switch2 = manager.FlutterResourceMakeCurrent();
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 1);
}
// flutter context is popped
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 2);
}
TEST_F(RendererContextTest, Nested) {
auto flutter_context = std::make_unique<TestRendererContext>(0);
auto flutter_resource_context = std::make_unique<TestRendererContext>(1);
auto some_context = std::make_unique<TestRendererContext>(2);
RendererContextManager manager(std::move(flutter_context),
std::move(flutter_resource_context));
// started with some_context
auto context_switch = manager.MakeCurrent(std::move(some_context));
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 2);
{
// made flutter context to be the current
auto context_switch2 = manager.FlutterMakeCurrent();
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 0);
{
// made resource context to be the current
auto context_switch2 = manager.FlutterResourceMakeCurrent();
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 1);
}
// resource context is popped
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 0);
}
// flutter context is popped
ASSERT_EQ(TestRendererContext::GetCurrentContext(), 2);
}
} // namespace testing
} // namespace flutter