Search in sources :

Example 1 with ServerBuilder

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();
}
Also used : BlazeCommand(com.google.devtools.build.lib.runtime.BlazeCommand) HashMap(java.util.HashMap) Matcher(java.util.regex.Matcher) BuiltinCommandModule(com.google.devtools.build.lib.runtime.BuiltinCommandModule) BlazeModule(com.google.devtools.build.lib.runtime.BlazeModule) ServerBuilder(com.google.devtools.build.lib.runtime.ServerBuilder)

Aggregations

BlazeCommand (com.google.devtools.build.lib.runtime.BlazeCommand)1 BlazeModule (com.google.devtools.build.lib.runtime.BlazeModule)1 BuiltinCommandModule (com.google.devtools.build.lib.runtime.BuiltinCommandModule)1 ServerBuilder (com.google.devtools.build.lib.runtime.ServerBuilder)1 HashMap (java.util.HashMap)1 Matcher (java.util.regex.Matcher)1