blob: 66add7ab561d09d08cef20bc28c294771bc28b61 [file]
// Copyright 2026 The Chromium 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 "gn/binary_target_generator.h"
#include "gn/err.h"
#include "gn/scheduler.h"
#include "gn/target.h"
#include "gn/test_with_scheduler.h"
#include "gn/test_with_scope.h"
#include "util/test/test.h"
using BinaryTargetGeneratorTest = TestWithScheduler;
TEST_F(BinaryTargetGeneratorTest, NonModuleTarget) {
TestWithScope setup;
Scope::ItemVector items_;
setup.scope()->set_item_collector(&items_);
setup.scope()->set_source_dir(SourceDir("//test/"));
TestParseInput input(
R"(static_library("foo") {
generate_modulemap = "textual"
sources = [ "//foo.c" ]
})");
ASSERT_SUCCESS(input);
Err err;
input.parsed()->Execute(setup.scope(), &err);
ASSERT_SUCCESS(err);
ASSERT_EQ(1u, items_.size());
Target* target = items_[0]->AsTarget();
ASSERT_TRUE(target);
EXPECT_TRUE(target->module_type().none());
}
TEST_F(BinaryTargetGeneratorTest, GeneratedModuleMapAllPublic) {
TestWithScope setup;
Scope::ItemVector items_;
setup.scope()->set_item_collector(&items_);
setup.scope()->set_source_dir(SourceDir("//test/"));
TestParseInput input(
R"(static_library("foo") {
generate_modulemap = "textual"
sources = [ "//foo.cc", "//foo.h" ]
})");
ASSERT_SUCCESS(input);
Err err;
input.parsed()->Execute(setup.scope(), &err);
ASSERT_SUCCESS(err);
ASSERT_EQ(1u, items_.size());
Target* target = items_[0]->AsTarget();
ASSERT_TRUE(target);
EXPECT_TRUE(target->module_type().test(Target::HAS_MODULEMAP));
EXPECT_TRUE(target->module_type().test(Target::MODULEMAP_IS_GENERATED));
EXPECT_TRUE(target->module_type().test(Target::MODULEMAP_IS_TEXTUAL));
}
TEST_F(BinaryTargetGeneratorTest, GeneratedModuleMap) {
TestWithScope setup;
Scope::ItemVector items_;
setup.scope()->set_item_collector(&items_);
setup.scope()->set_source_dir(SourceDir("//test/"));
TestParseInput input(
R"(static_library("foo") {
generate_modulemap = "textual"
sources = [ "//foo.cc" ]
public = ["//foo.h"]
})");
ASSERT_SUCCESS(input);
Err err;
input.parsed()->Execute(setup.scope(), &err);
ASSERT_SUCCESS(err);
ASSERT_EQ(1u, items_.size());
Target* target = items_[0]->AsTarget();
ASSERT_TRUE(target);
EXPECT_TRUE(target->module_type().test(Target::HAS_MODULEMAP));
EXPECT_TRUE(target->module_type().test(Target::MODULEMAP_IS_GENERATED));
EXPECT_TRUE(target->module_type().test(Target::MODULEMAP_IS_TEXTUAL));
}