// Copyright 2019 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 <fidl/test/collision/cpp/fidl.h>
#include <gtest/gtest.h>

namespace fidl {
namespace {

// Confirms that a protocol can have a method that returns a protocol whose
// type name is the same as the method's. Prior to a change which added the
// "class" modifier to the generated proxy's method signature, the identifier
// was ambiguous and the generated header did not compile.
TEST(Collision, ReturnTypeCompiles) {
  zx::channel ch;
  fidl::InterfaceHandle<class test::collision::NameCollision> collision;
  test::collision::ReturnsCollision_SyncProxy proxy(std::move(ch));
  proxy.NameCollision(&collision);
}

// Confirms that a protocol can have a method that takes in a nullable union
// whose type name is the same as the method's.
TEST(Collision, NullableUnionCompiles) {
  zx::channel ch;
  fidl::InterfaceHandle<class test::collision::NameCollision> collision;
  test::collision::ReturnsCollision_SyncProxy proxy(std::move(ch));
  auto nullable_union = std::make_unique<test::collision::NullableUnionCollision>();
  nullable_union->set_foo(42);
  proxy.NullableUnionCollision(std::move(nullable_union));
}

}  // namespace
}  // namespace fidl
