/*******************************************************************************
* Copyright (c) 2017 Synopsys, Inc
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Synopsys, Inc - initial implementation and documentation
*******************************************************************************/
package jenkins.plugins.coverity;
import hudson.EnvVars;
import org.junit.Before;
import org.junit.Test;
import java.util.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
public class CoverityUtilsTest {
private HashMap<String, String> envMap;
private EnvVars environment;
private static final String bigEnvVar =
"_ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"abcdefghijklmnopqrstuvwxyz" +
"12345678990";
@Before
public void setUp() {
this.envMap = new HashMap<String, String>();
envMap.put("ABC", "123");
envMap.put("XYZ", "456");
envMap.put("AtoZ", "$ABC$XYZ");
envMap.put("VAR1", "$VAR2");
envMap.put("VAR2", "$VAR3");
envMap.put("VAR3", "$AtoZ");
envMap.put("SPACE_VAR1", "a b");
envMap.put(bigEnvVar, "78910");
envMap.put("WRONGVAR1", "$WRONGVAR2");
envMap.put("WRONGVAR2", "$WRONGVAR1");
envMap.put("SINGLE_QUOTE_VAR1", "\'a b\'");
envMap.put("SINGLE_QUOTE_VAR2", "\'a \" b\' \"$ABC\"");
envMap.put("DOUBLE_QUOTE_VAR1", "\"a b\"");
envMap.put("DOUBLE_QUOTE_VAR2", "\"$SPACE_VAR1\"");
environment = new EnvVars(envMap);
}
private void assertExpand(String input, List<String> expectedResult, EnvVars environment){
List<String> output = new ArrayList<String>();
try {
output.addAll(CoverityUtils.expand(input, environment));
} catch(ParseException e){
fail();
}
assertThat(output, is(expectedResult));
}
private void assertExpandFails(String input){
try{
CoverityUtils.expand(input, environment);
fail();
} catch(ParseException e) {
}
}
@Test
public void expandSuccessTest(){
//Expands a single environment varaible.
assertExpand("$ABC", Arrays.asList("123"), environment);
assertExpand("$" + bigEnvVar, Arrays.asList("78910"), environment);
//Expands concatenated environemnt varaibles.
assertExpand("$ABC$XYZ", Arrays.asList("123456"), environment);
assertExpand("${ABC}${XYZ}", Arrays.asList("123456"), environment);
assertExpand("$ABC-$XYZ", Arrays.asList("123-456"), environment);
//Expands environment variables using recursion.
assertExpand("$VAR1", Arrays.asList("123456"), environment);
assertExpand("echo $VAR1", Arrays.asList("echo", "123456"), environment);
assertExpand("\"echo $VAR1\"", Arrays.asList("echo 123456"), environment);
//Expands environment variables containing spaces
assertExpand("$SPACE_VAR1", Arrays.asList("a", "b"), environment);
//Expands environment variables with double quotes
assertExpand("\"$SPACE_VAR1\"", Arrays.asList("a b"), environment);
assertExpand("\"$DOUBLE_QUOTE_VAR1\"", Arrays.asList("a", "b"), environment);
assertExpand("$DOUBLE_QUOTE_VAR1", Arrays.asList("a b"), environment);
assertExpand("$DOUBLE_QUOTE_VAR2", Arrays.asList("a b"), environment);
assertExpand("\"\"$ABC\"\"", Arrays.asList("123"), environment);
//Expands environment variables with single quotes
assertExpand("\'$ABC\'", Arrays.asList("$ABC"), environment);
assertExpand("\'$DOUBLE_QUOTE_VAR1\'", Arrays.asList("$DOUBLE_QUOTE_VAR1"), environment);
assertExpand("$SINGLE_QUOTE_VAR1", Arrays.asList("a b"), environment);
assertExpand("$SINGLE_QUOTE_VAR2", Arrays.asList("a \" b", "123"), environment);
}
@Test
public void expandFailureTest(){
// If environment variables contains recursive definitions an exception is thrown.
assertExpandFails("$WRONGVAR1");
}
private void assertprepareCmds(List<String> cmdsInput, String[] envVarsArray, boolean useAdvancedParser, List<String> expectedResult){
List<String> output = CoverityUtils.prepareCmds(cmdsInput, envVarsArray, useAdvancedParser);
assertThat(output, is(expectedResult));
}
@Test
public void prepareCmdsSuccessTest(){
assertprepareCmds(Arrays.asList("$key"), new String[]{"key=value"}, true, Arrays.asList("value"));
assertprepareCmds(Arrays.asList("$key"), new String[]{"key=value=with=equals"}, true, Arrays.asList("value=with=equals"));
assertprepareCmds(Arrays.asList("$key"), new String[]{"key="}, true, new ArrayList<String>());
assertprepareCmds(Arrays.asList("$key"), new String[]{"=key=value"}, true, new ArrayList<String>());
}
}