Expose hints for Maps
This commit fixes the json parser so that hints for maps is also made available. Closes gh-5152
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2015 the original author or authors.
|
||||
* Copyright 2012-2016 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.
|
||||
@@ -55,6 +55,23 @@ public class ConfigurationMetadataRepositoryJsonBuilderTests
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hintsOnMaps() throws IOException {
|
||||
InputStream map = getInputStreamFor("map");
|
||||
try {
|
||||
ConfigurationMetadataRepository repo = ConfigurationMetadataRepositoryJsonBuilder
|
||||
.create(map).build();
|
||||
validateMap(repo);
|
||||
assertThat(repo.getAllGroups()).hasSize(1);
|
||||
contains(repo.getAllProperties(), "spring.map.first", "spring.map.second",
|
||||
"spring.map.keys", "spring.map.values");
|
||||
assertThat(repo.getAllProperties()).hasSize(4);
|
||||
}
|
||||
finally {
|
||||
map.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void severalRepositoriesNoConflict() throws IOException {
|
||||
InputStream foo = getInputStreamFor("foo");
|
||||
@@ -182,10 +199,44 @@ public class ConfigurationMetadataRepositoryJsonBuilderTests
|
||||
validatePropertyHints(repo.getAllProperties().get("spring.bar.counter"), 0, 0);
|
||||
}
|
||||
|
||||
private void validateMap(ConfigurationMetadataRepository repo) {
|
||||
ConfigurationMetadataGroup group = repo.getAllGroups().get("spring.map");
|
||||
ConfigurationMetadataSource source = group.getSources().get("org.acme.Map");
|
||||
contains(source.getProperties(), "spring.map.first", "spring.map.second",
|
||||
"spring.map.keys", "spring.map.values");
|
||||
assertThat(source.getProperties()).hasSize(4);
|
||||
ConfigurationMetadataProperty first = repo.getAllProperties().get("spring.map.first");
|
||||
assertThat(first.getHints().getKeyHints()).hasSize(2);
|
||||
assertThat(first.getHints().getValueProviders()).hasSize(0);
|
||||
assertThat(first.getHints().getKeyHints().get(0).getValue()).isEqualTo("one");
|
||||
assertThat(first.getHints().getKeyHints().get(0).getDescription()).isEqualTo("First.");
|
||||
assertThat(first.getHints().getKeyHints().get(1).getValue()).isEqualTo("two");
|
||||
assertThat(first.getHints().getKeyHints().get(1).getDescription()).isEqualTo("Second.");
|
||||
ConfigurationMetadataProperty second = repo.getAllProperties().get("spring.map.second");
|
||||
assertThat(second.getHints().getValueHints()).hasSize(2);
|
||||
assertThat(second.getHints().getValueProviders()).hasSize(0);
|
||||
assertThat(second.getHints().getValueHints().get(0).getValue()).isEqualTo("42");
|
||||
assertThat(second.getHints().getValueHints().get(0).getDescription()).isEqualTo("Choose me.");
|
||||
assertThat(second.getHints().getValueHints().get(1).getValue()).isEqualTo("24");
|
||||
assertThat(second.getHints().getValueHints().get(1).getDescription()).isNull();
|
||||
ConfigurationMetadataProperty keys = repo.getAllProperties().get("spring.map.keys");
|
||||
assertThat(keys.getHints().getValueHints()).hasSize(0);
|
||||
assertThat(keys.getHints().getValueProviders()).hasSize(1);
|
||||
assertThat(keys.getHints().getValueProviders().get(0).getName()).isEqualTo("any");
|
||||
ConfigurationMetadataProperty values = repo.getAllProperties().get("spring.map.values");
|
||||
assertThat(values.getHints().getValueHints()).hasSize(0);
|
||||
assertThat(values.getHints().getValueProviders()).hasSize(1);
|
||||
assertThat(values.getHints().getValueProviders().get(0).getName()).isEqualTo("handle-as");
|
||||
assertThat(values.getHints().getValueProviders().get(0).getParameters()).hasSize(1);
|
||||
assertThat(values.getHints().getValueProviders().get(0).getParameters().get("target"))
|
||||
.isEqualTo("java.lang.Integer");
|
||||
}
|
||||
|
||||
|
||||
private void validatePropertyHints(ConfigurationMetadataProperty property,
|
||||
int valueHints, int valueProviders) {
|
||||
assertThat(property.getValueHints().size()).isEqualTo(valueHints);
|
||||
assertThat(property.getValueHints().size()).isEqualTo(valueProviders);
|
||||
assertThat(property.getHints().getValueHints().size()).isEqualTo(valueHints);
|
||||
assertThat(property.getHints().getValueProviders().size()).isEqualTo(valueProviders);
|
||||
}
|
||||
|
||||
private void contains(Map<String, ?> source, String... keys) {
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"groups": [
|
||||
{
|
||||
"name": "spring.map",
|
||||
"type": "org.acme.Map",
|
||||
"sourceType": "org.acme.config.MapApp",
|
||||
"sourceMethod": "map()",
|
||||
"description": "This is Map."
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "spring.map.first",
|
||||
"type": "java.util.Map<String,String>",
|
||||
"sourceType": "org.acme.Map"
|
||||
},
|
||||
{
|
||||
"name": "spring.map.second",
|
||||
"type": "java.util.Map<String,String>",
|
||||
"sourceType": "org.acme.Map"
|
||||
},
|
||||
{
|
||||
"name": "spring.map.keys",
|
||||
"type": "java.lang.String",
|
||||
"sourceType": "org.acme.Map"
|
||||
},
|
||||
{
|
||||
"name": "spring.map.values",
|
||||
"type": "java.lang.String",
|
||||
"sourceType": "org.acme.Map"
|
||||
}
|
||||
],
|
||||
"hints": [
|
||||
{
|
||||
"name": "spring.map.first.keys",
|
||||
"values": [
|
||||
{
|
||||
"value": "one",
|
||||
"description": "First."
|
||||
},
|
||||
{
|
||||
"value": "two",
|
||||
"description": "Second."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spring.map.second.values",
|
||||
"values": [
|
||||
{
|
||||
"value": "42",
|
||||
"description": "Choose me."
|
||||
},
|
||||
{
|
||||
"value": "24"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spring.map.keys",
|
||||
"providers": [
|
||||
{
|
||||
"name": "any"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "spring.map.values",
|
||||
"providers": [
|
||||
{
|
||||
"name": "handle-as",
|
||||
"parameters": {
|
||||
"target": "java.lang.Integer"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user