@Override public ParameterDefinition copyWithDefaultValue(ParameterValue defaultValue) { if (defaultValue instanceof StringParameterValue) { StringParameterValue value = (StringParameterValue) defaultValue; return new StringParameterDefinition(getName(), value.value, getDescription()); } else { return this; } }
@Override public StringParameterValue getDefaultParameterValue() { StringParameterValue value = new StringParameterValue(getName(), defaultValue, getDescription()); if (isTrim()) { value.doTrim(); } return value; }
@Override public ParameterValue createValue(StaplerRequest req, JSONObject jo) { StringParameterValue value = req.bindJSON(StringParameterValue.class, jo); if (isTrim() && value!=null) { value.doTrim(); } value.setDescription(getDescription()); return value; }
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "p"); p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("param", ""))); p.setDefinition(new CpsFlowDefinition("echo \"run with ${param}\"", true)); WorkflowRun b1 = story.j.assertBuildStatusSuccess(p.scheduleBuild2(0, new ParametersAction(new StringParameterValue("param", "some value")))); story.j.assertLogContains("run with some value", b1); // When we replay a parameterized build, we expect the original parameter values to be set. WorkflowRun b2 = (WorkflowRun) b1.getAction(ReplayAction.class).run("echo \"run again with ${param}\"", Collections.<String,String>emptyMap()).get(); story.j.assertLogContains("run again with some value", story.j.assertBuildStatusSuccess(b2)); } });
@Bug(4271) @Test public void parameterizedBuildsBranch() throws Exception { m.hg(repo, "init"); m.touchAndCommit(repo, "trunk"); m.hg(repo, "update", "null"); m.hg(repo, "branch", "b"); m.touchAndCommit(repo, "variant"); FreeStyleProject p = j.createFreeStyleProject(); p.setScm(new MercurialSCM(hgInstallation(), repo.getPath(), "${BRANCH}", null, null, null, false)); // SECURITY-170 - have to use ParametersDefinitionProperty p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("BRANCH", "b"))); String log = m.buildAndCheck(p, "variant", new ParametersAction( new StringParameterValue("BRANCH", "b"))); assertTrue(log, log.contains("--rev b")); assertFalse(log, log.contains("--rev ${BRANCH}")); m.touchAndCommit(repo, "further-variant"); // the following assertion commented out as a part of the fix to // HUDSON-6126 // assertTrue(pollSCMChanges(p)); m.buildAndCheck(p, "further-variant", new ParametersAction( new StringParameterValue("BRANCH", "b"))); }
@Issue("JENKINS-22568") @Test @Ignore("TODO use docker-fixtures for a reproducible test case") public void pollingWithDefaultParametersWithCurlyBraces() throws Exception { FreeStyleProject p = r.createFreeStyleProject(); String repo = "https://svn.jenkins-ci.org/"; String path = "trunk/hudson/test-projects/trivial-ant/"; p.setScm(new SubversionSCM("${REPO}" + path)); ParametersDefinitionProperty property = new ParametersDefinitionProperty(new StringParameterDefinition("REPO", repo)); p.addProperty(property); FreeStyleBuild b = p.scheduleBuild2(0, new Cause.UserIdCause(), new ParametersAction(new StringParameterValue("REPO", repo))).get(); r.assertBuildStatus(Result.SUCCESS,b); assertTrue(b.getWorkspace().child("build.xml").exists()); // as a baseline, this shouldn't detect any change TaskListener listener = r.createTaskListener(); PollingResult poll = p.poll(listener); assertFalse("Polling shouldn't have any changes.", poll.hasChanges()); }
@Override public StringParameterValue getDefaultParameterValue() { StringParameterValue v = new StringParameterValue(getName(), defaultValue, getDescription()); return v; }
@Issue("JENKINS-44621") @Test public void externalParamsNotRemoved() throws Exception { WorkflowRun b = getAndStartNonRepoBuild("simpleParameters"); j.assertBuildStatusSuccess(j.waitForCompletion(b)); WorkflowJob job = b.getParent(); ParametersDefinitionProperty paramProp = job.getProperty(ParametersDefinitionProperty.class); assertNotNull(paramProp); assertEquals(1, paramProp.getParameterDefinitions().size()); List<ParameterDefinition> newParams = new ArrayList<>(); newParams.addAll(paramProp.getParameterDefinitions()); newParams.add(new StringParameterDefinition("DO_NOT_DELETE", "something")); job.removeProperty(paramProp); job.addProperty(new ParametersDefinitionProperty(newParams)); job.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources("propsTriggersParamsRemoved"), true)); j.buildAndAssertSuccess(job); ParametersDefinitionProperty newProp = job.getProperty(ParametersDefinitionProperty.class); assertNotNull(newProp); assertEquals(1, newProp.getParameterDefinitions().size()); ParameterDefinition paramDef = newProp.getParameterDefinition("DO_NOT_DELETE"); assertNotNull(paramDef); } }
/** * Same as {@link #getRevision()} but with <em>default</em> values of parameters expanded. */ private String getRevisionExpanded(Job<?,?> project, EnvVars env) { ParametersDefinitionProperty params = project.getProperty(ParametersDefinitionProperty.class); if (params != null) { for (ParameterDefinition param : params.getParameterDefinitions()) { if (param instanceof StringParameterDefinition) { String dflt = ((StringParameterDefinition) param).getDefaultValue(); if (dflt != null) { env.put(param.getName(), dflt); } } } } return getRevision(env); }
this.build.getAction(hudson.model.ParametersAction.class); for (ParameterValue value : action.getParameters()) { map.put(value.getName(), value); StringParameterValue spv = (StringParameterValue) pv; modLst.add(new StringParameterDefinition(spv.getName(), spv.value));
assertNotNull(pdp); assertEquals(2, pdp.getParameterDefinitions().size()); BooleanParameterDefinition bpd = getParameterOfType(pdp.getParameterDefinitions(), BooleanParameterDefinition.class); assertNotNull(bpd); assertEquals("flag", bpd.getName()); assertTrue(bpd.isDefaultValue()); StringParameterDefinition spd = getParameterOfType(pdp.getParameterDefinitions(), StringParameterDefinition.class); assertNotNull(spd); assertEquals("SOME_STRING", spd.getName());
FreeStyleProject project = r.createFreeStyleProject(); ParametersDefinitionProperty pdb = new ParametersDefinitionProperty( new StringParameterDefinition(key, val, "") ); project.addProperty(pdb); FreeStyleBuild b = r.assertBuildStatusSuccess(project.scheduleBuild2(0)); b = r.assertBuildStatusSuccess(project.scheduleBuild2(0));
public String getDefaultValue() { return super.getDefaultValue(); }
@Issue("JENKINS-26093") @Test public void generateSnippetForBuildTrigger() throws Exception { MockFolder d1 = r.createFolder("d1"); FreeStyleProject ds = d1.createProject(FreeStyleProject.class, "ds"); MockFolder d2 = r.createFolder("d2"); // Really this would be a WorkflowJob, but we cannot depend on that here, and it should not matter since we are just looking for Job: FreeStyleProject us = d2.createProject(FreeStyleProject.class, "us"); ds.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("key", ""), new BooleanParameterDefinition("flag", false, ""))); String snippet; if (StringParameterDefinition.DescriptorImpl.class.isAnnotationPresent(Symbol.class)) { snippet = "build job: '../d1/ds', parameters: [string(name: 'key', value: 'stuff'), booleanParam(name: 'flag', value: true)]"; } else { // TODO 2.x delete snippet = "build job: '../d1/ds', parameters: [[$class: 'StringParameterValue', name: 'key', value: 'stuff'], [$class: 'BooleanParameterValue', name: 'flag', value: true]]"; } st.assertGenerateSnippet("{'stapler-class':'" + BuildTriggerStep.class.getName() + "', 'job':'../d1/ds', 'parameter': [{'name':'key', 'value':'stuff'}, {'name':'flag', 'value':true}]}", snippet, us.getAbsoluteUrl() + "configure"); }
@Issue("JENKINS-29739") @Test public void generateSnippetForBuildTriggerSingle() throws Exception { FreeStyleProject ds = r.jenkins.createProject(FreeStyleProject.class, "ds1"); FreeStyleProject us = r.jenkins.createProject(FreeStyleProject.class, "us1"); ds.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("key", ""))); String snippet; if (StringParameterDefinition.DescriptorImpl.class.isAnnotationPresent(Symbol.class)) { snippet = "build job: 'ds1', parameters: [string(name: 'key', value: 'stuff')]"; } else { // TODO 2.x delete snippet = "build job: 'ds1', parameters: [[$class: 'StringParameterValue', name: 'key', value: 'stuff']]"; } st.assertGenerateSnippet("{'stapler-class':'" + BuildTriggerStep.class.getName() + "', 'job':'ds1', 'parameter': {'name':'key', 'value':'stuff'}}", snippet, us.getAbsoluteUrl() + "configure"); }
@Override public ParameterValue createValue(StaplerRequest req, JSONObject jo) { StringParameterValue value = req.bindJSON(StringParameterValue.class, jo); value.setDescription(getDescription()); return value; }
@Test public void parametersSingle() throws Exception { List<ParameterDefinition> p = new ArrayList<>(); p.add(new StringParameterDefinition("SOME_STRING", "some default", "Hey, a description with a ' in it.")); ParametersDirective params = new ParametersDirective(p); assertGenerateDirective(params, "parameters {\n" + " string defaultValue: 'some default', description: 'Hey, a description with a \\' in it.', name: 'SOME_STRING'" + trimParamOrEmpty() + "\n" + "}"); }
public ParameterValue createValue(String value) { try { StringParameterValue spv = this.produceDerivedValue(value); if (spv == null) { return super.createValue(value); } else { return spv; } } catch (IllegalArgumentException ex) { log.warning("Could not create inheritable string parameter: " + ex.toString()); return super.createValue(value); } }
@Issue("JENKINS-42367") @Test public void nullValue() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("echo(/TEXT=${params.TEXT}/)",true)); p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("TEXT", ""))); r.assertLogContains("TEXT=null", r.assertBuildStatusSuccess(p.scheduleBuild2(0, new ParametersAction(new StringParameterValue("TEXT", /* not possible via UI, but to simulate other ParameterValue impls */null))))); }
@Bug(9686) @Test public void pollingExpandsParameterDefaults() throws Exception { m.hg(repo, "init"); m.touchAndCommit(repo, "trunk"); m.hg(repo, "update", "null"); m.hg(repo, "branch", "b"); m.touchAndCommit(repo, "variant"); FreeStyleProject p = j.createFreeStyleProject(); p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("branch", "default"))); p.setScm(new MercurialSCM(hgInstallation(), repo.getPath(), "${branch}", null, null, null, false)); String log = m.buildAndCheck(p, "trunk", new ParametersAction(new StringParameterValue("branch", "default"))); assertTrue(log, log.contains("--rev default")); /* TODO cannot behave sensibly when workspace contains a branch build because the *current* trunk revision will be seen as new; would need to compare to all historical build records, or keep a separate workspace per branch: log = m.buildAndCheck(p, "variant", new ParametersAction(new StringParameterValue("branch", "b"))); assertTrue(log, log.contains("--rev b")); */ assertEquals(PollingResult.Change.NONE, m.pollSCMChanges(p).change); m.hg(repo, "update", "default"); m.touchAndCommit(repo, "trunk2"); assertEquals(PollingResult.Change.SIGNIFICANT, m.pollSCMChanges(p).change); }