1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezmodule mojo.test;
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// TODO(yzshen): Rename *WithTraits* types to something more readable.
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct NestedStructWithTraits {
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  int32 value;
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezenum EnumWithTraits {
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  VALUE_0,
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  VALUE_1
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructWithTraits {
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EnumWithTraits f_enum;
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  bool f_bool;
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint32 f_uint32;
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  uint64 f_uint64;
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  string f_string;
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  string f_string2;
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  array<string> f_string_array;
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  NestedStructWithTraits f_struct;
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  array<NestedStructWithTraits> f_struct_array;
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  map<string, NestedStructWithTraits> f_struct_map;
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Test that this container can be cloned.
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructWithTraitsContainer {
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  StructWithTraits f_struct;
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct PassByValueStructWithTraits {
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  handle f_handle;
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// The custom type for PassByValueStructWithTraits is not clonable. Test that
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// this container can compile as long as Clone() is not used.
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct PassByValueStructWithTraitsContainer {
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  PassByValueStructWithTraits f_struct;
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezstruct StructWithTraitsForUniquePtrTest {
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  int32 f_int32;
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezinterface TraitsTestService {
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EchoStructWithTraits(StructWithTraits s) => (StructWithTraits passed);
52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EchoPassByValueStructWithTraits(PassByValueStructWithTraits s) =>
54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      (PassByValueStructWithTraits passed);
55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EchoEnumWithTraits(EnumWithTraits e) => (EnumWithTraits passed);
57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EchoStructWithTraitsForUniquePtrTest(StructWithTraitsForUniquePtrTest e) => (
59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      StructWithTraitsForUniquePtrTest passed);
60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez};
61