use of com.google.devtools.build.lib.runtime.ServerBuilder in project bazel by bazelbuild.
the class DocumentationTestUtil method validateUserManual.
/**
* Validates that a user manual {@code documentationSource} contains only the flags actually
* provided by a given set of modules.
*/
public static void validateUserManual(List<Class<? extends BlazeModule>> modules, ConfiguredRuleClassProvider ruleClassProvider, String documentationSource) throws Exception {
// if there is a class missing, one can find it using
// find . -name "*.java" -exec grep -Hn "@Option(name = " {} \; | grep "xxx"
// where 'xxx' is a flag name.
List<BlazeModule> blazeModules = BlazeRuntime.createModules(modules);
Map<String, Object> optionsMap = new HashMap<>();
// collect all startup options
for (Class<? extends OptionsBase> optionsClass : BlazeCommandUtils.getStartupOptions(blazeModules)) {
optionsMap.putAll(Options.getDefaults(optionsClass).asMap());
}
// collect all command options
ServerBuilder serverBuilder = new ServerBuilder();
new BuiltinCommandModule().serverInit(null, serverBuilder);
for (BlazeModule module : blazeModules) {
module.serverInit(null, serverBuilder);
}
List<BlazeCommand> blazeCommands = serverBuilder.getCommands();
for (BlazeCommand command : blazeCommands) {
for (Class<? extends OptionsBase> optionClass : BlazeCommandUtils.getOptions(command.getClass(), blazeModules, ruleClassProvider)) {
optionsMap.putAll(Options.getDefaults(optionClass).asMap());
}
}
// check validity of option flags in manual
Matcher anchorMatcher = CODE_FLAG_PATTERN.matcher(documentationSource);
String flag;
boolean found;
while (anchorMatcher.find()) {
flag = anchorMatcher.group(1);
found = optionsMap.containsKey(flag);
if (!found && flag.startsWith("no")) {
found = optionsMap.containsKey(flag.substring(2));
}
if (!found && flag.startsWith("[no]")) {
found = optionsMap.containsKey(flag.substring(4));
}
assertWithMessage("flag '" + flag + "' is not a blaze option (anymore)").that(found).isTrue();
}
String unclosedTag = DocCheckerUtils.getFirstUnclosedTagAndPrintHelp(documentationSource);
assertWithMessage("Unclosed tag found: " + unclosedTag).that(unclosedTag).isNull();
}
Aggregations