blob: 8698da3843f9c7eca1c8c22c048aaa4f8196791c [file] [log] [blame]
// Copyright 2017 The Fuchsia 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 "peridot/lib/testing/entity_resolver_fake.h"
namespace modular {
class EntityResolverFake::EntityImpl : Entity {
public:
EntityImpl(std::map<std::string, std::string> types_and_data)
: types_and_data_(types_and_data) {}
void Connect(fidl::InterfaceRequest<Entity> request) {
bindings_.AddBinding(this, std::move(request));
}
private:
// |Entity|
void GetTypes(GetTypesCallback callback) override {
fidl::VectorPtr<fidl::StringPtr> types;
for (const auto& entry : types_and_data_) {
types.push_back(entry.first);
}
callback(std::move(types));
}
// |Entity|
void GetData(fidl::StringPtr type,
GetDataCallback callback) override {
auto it = types_and_data_.find(type);
if (it == types_and_data_.end()) {
callback(nullptr);
return;
}
callback(it->second);
}
std::map<std::string, std::string> types_and_data_;
fidl::BindingSet<Entity> bindings_;
};
EntityResolverFake::EntityResolverFake() = default;
EntityResolverFake::~EntityResolverFake() = default;
void EntityResolverFake::Connect(
fidl::InterfaceRequest<EntityResolver> request) {
bindings_.AddBinding(this, std::move(request));
}
// Returns an Entity reference that will resolve to an Entity.
// |types_and_data| is a map of data type to data bytes.
fidl::StringPtr EntityResolverFake::AddEntity(
std::map<std::string, std::string> types_and_data) {
const std::string id = std::to_string(next_entity_id_++);
auto entity = std::make_unique<EntityImpl>(std::move(types_and_data));
entities_.emplace(id, std::move(entity));
return id;
}
void EntityResolverFake::ResolveEntity(
fidl::StringPtr entity_reference,
fidl::InterfaceRequest<Entity> entity_request) {
auto it = entities_.find(entity_reference);
if (it == entities_.end()) {
return; // |entity_request| is reset here.
}
it->second->Connect(std::move(entity_request));
}
} // namespace modular