You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2022/09/09 11:17:54 UTC
[tomcat] branch 8.5.x updated: Further improve MessageFactory number formatting fix.
This is an automated email from the ASF dual-hosted git repository.
kkolinko pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push:
new f3d2931ea0 Further improve MessageFactory number formatting fix.
f3d2931ea0 is described below
commit f3d2931ea090027ed68d0c9d50856979e4480c7a
Author: Konstantin Kolinko <kk...@apache.org>
AuthorDate: Fri Sep 9 13:57:42 2022 +0300
Further improve MessageFactory number formatting fix.
Handle the case when message patterns does not print all arguments. E.g. when a translation has not been updated.
In that case the array returned by getFormatsByArgumentIndex() call will be shorter than args array.
---
java/org/apache/el/util/MessageFactory.java | 2 +-
test/org/apache/el/util/TestMessageFactory.java | 20 +++++++++++++++++++-
test/org/apache/el/util/TestStrings.properties | 4 +++-
webapps/docs/changelog.xml | 2 +-
4 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/java/org/apache/el/util/MessageFactory.java b/java/org/apache/el/util/MessageFactory.java
index de20222e03..b51fb545d1 100644
--- a/java/org/apache/el/util/MessageFactory.java
+++ b/java/org/apache/el/util/MessageFactory.java
@@ -68,7 +68,7 @@ public final class MessageFactory {
if (formats == null) {
formats = mf.getFormatsByArgumentIndex();
}
- if (!(formats[i] instanceof NumberFormat)) {
+ if (i < formats.length && !(formats[i] instanceof NumberFormat)) {
args[i] = args[i].toString();
}
}
diff --git a/test/org/apache/el/util/TestMessageFactory.java b/test/org/apache/el/util/TestMessageFactory.java
index 106a444404..297ddeac1b 100644
--- a/test/org/apache/el/util/TestMessageFactory.java
+++ b/test/org/apache/el/util/TestMessageFactory.java
@@ -29,7 +29,10 @@ public class TestMessageFactory {
@Test
public void testFormatNone() {
String input = "1E+2";
- String result = messageFactory.getInternal("messageFactory.formatNone", new BigDecimal(input));
+ // Trailing '0" is an extra Number argument, not printed by the
+ // message pattern. It reflects the case when a translation has not
+ // been updated with new arguments.
+ String result = messageFactory.getInternal("messageFactory.formatNone", new BigDecimal(input), 0 /*ignored*/);
// Should be unchanged
Assert.assertEquals(input, result);
}
@@ -41,4 +44,19 @@ public class TestMessageFactory {
// Should be formatted as an integer
Assert.assertEquals("100", result);
}
+
+ @Test
+ public void testFormatChoice() {
+ String input = "1E+2";
+ String result = messageFactory.getInternal("messageFactory.formatChoice", new BigDecimal(input), 0 /*ignored*/);
+ // Should be formatted as an integer
+ Assert.assertEquals("100 is enough", result);
+ }
+
+ @Test
+ public void testFormatNoArguments() {
+ String input = "1E+2";
+ String result = messageFactory.getInternal("messageFactory.formatNoArguments", new BigDecimal(input), 0 /*ignored*/);
+ Assert.assertEquals("A message", result);
+ }
}
diff --git a/test/org/apache/el/util/TestStrings.properties b/test/org/apache/el/util/TestStrings.properties
index c9f719d1a2..c9e7e9544c 100644
--- a/test/org/apache/el/util/TestStrings.properties
+++ b/test/org/apache/el/util/TestStrings.properties
@@ -14,4 +14,6 @@
# limitations under the License.
messageFactory.formatNone={0}
-messageFactory.formatNumeric={0,number}
\ No newline at end of file
+messageFactory.formatNumeric={0,number}
+messageFactory.formatChoice={0,choice,0#{0,number} is too few|99#{0,number} is enough|100<{0,number} is too many}
+messageFactory.formatNoArguments=A message
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 74e8e09eb6..04f9d6f844 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -198,7 +198,7 @@
</fix>
<fix>
Improve handling of EL error messages so instances of Number are not
- formatted in unexpected ways. (markt)
+ formatted in unexpected ways. (markt/kkolinko)
</fix>
<fix>
Switch to using ELException rather than IllegalArgumentException when a
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org