#include "chromeos/ash/experiences/arc/session/connection_holder.h"
#include "chromeos/ash/experiences/arc/session/connection_observer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace arc {
namespace {
struct FakeInstance {
static constexpr uint32_t Version_ = 1;
static constexpr char Name_[] = "FakeInstance";
};
struct Observer : public ConnectionObserver<FakeInstance> {
void OnConnectionReady() override { ++connection_ready_count_; }
void OnConnectionClosed() override { ++connection_closed_count_; }
size_t connection_ready_count_ = 0;
size_t connection_closed_count_ = 0;
};
TEST(ConnectionHolder, AddObserver) {
Observer observer_1;
Observer observer_2;
ConnectionHolder<FakeInstance> holder;
holder.AddObserver(&observer_1);
EXPECT_EQ(0u, observer_1.connection_ready_count_);
FakeInstance instance;
holder.SetInstance(&instance);
EXPECT_TRUE(holder.IsConnected());
EXPECT_EQ(1u, observer_1.connection_ready_count_);
holder.AddObserver(&observer_2);
EXPECT_EQ(1u, observer_2.connection_ready_count_);
EXPECT_EQ(1u, observer_1.connection_ready_count_);
holder.CloseInstance(&instance);
EXPECT_EQ(1u, observer_1.connection_closed_count_);
EXPECT_EQ(1u, observer_2.connection_closed_count_);
holder.RemoveObserver(&observer_1);
holder.RemoveObserver(&observer_2);
}
TEST(ConnectionHolder, Version) {
ConnectionHolder<FakeInstance> holder;
FakeInstance instance;
holder.SetInstance(&instance);
EXPECT_EQ(FakeInstance::Version_, holder.instance_version());
}
TEST(ConnectionHolder, GetInstance) {
ConnectionHolder<FakeInstance> holder;
FakeInstance instance;
holder.SetInstance(&instance);
EXPECT_EQ(&instance, holder.GetInstanceForVersionDoNotCallDirectly(
FakeInstance::Version_, "MethodName"));
EXPECT_EQ(nullptr, holder.GetInstanceForVersionDoNotCallDirectly(
FakeInstance::Version_ + 1, "MethodName"));
}
}
}