blob: 57bb4900f1890aecea47e52755f26ba92b121a61 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You 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.apache.geode.management.internal.cli;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
/**
* GfshParserJUnitTest - Includes tests to check the parsing and auto-completion capabilities of
* {@link GfshParser}
*/
public class GfshParserJUnitTest {
private String input;
private List<String> tokens;
@Before
public void before() {
tokens = new ArrayList<>();
}
@Test
public void testSplitUserInputDoubleQuotes() {
input = "query --query=\"select * from /region\"";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(3);
assertThat(tokens.get(0)).isEqualTo("query");
assertThat(tokens.get(1)).isEqualTo("--query");
assertThat(tokens.get(2)).isEqualTo("\"select * from /region\"");
}
@Test
public void testSplitUserInputSingleQuotes() {
input = "query --query='select * from /region'";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(3);
assertThat(tokens.get(0)).isEqualTo("query");
assertThat(tokens.get(1)).isEqualTo("--query");
assertThat(tokens.get(2)).isEqualTo("'select * from /region'");
}
@Test
public void testSplitUserInputWithMixedQuotes() {
input = "command option='test1 \"test \" test1'";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(3);
assertThat(tokens.get(0)).isEqualTo("command");
assertThat(tokens.get(1)).isEqualTo("option");
assertThat(tokens.get(2)).isEqualTo("'test1 \"test \" test1'");
}
@Test
public void testSplitUserInputWithJ() {
input =
"start server --name=server1 --J=\"-Dgemfire.start-dev-rest-api=true\" --J='-Dgemfire.http-service-port=8080' --J='-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=30000'";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(10);
assertThat(tokens.get(5)).isEqualTo("\"-Dgemfire.start-dev-rest-api=true\"");
assertThat(tokens.get(7)).isEqualTo("'-Dgemfire.http-service-port=8080'");
assertThat(tokens.get(9))
.isEqualTo("'-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=30000'");
}
@Test
public void splitWithWhiteSpacesExceptQuoted() {
input = "create region --cache-writer=\"my.abc{'k1' : 'v 1', 'k2' : 'v2'}\"";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(4);
assertThat(tokens.get(3)).isEqualTo("\"my.abc{'k1' : 'v 1', 'k2' : 'v2'}\"");
}
@Test
public void testSplitUserInputWithJNoQuotes() {
input =
"start server --name=server1 --J=-Dgemfire.start-dev-rest-api=true --J=-Dgemfire.http-service-port=8080";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(8);
assertThat(tokens.get(5)).isEqualTo("-Dgemfire.start-dev-rest-api=true");
assertThat(tokens.get(7)).isEqualTo("-Dgemfire.http-service-port=8080");
}
@Test
public void testSplitJsonValue() throws Exception {
input = "get --key=('id':'testKey0') --region=regionA";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(5);
assertThat(tokens.get(2)).isEqualTo("('id':'testKey0')");
}
@Test
public void testGetSimpleParserInput() throws Exception {
String[] strings = {"command", "--option1", "value1", "--option2", "'test value'"};
Arrays.stream(strings).forEach(tokens::add);
assertThat(GfshParser.getSimpleParserInputFromTokens(tokens))
.isEqualTo("command --option1 value1 --option2 'test value'");
}
@Test
public void testGetSimpleParserInputWithJ() throws Exception {
String[] strings =
{"command", "--J", "-Dkey=value", "--option", "'test value'", "--J", "-Dkey2=value2"};
Arrays.stream(strings).forEach(tokens::add);
assertThat(GfshParser.getSimpleParserInputFromTokens(tokens))
.isEqualTo("command --J \"-Dkey=value" + GfshParser.J_ARGUMENT_DELIMITER
+ "-Dkey2=value2\" --option 'test value'");
}
@Test
public void testGetSimpleParserInputWithJWithSingleQuotes() throws Exception {
String[] strings = {"command", "--J", "'-Dkey=value value'"};
Arrays.stream(strings).forEach(tokens::add);
assertThat(GfshParser.getSimpleParserInputFromTokens(tokens))
.isEqualTo("command --J \"-Dkey=value value\"");
}
@Test
public void testGetSimpleParserInputWithJWithDoubleQuotes() throws Exception {
String[] strings = {"command", "--J", "\"-Dkey=value value\""};
Arrays.stream(strings).forEach(tokens::add);
assertThat(GfshParser.getSimpleParserInputFromTokens(tokens))
.isEqualTo("command --J \"-Dkey=value value\"");
}
@Test
public void testGetSimpleParserInputWithJAtTheEnd() throws Exception {
String[] strings =
{"command", "--option", "'test value'", "--J", "-Dkey=value", "--J", "-Dkey2=value2"};
Arrays.stream(strings).forEach(tokens::add);
assertThat(GfshParser.getSimpleParserInputFromTokens(tokens))
.isEqualTo("command --option 'test value' --J \"-Dkey=value"
+ GfshParser.J_ARGUMENT_DELIMITER + "-Dkey2=value2\"");
}
@Test
public void spaceOrEmptyStringIsParsedCorrectly() {
input = "alter region --name=/Person --cache-writer='' --cache-loader=' '";
tokens = GfshParser.splitUserInput(input);
assertThat(tokens.size()).isEqualTo(8);
assertThat(tokens.get(7)).isEqualTo("' '");
assertThat(tokens.get(5)).isEqualTo("''");
}
}