
// Copyright 2013 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.sample"]
module sample;

import "sample_import.mojom";
import "sample_import2.mojom";

const uint8 kTwelve = 12;

struct Bar {
  enum Type {
    VERTICAL = 1,
    HORIZONTAL,
    BOTH,
    INVALID
  };
  uint8 alpha@0 = 0xff;
  uint8 beta@1;
  uint8 gamma@2;
  Type type@3 = sample.Bar.Type.VERTICAL;
};

struct Foo {
  const string kFooby = "Fooby";
  string name@8 = kFooby;
  int32 x@0;
  int32 y@1;
  bool a@2 = true;
  bool b@3;
  bool c@4;
  Bar? bar@5;
  array<Bar>? extra_bars@7;
  array<uint8>? data@6;
  handle<message_pipe>? source@9;
  array<handle<data_pipe_consumer>>? input_streams@10;
  array<handle<data_pipe_producer>>? output_streams@11;
  array<array<bool>>? array_of_array_of_bools@12;
  array<array<array<string>>>? multi_array_of_strings@13;
  array<bool>? array_of_bools@14;
};

struct DefaultsTest {
  int8 a0@0 = -12;
  uint8 a1@1 = sample.kTwelve;
  int16 a2@2 = 1234;
  uint16 a3@3 = 34567;
  int32 a4@4 = 123456;
  uint32 a5@5 = 3456789012;
  int64 a6@6 = -111111111111;
  uint64 a7@7 = 9999999999999999999;
  int32 a8@8 = 0x12345;
  int32 a9@9 = -0x12345;
  int32 a10@10 = +1234;
  bool a11@11 = true;
  bool a12@12 = false;
  float a13@13 = 123.25;
  double a14@14 = 1234567890.123;
  double a15@15 = 1E10;
  double a16@16 = -1.2E+20;
  double a17@17 = +1.23E-20;

  // TODO(vtl): Add tests for default vs null when those are implemented (for
  // structs, arrays, and strings).
  array<uint8> a18@18;
  string a19@19;

  Bar.Type a20@20 = BOTH;
  imported.Point a21@21;
  imported.Thing a22@22 = default;

  uint64 a23@23 = 0xFFFFFFFFFFFFFFFF;
  int64 a24@24 = 0x123456789;
  int64 a25@25 = -0x123456789;

  double a26@26 = double.INFINITY;
  double a27@27 = double.NEGATIVE_INFINITY;
  double a28@28 = double.NAN;
  float a29@29 = float.INFINITY;
  float a30@30 = float.NEGATIVE_INFINITY;
  float a31@31 = float.NAN;
};

struct StructWithHoleV1 {
  int32 v1 = 1;
  int64 v2 = 2;
};

struct StructWithHoleV2 {
  int32 v1 = 1;
  int64 v2 = 2;
  int32 v3 = 3;
};

interface Service {
  enum BazOptions {
    REGULAR = 0,
    EXTRA
  };
  const uint8 kFavoriteBaz = 1;
  Frobinate@0(Foo? foo@0, BazOptions baz@1, Port? port@2) => (int32 result@0);
  GetPort@1(Port& port @0);
};

// This interface is referenced above where it is defined. It also refers to
// itself from a method.
interface Port {
  PostMessageToPort@0(string message_text@0, Port port@1);
};
