chromium/ios/chrome/test/swift_interop/namespace/namespace.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_TEST_SWIFT_INTEROP_NAMESPACE_NAMESPACE_H_
#define IOS_CHROME_TEST_SWIFT_INTEROP_NAMESPACE_NAMESPACE_H_

class Goat {
 public:
  int GetValue() const { return 7; }
};

enum class Foo { cat, dog, goat };

namespace space {

class Goat {
 public:
  void DoNothing() const {}
  int GetValue() const { return 42; }
};

enum class Animal { cat, dog, goat };
enum Vehicle { car, boat, bike };
enum { kPen, kPencil };

}  // namespace space

namespace outer {

namespace inner {

class NestedGoat {
 public:
  int GetValue() const { return 50; }
  space::Animal GetAnimal() { return space::Animal::goat; }
};

}  // namespace inner

}  // namespace outer

// Swift interop will compile -- yet crash the test -- if there is a
// enum class with the same name both in and out of a namespace and the
// namespaced enum is referenced by XCTest methods.

enum class SameNameEnum { watermelon, apple, orange };

namespace sameName {

enum class SameNameEnum { watermelon, apple, orange };

}  // namespace sameName

#endif  // IOS_CHROME_TEST_SWIFT_INTEROP_NAMESPACE_NAMESPACE_H_