1 /*
2  * Copyright 2002-2011 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package org.springframework.core.env;
18 
19 import static org.hamcrest.CoreMatchers.equalTo;
20 import static org.hamcrest.CoreMatchers.is;
21 import static org.hamcrest.CoreMatchers.nullValue;
22 import static org.junit.Assert.assertThat;
23 
24 import java.util.List;
25 
26 import org.junit.Test;
27 
28 /**
29  * Unit tests for {@link SimpleCommandLinePropertySource}.
30  *
31  * @author Chris Beams
32  * @since 3.1
33  */
34 public class SimpleCommandLinePropertySourceTests {
35 
36 	@Test
withDefaultName()37 	public void withDefaultName() {
38 		PropertySource<?> ps = new SimpleCommandLinePropertySource();
39 		assertThat(ps.getName(),
40 				equalTo(CommandLinePropertySource.COMMAND_LINE_PROPERTY_SOURCE_NAME));
41 	}
42 
43 	@Test
withCustomName()44 	public void withCustomName() {
45 		PropertySource<?> ps = new SimpleCommandLinePropertySource("ps1", new String[0]);
46 		assertThat(ps.getName(), equalTo("ps1"));
47 	}
48 
49 	@Test
withNoArgs()50 	public void withNoArgs() {
51 		PropertySource<?> ps = new SimpleCommandLinePropertySource();
52 		assertThat(ps.containsProperty("foo"), is(false));
53 		assertThat(ps.getProperty("foo"), nullValue());
54 	}
55 
56 	@Test
withOptionArgsOnly()57 	public void withOptionArgsOnly() {
58 		CommandLinePropertySource<?> ps =
59 			new SimpleCommandLinePropertySource("--o1=v1", "--o2");
60 		assertThat(ps.containsProperty("o1"), is(true));
61 		assertThat(ps.containsProperty("o2"), is(true));
62 		assertThat(ps.containsProperty("o3"), is(false));
63 		assertThat(ps.getProperty("o1"), equalTo("v1"));
64 		assertThat(ps.getProperty("o2"), equalTo(""));
65 		assertThat(ps.getProperty("o3"), nullValue());
66 	}
67 
68 	@Test
withDefaultNonOptionArgsNameAndNoNonOptionArgsPresent()69 	public void withDefaultNonOptionArgsNameAndNoNonOptionArgsPresent() {
70 		PropertySource<?> ps = new SimpleCommandLinePropertySource("--o1=v1", "--o2");
71 
72 		assertThat(ps.containsProperty("nonOptionArgs"), is(false));
73 		assertThat(ps.containsProperty("o1"), is(true));
74 		assertThat(ps.containsProperty("o2"), is(true));
75 
76 		assertThat(ps.containsProperty("nonOptionArgs"), is(false));
77 		assertThat(ps.getProperty("nonOptionArgs"), nullValue());
78 	}
79 
80 	@Test
withDefaultNonOptionArgsNameAndNonOptionArgsPresent()81 	public void withDefaultNonOptionArgsNameAndNonOptionArgsPresent() {
82 		CommandLinePropertySource<?> ps =
83 			new SimpleCommandLinePropertySource("--o1=v1", "noa1", "--o2", "noa2");
84 
85 		assertThat(ps.containsProperty("nonOptionArgs"), is(true));
86 		assertThat(ps.containsProperty("o1"), is(true));
87 		assertThat(ps.containsProperty("o2"), is(true));
88 
89 		String nonOptionArgs = ps.getProperty("nonOptionArgs");
90 		assertThat(nonOptionArgs, equalTo("noa1,noa2"));
91 	}
92 
93 	@Test
withCustomNonOptionArgsNameAndNoNonOptionArgsPresent()94 	public void withCustomNonOptionArgsNameAndNoNonOptionArgsPresent() {
95 		CommandLinePropertySource<?> ps =
96 			new SimpleCommandLinePropertySource("--o1=v1", "noa1", "--o2", "noa2");
97 		ps.setNonOptionArgsPropertyName("NOA");
98 
99 		assertThat(ps.containsProperty("nonOptionArgs"), is(false));
100 		assertThat(ps.containsProperty("NOA"), is(true));
101 		assertThat(ps.containsProperty("o1"), is(true));
102 		assertThat(ps.containsProperty("o2"), is(true));
103 		String nonOptionArgs = ps.getProperty("NOA");
104 		assertThat(nonOptionArgs, equalTo("noa1,noa2"));
105 	}
106 
107 	@Test
covertNonOptionArgsToStringArrayAndList()108 	public void covertNonOptionArgsToStringArrayAndList() {
109 		CommandLinePropertySource<?> ps =
110 			new SimpleCommandLinePropertySource("--o1=v1", "noa1", "--o2", "noa2");
111 		StandardEnvironment env = new StandardEnvironment();
112 		env.getPropertySources().addFirst(ps);
113 
114 		String nonOptionArgs = env.getProperty("nonOptionArgs");
115 		assertThat(nonOptionArgs, equalTo("noa1,noa2"));
116 
117 		String[] nonOptionArgsArray = env.getProperty("nonOptionArgs", String[].class);
118 		assertThat(nonOptionArgsArray[0], equalTo("noa1"));
119 		assertThat(nonOptionArgsArray[1], equalTo("noa2"));
120 
121 		@SuppressWarnings("unchecked")
122 		List<String> nonOptionArgsList = env.getProperty("nonOptionArgs", List.class);
123 		assertThat(nonOptionArgsList.get(0), equalTo("noa1"));
124 		assertThat(nonOptionArgsList.get(1), equalTo("noa2"));
125 	}
126 }
127