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:
Stephane Nicoll
2016-02-17 15:25:03 +01:00
parent d5732afa67
commit b60e9e5cb9
6 changed files with 271 additions and 14 deletions

View File

@@ -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) {

View File

@@ -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"
}
}
]
}
]
}