1616package com .netflix .archaius .config ;
1717
1818import java .util .Collections ;
19+ import java .util .HashMap ;
1920import java .util .Iterator ;
21+ import java .util .Map ;
2022import java .util .function .BiConsumer ;
2123
2224import org .junit .jupiter .api .Test ;
2729public class AbstractConfigTest {
2830
2931 private final AbstractConfig config = new AbstractConfig () {
32+ private final Map <String , Object > entries = new HashMap <>();
33+
34+ {
35+ entries .put ("foo" , "bar" );
36+ entries .put ("byte" , (byte ) 42 );
37+ entries .put ("int" , 42 );
38+ entries .put ("long" , 42L );
39+ entries .put ("float" , 42.0f );
40+ entries .put ("double" , 42.0d );
41+ }
42+
3043 @ Override
3144 public boolean containsKey (String key ) {
32- return "foo" . equals (key );
45+ return entries . containsKey (key );
3346 }
3447
3548 @ Override
@@ -39,35 +52,90 @@ public boolean isEmpty() {
3952
4053 @ Override
4154 public Iterator <String > getKeys () {
42- return Collections .singletonList ( "foo" ).iterator ();
55+ return Collections .unmodifiableSet ( entries . keySet () ).iterator ();
4356 }
4457
4558 @ Override
4659 public Object getRawProperty (String key ) {
47- if ("foo" .equals (key )) {
48- return "bar" ;
49- }
50- return null ;
60+ return entries .get (key );
5161 }
5262
5363 @ Override
5464 public void forEachProperty (BiConsumer <String , Object > consumer ) {
55- consumer . accept ( "foo" , "bar" );
65+ entries . forEach ( consumer );
5666 }
5767 };
5868
5969 @ Test
60- public void testGet () throws Exception {
70+ public void testGet () {
6171 assertEquals ("bar" , config .get (String .class , "foo" ));
6272 }
6373
6474 @ Test
6575 public void getExistingProperty () {
76+ //noinspection OptionalGetWithoutIsPresent
6677 assertEquals ("bar" , config .getProperty ("foo" ).get ());
6778 }
6879
6980 @ Test
7081 public void getNonExistentProperty () {
7182 assertFalse (config .getProperty ("non_existent" ).isPresent ());
7283 }
84+
85+ @ Test
86+ public void testGetRawNumerics () {
87+ // First, get each entry as its expected type and the corresponding wrapper.
88+ assertEquals (42 , config .get (int .class , "int" ));
89+ assertEquals (42 , config .get (Integer .class , "int" ));
90+ assertEquals (42L , config .get (long .class , "long" ));
91+ assertEquals (42L , config .get (Long .class , "long" ));
92+ assertEquals ((byte ) 42 , config .get (byte .class , "byte" ));
93+ assertEquals ((byte ) 42 , config .get (Byte .class , "byte" ));
94+ assertEquals (42.0f , config .get (float .class , "float" ));
95+ assertEquals (42.0f , config .get (Float .class , "float" ));
96+ assertEquals (42.0d , config .get (double .class , "double" ));
97+ assertEquals (42.0d , config .get (Double .class , "double" ));
98+
99+ // Then, get each entry as a string
100+ assertEquals ("42" , config .get (String .class , "int" ));
101+ assertEquals ("42" , config .get (String .class , "long" ));
102+ assertEquals ("42" , config .get (String .class , "byte" ));
103+ assertEquals ("42.0" , config .get (String .class , "float" ));
104+ assertEquals ("42.0" , config .get (String .class , "double" ));
105+
106+ // Then, narrowed types
107+ assertEquals ((byte ) 42 , config .get (byte .class , "int" ));
108+ assertEquals ((byte ) 42 , config .get (byte .class , "long" ));
109+ assertEquals ((byte ) 42 , config .get (byte .class , "float" ));
110+ assertEquals ((byte ) 42 , config .get (byte .class , "double" ));
111+ assertEquals (42.0f , config .get (double .class , "double" ));
112+
113+ // Then, widened
114+ assertEquals (42L , config .get (long .class , "int" ));
115+ assertEquals (42L , config .get (long .class , "byte" ));
116+ assertEquals (42L , config .get (long .class , "float" ));
117+ assertEquals (42L , config .get (long .class , "double" ));
118+ assertEquals (42.0d , config .get (double .class , "float" ));
119+
120+ // On floating point
121+ assertEquals (42.0f , config .get (float .class , "int" ));
122+ assertEquals (42.0f , config .get (float .class , "byte" ));
123+ assertEquals (42.0f , config .get (float .class , "long" ));
124+ assertEquals (42.0f , config .get (float .class , "double" ));
125+
126+ // As doubles
127+ assertEquals (42.0d , config .get (double .class , "int" ));
128+ assertEquals (42.0d , config .get (double .class , "byte" ));
129+ assertEquals (42.0d , config .get (double .class , "long" ));
130+ assertEquals (42.0d , config .get (double .class , "float" ));
131+
132+ // Narrowed types in wrapper classes
133+ assertEquals ((byte ) 42 , config .get (Byte .class , "int" ));
134+ assertEquals ((byte ) 42 , config .get (Byte .class , "long" ));
135+ assertEquals ((byte ) 42 , config .get (Byte .class , "float" ));
136+
137+ // Widened types in wrappers
138+ assertEquals (42L , config .get (Long .class , "int" ));
139+ assertEquals (42L , config .get (Long .class , "byte" ));
140+ }
73141}
0 commit comments