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 29, 2018

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 2bd3b53 commit e51330e
Showing 3 changed files with 34 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -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 {
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.
@@ -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;
@@ -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()));
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.
@@ -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();

0 comments on commit e51330e

Please sign in to comment.