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

// Module containing entities for regression tests of the generator. Entities
// must never be modified, instead new entity must be added to add new tests.
[JavaPackage="org.chromium.mojo.bindings.test.mojom.regression_tests"]
module regression_tests;

interface CheckMethodWithEmptyResponse {
WithoutParameterAndEmptyResponse() => ();
WithParameterAndEmptyResponse(bool b) => ();
};

interface CheckNameCollision {
WithNameCollision(bool message, bool response) => (bool message, bool response);
};

enum EnumWithReference {
  k_STEREO_AND_KEYBOARD_MIC = 30,
  k_MAX = k_STEREO_AND_KEYBOARD_MIC
};

enum EnumWithLowercase {
  PlanarF16,
  PlanarF32
};

enum EnumWithNumbers {
  k_2_1 = 4
};

enum EnumWithK {
  K = 0
};

struct Edge {
  Vertex? v;
};

struct Vertex {
  EmptyStruct? e;
};

struct EmptyStruct {
};

struct A {
  B? b;
};

struct B {
  A? a;
};

enum EnumWithINTERNALAllCaps {
  STANDARD,
  FULLSCREEN,
  IMMERSIVE,
};

interface CheckEnumCaps {
  SetEnumWithINTERNALAllCaps(EnumWithINTERNALAllCaps e);
};

struct StructWithHandleCalledHandles {
  handle handles;
};

struct StructWithArrayOfHandlesCalledHandles {
  array<handle> handles;
};

interface TestInterface {
  SomeMessage();
};

struct StructWithInterfaceCalledHandles {
  TestInterface handles;
};

enum NormalEnum {
  FIRST,
  SECOND,
};

struct ContainsArrayOfEnum {
  array<NormalEnum> array_of_enums;
};
