// Copyright 2018 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.

#ifndef BASE_FUCHSIA_SERVICE_DIRECTORY_TEST_BASE_H_
#define BASE_FUCHSIA_SERVICE_DIRECTORY_TEST_BASE_H_

#include <lib/zx/channel.h>

#include "base/fuchsia/component_context.h"
#include "base/fuchsia/scoped_service_binding.h"
#include "base/fuchsia/testfidl/cpp/fidl.h"
#include "base/message_loop/message_loop.h"
#include "starboard/types.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {
namespace fuchsia {

class TestInterfaceImpl : public testfidl::TestInterface {
 public:
  TestInterfaceImpl();
  ~TestInterfaceImpl() override;

  // TestInterface implementation.
  void Add(int32_t a, int32_t b, AddCallback callback) override;
};

class ServiceDirectoryTestBase : public testing::Test {
 public:
  ServiceDirectoryTestBase();
  ~ServiceDirectoryTestBase() override;

  void ConnectClientContextToDirectory(const char* path);
  void VerifyTestInterface(fidl::InterfacePtr<testfidl::TestInterface>* stub,
                           bool expect_error);

 protected:
  MessageLoopForIO message_loop_;
  std::unique_ptr<ServiceDirectory> service_directory_;
  zx::channel service_directory_client_channel_;
  TestInterfaceImpl test_service_;
  std::unique_ptr<ScopedServiceBinding<testfidl::TestInterface>>
      service_binding_;
  std::unique_ptr<ComponentContext> client_context_;
};

}  // namespace fuchsia
}  // namespace base

#endif  // BASE_FUCHSIA_SERVICE_DIRECTORY_TEST_BASE_H_