Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
PikachuHyA committed May 27, 2024
1 parent c25e786 commit f512dae
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ load(
)

_FEATURE_NAMES = struct(
cpp20_modules = "cpp20_modules",
generate_pdb_file = "generate_pdb_file",
no_legacy_features = "no_legacy_features",
do_not_split_linking_cmdline = "do_not_split_linking_cmdline",
Expand Down Expand Up @@ -120,6 +121,11 @@ _FEATURE_NAMES = struct(
generate_linkmap = "generate_linkmap",
)

_cpp20_modules_feature = feature(
name = _FEATURE_NAMES.cpp20_modules,
enabled = False,
)

_no_copts_tokenization_feature = feature(name = _FEATURE_NAMES.no_copts_tokenization)

_disable_pbh_feature = feature(name = _FEATURE_NAMES.disable_pbh)
Expand Down Expand Up @@ -1330,6 +1336,7 @@ _generate_linkmap_feature = feature(
)

_feature_name_to_feature = {
_FEATURE_NAMES.cpp20_modules: _cpp20_modules_feature,
_FEATURE_NAMES.no_legacy_features: _no_legacy_features_feature,
_FEATURE_NAMES.do_not_split_linking_cmdline: _do_not_split_linking_cmdline_feature,
_FEATURE_NAMES.supports_dynamic_linker: _supports_dynamic_linker_feature,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7176,7 +7176,13 @@ def _impl(ctx):
else:
include_system_dirs_feature = None

cpp20_modules_feature = feature(
name = "cpp20_modules",
enabled = False,
)

features = [
cpp20_modules_feature,
default_compile_flags_feature,
default_link_flags_feature,
no_legacy_features_feature,
Expand Down
27 changes: 27 additions & 0 deletions src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -742,3 +742,30 @@ java_test(
"//third_party:truth",
],
)
java_test(
name = "Cpp20ModulesConfiguredTargetTest",
srcs = ["Cpp20ModulesConfiguredTargetTest.java"],
deps = [
"//src/main/java/com/google/devtools/build/lib/actions",
"//src/main/java/com/google/devtools/build/lib/actions:artifacts",
"//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster",
"//src/main/java/com/google/devtools/build/lib/analysis:configured_target",
"//src/main/java/com/google/devtools/build/lib/analysis:file_provider",
"//src/main/java/com/google/devtools/build/lib/analysis:test/instrumented_files_info",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
"//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data",
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/util:string",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//src/test/java/com/google/devtools/build/lib/actions/util",
"//src/test/java/com/google/devtools/build/lib/analysis/util",
"//src/test/java/com/google/devtools/build/lib/packages:testutil",
"//src/test/java/com/google/devtools/build/lib/testutil",
"//src/test/java/com/google/devtools/build/lib/testutil:TestConstants",
"//third_party:guava",
"//third_party:junit4",
"//third_party:truth",
],
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package com.google.devtools.build.lib.rules.cpp;

import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.analysis.util.DummyTestFragment;
import com.google.devtools.build.lib.packages.util.Crosstool;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class Cpp20ModulesConfiguredTargetTest extends BuildViewTestCase {

@Override
protected ConfiguredRuleClassProvider createRuleClassProvider() {
ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder();
TestRuleClassProvider.addStandardRules(builder);
builder.addConfigurationFragment(DummyTestFragment.class);
return builder.addRuleDefinition(new TestRuleClassProvider.MakeVariableTesterRule()).build();
}

@Test
public void testCpp20ModulesConfigurationNoFlags() throws Exception {
ImmutableList<String> targetList = ImmutableList.of("//foo:lib", "//foo:bin", "//foo:test");
scratch.file(
"foo/BUILD",
"""
cc_library(
name = 'lib',
module_interfaces = ["foo.cppm"],
)
cc_binary(
name = 'bin',
module_interfaces = ["foo.cppm"],
)
cc_test(
name = 'test',
module_interfaces = ["foo.cppm"],
)
""");
for(String targetName: targetList) {
AssertionError e = assertThrows(AssertionError.class, () -> getConfiguredTarget(targetName));
assertThat(e).hasMessageThat().contains("requires --experimental_cpp20_modules");
}
}
@Test
public void testCpp20ModulesConfigurationNoFeatures() throws Exception {
ImmutableList<String> targetList = ImmutableList.of("//foo:lib", "//foo:bin", "//foo:test");
useConfiguration("--experimental_cpp20_modules");
scratch.file(
"foo/BUILD",
"""
cc_library(
name = 'lib',
module_interfaces = ["foo.cppm"],
)
cc_binary(
name = 'bin',
module_interfaces = ["foo.cppm"],
)
cc_test(
name = 'test',
module_interfaces = ["foo.cppm"],
)
""");
for(String targetName: targetList) {
AssertionError e = assertThrows(AssertionError.class, () -> getConfiguredTarget(targetName));
assertThat(e).hasMessageThat().contains("the feature cpp20_modules must be enabled");
}
}
@Test
public void testCpp20ModulesConfigurationWithFeatures() throws Exception {
ImmutableList<String> targetList = ImmutableList.of("//foo:lib", "//foo:bin", "//foo:test");
AnalysisMock.get()
.ccSupport()
.setupCcToolchainConfig(
mockToolsConfig,
Crosstool.CcToolchainConfig.builder()
.withFeatures(
CppRuleClasses.CPP20_MODULES));
useConfiguration("--experimental_cpp20_modules", "--features=cpp20_modules");
scratch.file(
"foo/BUILD",
"""
cc_library(
name = 'lib',
module_interfaces = ["foo.cppm"],
)
cc_binary(
name = 'bin',
module_interfaces = ["foo.cppm"],
)
cc_test(
name = 'test',
module_interfaces = ["foo.cppm"],
)
""");
for(String targetName: targetList) {
ImmutableSet<String> features = getRuleContext(getConfiguredTarget(targetName)).getFeatures();
assertThat(features).contains("cpp20_modules");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7383,6 +7383,7 @@ public void testExpandedCppConfigurationApiBlocked() throws Exception {
"build_test_dwp()",
"grte_top()",
"experimental_cc_implementation_deps()",
"experimental_cpp20_modules()",
"share_native_deps()",
"experimental_platform_cc_test()");
scratch.file(
Expand Down

0 comments on commit f512dae

Please sign in to comment.