blob: 434c9b2891dd85305343576ac2d4a507dbeb057c [file] [log] [blame]
// Copyright 2019 The Chromium OS 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 <base/run_loop.h>
#include <brillo/message_loops/base_message_loop.h>
#include <gtest/gtest.h>
#include <mojo/core/core.h>
#include <mojo/core/embedder/embedder.h>
#include <mojo/public/cpp/bindings/pending_remote.h>
#include "midis/client.h"
#include "midis/device_tracker.h"
#include "mojo/midis.mojom.h"
// Local implementation of the mojo MidisClient interface.
class ClientImpl : public arc::mojom::MidisClient {
public:
~ClientImpl() override{};
void OnDeviceAdded(arc::mojom::MidisDeviceInfoPtr device) override {}
void OnDeviceRemoved(arc::mojom::MidisDeviceInfoPtr device) override {}
mojo::PendingRemote<arc::mojom::MidisClient> CreatePendingRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
private:
mojo::Receiver<arc::mojom::MidisClient> receiver_{this};
};
namespace midis {
class ClientTest : public ::testing::Test {
public:
ClientTest() = default;
ClientTest(const ClientTest&) = delete;
ClientTest& operator=(const ClientTest&) = delete;
~ClientTest() override = default;
protected:
void SetUp() override {
message_loop_.SetAsCurrent();
mojo::core::Init();
}
void TearDown() override {
auto core = mojo::core::Core::Get();
std::vector<MojoHandle> leaks;
core->GetActiveHandlesForTest(&leaks);
EXPECT_TRUE(leaks.empty());
}
private:
brillo::BaseMessageLoop message_loop_;
};
// Check that the MidisServer implementation sends back the correct
// number of devices.
TEST_F(ClientTest, ListDevices) {
DeviceTracker tracker;
mojo::Remote<arc::mojom::MidisServer> remote_server;
ClientImpl client;
Client client_class(&tracker, 0, base::Bind([](uint32_t client_id) {}),
remote_server.BindNewPipeAndPassReceiver(),
client.CreatePendingRemote());
// Check that initially there are no devices listed.
int64_t num_devices = -1;
remote_server->ListDevices(base::Bind(
[](int64_t* num_devices,
std::vector<arc::mojom::MidisDeviceInfoPtr> devices) {
*num_devices = devices.size();
},
&num_devices));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(num_devices, 0);
// TODO(b/122623049): Add a device, then check that ListDevices works as
// expected.
}
} // namespace midis