public inbox for mauve-patches@sourceware.org
 help / color / mirror / Atom feed
* SimpleDateFormat localization
@ 2005-02-02  0:58 Andrew John Hughes
  0 siblings, 0 replies; only message in thread
From: Andrew John Hughes @ 2005-02-02  0:58 UTC (permalink / raw)
  To: mauve-patches


[-- Attachment #1.1: Type: text/plain, Size: 954 bytes --]

I'm committing the attached patch to test that the java.text.SimpleDateFormat
class properly handles localized pattern characters at appopriate points.

Changelog:

2005-02-02  Andrew John Hughes  <gnu_andrew@member.fsf.org>

	* gnu/testlet/java/text/SimpleDateFormat/Localization.java:
	Check that the class properly translates to and from localized
	pattern strings, and that the constructor only handles
	non-localized patterns.

Thanks,
-- 
Andrew :-)

Please avoid sending me Microsoft Office (e.g. Word, PowerPoint) attachments.
See http://www.fsf.org/philosophy/no-word-attachments.html

No software patents in Europe -- http://nosoftwarepatents.com

"Value your freedom, or you will lose it, teaches history. 
`Don't bother us with politics' respond those who don't want to learn." 
-- Richard Stallman

"We've all been part of the biggest beta test the world has ever known --
Windows" 
-- Victor Wheatman, Gartner


[-- Attachment #1.2: dateformat-03.diff --]
[-- Type: text/plain, Size: 5253 bytes --]

Index: gnu/testlet/java/text/SimpleDateFormat/Localization.java
===================================================================
RCS file: gnu/testlet/java/text/SimpleDateFormat/Localization.java
diff -N gnu/testlet/java/text/SimpleDateFormat/Localization.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/text/SimpleDateFormat/Localization.java	2 Feb 2005 00:55:21 -0000
@@ -0,0 +1,143 @@
+// Tags: JDK1.2
+
+// Copyright (C) 2004 Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+// This file is part of Mauve.
+
+// Mauve is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// Mauve is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Mauve; see the file COPYING.  If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.  */
+
+package gnu.testlet.java.text.SimpleDateFormat;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+import java.util.Locale;
+import java.text.SimpleDateFormat;
+
+/**
+ * Check for correct cloning behaviour in the SimpleDateFormat
+ * class.
+ */
+public class Localization
+  implements Testlet
+{
+
+  /**
+   * Runs the test using the specified harness.
+   * 
+   * @param harness the test harness (<code>null</code> not allowed).
+   */
+  public void test(TestHarness harness)
+  {
+    SimpleDateFormat format = null;
+    String standard = "GyMdkHmsSEDFwWahKzYeugAZ";
+    String pattern = "EEE, d MMM yyyy HH:mm:ss Z";
+    harness.checkPoint("German locale, standard pattern characters " +
+		       "in pattern.");
+    try
+      {
+	format = new SimpleDateFormat(pattern, Locale.GERMAN);
+	harness.check(true);
+      }
+    catch (IllegalArgumentException e)
+      {
+	harness.debug(e);
+	harness.check(false);
+      }
+    String local = format.getDateFormatSymbols().getLocalPatternChars();
+    harness.check(format.toPattern(), pattern, "Non-localized pattern " +
+		  "comes back as is with toPattern().");
+    String localizedPattern = translateLocalizedPattern(pattern,
+							standard,
+							local);
+    harness.check(format.toLocalizedPattern(), localizedPattern,
+		  "Non-localized pattern comes back localized with " +
+		  "toLocalizedPattern().");
+    harness.checkPoint("German locale, German pattern characters in pattern.");
+    format = null;
+    try
+      {
+	format = new SimpleDateFormat(localizedPattern, Locale.GERMAN);
+	harness.check(false);
+      }
+    catch (IllegalArgumentException e)
+      {
+	harness.check(true);
+      }
+    try
+      {
+	format = new SimpleDateFormat(pattern, Locale.GERMAN);
+	format.applyLocalizedPattern(localizedPattern);
+	harness.check(true);
+      }
+    catch (IllegalArgumentException e)
+      {
+	harness.debug(e);
+	harness.check(false);
+      }
+    local = format.getDateFormatSymbols().getLocalPatternChars();
+    harness.check(format.toLocalizedPattern(), localizedPattern,
+		  "Localized pattern comes back as is with " +
+		  "toLocalizedPattern().");
+    harness.check(format.toPattern(), pattern,
+		  "Localized pattern comes back standardised with " +
+		  "toPattern().");
+  }
+
+  /* Taken from GNU Classpath's java.text.SimpleDateFormat */
+  // Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 Free Software
+  // Foundation, Inc.
+  /* This version has been altered to account for differing char lengths */
+
+  /**
+   * Translates either from or to a localized variant of the pattern
+   * string.  For example, in the German locale, 't' (for 'tag') is
+   * used instead of 'd' (for 'date').  This method translates
+   * a localized pattern (such as 'ttt') to a non-localized pattern
+   * (such as 'ddd'), or vice versa.  Non-localized patterns use
+   * a standard set of characters, which match those of the U.S. English
+   * locale.
+   *
+   * @param pattern the pattern to translate.
+   * @param oldChars the old set of characters (used in the pattern).
+   * @param newChars the new set of characters (which will be used in the
+   *                 pattern).
+   * @return a version of the pattern using the characters in
+   *         <code>newChars</code>.
+   */
+  private String translateLocalizedPattern(String pattern,
+					   String oldChars, String newChars)
+  {
+    int len = pattern.length();
+    StringBuffer buf = new StringBuffer(len);
+    boolean quoted = false;
+    for (int i = 0;  i < len;  i++)
+      {
+	char ch = pattern.charAt(i);
+	if (ch == '\'')
+	  quoted = ! quoted;
+	if (! quoted)
+	  {
+	    int j = oldChars.indexOf(ch);
+	    if ((j >= 0) && j < newChars.length()) 
+	      ch = newChars.charAt(j);
+	  }
+	buf.append(ch);
+      }
+    return buf.toString();
+  }
+
+}

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-02-02  0:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-02-02  0:58 SimpleDateFormat localization Andrew John Hughes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).