Skip to content

Commit 0868a47

Browse files
authored
Merge pull request #10 from Nordstrom/pr/add-parameters-support
Add new Params class, migrated from JUnit Foundation
2 parents 20d963f + 923b39e commit 0868a47

File tree

2 files changed

+180
-0
lines changed

2 files changed

+180
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package com.nordstrom.common.params;
2+
3+
import java.util.Collections;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
import java.util.Optional;
7+
8+
/**
9+
* This interface enables implementers to provide methods to support for concisely-defined parameters.
10+
*/
11+
public interface Params {
12+
13+
/**
14+
* Get the defined parameters.
15+
*
16+
* @return optional map of named parameters
17+
*/
18+
default Optional<Map<String, Object>> getParameters() {
19+
return Optional.empty();
20+
}
21+
22+
/**
23+
* Assemble a map of parameters.
24+
*
25+
* @param params array of {@link Param} objects; may be {@code null} or empty
26+
* @return optional map of parameters (may be empty)
27+
*/
28+
public static Optional<Map<String, Object>> mapOf(Param... params) {
29+
if ((params == null) || (params.length == 0)) {
30+
return Optional.empty();
31+
}
32+
Map<String, Object> paramMap = new HashMap<>();
33+
for (Param param : params) {
34+
paramMap.put(param.key, param.val);
35+
}
36+
return Optional.of(Collections.unmodifiableMap(paramMap));
37+
}
38+
39+
/**
40+
* Create a parameter object for the specified key/value pair.
41+
*
42+
* @param key parameter key (name)
43+
* @param val parameter value
44+
* @return parameter object
45+
*/
46+
public static Param param(String key, Object val) {
47+
return new Param(key, val);
48+
}
49+
50+
/**
51+
* This class defines a parameter object.
52+
*/
53+
static class Param {
54+
55+
private final String key;
56+
private final Object val;
57+
58+
/**
59+
* Constructor for parameter object.
60+
*
61+
* @param key parameter key
62+
* @param val parameter value
63+
*/
64+
public Param(String key, Object val) {
65+
if ((key == null) || key.isEmpty()) {
66+
throw new IllegalArgumentException("[key] must be a non-empty string");
67+
}
68+
this.key = key;
69+
this.val = val;
70+
}
71+
72+
/**
73+
* Get key of this parameter.
74+
*
75+
* @return parameter key
76+
*/
77+
public String getKey() {
78+
return key;
79+
}
80+
81+
/**
82+
* Get value of this parameter.
83+
*
84+
* @return parameter value
85+
*/
86+
public Object getVal() {
87+
return val;
88+
}
89+
}
90+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package com.nordstrom.common.params;
2+
3+
import static com.nordstrom.common.params.Params.param;
4+
import static org.testng.Assert.assertEquals;
5+
import static org.testng.Assert.assertFalse;
6+
import static org.testng.Assert.assertTrue;
7+
8+
import java.util.Map;
9+
import java.util.Optional;
10+
11+
import org.testng.annotations.Test;
12+
13+
public class ParamTest implements Params {
14+
15+
@Test
16+
public void testDefault() {
17+
assertFalse(Params.super.getParameters().isPresent());
18+
}
19+
20+
@Test
21+
public void testParam() {
22+
Param param = param("boolean", true);
23+
assertEquals(param.getKey(), "boolean");
24+
verifyBoolean(param.getVal());
25+
26+
param = param("int", 1);
27+
assertEquals(param.getKey(), "int");
28+
verifyInt(param.getVal());
29+
30+
param = param("String", "one");
31+
assertEquals(param.getKey(), "String");
32+
verifyString(param.getVal());
33+
34+
param = param("Map", Params.mapOf(param("key", "value")));
35+
assertEquals(param.getKey(), "Map");
36+
verifyMap(param.getVal());
37+
}
38+
39+
@Test
40+
public void testParams() {
41+
Optional<Map<String, Object>> optParameters = getParameters();
42+
assertTrue(optParameters.isPresent());
43+
Map<String, Object> parameters = optParameters.get();
44+
assertFalse(parameters.isEmpty());
45+
46+
assertTrue(parameters.containsKey("boolean"));
47+
verifyBoolean(parameters.get("boolean"));
48+
49+
assertTrue(parameters.containsKey("int"));
50+
verifyInt(parameters.get("int"));
51+
52+
assertTrue(parameters.containsKey("String"));
53+
verifyString(parameters.get("String"));
54+
55+
assertTrue(parameters.containsKey("Map"));
56+
verifyMap(parameters.get("Map"));
57+
}
58+
59+
private void verifyBoolean(Object value) {
60+
assertTrue(value instanceof Boolean);
61+
assertTrue((Boolean) value);
62+
}
63+
64+
private void verifyInt(Object value) {
65+
assertTrue(value instanceof Integer);
66+
assertEquals(value, Integer.valueOf(1));
67+
}
68+
69+
private void verifyString(Object value) {
70+
assertTrue(value instanceof String);
71+
assertEquals(value, "one");
72+
}
73+
74+
public void verifyMap(Object value) {
75+
assertTrue(value instanceof Optional);
76+
Optional<?> optObj = (Optional<?>) value;
77+
assertTrue(optObj.isPresent());
78+
Object obj = optObj.get();
79+
assertTrue(obj instanceof Map);
80+
Map<?, ?> map = (Map<?, ?>) obj;
81+
assertTrue(map.containsKey("key"));
82+
assertEquals(map.get("key"), "value");
83+
}
84+
85+
@Override
86+
public Optional<Map<String, Object>> getParameters() {
87+
return Params.mapOf(param("boolean", true), param("int", 1), param("String", "one"),
88+
param("Map", Params.mapOf(param("key", "value"))));
89+
}
90+
}

0 commit comments

Comments
 (0)