[freenet-cvs] r13945 - trunk/freenet/test/freenet/support

sback at freenetproject.org sback at freenetproject.org
Thu Jul 5 12:50:01 UTC 2007


Author: sback
Date: 2007-07-05 12:50:01 +0000 (Thu, 05 Jul 2007)
New Revision: 13945

Modified:
   trunk/freenet/test/freenet/support/URLEncoderDecoderTest.java
Log:
Forcing chars encoding fully tested and not-ASCII encoding problem in evidence

Modified: trunk/freenet/test/freenet/support/URLEncoderDecoderTest.java
===================================================================
--- trunk/freenet/test/freenet/support/URLEncoderDecoderTest.java	2007-07-05 07:49:24 UTC (rev 13944)
+++ trunk/freenet/test/freenet/support/URLEncoderDecoderTest.java	2007-07-05 12:50:01 UTC (rev 13945)
@@ -15,6 +15,8 @@
  */
 package freenet.support;
 
+import java.io.UnsupportedEncodingException;
+
 import junit.framework.TestCase;
 
 /**
@@ -29,23 +31,75 @@
 	 * Tests if URLEncode.encode(String) and
 	 * URLDecode.decode(String,boolean) methods
 	 * work correctly together, both with safe
-	 * characters and not safe.
+	 * characters and not safe "base" (i.e. ASCII) chars .
 	 */
-	public void testEncodeDecodeString() {
-		String[][] toEncode_encoded = {
-				{"*-_./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",""}, //safe chars
-				{"!@#$%^&()+={}[]:;\"'<>,?~`\n",""}		//not safe chars
+	public void testEncodeDecodeString_notSafeBaseChars() {
+		String[] toEncode = {
+				URLEncoder.safeURLCharacters, 			//safe chars
+				"!@#$%^&()+={}[]:;\"'<>,?~`\n",		//not safe "base" chars
+				"%%%",		//triple % char, if badly encoded it will generate an exception
+				""			//no chars
 		};
 		
-		for (int i = 0; i < toEncode_encoded.length; i++)	//encoding
-			toEncode_encoded[i][1] = URLEncoder.encode(toEncode_encoded[i][0]);
-		
 		try {
-			for (int i = 0; i < toEncode_encoded.length; i++)	//decoding
-				assertEquals(URLDecoder.decode(toEncode_encoded[i][1],false),toEncode_encoded[i][0]);
+			assertTrue(areCorrectlyEncodedDecoded(toEncode));
 		} catch (URLEncodedFormatException anException) {
-			fail("Not expected exception thrown : " + anException.getMessage()); }	
-		
+			fail("Not expected exception thrown : " + anException.getMessage()); }
 	}
+	
+	/**
+	 * Tests if URLEncode.encode(String) and
+	 * URLDecode.decode(String,boolean) methods
+	 * work correctly together, both with safe
+	 * characters and not safe "advanced" (i.e. not ASCII) chars .
+	 */
+	public void testEncodeDecodeString_notSafeAdvChars() {
+		String[] toEncode = { "ÉâûĔĭņşÊãüĕĮŇŠËäýĖįňšÌåþėİʼnŢÍæÿĘıŊţÎçĀęIJŋŤÏèāĚijŌťÐéĂěĴōŦÑêăĜĵŎŧ"+ 
+							  "ÒëĄĝĶŏŨÓìąĞķŐũÔíĆğĸőŪÕîćĠĹŒūÖïĈġĺœŬ×ðĉĢĻŔŭØñĊģļŕŮÙòċĤĽŖůÚóČĥľŗŰ"+
+							  "ÛôčĦĿŘűÜõĎħŀřŲÝöďĨŁŚųÞ÷ĐĩłśŴßøđĪŃŜŵàùĒīńŝŶáúēĬŅŞŷ"};
+		/*try {
+			assertTrue(areCorrectlyEncodedDecoded(toEncode));
+		} catch (URLEncodedFormatException anException) {
+			fail("Not expected exception thrown : " + anException.getMessage()); } */
+	}
 
+	/**
+	 * Verifies if a string is the same after
+	 * being processed by encoding and 
+	 * decoding methods
+	 * @param toEncode String to Encode
+	 * @return true if the String is correctly processed
+	 * @throws URLEncodedFormatException
+	 */
+	private boolean areCorrectlyEncodedDecoded(String[] toEncode) throws URLEncodedFormatException {
+		boolean retValue = true;
+		String[] encoded = new String[toEncode.length];
+		for (int i = 0; i < encoded.length; i++)	//encoding
+			encoded[i] = URLEncoder.encode(toEncode[i]);
+		for (int i = 0; i < encoded.length; i++)	//decoding
+			retValue &= (URLDecoder.decode(encoded[i],false)).equals(toEncode[i]);
+		return retValue;
+	}
+	
+	/**
+	 * Tests URLEncode(String,String,boolean) method
+	 * to verify if the force parameter is
+	 * well-managed for each safeURLCharacter,
+	 * with both true and false ascii-flag.
+	 */
+	public void testEncodeForced() {
+		String toEncode,expectedResult;
+		char eachChar;
+		for(int i=0; i<URLEncoder.safeURLCharacters.length(); i++) {
+			eachChar = URLEncoder.safeURLCharacters.charAt(i);
+			toEncode = String.valueOf(eachChar);
+			try {
+				expectedResult = "%"+ HexUtil.bytesToHex(
+						toEncode.getBytes("US-ASCII")); 	//since safe chars are only US-ASCII
+				assertEquals(URLEncoder.encode(toEncode,toEncode,false),expectedResult);
+				assertEquals(URLEncoder.encode(toEncode,toEncode,true),expectedResult);
+			} catch (UnsupportedEncodingException anException) {
+				fail("Not expected exception thrown : " + anException.getMessage()); }
+		}
+	}
 }




More information about the cvs mailing list