Committed by
Gerrit Code Review
ONOS-3320: PropertyPanelTest fails in non-English locale.
- Added formatter() instance method that can be overridden by unit test. Change-Id: I38ee045edee852c95e27bead46800fb5dad4cf88
Showing
2 changed files
with
45 additions
and
6 deletions
... | @@ -18,7 +18,7 @@ package org.onosproject.ui.topo; | ... | @@ -18,7 +18,7 @@ package org.onosproject.ui.topo; |
18 | 18 | ||
19 | import com.google.common.collect.Sets; | 19 | import com.google.common.collect.Sets; |
20 | 20 | ||
21 | -import java.text.DecimalFormat; | 21 | +import java.text.NumberFormat; |
22 | import java.util.ArrayList; | 22 | import java.util.ArrayList; |
23 | import java.util.List; | 23 | import java.util.List; |
24 | import java.util.Set; | 24 | import java.util.Set; |
... | @@ -28,7 +28,7 @@ import java.util.Set; | ... | @@ -28,7 +28,7 @@ import java.util.Set; |
28 | */ | 28 | */ |
29 | public class PropertyPanel { | 29 | public class PropertyPanel { |
30 | 30 | ||
31 | - private static final DecimalFormat DF0 = new DecimalFormat("#,###"); | 31 | + private static final NumberFormat NF = NumberFormat.getInstance(); |
32 | 32 | ||
33 | private String title; | 33 | private String title; |
34 | private String typeId; | 34 | private String typeId; |
... | @@ -49,6 +49,24 @@ public class PropertyPanel { | ... | @@ -49,6 +49,24 @@ public class PropertyPanel { |
49 | } | 49 | } |
50 | 50 | ||
51 | /** | 51 | /** |
52 | + * Returns a number formatter to use for formatting integer and long | ||
53 | + * property values. | ||
54 | + * <p> | ||
55 | + * This default implementation uses a formatter for the default | ||
56 | + * locale. For example: | ||
57 | + * <pre> | ||
58 | + * Locale.ENGLISH : 1000 -> "1,000" | ||
59 | + * Locale.FRENCH : 1000 -> "1 000" | ||
60 | + * Locale.GERMAN : 1000 -> "1.000" | ||
61 | + * </pre> | ||
62 | + * | ||
63 | + * @return the number formatter | ||
64 | + */ | ||
65 | + protected NumberFormat formatter() { | ||
66 | + return NF; | ||
67 | + } | ||
68 | + | ||
69 | + /** | ||
52 | * Adds an ID field to the panel data, to be included in | 70 | * Adds an ID field to the panel data, to be included in |
53 | * the returned JSON data to the client. | 71 | * the returned JSON data to the client. |
54 | * | 72 | * |
... | @@ -80,7 +98,7 @@ public class PropertyPanel { | ... | @@ -80,7 +98,7 @@ public class PropertyPanel { |
80 | * @return self, for chaining | 98 | * @return self, for chaining |
81 | */ | 99 | */ |
82 | public PropertyPanel addProp(String key, int value) { | 100 | public PropertyPanel addProp(String key, int value) { |
83 | - properties.add(new Prop(key, DF0.format(value))); | 101 | + properties.add(new Prop(key, formatter().format(value))); |
84 | return this; | 102 | return this; |
85 | } | 103 | } |
86 | 104 | ||
... | @@ -92,7 +110,7 @@ public class PropertyPanel { | ... | @@ -92,7 +110,7 @@ public class PropertyPanel { |
92 | * @return self, for chaining | 110 | * @return self, for chaining |
93 | */ | 111 | */ |
94 | public PropertyPanel addProp(String key, long value) { | 112 | public PropertyPanel addProp(String key, long value) { |
95 | - properties.add(new Prop(key, DF0.format(value))); | 113 | + properties.add(new Prop(key, formatter().format(value))); |
96 | return this; | 114 | return this; |
97 | } | 115 | } |
98 | 116 | ... | ... |
... | @@ -20,17 +20,38 @@ import org.junit.BeforeClass; | ... | @@ -20,17 +20,38 @@ import org.junit.BeforeClass; |
20 | import org.junit.Test; | 20 | import org.junit.Test; |
21 | import org.onosproject.ui.topo.PropertyPanel.Prop; | 21 | import org.onosproject.ui.topo.PropertyPanel.Prop; |
22 | 22 | ||
23 | +import java.text.NumberFormat; | ||
23 | import java.util.HashMap; | 24 | import java.util.HashMap; |
24 | import java.util.Iterator; | 25 | import java.util.Iterator; |
26 | +import java.util.Locale; | ||
25 | import java.util.Map; | 27 | import java.util.Map; |
26 | 28 | ||
27 | -import static org.junit.Assert.*; | 29 | +import static org.junit.Assert.assertEquals; |
30 | +import static org.junit.Assert.assertFalse; | ||
31 | +import static org.junit.Assert.assertNull; | ||
32 | +import static org.junit.Assert.fail; | ||
28 | 33 | ||
29 | /** | 34 | /** |
30 | * Unit tests for {@link PropertyPanel}. | 35 | * Unit tests for {@link PropertyPanel}. |
31 | */ | 36 | */ |
32 | public class PropertyPanelTest { | 37 | public class PropertyPanelTest { |
33 | 38 | ||
39 | + // Modified property panel subclass to use ENGLISH locale formatter so | ||
40 | + // we know formatted numbers will use comma for the thousand separator. | ||
41 | + private static final class EnglishPropertyPanel extends PropertyPanel { | ||
42 | + private static final NumberFormat ENGLISH_FORMATTER = | ||
43 | + NumberFormat.getInstance(Locale.ENGLISH); | ||
44 | + | ||
45 | + public EnglishPropertyPanel(String title, String typeId) { | ||
46 | + super(title, typeId); | ||
47 | + } | ||
48 | + | ||
49 | + @Override | ||
50 | + protected NumberFormat formatter() { | ||
51 | + return ENGLISH_FORMATTER; | ||
52 | + } | ||
53 | + } | ||
54 | + | ||
34 | private static final String TITLE_ORIG = "Original Title"; | 55 | private static final String TITLE_ORIG = "Original Title"; |
35 | private static final String TYPE_ORIG = "Original type ID"; | 56 | private static final String TYPE_ORIG = "Original type ID"; |
36 | private static final String TITLE_NEW = "New Title"; | 57 | private static final String TITLE_NEW = "New Title"; |
... | @@ -76,7 +97,7 @@ public class PropertyPanelTest { | ... | @@ -76,7 +97,7 @@ public class PropertyPanelTest { |
76 | 97 | ||
77 | @Test | 98 | @Test |
78 | public void basic() { | 99 | public void basic() { |
79 | - pp = new PropertyPanel(TITLE_ORIG, TYPE_ORIG); | 100 | + pp = new EnglishPropertyPanel(TITLE_ORIG, TYPE_ORIG); |
80 | assertEquals("wrong title", TITLE_ORIG, pp.title()); | 101 | assertEquals("wrong title", TITLE_ORIG, pp.title()); |
81 | assertEquals("wrong type", TYPE_ORIG, pp.typeId()); | 102 | assertEquals("wrong type", TYPE_ORIG, pp.typeId()); |
82 | assertNull("id?", pp.id()); | 103 | assertNull("id?", pp.id()); | ... | ... |
-
Please register or login to post a comment