Skip to content

Commit

Permalink
Keep YAML entries that haven an empty array value
Browse files Browse the repository at this point in the history
Prior to this commit, a YAML entry that define an empty array value was
lost. This commit makes sure to flag it with an empty String, which
corresponds as an empty comma separated list of entries in the
properties format.

Issue: SPR-16769
  • Loading branch information
snicoll committed Apr 26, 2018
1 parent 2a0540c commit 3bf36b8
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -293,10 +293,14 @@ else if (value instanceof Collection) {
// Need a compound key
@SuppressWarnings("unchecked")
Collection<Object> collection = (Collection<Object>) value;
int count = 0;
for (Object object : collection) {
buildFlattenedMap(result,
Collections.singletonMap("[" + (count++) + "]", object), key);
if (collection.isEmpty()) {
result.put(key, "");
} else {
int count = 0;
for (Object object : collection) {
buildFlattenedMap(result, Collections.singletonMap(
"[" + (count++) + "]", object), key);
}
}
}
else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -19,6 +19,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;
Expand Down Expand Up @@ -116,6 +117,20 @@ public void testMapWithIntegerValue() throws Exception {
assertEquals(Integer.valueOf(3), sub.get("key1.key2"));
}

@Test
public void mapWithEmptyArrayValue() {
this.factory.setResources(new ByteArrayResource("a: alpha\ntest: []".getBytes()));
assertTrue(this.factory.getObject().containsKey("test"));
assertEquals(((List<?>)this.factory.getObject().get("test")).size(), 0);
}

@Test
public void mapWithEmptyValue() {
this.factory.setResources(new ByteArrayResource("a: alpha\ntest:".getBytes()));
assertTrue(this.factory.getObject().containsKey("test"));
assertNull(this.factory.getObject().get("test"));
}

@Test
public void testDuplicateKey() throws Exception {
this.factory.setResources(new ByteArrayResource("mymap:\n foo: bar\nmymap:\n bar: foo".getBytes()));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -207,6 +207,15 @@ public void testLoadNull() throws Exception {
assertThat(properties.getProperty("spam"), equalTo(""));
}

@Test
public void testLoadEmptyArrayValue() {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(new ByteArrayResource("a: alpha\ntest: []".getBytes()));
Properties properties = factory.getObject();
assertThat(properties.getProperty("a"), equalTo("alpha"));
assertThat(properties.getProperty("test"), equalTo(""));
}

@Test
public void testLoadArrayOfString() throws Exception {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
Expand Down

0 comments on commit 3bf36b8

Please sign in to comment.