You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2006/08/18 19:15:38 UTC

svn commit: r432645 - in /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness: ProcessStreamResult.java RunTest.java Sed.java

Author: kahatlen
Date: Fri Aug 18 10:15:37 2006
New Revision: 432645

URL: http://svn.apache.org/viewvc?rev=432645&view=rev
Log:
DERBY-244: with linux, depending on env setting $LANG and console
encoding, some i18n tests fail

  * Run the i18n tests run with -Dfile.encoding=UTF-8 and
    -Dconsole.encoding=UTF-8
  * Use UTF-8 encoding in ProcessStreamResult for the i18n tests
  * Make Sed.java read result files from i18n tests using UTF-8 encoding
  * Respect the derby.ui.codeset setting in i18n tests, and use UTF-8 if it
    is not specified.

Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/ProcessStreamResult.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/RunTest.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/Sed.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/ProcessStreamResult.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/ProcessStreamResult.java?rev=432645&r1=432644&r2=432645&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/ProcessStreamResult.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/ProcessStreamResult.java Fri Aug 18 10:15:37 2006
@@ -42,15 +42,20 @@
 	public ProcessStreamResult(InputStream in, BufferedOutputStream bos,
 		    String timemin) throws IOException, InterruptedException
 	{
-		this(in, bos, timemin, null);
+		this(in, bos, timemin, null, null);
 	}
