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