# 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