# Copyright (C) 2017 MongoDB Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License, version 3, # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # # IDL Unit Tests IDL file global: # Use a nested namespace simply to exercise nested namespace support for the code generator. cpp_namespace: "mongo::idl::test" cpp_includes: - "mongo/db/namespace_string.h" - "mongo/idl/idl_test_types.h" imports: - "mongo/idl/basic_types.idl" - "mongo/idl/unittest_import.idl" types: ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for a string type # ################################################################################################## namespacestring: bson_serialization_type: string description: "A MongoDB NamespaceString" cpp_type: "mongo::NamespaceString" serializer: mongo::NamespaceString::toString deserializer: mongo::NamespaceString ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for a bindata type # ################################################################################################## bindata_custom: bson_serialization_type: bindata bindata_subtype: generic description: "A MongoDB BinDataCustomType" cpp_type: "mongo::BinDataCustomType" serializer: mongo::BinDataCustomType::serialize deserializer: mongo::BinDataCustomType::parse ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for an any type # ################################################################################################## any_basic_type: bson_serialization_type: any description: "An Any Type" cpp_type: "mongo::AnyBasicType" serializer: mongo::AnyBasicType::serialize deserializer: mongo::AnyBasicType::parse ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for an object type # ################################################################################################## object_basic_type: bson_serialization_type: object description: "An object Type" cpp_type: "mongo::ObjectBasicType" serializer: mongo::ObjectBasicType::serialize deserializer: mongo::ObjectBasicType::parse ################################################################################################## # # Test types that accept multiple serialization types # ################################################################################################## safeInt32: description: Accepts any numerical type within int32 range cpp_type: std::int64_t bson_serialization_type: - long - int - decimal - double deserializer: "mongo::BSONElement::numberInt" ################################################################################################## # # Test types used in parser chaining testing # ################################################################################################## ChainedType: bson_serialization_type: chain description: "An Chain Type to test chaining" cpp_type: "mongo::ChainedType" serializer: mongo::ChainedType::serialize deserializer: mongo::ChainedType::parse AnotherChainedType: bson_serialization_type: chain description: "Another Chain Type to test chaining" cpp_type: "mongo::AnotherChainedType" serializer: mongo::AnotherChainedType::serialize deserializer: mongo::AnotherChainedType::parse ################################################################################################## # # Unit test structs for a single value to ensure type validation works correctly # ################################################################################################## structs: one_plain_object: description: UnitTest for a single BSONObj fields: value: object ################################################################################################## # # Structs to test derived parsers # ################################################################################################## DerivedBaseStruct: description: UnitTest for parser that will derive from a type fields: field1: int field2: int ################################################################################################## # # Structs to test various options for structs/fields # ################################################################################################## RequiredStrictField3: description: UnitTest for a strict struct with 3 required fields fields: field1: int field2: int field3: int RequiredNonStrictField3: description: UnitTest for a non-strict struct with 3 required fields strict: false fields: 1: type: int cpp_name: field1 2: type: int cpp_name: field2 3: type: int cpp_name: field3 ################################################################################################## # # Nested Structs with duplicate types # ################################################################################################## NestedWithDuplicateTypes: description: UnitTest for a non-strict struct with 3 required fields strict: false fields: field1: RequiredStrictField3 field2: type: RequiredNonStrictField3 optional: true field3: RequiredStrictField3 ################################################################################################## # # Structs to test various options for fields # ################################################################################################## ignoredField: description: UnitTest for a struct with an ignored_field fields: required_field: int ignored_field: type: int ignore: true ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for a string type # ################################################################################################## one_namespacestring: description: UnitTest for a single namespacestring fields: value: namespacestring ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for a bindata type # ################################################################################################## one_bindata_custom: description: UnitTest for a custom bindata fields: value: bindata_custom ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for an any type # ################################################################################################## one_any_basic_type: description: UnitTest for a single any type fields: value: any_basic_type ################################################################################################## # # Test a custom non-BSONElement deserialization and serialization methods for an object type # ################################################################################################## one_object_basic_type: description: UnitTest for a single object type fields: value: object_basic_type ################################################################################################## # # Test types that accept multiple serialization types # ################################################################################################## one_safeint32: description: UnitTest for a single safeInt32 fields: value: safeInt32 ################################################################################################## # # Test fields with default values # ################################################################################################## default_values: description: UnitTest for a single safeInt32 fields: V_string: type: string default: '"a default"' V_int: type: int default: 42 V_long: type: long default: 423 V_double: type: double default: 3.14159 V_bool: type: bool default: true ################################################################################################## # # Test fields with optional values # ################################################################################################## optional_field: description: UnitTest for a optional field fields: field1: type: string optional: true field2: type: int optional: true field3: type: object optional: true field4: type: bindata_generic optional: true field5: type: bindata_uuid optional: true ################################################################################################## # # Test array of simple types # ################################################################################################## simple_int_array: description: UnitTest for arrays of ints fields: field1: type: array simple_array_fields: description: UnitTest for arrays of simple types fields: field1: type: array field2: type: array field3: type: array field4: type: array field5: type: array optional_array_fields: description: UnitTest for arrays of optional simple types fields: field1: type: array optional: true field2: type: array optional: true field3: type: array optional: true field4: type: array optional: true field5: type: array optional: true ################################################################################################## # # Test array of complex types # ################################################################################################## complex_array_fields: description: UnitTest for arrays of complex optional and non-optional simple types fields: field1: type: array field2: type: array field3: type: array field4: type: array field5: type: array field6: type: array field1o: type: array optional: true field2o: type: array optional: true field3o: type: array optional: true field4o: type: array optional: true field5o: type: array optional: true field6o: type: array optional: true ################################################################################################## # # Test Chained Types # ################################################################################################## chained_string_basic_type: description: Base struct type for a chained string strict: false fields: stringField: string chained_any_basic_type: description: Base struct type for a chained any strict: false fields: anyField: any_basic_type chained_object_basic_type: description: Base struct type for a chained object strict: false fields: objectField: object_basic_type chained_struct_only: description: UnitTest for chained struct with only chained types strict: false chained_types: - ChainedType - AnotherChainedType chained_struct_mixed: description: Chained struct with chained structs and fields strict: true chained_structs: - chained_any_basic_type - chained_object_basic_type fields: field3: string chained_struct_type_mixed: description: Chained struct with chained types, structs, and fields strict: false chained_types: - ChainedType - AnotherChainedType chained_structs: - chained_string_basic_type fields: field3: type: int