/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include namespace test_cpp2 { namespace cpp_reflection { FATAL_S(cpp_s, "cpp"); FATAL_S(cpp_ns, "test_cpp1::cpp_reflection"); FATAL_S(cpp2_s, "cpp2"); FATAL_S(cpp2_ns, "test_cpp2::cpp_reflection"); FATAL_S(d_s, "d"); FATAL_S(d_2ns, "test_d.cpp_reflection"); FATAL_S(java_s, "java"); FATAL_S(java_ns, "test_java.cpp_reflection"); FATAL_S(java_swift_s, "java.swift"); FATAL_S(java_swift_ns, "test_swift.cpp_reflection"); FATAL_S(php_s, "php"); FATAL_S(php_ns, "test_php_cpp_reflection"); FATAL_S(python_s, "py3"); FATAL_S(python_ns, "test_py.cpp_reflection"); FATAL_S(enum1s, "enum1"); FATAL_S(enum2s, "enum2"); FATAL_S(enum3s, "enum3"); FATAL_S(enum_with_renamed_values, "enum_with_renamed_value"); FATAL_S(union1s, "union1"); FATAL_S(union2s, "union2"); FATAL_S(union3s, "union3"); FATAL_S(unionAs, "unionA"); FATAL_S(union_with_renamed_fields, "union_with_renamed_field"); FATAL_S(structAs, "structA"); FATAL_S(structBs, "structB"); FATAL_S(structCs, "structC"); FATAL_S(struct1s, "struct1"); FATAL_S(struct2s, "struct2"); FATAL_S(struct3s, "struct3"); FATAL_S(struct4s, "struct4"); FATAL_S(struct5s, "struct5"); FATAL_S(struct_binarys, "struct_binary"); FATAL_S(dep_A_structs, "dep_A_struct"); FATAL_S(annotateds, "annotated"); FATAL_S(my_structAs, "my_structA"); FATAL_S(hasRefUnique_name, "hasRefUnique"); FATAL_S(hasRefShared_name, "hasRefShared"); FATAL_S(hasRefSharedConst_name, "hasRefSharedConst"); FATAL_S(hasRefUniqueSimple_name, "hasRefUniqueSimple"); FATAL_S(hasRefSharedSimple_name, "hasRefSharedSimple"); FATAL_S(hasRefSharedConstSimple_name, "hasRefSharedConstSimple"); FATAL_S(hasBox_name, "hasBox"); FATAL_S(hasBoxSimple_name, "hasBoxSimple"); FATAL_S(StructWithIOBufs, "StructWithIOBuf"); FATAL_S(struct_with_renamed_fields, "struct_with_renamed_field"); FATAL_S(IntStructs, "IntStruct"); FATAL_S(StructWithAdaptedFields, "StructWithAdaptedField"); FATAL_S(StructWithVectorBools, "StructWithVectorBool"); FATAL_S(constant1s, "constant1"); FATAL_S(constant2s, "constant2"); FATAL_S(constant3s, "constant3"); FATAL_S(service1s, "service1"); FATAL_S(service2s, "service2"); FATAL_S(service3s, "service3"); FATAL_S(enum_with_special_namess, "enum_with_special_names"); FATAL_S(union_with_special_namess, "union_with_special_names"); FATAL_S(struct_with_special_namess, "struct_with_special_names"); FATAL_S(service_with_special_namess, "service_with_special_names"); FATAL_S(constant_with_special_names, "constant_with_special_name"); FATAL_S(variantHasRefUniques, "variantHasRefUnique"); TEST(fatal, tags) { EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME< enum_with_special_namess, reflection_tags::enums::enum_with_special_names>(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME< union_with_special_namess, reflection_tags::unions::union_with_special_names>(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME< struct_with_special_namess, reflection_tags::structs::struct_with_special_names>(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME< constant_with_special_names, reflection_tags::constants::constant_with_special_name>(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME(); EXPECT_SAME< service_with_special_namess, reflection_tags::services::service_with_special_names>(); } TEST(fatal, metadata) { using info = apache::thrift::reflect_module; EXPECT_SAME< info, apache::thrift::try_reflect_module>(); EXPECT_SAME>(); EXPECT_SAME< fatal::list< fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair>, info::namespaces>(); EXPECT_SAME< fatal::list< fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair>, info::enums>(); EXPECT_SAME< fatal::list< fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair>, info::unions>(); EXPECT_SAME< fatal::list< fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair, fatal::pair>, info::structs>(); EXPECT_SAME< fatal::list, info::services>(); } } // namespace cpp_reflection } // namespace test_cpp2 #include namespace test_cpp2 { namespace cpp_reflection { TEST(fatal, reflect_module_tag) { using tag = reflection_tags::module; EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift::reflect_module_tag>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift::reflect_module_tag>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift::reflect_module_tag>(); } TEST(fatal, try_reflect_module_tag) { using tag = reflection_tags::module; EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift::try_reflect_module_tag>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift::try_reflect_module_tag>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift::try_reflect_module_tag>(); EXPECT_SAME>(); EXPECT_SAME< tag, apache::thrift:: try_reflect_module_tag>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< void, apache::thrift::try_reflect_module_tag>(); } TEST(reflection, is_reflectable_module) { EXPECT_SAME< std::true_type, apache::thrift::is_reflectable_module>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module< std::unordered_map>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_module< std::unordered_map>>(); } TEST(reflection, is_reflectable_struct) { EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct< std::unordered_map>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_struct< std::unordered_map>>(); } TEST(reflection, is_reflectable_enum) { EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum< std::unordered_map>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_enum< std::unordered_map>>(); } TEST(reflection, is_reflectable_union) { EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union< std::unordered_map>>(); EXPECT_SAME< std::false_type, apache::thrift::is_reflectable_union< std::unordered_map>>(); } TEST(reflection, reflect_type_class_of_thrift_class) { EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class< reflection_tags::module>>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class< std::vector>>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::variant, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::variant, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::variant, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::structure, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::structure, apache::thrift::reflect_type_class_of_thrift_class>(); EXPECT_SAME< apache::thrift::type_class::structure, apache::thrift::reflect_type_class_of_thrift_class>(); } TEST(reflection, reflect_type_class_of_thrift_class_enum) { EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class_enum< reflection_tags::module>>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::unknown, apache::thrift::reflect_type_class_of_thrift_class_enum< std::vector>>(); EXPECT_SAME< apache::thrift::type_class::enumeration, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::variant, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::variant, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::variant, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::structure, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::structure, apache::thrift::reflect_type_class_of_thrift_class_enum>(); EXPECT_SAME< apache::thrift::type_class::structure, apache::thrift::reflect_type_class_of_thrift_class_enum>(); } TEST(reflection, reflected_module_name) { using module = test_cpp2::cpp_reflection::reflection_tags::module; using module_meta = apache::thrift::reflect_module; const auto module_name = fatal::to_instance(); EXPECT_EQ("reflection", module_name); } } // namespace cpp_reflection } // namespace test_cpp2