-	
+
 	public ProcessStreamResult(InputStream in, BufferedOutputStream bos,
-	  String timemin, String encoding) throws IOException, InterruptedException
+	  String timemin, String inEncoding, String outEncoding)
+		throws IOException, InterruptedException
 	{
 		this.in = in;
-		this.outStream = new OutputStreamWriter(bos);
-		this.encoding = encoding;
+        if (outEncoding == null) {
+            this.outStream = new OutputStreamWriter(bos);
+        } else {
+            this.outStream = new OutputStreamWriter(bos, outEncoding);
+        }
+        this.encoding = inEncoding;
         this.startTime = System.currentTimeMillis();
         if (timemin != null)
         {

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/RunTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/RunTest.java?rev=432645&r1=432644&r2=432645&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/RunTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/RunTest.java Fri Aug 18 10:15:37 2006
@@ -183,6 +183,9 @@
     static boolean lastTestFailed = false;
 
     static boolean isI18N = false;
+    /** The value of derby.ui.codeset if it has been specified in the
+     * properties file. */
+    static String codeset = null;
     static boolean junitXASingle = false;
     
     /**
@@ -262,6 +265,10 @@
         // Setup the directories for the test and test output
         setDirectories(scriptName,sp);
 
+        if (testDirName.startsWith("i18n")) {
+            isI18N=true;
+        }
+
         // Check for properties files, including derby.properties
         // and if needed, build the -p string to pass to the test
         String propString = createPropString();
@@ -381,11 +388,6 @@
 		
 		String outName = finalOutFile.getPath();
 
-        if (testDirName.startsWith("i18n"))
-        {
-            isI18N=true;
-        }
-        
         if (skipsed)
         {
             tmpOutFile.renameTo(finalOutFile);
@@ -1541,11 +1543,17 @@
 			// For IBM14 the console encoding is different from the platform
 			// encoding on windows.  We want it to be the same for our
 			// test output like the other JDK's.
+			//
+			// For i18n test, we want UTF-8 encoding (DERBY-244).
 			String conEnc = System.getProperty("console.encoding");
 			String fileEnc = System.getProperty("file.encoding");
 		
-			if ((conEnc != null) &&  (fileEnc != null )  &&
-				(ap.getProperty("derby.ui.codeset") == null) &&
+			if (ap.getProperty("derby.ui.codeset") != null) {
+				// derby.ui.codeset is specified explicitly, don't override
+				codeset = ap.getProperty("derby.ui.codeset");
+			} else if (isI18N) {
+				ap.put("derby.ui.codeset", "UTF-8");
+			} else if ((conEnc != null) &&  (fileEnc != null )  &&
 				conEnc.startsWith("Cp850"))
 			{
 				ap.put("derby.ui.codeset",fileEnc);
@@ -2290,6 +2298,13 @@
             jvmProps.addElement("file.encoding=" + testEncoding);
             jvmflags = (jvmflags==null?"":jvmflags+" ") 
                          + "-Dfile.encoding=" + testEncoding; 
+        } else if (isI18N) {
+            // The I18N tests should be run with UTF-8 encoding to avoid
+            // problems with characters that cannot be represented in the
+            // default encoding (DERBY-244).
+            jvmProps.addElement("file.encoding=UTF-8");
+            jvmflags = (jvmflags==null ? "" : jvmflags + " ") +
+                        "-Dfile.encoding=UTF-8";
         }
         
         if (upgradejarpath != null)
@@ -2340,8 +2355,13 @@
             // force the console encoding to Cp1252 for ij tests - unless 
             // we're on non-ascii systems.
             String isNotAscii = System.getProperty("platform.notASCII");
-            if ( (isNotAscii == null) || (isNotAscii.equals("false"))) 
+            if (isI18N) {
+                // DERBY-244: Use UTF-8 console encoding for the i18n tests to
+                // avoid MalformedInputException with the IBM jvm.
+                v.addElement("-Dconsole.encoding=UTF-8");
+            } else if ((isNotAscii == null) || (isNotAscii.equals("false"))) {
                 v.addElement("-Dconsole.encoding=Cp1252" );
+            }
             v.addElement("org.apache.derby.tools." + ij);
             if (ij.equals("ij"))
             {
@@ -2505,25 +2525,42 @@
             if (verbose) System.out.println(sb.toString());
             pr = Runtime.getRuntime().exec(testCmd);
 
+            String inEncoding = null;
+            String outEncoding = null;
+            if (isI18N) {
+                // DERBY-244: I18N tests are run with -Dfile.encoding=UTF-8, so
+                // we need to specify encoding to the streams as well.
+                inEncoding = "UTF-8";
+                outEncoding = inEncoding;
+            }
+
+            if (codeset != null) {
+                // The test explicitly specified a codeset, use that codeset
+                // when reading the test output.
+                inEncoding = codeset;
+            }
+
+            if (testEncoding != null) {
+                inEncoding = testEncoding;
+            }
+
             if (useOutput)
             {
                 fos = new FileOutputStream(tmpOutFile);
-                bos = new BufferedOutputStream(fos, 1024);
-                prout = 
-                    new ProcessStreamResult(pr.getInputStream(), bos, 
-                    					timeoutStr, testEncoding);
             }
             else
             {
                 fos = new FileOutputStream(stdOutFile);
-                bos = new BufferedOutputStream(fos, 1024);
-                prout = 
-                    new ProcessStreamResult(pr.getInputStream(), bos, 
-                    					timeoutStr, testEncoding);
             }
+            bos = new BufferedOutputStream(fos, 1024);
+            prout = 
+                new ProcessStreamResult(pr.getInputStream(), bos, 
+                                        timeoutStr,
+                                        inEncoding, outEncoding);
             prerr =
                 new ProcessStreamResult(pr.getErrorStream(), bos, 
-                						timeoutStr, testEncoding);
+                                        timeoutStr,
+                                        inEncoding, outEncoding);
     
             if (framework != null && ! framework.equals(""))
                 if (verbose) System.out.println("The test should be running...");

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/Sed.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/Sed.java?rev=432645&r1=432644&r2=432645&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/Sed.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/harness/Sed.java Fri Aug 18 10:15:37 2006
@@ -372,10 +372,16 @@
         matcher = new Perl5Matcher();
 
         // Define the input and output files based on args
-        if (is == null)
+        if (is == null && isI18N) {
+            // read UTF-8 encoded file
+            InputStream fs = new FileInputStream(srcFile);
+            inFile = new BufferedReader(new InputStreamReader(fs, "UTF-8"));
+        } else if (is == null) {
+            // read the file using the default encoding
             inFile = new BufferedReader(new FileReader(srcFile));
-        else
+        } else {
             inFile = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+        }
         outFile = new PrintWriter
         ( new BufferedWriter(new FileWriter(dstFile), 10000), true );