BashCompletionToolTest.java
/**
* Copyright (c) 2021, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.tools.test;
import com.google.common.collect.ImmutableList;
import com.powsybl.commons.test.TestUtil;
import com.powsybl.tools.Command;
import com.powsybl.tools.Tool;
import com.powsybl.tools.ToolRunningContext;
import com.powsybl.tools.autocompletion.BashCompletionTool;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
/**
* @author Sylvain Leclerc {@literal <sylvain.leclerc at rte-france.com>}
*/
class BashCompletionToolTest extends AbstractToolTest {
private BashCompletionTool tool;
@BeforeEach
@Override
public void setUp() throws Exception {
tool = new BashCompletionTool();
super.setUp();
}
@Override
protected Iterable<Tool> getTools() {
return Collections.singleton(tool);
}
@Override
public void assertCommand() {
assertEquals("Misc", tool.getCommand().getTheme());
assertFalse(tool.getCommand().isHidden());
assertCommand(tool.getCommand(), "generate-completion-script", 1, 1);
assertOption(tool.getCommand().getOptions(), "output-file", true, true);
}
private String expectedScript() throws IOException {
try (InputStream is = getClass().getResourceAsStream("tool-output.sh")) {
return TestUtil.normalizeLineSeparator(IOUtils.toString(is, StandardCharsets.UTF_8));
}
}
@Test
void testBehaviour() throws IOException {
Options options1 = new Options();
options1.addOption(Option.builder("I").hasArg().build());
options1.addOption(Option.builder().longOpt("case-file").hasArg().argName("FILE").build());
Tool tool1 = createTool("tool1", options1);
Options options2 = new Options();
options2.addOption(Option.builder().longOpt("hostname").hasArg().argName("HOST").build());
options2.addOption(Option.builder().longOpt("dir").hasArg().argName("DIR").build());
Tool tool2 = createTool("tool2", options2);
tool.generateCompletionScript(ImmutableList.of(tool2, tool1), fileSystem.getPath("/output.sh"));
String outputScript = TestUtil.normalizeLineSeparator(Files.readString(fileSystem.getPath("/output.sh"), StandardCharsets.UTF_8));
assertEquals(expectedScript(), outputScript);
}
private static Tool createTool(String name, Options options) {
return new Tool() {
@Override
public Command getCommand() {
return new Command() {
@Override
public String getName() {
return name;
}
@Override
public String getTheme() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public Options getOptions() {
return options;
}
@Override
public String getUsageFooter() {
return null;
}
};
}
@Override
public void run(CommandLine line, ToolRunningContext context) throws Exception {
}
};
}
}