package org.jenkinsci.plugins.parameterizedschedular; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import hudson.model.ParametersDefinitionProperty; import java.util.Arrays; import java.util.HashMap; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class ParameterParserTest { @Mock private ParametersDefinitionProperty mockParametersDefinitionProperty; @Test public void test_nullReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); assertEquals(new HashMap<String, String>(), testObject.parse(null)); } @Test public void test_EmptyStringReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); assertEquals(new HashMap<String, String>(), testObject.parse("")); assertEquals(new HashMap<String, String>(), testObject.parse(" ")); } @Test(expected = IllegalArgumentException.class) public void test_Malformed_NoEquals_StringReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); assertEquals(new HashMap<String, String>(), testObject.parse("namevalue")); } @Test(expected = IllegalArgumentException.class) public void test_Malformed_ExtraSemicolon_StringReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); HashMap<String, String> expected = new HashMap<String, String>(); expected.put("name", "value"); assertEquals(expected, testObject.parse("name=value;;")); } @Test public void test_OneParamStringReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); HashMap<String, String> expected = new HashMap<String, String>(); expected.put("name", "value"); assertEquals(expected, testObject.parse("name=value")); } @Test(expected = IllegalArgumentException.class) public void test_TrimsSpacesStringReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); HashMap<String, String> expected = new HashMap<String, String>(); expected.put("name", "value"); testObject.parse(" name = value; ;;"); } @Test public void test_TwoParamsStringReturns_emptyMap() { ParameterParser testObject = new ParameterParser(); HashMap<String, String> expected = new HashMap<String, String>(); expected.put("name", "value"); expected.put("name2", "value2"); assertEquals(expected, testObject.parse("name2=value2;name=value")); } @Test public void checkSanity_HappyPath() throws Exception { ParameterParser testObject = new ParameterParser(); Mockito.when(mockParametersDefinitionProperty.getParameterDefinitionNames()).thenReturn(Arrays.asList("name")); assertNull(testObject.checkSanity("* * * * *%name=value", mockParametersDefinitionProperty)); } @Test public void checkSanity_NotDefined_ProjectParameter() throws Exception { ParameterParser testObject = new ParameterParser(); List<String> list = Arrays.asList("not name"); Mockito.when(mockParametersDefinitionProperty.getParameterDefinitionNames()).thenReturn(list); assertEquals(Messages.ParameterizedTimerTrigger_UndefinedParameter("[name]", list.toString()), testObject.checkSanity("* * * * *%name=value", mockParametersDefinitionProperty)); } @Test public void checkSanity_TrailingSemiColon_IsTrimmed() throws Exception { ParameterParser testObject = new ParameterParser(); Mockito.when(mockParametersDefinitionProperty.getParameterDefinitionNames()).thenReturn( Arrays.asList("env", "freckled")); assertNull(testObject.checkSanity("* * * * *%env=eight;freckled=flase;", mockParametersDefinitionProperty)); } @Test public void checkSanity_MoreThanOnePercent() throws Exception { ParameterParser testObject = new ParameterParser(); assertEquals(Messages.ParameterizedTimerTrigger_MoreThanOnePercent(), testObject.checkSanity("* * * * *%name=value;%fred=barney", mockParametersDefinitionProperty)); } @Test public void checkSanity_NoParametersIsNoBigDeal() throws Exception { ParameterParser testObject = new ParameterParser(); assertNull(testObject.checkSanity("* * * * *%", mockParametersDefinitionProperty)); assertNull(testObject.checkSanity("* * * * *", mockParametersDefinitionProperty)); } @Test public void checkSanity_duplicateParamName() throws Exception { ParameterParser testObject = new ParameterParser(); testObject.checkSanity("* * * * *%name=value;name=value2", mockParametersDefinitionProperty); } @Test public void checkSanity_UnmatchedEquals() throws Exception { ParameterParser testObject = new ParameterParser(); testObject.checkSanity("* * * * *%name=value;name2=", mockParametersDefinitionProperty); } }