blob: af1c81b08b62edc33138665790c54d49521e1709 [file] [log] [blame]
// 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