| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <fidl/flat_ast.h> |
| #include <unittest/unittest.h> |
| |
| #include "test_library.h" |
| |
| namespace fidl { |
| namespace flat { |
| |
| #define CHECK_PRIMITIVE_TYPE(N, S) \ |
| { \ |
| auto the_type_name = Name(library_ptr, N); \ |
| const Type* the_type; \ |
| ASSERT_TRUE(typespace.Create(the_type_name, nullptr /* maybe_arg_type */, \ |
| std::optional<types::HandleSubtype>(), nullptr /* maybe_size */, \ |
| types::Nullability::kNonnullable, &the_type, nullptr)); \ |
| ASSERT_NE(the_type, nullptr, N); \ |
| auto the_type_p = static_cast<const PrimitiveType*>(the_type); \ |
| ASSERT_EQ(the_type_p->subtype, S, N); \ |
| } |
| |
| // Tests that we can look up root types with global names, i.e. those absent |
| // of any libraries. |
| bool root_types_with_no_library_in_lookup() { |
| BEGIN_TEST; |
| |
| Typespace typespace = Typespace::RootTypes(nullptr); |
| |
| Library* library_ptr = nullptr; |
| |
| CHECK_PRIMITIVE_TYPE("bool", types::PrimitiveSubtype::kBool); |
| CHECK_PRIMITIVE_TYPE("int8", types::PrimitiveSubtype::kInt8); |
| CHECK_PRIMITIVE_TYPE("int16", types::PrimitiveSubtype::kInt16); |
| CHECK_PRIMITIVE_TYPE("int32", types::PrimitiveSubtype::kInt32); |
| CHECK_PRIMITIVE_TYPE("int64", types::PrimitiveSubtype::kInt64); |
| CHECK_PRIMITIVE_TYPE("uint8", types::PrimitiveSubtype::kUint8); |
| CHECK_PRIMITIVE_TYPE("uint16", types::PrimitiveSubtype::kUint16); |
| CHECK_PRIMITIVE_TYPE("uint32", types::PrimitiveSubtype::kUint32); |
| CHECK_PRIMITIVE_TYPE("uint64", types::PrimitiveSubtype::kUint64); |
| CHECK_PRIMITIVE_TYPE("float32", types::PrimitiveSubtype::kFloat32); |
| CHECK_PRIMITIVE_TYPE("float64", types::PrimitiveSubtype::kFloat64); |
| |
| END_TEST; |
| } |
| |
| // Tests that we can look up root types with local names, i.e. those within |
| // the context of a library. |
| bool root_types_with_some_library_in_lookup() { |
| BEGIN_TEST; |
| |
| Typespace typespace = Typespace::RootTypes(nullptr); |
| |
| TestLibrary library("library fidl.test;"); |
| ASSERT_TRUE(library.Compile()); |
| auto library_ptr = library.library(); |
| |
| CHECK_PRIMITIVE_TYPE("bool", types::PrimitiveSubtype::kBool); |
| CHECK_PRIMITIVE_TYPE("int8", types::PrimitiveSubtype::kInt8); |
| CHECK_PRIMITIVE_TYPE("int16", types::PrimitiveSubtype::kInt16); |
| CHECK_PRIMITIVE_TYPE("int32", types::PrimitiveSubtype::kInt32); |
| CHECK_PRIMITIVE_TYPE("int64", types::PrimitiveSubtype::kInt64); |
| CHECK_PRIMITIVE_TYPE("uint8", types::PrimitiveSubtype::kUint8); |
| CHECK_PRIMITIVE_TYPE("uint16", types::PrimitiveSubtype::kUint16); |
| CHECK_PRIMITIVE_TYPE("uint32", types::PrimitiveSubtype::kUint32); |
| CHECK_PRIMITIVE_TYPE("uint64", types::PrimitiveSubtype::kUint64); |
| CHECK_PRIMITIVE_TYPE("float32", types::PrimitiveSubtype::kFloat32); |
| CHECK_PRIMITIVE_TYPE("float64", types::PrimitiveSubtype::kFloat64); |
| |
| END_TEST; |
| } |
| |
| BEGIN_TEST_CASE(types_tests) |
| RUN_TEST(root_types_with_no_library_in_lookup) |
| RUN_TEST(root_types_with_some_library_in_lookup) |
| END_TEST_CASE(types_tests) |
| |
| } // namespace flat |
| } // namespace fidl |