/* * 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.cli.completion.operation.test; import org.jboss.as.cli.CommandCompleter; import org.jboss.as.cli.CommandContext; import org.jboss.as.cli.CommandFormatException; import org.jboss.as.cli.CommandRegistry; import org.jboss.as.cli.completion.mock.MockCommandContext; import org.jboss.as.cli.handlers.DeployHandler; import org.jboss.as.cli.operation.ParsedOperationRequestHeader; import org.jboss.as.cli.operation.impl.DefaultCallbackHandler; import org.jboss.as.cli.operation.impl.ParsedRolloutPlanHeader; import org.jboss.as.cli.parsing.DefaultParsingState; import org.jboss.as.cli.parsing.ParserUtil; import org.jboss.as.cli.parsing.operation.HeaderListState; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.Collection; import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** * tests for WFCORE-1570 * * @author Bartosz Spyrko-Smietanko */ public class DeployCompletionTestCase { private DefaultParsingState headerParsingInitialState; final DefaultCallbackHandler headerParsingCallback; private MockCommandContext ctx; private CommandCompleter cmdCompleter; public DeployCompletionTestCase() throws Exception { ctx = new MockCommandContext() { @Override public boolean isDomainMode() { return true; } }; CommandRegistry cmdRegistry = new CommandRegistry(); cmdRegistry.registerHandler(new DeployHandler(ctx) { @Override public boolean isAvailable(CommandContext ctx) { return true; } }, "deploy"); cmdCompleter = new CommandCompleter(cmdRegistry); headerParsingInitialState = new DefaultParsingState("INITIAL_STATE"); { headerParsingInitialState.enterState('{', HeaderListState.INSTANCE); } headerParsingCallback = new DefaultCallbackHandler(); } @Before public void setUp() { headerParsingCallback.reset(); } @Test public void testCompleteNameArgument() throws Exception { ArrayList<String> candidates = complete("deploy --headers={rollout n"); assertThat("candidates should contain [name=]", candidates, hasItems("name=")); } @Test public void testDontCompleteDeprecatedIdArgument() throws Exception { ArrayList<String> candidates = complete("deploy --headers={rollout i"); assertTrue("candidates should be empty", candidates.isEmpty()); } @Test public void testDontListDeprecatedIdArgumentWhenNoArgumentsAreStarted() throws Exception { ArrayList<String> candidates = complete("deploy --headers={rollout "); assertThat("candidates should contain [name=] but not [id=]", candidates, allOf(hasItems("name="), not(hasItems("id=")))); } @Test public void testPopulateRolloutHeaderRefFromNameAttribute() throws Exception { final Collection<ParsedOperationRequestHeader> headers = parseHeaders("{rollout name=foo}"); assertHasRolloutHeaderWithRef(headers, "foo"); } @Test public void testPopulateRolloutHeaderRefFromDepracatedIdAttribute() throws Exception { final Collection<ParsedOperationRequestHeader> headers = parseHeaders("{rollout id=foo}"); assertHasRolloutHeaderWithRef(headers, "foo"); } private ArrayList<String> complete(String buffer) { ArrayList<String> candidates = new ArrayList<>(); cmdCompleter.complete(ctx, buffer, buffer.length(), candidates); return candidates; } private Collection<ParsedOperationRequestHeader> parseHeaders(String headersArgumentValue) throws CommandFormatException { ParserUtil.parse(headersArgumentValue, headerParsingCallback, headerParsingInitialState); return headerParsingCallback.getHeaders(); } private static void assertHasRolloutHeaderWithRef(Collection<ParsedOperationRequestHeader> headers, String planRef) { assertEquals("Should have one parsed header", 1, headers.size()); ParsedOperationRequestHeader rolloutHeader = headers.iterator().next(); assertEquals("The parsed header should be a rollout header", "rollout", rolloutHeader.getName()); assertEquals("The rollout header has wrong planRef", planRef, ((ParsedRolloutPlanHeader) rolloutHeader).getPlanRef()); } }