/*
* Copyright 2016 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.as.test.integration.management.cli;
import org.jboss.as.cli.CommandContext;
import org.jboss.as.cli.CommandLineException;
import org.jboss.as.test.integration.management.util.CLIWrapper;
import org.wildfly.core.testrunner.WildflyTestRunner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* WFCORE-1714 Test for Variables Completion
*
* @author wangc
*/
@RunWith(WildflyTestRunner.class)
public class VariablesCompletionTestCase {
private static final String FOO_NAME = "foo";
private static final String FOO_VALUE = "/subsystem=logging";
private static final String FOOBAR_NAME = "foobar";
private static final String FOOBAR_VALUE = "/subsystem=logging/console-handler=CONSOLE";
private static CLIWrapper cli;
@Before
public void setup() throws Exception {
// explicitly define default consoleInput to set proper operationCandidatesProvider in CommandContextImpl
cli = new CLIWrapper(true, null, System.in);
assertTrue(cli.isConnected());
// set both variables
cli.sendLine("set " + FOO_NAME + "=" + FOO_VALUE);
cli.sendLine("set " + FOOBAR_NAME + "=" + FOOBAR_VALUE);
cli.sendLine("echo $" + FOO_NAME);
assertTrue(cli.readOutput().contains(FOO_VALUE));
cli.sendLine("echo $" + FOOBAR_NAME);
assertTrue(cli.readOutput().contains(FOOBAR_VALUE));
}
@After
public void cleanUp() throws CommandLineException {
cli.quit();
}
@Test
public void testDolloarSymbolCompletion() throws Exception {
// test $ symbol [standalone@localhost:9990 /] $
String command = "$";
List<String> candidates = fetchCandidates(command, command.length(), cli.getCommandContext());
assertNotNull(candidates);
assertEquals(Arrays.asList(FOO_NAME, FOOBAR_NAME), candidates);
}
@Test
public void testIncompleteFirstVariableCompletion() {
// test incomplete first variable name [standalone@localhost:9990 /] $f
String command = "$f";
List<String> candidates = fetchCandidates(command, command.length(), cli.getCommandContext());
assertNotNull(candidates);
assertEquals(Arrays.asList(FOO_NAME, FOOBAR_NAME), candidates);
}
@Test
public void testCompleteFirstVariableCompletion() {
// test complete first variable name [standalone@localhost:9990 /] $foo
String command = "$foo";
List<String> candidates = fetchCandidates(command, command.length(), cli.getCommandContext());
assertNotNull(candidates);
assertEquals(Arrays.asList("/", ":", FOOBAR_NAME), candidates);
}
@Test
public void testIncompleteSecondVariableCompletion() {
// test incomplete second variable name [standalone@localhost:9990 /] $foob
String command = "$foob";
List<String> candidates = fetchCandidates(command, command.length(), cli.getCommandContext());
assertNotNull(candidates);
assertEquals(Arrays.asList(FOOBAR_NAME), candidates);
}
@Test
public void testCompleteSecondVariableCompletion() {
// test complete second variable name [standalone@localhost:9990 /] $foobar
String command = "$" + FOOBAR_NAME;
List<String> candidates = fetchCandidates(command, command.length(), cli.getCommandContext());
assertNotNull(candidates);
assertEquals(Arrays.asList(":", "/"), candidates);
}
private List<String> fetchCandidates(String buffer, int cursor, CommandContext ctx) {
ArrayList<String> candidates = new ArrayList<String>();
ctx.getDefaultCommandCompleter().complete(ctx, buffer, cursor, candidates);
return candidates;
}
}