blob: e0c5a9d3b9010863de890c1552a9a87148da6cd6 [file] [log] [blame]
// Copyright 2014 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 "mojo/public/cpp/application/lib/service_registry.h"
#include "mojo/public/cpp/application/service_connector.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace mojo {
namespace internal {
namespace {
class TestConnector : public ServiceConnector {
public:
explicit TestConnector(int* delete_count) : delete_count_(delete_count) {}
~TestConnector() override { (*delete_count_)++; }
void ConnectToService(ApplicationConnection* application_connection,
const std::string& interface_name,
ScopedMessagePipeHandle client_handle) override {}
private:
int* delete_count_;
};
TEST(ServiceRegistryTest, Ownership) {
int delete_count = 0;
// Destruction.
{
ServiceRegistry registry;
registry.SetServiceConnectorForName(new TestConnector(&delete_count),
"TC1");
}
EXPECT_EQ(1, delete_count);
// Removal.
{
ServiceRegistry registry;
ServiceConnector* c = new TestConnector(&delete_count);
registry.SetServiceConnectorForName(c, "TC1");
registry.RemoveServiceConnectorForName("TC1");
EXPECT_EQ(2, delete_count);
}
// Multiple.
{
ServiceRegistry registry;
registry.SetServiceConnectorForName(new TestConnector(&delete_count),
"TC1");
registry.SetServiceConnectorForName(new TestConnector(&delete_count),
"TC2");
}
EXPECT_EQ(4, delete_count);
// Re-addition.
{
ServiceRegistry registry;
registry.SetServiceConnectorForName(new TestConnector(&delete_count),
"TC1");
registry.SetServiceConnectorForName(new TestConnector(&delete_count),
"TC1");
EXPECT_EQ(5, delete_count);
}
EXPECT_EQ(6, delete_count);
}
} // namespace
} // namespace internal
} // namespace mojo