Skip to content

Commit 8563235

Browse files
authored
Add a custom toString to DynamicMap (#126562)
This change prevents a delegate map from giving an inconsistent toString or an empty toString. Closes #70262
1 parent ac7eccc commit 8563235

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

docs/changelog/126562.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 126562
2+
summary: Add a custom `toString` to `DynamicMap`
3+
area: Infra/Scripting
4+
type: bug
5+
issues:
6+
- 70262

server/src/main/java/org/elasticsearch/script/DynamicMap.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,17 @@ public Set<Entry<String, Object>> entrySet() {
9898

9999
@Override
100100
public String toString() {
101-
return delegate.toString();
101+
StringBuilder sb = new StringBuilder("{");
102+
int count = 0;
103+
for (Map.Entry<String, Object> entry : entrySet()) {
104+
sb.append(entry.getKey());
105+
sb.append("=");
106+
sb.append(entry.getValue());
107+
if (++count < size()) {
108+
sb.append(", ");
109+
}
110+
}
111+
sb.append("}");
112+
return sb.toString();
102113
}
103114
}

server/src/test/java/org/elasticsearch/script/ScriptTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import java.util.HashMap;
3030
import java.util.Map;
3131

32+
import static org.hamcrest.Matchers.both;
33+
import static org.hamcrest.Matchers.containsString;
3234
import static org.hamcrest.Matchers.equalTo;
3335

3436
public class ScriptTests extends ESTestCase {
@@ -192,7 +194,6 @@ public void testDynamicMapToString() {
192194
map.put("long", 1L);
193195
map.put("string", "value");
194196
DynamicMap dm = new DynamicMap(map, Collections.emptyMap());
195-
assertTrue(dm.toString().contains("string=value"));
196-
assertTrue(dm.toString().contains("long=1"));
197+
assertThat(dm.toString(), both(containsString("long=1")).and(containsString("string=value")));
197198
}
198199
}

0 commit comments

Comments
 (0)