1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.commons.exec.environment;
21
22 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertFalse;
25 import static org.junit.jupiter.api.Assertions.assertNotNull;
26 import static org.junit.jupiter.api.Assertions.assertNull;
27
28 import java.io.IOException;
29 import java.util.Arrays;
30 import java.util.HashMap;
31 import java.util.Map;
32 import java.util.Map.Entry;
33
34 import org.apache.commons.exec.OS;
35 import org.apache.commons.lang3.StringUtils;
36 import org.junit.jupiter.api.Test;
37
38
39
40
41 class EnvironmentUtilsTest {
42
43
44
45
46
47
48
49 @Test
50 void testCaseInsensitiveVariableLookup() throws Exception {
51 final Map<String, String> procEnvironment = EnvironmentUtils.getProcEnvironment();
52
53 EnvironmentUtils.addVariableToEnvironment(procEnvironment, "foo=bAr");
54 assertEquals("bAr", procEnvironment.get("foo"));
55 }
56
57
58
59
60
61
62 @Test
63 void testGetProcEnvironment() throws IOException {
64 final Map<String, String> procEnvironment = EnvironmentUtils.getProcEnvironment();
65
66
67 assertFalse(procEnvironment.isEmpty(), "Expecting non-zero environment size");
68 final String[] envArgs = EnvironmentUtils.toStrings(procEnvironment);
69 for (int i = 0; i < envArgs.length; i++) {
70 assertNotNull(envArgs[i], "Entry " + i + " should not be null");
71 assertFalse(envArgs[i].isEmpty(), "Entry " + i + " should not be empty");
72
73 }
74 }
75
76
77
78
79
80
81
82 @Test
83 void testGetProcEnvironmentCaseInsensitiveLookup() throws IOException {
84
85 if (!OS.isFamilyWindows()) {
86 return;
87 }
88
89
90 final Map<String, String> procEnvironment = EnvironmentUtils.getProcEnvironment();
91 for (final Entry<String, String> entry : procEnvironment.entrySet()) {
92 final String key = entry.getKey();
93 final String value = entry.getValue();
94 assertEquals(value, procEnvironment.get(StringUtils.toRootLowerCase(key)));
95 assertEquals(value, procEnvironment.get(StringUtils.toRootUpperCase(key)));
96 }
97
98
99 EnvironmentUtils.addVariableToEnvironment(procEnvironment, "foo=bar");
100 assertEquals("bar", procEnvironment.get("FOO"));
101 assertEquals("bar", procEnvironment.get("Foo"));
102 assertEquals("bar", procEnvironment.get("foo"));
103 }
104
105
106
107
108 @Test
109 void testToStrings() {
110
111 assertNull(EnvironmentUtils.toStrings(null));
112
113 final Map<String, String> env = new HashMap<>();
114 assertArrayEquals(new String[0], EnvironmentUtils.toStrings(env));
115 env.put("foo2", "bar2");
116 env.put("foo", "bar");
117 final String[] envStrings = EnvironmentUtils.toStrings(env);
118 final String[] expected = { "foo2=bar2", "foo=bar" };
119
120 Arrays.sort(expected);
121 Arrays.sort(envStrings);
122 assertArrayEquals(expected, envStrings);
123 }
124
125
126
127
128 @Test
129 void testToStringWithNullKey() {
130 final Map<String, String> env = new HashMap<>();
131 env.put(null, "TheNullKey");
132 final String[] strings = EnvironmentUtils.toStrings(env);
133 assertEquals(1, strings.length);
134 assertEquals("=TheNullKey", strings[0]);
135 }
136
137
138
139
140 @Test
141 void testToStringWithNullValue() {
142 final Map<String, String> env = new HashMap<>();
143 env.put("key", null);
144 final String[] strings = EnvironmentUtils.toStrings(env);
145 assertEquals(1, strings.length);
146 assertEquals("key=", strings[0]);
147 }
148
149 }