Skip to content

Commit 8add578

Browse files
sbabcocdiemol
andauthored
Add 'getArray' method for array values (#12703)
Co-authored-by: Diego Molina <[email protected]>
1 parent 1054775 commit 8add578

File tree

4 files changed

+112
-0
lines changed

4 files changed

+112
-0
lines changed

java/src/org/openqa/selenium/grid/config/Config.java

+18
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.openqa.selenium.grid.config;
1919

2020
import com.google.common.collect.ImmutableList;
21+
import java.util.ArrayList;
2122
import java.util.List;
2223
import java.util.Map;
2324
import java.util.Optional;
@@ -46,6 +47,23 @@ default Optional<Boolean> getBool(String section, String option) {
4647
return get(section, option).map(Boolean::parseBoolean);
4748
}
4849

50+
default Optional<List<List<String>>> getArray(String section, String option) {
51+
Optional<List<String>> flatConfigs = getAll(section, option);
52+
if (!flatConfigs.isPresent()) return Optional.empty();
53+
54+
List<String> configItem = new ArrayList<>();
55+
List<List<String>> configList = new ArrayList<>();
56+
for (String next : flatConfigs.get()) {
57+
if (Config.DELIMITER.equals(next)) {
58+
configList.add(configItem);
59+
configItem = new ArrayList<>();
60+
} else {
61+
configItem.add(next);
62+
}
63+
}
64+
return Optional.of(configList);
65+
}
66+
4967
default <X> X getClass(String section, String option, Class<X> typeOfClass, String defaultClazz) {
5068
String clazz = get(section, option).orElse(defaultClazz);
5169

java/test/org/openqa/selenium/grid/config/JsonConfigTest.java

+34
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,38 @@ void ensureCanReadListOfMaps() {
125125
Optional<List<String>> content = config.getAll("node", "driver-configuration");
126126
assertThat(content).isEqualTo(Optional.of(expected));
127127
}
128+
129+
@Test
130+
void ensureCanReadListOfLists() {
131+
String raw =
132+
String.join(
133+
"",
134+
"",
135+
"{",
136+
"`cheeses`: {",
137+
"`default`: `manchego`,",
138+
"`type`: [",
139+
"{",
140+
"`name`: `soft cheese`,",
141+
"`default`: `brie`",
142+
"},",
143+
"{",
144+
"`name`: `Medium-hard cheese`,",
145+
"`default`: `Emmental`",
146+
"}",
147+
"]",
148+
"}",
149+
"}")
150+
.replace("`", "\"");
151+
Config config = new JsonConfig(new StringReader(raw));
152+
153+
List<List<String>> expected =
154+
Arrays.asList(
155+
Arrays.asList("name=\"soft cheese\"", "default=\"brie\""),
156+
Arrays.asList("name=\"Medium-hard cheese\"", "default=\"Emmental\""));
157+
assertThat(config.getArray("cheeses", "type").orElse(Collections.emptyList()))
158+
.isEqualTo(expected);
159+
assertThat(config.getArray("cheeses", "type").orElse(Collections.emptyList()).subList(0, 1))
160+
.isEqualTo(expected.subList(0, 1));
161+
}
128162
}

java/test/org/openqa/selenium/grid/config/MapConfigTest.java

+35
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,39 @@ void ensureCanReadListOfMaps() {
132132
Optional<List<String>> content = config.getAll("node", "driver-configuration");
133133
assertThat(content).isEqualTo(Optional.of(expected));
134134
}
135+
136+
@Test
137+
void ensureCanReadListOfLists() {
138+
String json =
139+
String.join(
140+
"",
141+
"",
142+
"{",
143+
"`cheeses`: {",
144+
"`default`: `manchego`,",
145+
"`type`: [",
146+
"{",
147+
"`name`: `soft cheese`,",
148+
"`default`: `brie`",
149+
"},",
150+
"{",
151+
"`name`: `Medium-hard cheese`,",
152+
"`default`: `Emmental`",
153+
"}",
154+
"]",
155+
"}",
156+
"}")
157+
.replace("`", "\"");
158+
Map<String, Object> raw = new Json().toType(json, MAP_TYPE);
159+
Config config = new MapConfig(raw);
160+
161+
List<List<String>> expected =
162+
Arrays.asList(
163+
Arrays.asList("name=\"soft cheese\"", "default=\"brie\""),
164+
Arrays.asList("name=\"Medium-hard cheese\"", "default=\"Emmental\""));
165+
assertThat(config.getArray("cheeses", "type").orElse(Collections.emptyList()))
166+
.isEqualTo(expected);
167+
assertThat(config.getArray("cheeses", "type").orElse(Collections.emptyList()).subList(0, 1))
168+
.isEqualTo(expected.subList(0, 1));
169+
}
135170
}

java/test/org/openqa/selenium/grid/config/TomlConfigTest.java

+25
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,29 @@ void ensureCanReadListOfMaps() {
9898
Optional<List<String>> content = config.getAll("node", "driver-configuration");
9999
assertThat(content).isEqualTo(Optional.of(expected));
100100
}
101+
102+
@Test
103+
void ensureCanReadListOfLists() {
104+
String[] rawConfig =
105+
new String[] {
106+
"[cheeses]",
107+
"default = manchego",
108+
"[[cheeses.type]]",
109+
"name = \"soft cheese\"",
110+
"default = \"brie\"",
111+
"[[cheeses.type]]",
112+
"name = \"Medium-hard cheese\"",
113+
"default = \"Emmental\""
114+
};
115+
Config config = new TomlConfig(new StringReader(String.join("\n", rawConfig)));
116+
117+
List<List<String>> expected =
118+
Arrays.asList(
119+
Arrays.asList("default=\"brie\"", "name=\"soft cheese\""),
120+
Arrays.asList("default=\"Emmental\"", "name=\"Medium-hard cheese\""));
121+
assertThat(config.getArray("cheeses", "type").orElse(Collections.emptyList()))
122+
.isEqualTo(expected);
123+
assertThat(config.getArray("cheeses", "type").orElse(Collections.emptyList()).subList(0, 1))
124+
.isEqualTo(expected.subList(0, 1));
125+
}
101126
}

0 commit comments

Comments
 (0)