blob: 5a2038d72dc8abc34833122f467c040c943a0023 [file] [log] [blame]
// Copyright 2020 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 <fidl/lexer.h>
#include <fidl/names.h>
#include <fidl/parser.h>
#include <fidl/source_file.h>
#include <zxtest/zxtest.h>
#include "error_test.h"
#include "test_library.h"
namespace {
TEST(Resource, Valid) {
TestLibrary library(R"FIDL(
library example;
enum MyEnum : uint32 {
NONE = 0;
};
resource_definition SomeResource : uint32 {
properties {
MyEnum subtype;
};
};
)FIDL");
ASSERT_TRUE(library.Compile());
auto resource = library.LookupResource("SomeResource");
ASSERT_NOT_NULL(resource);
ASSERT_EQ(resource->properties.size(), 1u);
EXPECT_EQ(resource->properties[0].type_ctor->name.span()->data(), "MyEnum");
EXPECT_EQ(resource->properties[0].name.data(), "subtype");
ASSERT_NOT_NULL(resource->subtype_ctor);
EXPECT_EQ(resource->subtype_ctor->name.span()->data(), "uint32");
}
TEST(Resource, InvalidEmpty) {
TestLibrary library(R"FIDL(
library example;
resource_definition SomeResource : uint32 {
};
)FIDL");
ASSERT_FALSE(library.Compile());
const auto& errors = library.errors();
ASSERT_EQ(errors.size(), 1u);
ASSERT_ERR(errors[0], fidl::ErrUnexpectedIdentifier);
}
TEST(Resource, InvalidNoProperties) {
TestLibrary library(R"FIDL(
library example;
resource_definition SomeResource : uint32 {
properties {
};
};
)FIDL");
ASSERT_FALSE(library.Compile());
const auto& errors = library.errors();
ASSERT_EQ(errors.size(), 1u);
ASSERT_ERR(errors[0], fidl::ErrMustHaveOneProperty);
}
TEST(Resource, InvalidDuplicateProperty) {
TestLibrary library(R"FIDL(
library example;
enum MyEnum {
X = 0;
};
resource_definition SomeResource : uint32 {
properties {
MyEnum stuff;
MyEnum stuff;
};
};
)FIDL");
ASSERT_FALSE(library.Compile());
const auto& errors = library.errors();
ASSERT_EQ(errors.size(), 1u);
ASSERT_ERR(errors[0], fidl::ErrDuplicateResourcePropertyName);
}
} // namespace