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

[DartPackage="_mojo_for_test_only"]
module mojo.test;

import "test_included_unions.mojom";

enum AnEnum {
  FIRST, SECOND
};

union PodUnion {
  int8   f_int8;
  int8   f_int8_other;
  uint8  f_uint8;
  int16  f_int16;
  uint16 f_uint16;
  int32  f_int32;
  uint32 f_uint32;
  int64  f_int64;
  uint64 f_uint64;
  float  f_float;
  double f_double;
  bool   f_bool;
  AnEnum f_enum;
};

// Tests that you can reference yet-to-be-declared unions in a union.
union UnionOfUnions {
  ObjectUnion u;
  array<ObjectUnion> a_ou;
  array<HandleUnion> a_hu;
  map<int64, ObjectUnion> m_ou;
  map<int64, HandleUnion> m_hu;
};

// Tests that you can reference yet-to-be-declared unions in a struct.
struct StructOfUnions {
  ObjectUnion u;
  array<ObjectUnion> a_ou;
  array<HandleUnion> a_hu;
  map<int64, ObjectUnion> m_ou;
  map<int64, HandleUnion> m_hu;
};

union ObjectUnion {
  int8   f_int8;
  string f_string;
  DummyStruct f_dummy;
  DummyStruct? f_nullable;
  array<int8> f_array_int8;
  map<string, int8> f_map_int8;
  PodUnion f_pod_union;
};

union HandleUnion {
  handle f_handle;
  handle<message_pipe> f_message_pipe;
  handle<data_pipe_consumer> f_data_pipe_consumer;
  handle<data_pipe_producer> f_data_pipe_producer;
  handle<shared_buffer> f_shared_buffer;
  SmallCache f_small_cache;
};

struct WrapperStruct {
  ObjectUnion? object_union;
  PodUnion? pod_union;
  HandleUnion? handle_union;
};

struct DummyStruct {
  int8 f_int8;
};

struct SmallStruct {
  DummyStruct? dummy_struct;
  PodUnion? pod_union;
  array<PodUnion>? pod_union_array;
  array<PodUnion?>? nullable_pod_union_array;
  array<DummyStruct>? s_array;
  map<string, PodUnion>? pod_union_map;
  map<string, PodUnion?>? nullable_pod_union_map;
};

struct SmallStructNonNullableUnion {
  PodUnion pod_union;
};

union ObjectOnlyUnion {
  DummyStruct dummy1;
};

struct StructNullObjectUnion {
  ObjectOnlyUnion? obj_union;
};

struct SmallObjStruct {
  ObjectUnion obj_union;
  int8 f_int8;
};

interface SmallCache {
  SetIntValue(int64 int_value);
  GetIntValue() => (int64 int_value);
};

interface UnionInterface {
  Echo(PodUnion in_val) => (PodUnion out_val);
};

struct TryNonNullStruct {
  DummyStruct? nullable;
  DummyStruct non_nullable;
};

union OldUnion {
  int8 f_int8;
};

union NewUnion {
  int8 f_int8;
  int16 f_int16;
};

struct IncludingStruct {
  IncludedUnion a;
};
