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


[JavaPackage="org.chromium.mojo.bindings.test.mojom.mojo"]
module mojo.test;

struct StructA {
  uint64 i;
};

struct StructB {
  StructA struct_a;
};

struct StructC {
  array<uint8> data;
};

struct StructD {
  array<handle<message_pipe>> message_pipes;
};

struct StructE {
  StructD struct_d;
  handle<data_pipe_consumer> data_pipe_consumer;
};

struct StructF {
  array<uint8, 3> fixed_size_array;
};

struct StructG {
  int32 i;
  [MinVersion=1]
  StructA? struct_a;
  [MinVersion=3]
  string? str;
  [MinVersion=3]
  bool b;
};

interface InterfaceA {
};

enum EnumA {
  ENUM_A_0,
  ENUM_A_1
};

[Extensible]
enum EnumB {
  ENUM_B_0,
  ENUM_B_1,
  ENUM_B_2
};

// A non-extensible enum with no values is valid, but about as useless as
// you would expect: it will fail validation for all values.
enum EmptyEnum {};

[Extensible]
enum ExtensibleEmptyEnum {};

union UnionA {
  StructA struct_a;
  bool b;
};

// This interface is used for testing bounds-checking in the mojom
// binding code. If you add a method please update the files
// ./data/validation/boundscheck_*. If you add a response please update
// ./data/validation/resp_boundscheck_*.
interface BoundsCheckTestInterface {
  Method0(uint8 param0) => (uint8 param0);
  Method1(uint8 param0);
};

interface ConformanceTestInterface {
  Method0(float param0);
  Method1(StructA param0);
  Method2(StructB param0, StructA param1);
  Method3(array<bool> param0);
  Method4(StructC param0, array<uint8> param1);
  Method5(StructE param0, handle<data_pipe_producer> param1);
  Method6(array<array<uint8>> param0);
  Method7(StructF param0, array<array<uint8, 3>?, 2> param1);
  Method8(array<array<string>?> param0);
  Method9(array<array<handle?>>? param0);
  Method10(map<string, uint8> param0);
  Method11(StructG param0);
  Method12(float param0) => (float param0);
  Method13(InterfaceA? param0, uint32 param1, InterfaceA? param2);
  Method14(EnumA param0, EnumB param1);
  Method15(array<EnumA>? param0, array<EnumB>? param1);
  Method16(map<EnumA, EnumA>? param0);
  Method17(array<InterfaceA> param0);
  Method18(UnionA? param0);
  Method19(Recursive recursive);
  Method20(map<StructB, uint8> param0);
  Method21(ExtensibleEmptyEnum param0);
  Method22(EmptyEnum param0);
};

struct BasicStruct {
  int32 a;
};

interface IntegrationTestInterface {
  Method0(BasicStruct param0) => (array<uint8> param0);
};

// An enum generates a enum-value validation function, so we want to test it.
// E.g., valid enum values for this enum should be:  -3, 0, 1, 10
enum BasicEnum {
  A,
  B,
  C = A,
  D = -3,
  E = 0xA
};

// The enum validation function should be generated within the scope of this
// struct.
struct StructWithEnum {
  enum EnumWithin {
    A, B, C, D
  };
};

// This is used to test that deeply recursive structures don't blow the stack.
struct Recursive {
  Recursive? recursive;
};
