Hi Niklas, ok then its prolly not worth the hassle.. Just don't care and let it like it is atm.
Thx for your effort. Bye, Norman 2010/12/17 Niklas Therning <[email protected]>: > The merged in changes from trunk uses LF as line endings while the files in > 0.6 use CRLF. This is why the diff shows that the entire files have been > changed and why I got a conflict on the entire files. svn cp won't do any > difference. If you do a svn diff between the old and new versions it will > still appear as if the whole files have been changed. I would have to revert > the merge, copy the files manually and change the line endings in the new > files to CRLF and then commit. Let me know if you want me to do this. AFAIK > it's not possible to delete a revision so the files with incorrect line > endings will still appear in the history forever. > > /Niklas > > On 12/17/2010 11:15 AM, Norman Maurer wrote: >> >> Or just do an svn cp ? >> >> Bye, >> Norman >> >> >> 2010/12/17 Niklas Therning<[email protected]>: >>> >>> I did an svn merge but I got a conflict on the entire files so I assumed >>> that it had changed too much or that whitespaces had changed or >>> something. >>> But I can look into it later today. >>> >>> /Niklas >>> >>> On 12/17/2010 11:04 AM, Norman Maurer wrote: >>>> >>>> Hi there, >>>> >>>> would it be possible to really only merge the changes ? It seems like >>>> it replaced all the old content so history is almost lost :( >>>> >>>> Bye, >>>> Norman >>>> >>>> >>>> 2010/12/17<[email protected]>: >>>>> >>>>> Author: niklas >>>>> Date: Fri Dec 17 10:02:31 2010 >>>>> New Revision: 1050333 >>>>> >>>>> URL: http://svn.apache.org/viewvc?rev=1050333&view=rev >>>>> Log: >>>>> Merged in changes to DecoderUtil and DecoderUtilTest from revision >>>>> 809204 >>>>> (MIME4J-138). >>>>> >>>>> Modified: >>>>> >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java >>>>> (contents, props changed) >>>>> >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java >>>>> (contents, props changed) >>>>> >>>>> Modified: >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java >>>>> URL: >>>>> >>>>> http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.6/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java?rev=1050333&r1=1050332&r2=1050333&view=diff >>>>> >>>>> >>>>> ============================================================================== >>>>> --- >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java >>>>> (original) >>>>> +++ >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java >>>>> Fri Dec 17 10:02:31 2010 >>>>> @@ -1,252 +1,253 @@ >>>>> -/**************************************************************** >>>>> - * Licensed to the Apache Software Foundation (ASF) under one * >>>>> - * or more contributor license agreements. See the NOTICE file * >>>>> - * distributed with this work for additional information * >>>>> - * regarding copyright ownership. The ASF licenses this file * >>>>> - * to you under the Apache License, Version 2.0 (the * >>>>> - * "License"); you may not use this file except in compliance * >>>>> - * with the License. You may obtain a copy of the License at * >>>>> - * * >>>>> - * http://www.apache.org/licenses/LICENSE-2.0 * >>>>> - * * >>>>> - * Unless required by applicable law or agreed to in writing, * >>>>> - * software distributed under the License is distributed on an * >>>>> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * >>>>> - * KIND, either express or implied. See the License for the * >>>>> - * specific language governing permissions and limitations * >>>>> - * under the License. * >>>>> - ****************************************************************/ >>>>> - >>>>> -package org.apache.james.mime4j.codec; >>>>> - >>>>> -import java.io.ByteArrayInputStream; >>>>> -import java.io.ByteArrayOutputStream; >>>>> -import java.io.IOException; >>>>> -import java.io.UnsupportedEncodingException; >>>>> - >>>>> -import org.apache.commons.logging.Log; >>>>> -import org.apache.commons.logging.LogFactory; >>>>> -import org.apache.james.mime4j.util.CharsetUtil; >>>>> - >>>>> -/** >>>>> - * Static methods for decoding strings, byte arrays and encoded words. >>>>> - */ >>>>> -public class DecoderUtil { >>>>> - private static Log log = LogFactory.getLog(DecoderUtil.class); >>>>> - >>>>> - /** >>>>> - * Decodes a string containing quoted-printable encoded data. >>>>> - * >>>>> - * @param s the string to decode. >>>>> - * @return the decoded bytes. >>>>> - */ >>>>> - public static byte[] decodeBaseQuotedPrintable(String s) { >>>>> - ByteArrayOutputStream baos = new ByteArrayOutputStream(); >>>>> - >>>>> - try { >>>>> - byte[] bytes = s.getBytes("US-ASCII"); >>>>> - >>>>> - QuotedPrintableInputStream is = new >>>>> QuotedPrintableInputStream( >>>>> - new >>>>> ByteArrayInputStream(bytes)); >>>>> - >>>>> - int b = 0; >>>>> - while ((b = is.read()) != -1) { >>>>> - baos.write(b); >>>>> - } >>>>> - } catch (IOException e) { >>>>> - /* >>>>> - * This should never happen! >>>>> - */ >>>>> - log.error(e); >>>>> - } >>>>> - >>>>> - return baos.toByteArray(); >>>>> - } >>>>> - >>>>> - /** >>>>> - * Decodes a string containing base64 encoded data. >>>>> - * >>>>> - * @param s the string to decode. >>>>> - * @return the decoded bytes. >>>>> - */ >>>>> - public static byte[] decodeBase64(String s) { >>>>> - ByteArrayOutputStream baos = new ByteArrayOutputStream(); >>>>> - >>>>> - try { >>>>> - byte[] bytes = s.getBytes("US-ASCII"); >>>>> - >>>>> - Base64InputStream is = new Base64InputStream( >>>>> - new >>>>> ByteArrayInputStream(bytes)); >>>>> - >>>>> - int b = 0; >>>>> - while ((b = is.read()) != -1) { >>>>> - baos.write(b); >>>>> - } >>>>> - } catch (IOException e) { >>>>> - /* >>>>> - * This should never happen! >>>>> - */ >>>>> - log.error(e); >>>>> - } >>>>> - >>>>> - return baos.toByteArray(); >>>>> - } >>>>> - >>>>> - /** >>>>> - * Decodes an encoded word encoded with the 'B' encoding >>>>> (described >>>>> in >>>>> - * RFC 2047) found in a header field body. >>>>> - * >>>>> - * @param encodedWord the encoded word to decode. >>>>> - * @param charset the Java charset to use. >>>>> - * @return the decoded string. >>>>> - * @throws UnsupportedEncodingException if the given Java charset >>>>> isn't >>>>> - * supported. >>>>> - */ >>>>> - public static String decodeB(String encodedWord, String charset) >>>>> - throws UnsupportedEncodingException { >>>>> - >>>>> - return new String(decodeBase64(encodedWord), charset); >>>>> - } >>>>> - >>>>> - /** >>>>> - * Decodes an encoded word encoded with the 'Q' encoding >>>>> (described >>>>> in >>>>> - * RFC 2047) found in a header field body. >>>>> - * >>>>> - * @param encodedWord the encoded word to decode. >>>>> - * @param charset the Java charset to use. >>>>> - * @return the decoded string. >>>>> - * @throws UnsupportedEncodingException if the given Java charset >>>>> isn't >>>>> - * supported. >>>>> - */ >>>>> - public static String decodeQ(String encodedWord, String charset) >>>>> - throws UnsupportedEncodingException { >>>>> - >>>>> - /* >>>>> - * Replace _ with =20 >>>>> - */ >>>>> - StringBuilder sb = new StringBuilder(128); >>>>> - for (int i = 0; i< encodedWord.length(); i++) { >>>>> - char c = encodedWord.charAt(i); >>>>> - if (c == '_') { >>>>> - sb.append("=20"); >>>>> - } else { >>>>> - sb.append(c); >>>>> - } >>>>> - } >>>>> - >>>>> - return new String(decodeBaseQuotedPrintable(sb.toString()), >>>>> charset); >>>>> - } >>>>> - >>>>> - /** >>>>> - * Decodes a string containing encoded words as defined by RFC >>>>> 2047. >>>>> - * Encoded words in have the form >>>>> - * =?charset?enc?Encoded word?= where enc is either 'Q' or 'q' for >>>>> - * quoted-printable and 'B' or 'b' for Base64. >>>>> - * >>>>> - * @param body the string to decode. >>>>> - * @return the decoded string. >>>>> - */ >>>>> - public static String decodeEncodedWords(String body) { >>>>> - int previousEnd = 0; >>>>> - boolean previousWasEncoded = false; >>>>> - >>>>> - StringBuilder sb = new StringBuilder(); >>>>> - >>>>> - while (true) { >>>>> - int begin = body.indexOf("=?", previousEnd); >>>>> - int end = begin == -1 ? -1 : body.indexOf("?=", begin + >>>>> 2); >>>>> - if (end == -1) { >>>>> - if (previousEnd == 0) >>>>> - return body; >>>>> - >>>>> - sb.append(body.substring(previousEnd)); >>>>> - return sb.toString(); >>>>> - } >>>>> - end += 2; >>>>> - >>>>> - String sep = body.substring(previousEnd, begin); >>>>> - >>>>> - String decoded = decodeEncodedWord(body, begin, end); >>>>> - if (decoded == null) { >>>>> - sb.append(sep); >>>>> - sb.append(body.substring(begin, end)); >>>>> - } else { >>>>> - if (!previousWasEncoded || >>>>> !CharsetUtil.isWhitespace(sep)) { >>>>> - sb.append(sep); >>>>> - } >>>>> - sb.append(decoded); >>>>> - } >>>>> - >>>>> - previousEnd = end; >>>>> - previousWasEncoded = decoded != null; >>>>> - } >>>>> - } >>>>> - >>>>> - // return null on error >>>>> - private static String decodeEncodedWord(String body, int begin, >>>>> int >>>>> end) { >>>>> - int qm1 = body.indexOf('?', begin + 2); >>>>> - if (qm1 == end - 2) >>>>> - return null; >>>>> - >>>>> - int qm2 = body.indexOf('?', qm1 + 1); >>>>> - if (qm2 == end - 2) >>>>> - return null; >>>>> - >>>>> - String mimeCharset = body.substring(begin + 2, qm1); >>>>> - String encoding = body.substring(qm1 + 1, qm2); >>>>> - String encodedText = body.substring(qm2 + 1, end - 2); >>>>> - >>>>> - String charset = CharsetUtil.toJavaCharset(mimeCharset); >>>>> - if (charset == null) { >>>>> - if (log.isWarnEnabled()) { >>>>> - log.warn("MIME charset '" + mimeCharset + "' in >>>>> encoded >>>>> word '" >>>>> - + body.substring(begin, end) + "' doesn't have >>>>> a >>>>> " >>>>> - + "corresponding Java charset"); >>>>> - } >>>>> - return null; >>>>> - } else if (!CharsetUtil.isDecodingSupported(charset)) { >>>>> - if (log.isWarnEnabled()) { >>>>> - log.warn("Current JDK doesn't support decoding of >>>>> charset '" >>>>> - + charset + "' (MIME charset '" + mimeCharset >>>>> - + "' in encoded word '" + >>>>> body.substring(begin, >>>>> end) >>>>> - + "')"); >>>>> - } >>>>> - return null; >>>>> - } >>>>> - >>>>> - if (encodedText.length() == 0) { >>>>> - if (log.isWarnEnabled()) { >>>>> - log.warn("Missing encoded text in encoded word: '" >>>>> - + body.substring(begin, end) + "'"); >>>>> - } >>>>> - return null; >>>>> - } >>>>> - >>>>> - try { >>>>> - if (encoding.equalsIgnoreCase("Q")) { >>>>> - return DecoderUtil.decodeQ(encodedText, charset); >>>>> - } else if (encoding.equalsIgnoreCase("B")) { >>>>> - return DecoderUtil.decodeB(encodedText, charset); >>>>> - } else { >>>>> - if (log.isWarnEnabled()) { >>>>> - log.warn("Warning: Unknown encoding in encoded >>>>> word >>>>> '" >>>>> - + body.substring(begin, end) + "'"); >>>>> - } >>>>> - return null; >>>>> - } >>>>> - } catch (UnsupportedEncodingException e) { >>>>> - // should not happen because of isDecodingSupported check >>>>> above >>>>> - if (log.isWarnEnabled()) { >>>>> - log.warn("Unsupported encoding in encoded word '" >>>>> - + body.substring(begin, end) + "'", e); >>>>> - } >>>>> - return null; >>>>> - } catch (RuntimeException e) { >>>>> - if (log.isWarnEnabled()) { >>>>> - log.warn("Could not decode encoded word '" >>>>> - + body.substring(begin, end) + "'", e); >>>>> - } >>>>> - return null; >>>>> - } >>>>> - } >>>>> -} >>>>> +/**************************************************************** >>>>> + * Licensed to the Apache Software Foundation (ASF) under one * >>>>> + * or more contributor license agreements. See the NOTICE file * >>>>> + * distributed with this work for additional information * >>>>> + * regarding copyright ownership. The ASF licenses this file * >>>>> + * to you under the Apache License, Version 2.0 (the * >>>>> + * "License"); you may not use this file except in compliance * >>>>> + * with the License. You may obtain a copy of the License at * >>>>> + * * >>>>> + * http://www.apache.org/licenses/LICENSE-2.0 * >>>>> + * * >>>>> + * Unless required by applicable law or agreed to in writing, * >>>>> + * software distributed under the License is distributed on an * >>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * >>>>> + * KIND, either express or implied. See the License for the * >>>>> + * specific language governing permissions and limitations * >>>>> + * under the License. * >>>>> + ****************************************************************/ >>>>> + >>>>> +package org.apache.james.mime4j.codec; >>>>> + >>>>> +import java.io.ByteArrayInputStream; >>>>> +import java.io.ByteArrayOutputStream; >>>>> +import java.io.IOException; >>>>> +import java.io.UnsupportedEncodingException; >>>>> +import java.util.regex.Matcher; >>>>> +import java.util.regex.Pattern; >>>>> + >>>>> +import org.apache.commons.logging.Log; >>>>> +import org.apache.commons.logging.LogFactory; >>>>> +import org.apache.james.mime4j.util.CharsetUtil; >>>>> + >>>>> +/** >>>>> + * Static methods for decoding strings, byte arrays and encoded words. >>>>> + */ >>>>> +public class DecoderUtil { >>>>> + private static Log log = LogFactory.getLog(DecoderUtil.class); >>>>> + >>>>> + private static final Pattern PATTERN_ENCODED_WORD = >>>>> Pattern.compile( >>>>> + "(.*?)=\\?([^\\?]+?)\\?(\\w)\\?([^\\?]+?)\\?=", >>>>> Pattern.DOTALL); >>>>> + >>>>> + /** >>>>> + * Decodes a string containing quoted-printable encoded data. >>>>> + * >>>>> + * @param s the string to decode. >>>>> + * @return the decoded bytes. >>>>> + */ >>>>> + public static byte[] decodeQuotedPrintable(String s) { >>>>> + ByteArrayOutputStream baos = new ByteArrayOutputStream(); >>>>> + >>>>> + try { >>>>> + byte[] bytes = s.getBytes("US-ASCII"); >>>>> + >>>>> + QuotedPrintableInputStream is = new >>>>> QuotedPrintableInputStream( >>>>> + new >>>>> ByteArrayInputStream(bytes)); >>>>> + >>>>> + int b = 0; >>>>> + while ((b = is.read()) != -1) { >>>>> + baos.write(b); >>>>> + } >>>>> + } catch (IOException e) { >>>>> + // This should never happen! >>>>> + log.error(e); >>>>> + throw new IllegalStateException(e); >>>>> + } >>>>> + >>>>> + return baos.toByteArray(); >>>>> + } >>>>> + >>>>> + /** >>>>> + * Decodes a string containing base64 encoded data. >>>>> + * >>>>> + * @param s the string to decode. >>>>> + * @return the decoded bytes. >>>>> + */ >>>>> + public static byte[] decodeBase64(String s) { >>>>> + ByteArrayOutputStream baos = new ByteArrayOutputStream(); >>>>> + >>>>> + try { >>>>> + byte[] bytes = s.getBytes("US-ASCII"); >>>>> + >>>>> + Base64InputStream is = new Base64InputStream( >>>>> + new >>>>> ByteArrayInputStream(bytes)); >>>>> + >>>>> + int b = 0; >>>>> + while ((b = is.read()) != -1) { >>>>> + baos.write(b); >>>>> + } >>>>> + } catch (IOException e) { >>>>> + // This should never happen! >>>>> + log.error(e); >>>>> + throw new IllegalStateException(e); >>>>> + } >>>>> + >>>>> + return baos.toByteArray(); >>>>> + } >>>>> + >>>>> + /** >>>>> + * Decodes an encoded text encoded with the 'B' encoding >>>>> (described >>>>> in >>>>> + * RFC 2047) found in a header field body. >>>>> + * >>>>> + * @param encodedText the encoded text to decode. >>>>> + * @param charset the Java charset to use. >>>>> + * @return the decoded string. >>>>> + * @throws UnsupportedEncodingException if the given Java charset >>>>> isn't >>>>> + * supported. >>>>> + */ >>>>> + public static String decodeB(String encodedText, String charset) >>>>> + throws UnsupportedEncodingException { >>>>> + byte[] decodedBytes = decodeBase64(encodedText); >>>>> + return new String(decodedBytes, charset); >>>>> + } >>>>> + >>>>> + /** >>>>> + * Decodes an encoded text encoded with the 'Q' encoding >>>>> (described >>>>> in >>>>> + * RFC 2047) found in a header field body. >>>>> + * >>>>> + * @param encodedText the encoded text to decode. >>>>> + * @param charset the Java charset to use. >>>>> + * @return the decoded string. >>>>> + * @throws UnsupportedEncodingException if the given Java charset >>>>> isn't >>>>> + * supported. >>>>> + */ >>>>> + public static String decodeQ(String encodedText, String charset) >>>>> + throws UnsupportedEncodingException { >>>>> + encodedText = replaceUnderscores(encodedText); >>>>> + >>>>> + byte[] decodedBytes = decodeQuotedPrintable(encodedText); >>>>> + return new String(decodedBytes, charset); >>>>> + } >>>>> + >>>>> + /** >>>>> + * Decodes a string containing encoded words as defined by RFC >>>>> 2047. >>>>> Encoded >>>>> + * words have the form =?charset?enc?encoded-text?= where enc is >>>>> either 'Q' >>>>> + * or 'q' for quoted-printable and 'B' or 'b' for base64. >>>>> + * >>>>> + * @param body the string to decode. >>>>> + * @return the decoded string. >>>>> + */ >>>>> + public static String decodeEncodedWords(String body) { >>>>> + int tailIndex = 0; >>>>> + boolean lastMatchValid = false; >>>>> + >>>>> + StringBuilder sb = new StringBuilder(); >>>>> + >>>>> + for (Matcher matcher = PATTERN_ENCODED_WORD.matcher(body); >>>>> matcher.find();) { >>>>> + String separator = matcher.group(1); >>>>> + String mimeCharset = matcher.group(2); >>>>> + String encoding = matcher.group(3); >>>>> + String encodedText = matcher.group(4); >>>>> + >>>>> + String decoded = tryDecodeEncodedWord(mimeCharset, >>>>> encoding, >>>>> encodedText); >>>>> + if (decoded == null) { >>>>> + sb.append(matcher.group(0)); >>>>> + } else { >>>>> + if (!lastMatchValid || >>>>> !CharsetUtil.isWhitespace(separator)) { >>>>> + sb.append(separator); >>>>> + } >>>>> + sb.append(decoded); >>>>> + } >>>>> + >>>>> + tailIndex = matcher.end(); >>>>> + lastMatchValid = decoded != null; >>>>> + } >>>>> + >>>>> + if (tailIndex == 0) { >>>>> + return body; >>>>> + } else { >>>>> + sb.append(body.substring(tailIndex)); >>>>> + return sb.toString(); >>>>> + } >>>>> + } >>>>> + >>>>> + // return null on error >>>>> + private static String tryDecodeEncodedWord(final String >>>>> mimeCharset, >>>>> + final String encoding, final String encodedText) { >>>>> + String charset = CharsetUtil.toJavaCharset(mimeCharset); >>>>> + if (charset == null) { >>>>> + if (log.isWarnEnabled()) { >>>>> + log.warn("MIME charset '" + mimeCharset + "' in >>>>> encoded >>>>> word '" >>>>> + + recombine(mimeCharset, encoding, >>>>> encodedText) >>>>> + "' doesn't have a " >>>>> + + "corresponding Java charset"); >>>>> + } >>>>> + return null; >>>>> + } else if (!CharsetUtil.isDecodingSupported(charset)) { >>>>> + if (log.isWarnEnabled()) { >>>>> + log.warn("Current JDK doesn't support decoding of >>>>> charset '" >>>>> + + charset + "' (MIME charset '" + mimeCharset >>>>> + + "' in encoded word '" + >>>>> recombine(mimeCharset, >>>>> encoding, encodedText) >>>>> + + "')"); >>>>> + } >>>>> + return null; >>>>> + } >>>>> + >>>>> + if (encodedText.length() == 0) { >>>>> + if (log.isWarnEnabled()) { >>>>> + log.warn("Missing encoded text in encoded word: '" >>>>> + + recombine(mimeCharset, encoding, >>>>> encodedText) >>>>> + "'"); >>>>> + } >>>>> + return null; >>>>> + } >>>>> + >>>>> + try { >>>>> + if (encoding.equalsIgnoreCase("Q")) { >>>>> + return DecoderUtil.decodeQ(encodedText, charset); >>>>> + } else if (encoding.equalsIgnoreCase("B")) { >>>>> + return DecoderUtil.decodeB(encodedText, charset); >>>>> + } else { >>>>> + if (log.isWarnEnabled()) { >>>>> + log.warn("Warning: Unknown encoding in encoded >>>>> word >>>>> '" >>>>> + + recombine(mimeCharset, encoding, >>>>> encodedText) + "'"); >>>>> + } >>>>> + return null; >>>>> + } >>>>> + } catch (UnsupportedEncodingException e) { >>>>> + // should not happen because of isDecodingSupported check >>>>> above >>>>> + if (log.isWarnEnabled()) { >>>>> + log.warn("Unsupported encoding in encoded word '" >>>>> + + recombine(mimeCharset, encoding, >>>>> encodedText) >>>>> + "'", e); >>>>> + } >>>>> + return null; >>>>> + } catch (RuntimeException e) { >>>>> + if (log.isWarnEnabled()) { >>>>> + log.warn("Could not decode encoded word '" >>>>> + + recombine(mimeCharset, encoding, >>>>> encodedText) >>>>> + "'", e); >>>>> + } >>>>> + return null; >>>>> + } >>>>> + } >>>>> + >>>>> + private static String recombine(final String mimeCharset, >>>>> + final String encoding, final String encodedText) { >>>>> + return "=?" + mimeCharset + "?" + encoding + "?" + encodedText >>>>> + >>>>> "?="; >>>>> + } >>>>> + >>>>> + // Replace _ with =20 >>>>> + private static String replaceUnderscores(String str) { >>>>> + // probably faster than String#replace(CharSequence, >>>>> CharSequence) >>>>> + >>>>> + StringBuilder sb = new StringBuilder(128); >>>>> + >>>>> + for (int i = 0; i< str.length(); i++) { >>>>> + char c = str.charAt(i); >>>>> + if (c == '_') { >>>>> + sb.append("=20"); >>>>> + } else { >>>>> + sb.append(c); >>>>> + } >>>>> + } >>>>> + >>>>> + return sb.toString(); >>>>> + } >>>>> +} >>>>> >>>>> Propchange: >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> --- svn:mergeinfo (added) >>>>> +++ svn:mergeinfo Fri Dec 17 10:02:31 2010 >>>>> @@ -0,0 +1 @@ >>>>> >>>>> >>>>> +/james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/codec/DecoderUtil.java:809204 >>>>> >>>>> Modified: >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java >>>>> URL: >>>>> >>>>> http://svn.apache.org/viewvc/james/mime4j/branches/apache-mime4j-0.6/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java?rev=1050333&r1=1050332&r2=1050333&view=diff >>>>> >>>>> >>>>> ============================================================================== >>>>> --- >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java >>>>> (original) >>>>> +++ >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java >>>>> Fri Dec 17 10:02:31 2010 >>>>> @@ -1,105 +1,127 @@ >>>>> -/**************************************************************** >>>>> - * Licensed to the Apache Software Foundation (ASF) under one * >>>>> - * or more contributor license agreements. See the NOTICE file * >>>>> - * distributed with this work for additional information * >>>>> - * regarding copyright ownership. The ASF licenses this file * >>>>> - * to you under the Apache License, Version 2.0 (the * >>>>> - * "License"); you may not use this file except in compliance * >>>>> - * with the License. You may obtain a copy of the License at * >>>>> - * * >>>>> - * http://www.apache.org/licenses/LICENSE-2.0 * >>>>> - * * >>>>> - * Unless required by applicable law or agreed to in writing, * >>>>> - * software distributed under the License is distributed on an * >>>>> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * >>>>> - * KIND, either express or implied. See the License for the * >>>>> - * specific language governing permissions and limitations * >>>>> - * under the License. * >>>>> - ****************************************************************/ >>>>> - >>>>> -package org.apache.james.mime4j.codec; >>>>> - >>>>> -import java.io.UnsupportedEncodingException; >>>>> - >>>>> -import junit.framework.TestCase; >>>>> - >>>>> -import org.apache.log4j.BasicConfigurator; >>>>> - >>>>> -public class DecoderUtilTest extends TestCase { >>>>> - >>>>> - �...@override >>>>> - public void setUp() { >>>>> - BasicConfigurator.resetConfiguration(); >>>>> - BasicConfigurator.configure(); >>>>> - } >>>>> - /* >>>>> - public void testDecodeEncodedWords() { >>>>> - String s = >>>>> "=?ISO-2022-JP?B?GyRCTCQbKEobJEI+NRsoShskQkJ6GyhKGyRCOS0bKEo=?=" >>>>> - + >>>>> "=?ISO-2022-JP?B?GyRCOXAbKEobJEIiKBsoShskQiU1GyhKGyRCJSQbKEo=?=" >>>>> - + >>>>> "=?ISO-2022-JP?B?GyRCJUkbKEobJEIlUxsoShskQiU4GyhKGyRCJU0bKEo=?=" >>>>> - + >>>>> "=?ISO-2022-JP?B?GyRCJTkbKEobJEIkThsoShskQjdoGyhKGyRCRGobKEo=?=" >>>>> - + >>>>> "=?ISO-2022-JP?B?GyRCSEcbKEobJEIkRxsoShskQiQ5GyhKGyRCISobKEo=?="; >>>>> - >>>>> - s = DecoderUtil.decodeEncodedWords(s); >>>>> - System.out.println(s); >>>>> - }*/ >>>>> - >>>>> - public void testDecodeB() throws UnsupportedEncodingException { >>>>> - String s = DecoderUtil.decodeB("VGhpcyBpcyB0aGUgcGxhaW4gd" >>>>> - + "GV4dCBtZXNzYWdlIQ==", "ISO8859-1"); >>>>> - assertEquals("This is the plain text message!", s); >>>>> - } >>>>> - >>>>> - >>>>> - public void testDecodeQ() throws UnsupportedEncodingException { >>>>> - String s = DecoderUtil.decodeQ("=e1_=e2=09=E3_=E4_", >>>>> - "ISO8859-1"); >>>>> - assertEquals("\u00e1 \u00e2\t\u00e3 \u00e4 ", s); >>>>> - } >>>>> - >>>>> - public void testDecodeEncodedWords() { >>>>> - assertEquals("", DecoderUtil.decodeEncodedWords("")); >>>>> - assertEquals("Yada yada", DecoderUtil.decodeEncodedWords("Yada >>>>> yada")); >>>>> - assertEquals(" \u00e1\u00e2\u00e3\t\u00e4", >>>>> - >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?iso-8859-1?Q?_=20=e1=e2=E3=09=E4?=")); >>>>> - assertEquals("Word 1 ' \u00e2\u00e3\t\u00e4'. Word 2 ' >>>>> \u00e2\u00e3\t\u00e4'", >>>>> - DecoderUtil.decodeEncodedWords("Word 1 >>>>> '=?iso-8859-1?Q?_=20=e2=E3=09=E4?=" >>>>> - + "'. Word 2 >>>>> '=?iso-8859-1?q?_=20=e2=E3=09=E4?='")); >>>>> - assertEquals("=?iso-8859-YADA?Q?_=20=t1=e2=E3=09=E4?=", >>>>> - >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?iso-8859-YADA?Q?_=20=t1=e2=E3=09=E4?=")); >>>>> - assertEquals("A short text", >>>>> - >>>>> DecoderUtil.decodeEncodedWords("=?US-ASCII?B?QSBzaG9ydCB0ZXh0?=")); >>>>> - assertEquals("A short text again!", >>>>> - >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?US-ASCII?b?QSBzaG9ydCB0ZXh0IGFnYWluIQ==?=")); >>>>> - >>>>> - // invalid encoded words should be returned unchanged >>>>> - assertEquals("=?iso8859-1?Q?=", >>>>> DecoderUtil.decodeEncodedWords("=?iso8859-1?Q?=")); >>>>> - assertEquals("=?iso8859-1?b?=", >>>>> DecoderUtil.decodeEncodedWords("=?iso8859-1?b?=")); >>>>> - assertEquals("=?ISO-8859-1?Q?", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?")); >>>>> - assertEquals("=?ISO-8859-1?R?abc?=", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?R?abc?=")); >>>>> - >>>>> - // encoded-text requires at least one character according to >>>>> rfc >>>>> 2047 >>>>> - assertEquals("=?ISO-8859-1?Q??=", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q??=")); >>>>> - assertEquals("=?ISO-8859-1?B??=", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?B??=")); >>>>> - >>>>> - // white space between encoded words should be removed >>>>> (MIME4J-104) >>>>> - assertEquals("a", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?=")); >>>>> - assertEquals("a b", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= b")); >>>>> - assertEquals("ab", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= >>>>> =?ISO-8859-1?Q?b?=")); >>>>> - assertEquals("ab", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= >>>>> =?ISO-8859-1?Q?b?=")); >>>>> - assertEquals("ab", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?=\r\n >>>>> =?ISO-8859-1?Q?b?=")); >>>>> - assertEquals("a b", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a_b?=")); >>>>> - assertEquals("a b", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= >>>>> =?ISO-8859-2?Q?_b?=")); >>>>> - >>>>> - // non white space between encoded words should be retained >>>>> - assertEquals("a b c", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= b >>>>> =?ISO-8859-1?Q?c?=")); >>>>> - >>>>> - // text before and after encoded words should be retained >>>>> - assertEquals(" a b c ", DecoderUtil.decodeEncodedWords(" >>>>> =?ISO-8859-1?Q?a?= b =?ISO-8859-1?Q?c?= ")); >>>>> - assertEquals("! a b c !", DecoderUtil.decodeEncodedWords("! >>>>> =?ISO-8859-1?Q?a?= b =?ISO-8859-1?Q?c?= !")); >>>>> - >>>>> - // Bug detected on June 7, 2005. Decoding the following string >>>>> caused >>>>> - // OutOfMemoryError. >>>>> - assertEquals("=3?!!\\=?\"!g6P\"!Xp:\"!", >>>>> DecoderUtil.decodeEncodedWords("=3?!!\\=?\"!g6P\"!Xp:\"!")); >>>>> - } >>>>> -} >>>>> +/**************************************************************** >>>>> + * Licensed to the Apache Software Foundation (ASF) under one * >>>>> + * or more contributor license agreements. See the NOTICE file * >>>>> + * distributed with this work for additional information * >>>>> + * regarding copyright ownership. The ASF licenses this file * >>>>> + * to you under the Apache License, Version 2.0 (the * >>>>> + * "License"); you may not use this file except in compliance * >>>>> + * with the License. You may obtain a copy of the License at * >>>>> + * * >>>>> + * http://www.apache.org/licenses/LICENSE-2.0 * >>>>> + * * >>>>> + * Unless required by applicable law or agreed to in writing, * >>>>> + * software distributed under the License is distributed on an * >>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * >>>>> + * KIND, either express or implied. See the License for the * >>>>> + * specific language governing permissions and limitations * >>>>> + * under the License. * >>>>> + ****************************************************************/ >>>>> + >>>>> +package org.apache.james.mime4j.codec; >>>>> + >>>>> +import java.io.UnsupportedEncodingException; >>>>> + >>>>> +import junit.framework.TestCase; >>>>> + >>>>> +import org.apache.log4j.BasicConfigurator; >>>>> + >>>>> +public class DecoderUtilTest extends TestCase { >>>>> + >>>>> + �...@override >>>>> + public void setUp() { >>>>> + BasicConfigurator.resetConfiguration(); >>>>> + BasicConfigurator.configure(); >>>>> + } >>>>> + >>>>> + public void testDecodeB() throws UnsupportedEncodingException { >>>>> + String s = DecoderUtil.decodeB("VGhpcyBpcyB0aGUgcGxhaW4gd" >>>>> + + "GV4dCBtZXNzYWdlIQ==", "ISO8859-1"); >>>>> + assertEquals("This is the plain text message!", s); >>>>> + } >>>>> + >>>>> + public void testDecodeQ() throws UnsupportedEncodingException { >>>>> + String s = DecoderUtil.decodeQ("=e1_=e2=09=E3_=E4_", >>>>> "ISO8859-1"); >>>>> + assertEquals("\u00e1 \u00e2\t\u00e3 \u00e4 ", s); >>>>> + } >>>>> + >>>>> + public void testNonEncodedWordsAreIgnored() { >>>>> + assertEquals("", DecoderUtil.decodeEncodedWords("")); >>>>> + assertEquals("Yada yada", DecoderUtil.decodeEncodedWords("Yada >>>>> yada")); >>>>> + } >>>>> + >>>>> + public void testDecodeSomeEncodedWords() { >>>>> + assertEquals(" \u00e1\u00e2\u00e3\t\u00e4", >>>>> + >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?iso-8859-1?Q?_=20=e1=e2=E3=09=E4?=")); >>>>> + assertEquals("Word 1 ' \u00e2\u00e3\t\u00e4'. Word 2 ' >>>>> \u00e2\u00e3\t\u00e4'", >>>>> + DecoderUtil.decodeEncodedWords("Word 1 >>>>> '=?iso-8859-1?Q?_=20=e2=E3=09=E4?=" >>>>> + + "'. Word 2 >>>>> '=?iso-8859-1?q?_=20=e2=E3=09=E4?='")); >>>>> + assertEquals("=?iso-8859-YADA?Q?_=20=t1=e2=E3=09=E4?=", >>>>> + >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?iso-8859-YADA?Q?_=20=t1=e2=E3=09=E4?=")); >>>>> + assertEquals("A short text", >>>>> + >>>>> DecoderUtil.decodeEncodedWords("=?US-ASCII?B?QSBzaG9ydCB0ZXh0?=")); >>>>> + assertEquals("A short text again!", >>>>> + >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?US-ASCII?b?QSBzaG9ydCB0ZXh0IGFnYWluIQ==?=")); >>>>> + } >>>>> + >>>>> + public void testDecodeJapaneseEncodedWords() { >>>>> + String enc = >>>>> "=?ISO-2022-JP?B?GyRCTCQbKEobJEI+NRsoShskQkJ6GyhKGyRCOS0bKEo=?=" >>>>> + + >>>>> "=?ISO-2022-JP?B?GyRCOXAbKEobJEIiKBsoShskQiU1GyhKGyRCJSQbKEo=?=" >>>>> + + >>>>> "=?ISO-2022-JP?B?GyRCJUkbKEobJEIlUxsoShskQiU4GyhKGyRCJU0bKEo=?=" >>>>> + + >>>>> "=?ISO-2022-JP?B?GyRCJTkbKEobJEIkThsoShskQjdoGyhKGyRCRGobKEo=?=" >>>>> + + >>>>> "=?ISO-2022-JP?B?GyRCSEcbKEobJEIkRxsoShskQiQ5GyhKGyRCISobKEo=?="; >>>>> + >>>>> + String dec = DecoderUtil.decodeEncodedWords(enc); >>>>> + >>>>> >>>>> assertEquals("\u672A\u627F\u8AFE\u5E83\u544A\u203B\u30B5\u30A4\u30C9\u30D3" >>>>> + + >>>>> "\u30B8\u30CD\u30B9\u306E\u6C7A\u5B9A\u7248\u3067\u3059\uFF01", dec); >>>>> + } >>>>> + >>>>> + public void testInvalidEncodedWordsAreIgnored() { >>>>> + assertEquals("=?iso8859-1?Q?=", >>>>> DecoderUtil.decodeEncodedWords("=?iso8859-1?Q?=")); >>>>> + assertEquals("=?iso8859-1?b?=", >>>>> DecoderUtil.decodeEncodedWords("=?iso8859-1?b?=")); >>>>> + assertEquals("=?ISO-8859-1?Q?", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?")); >>>>> + assertEquals("=?ISO-8859-1?R?abc?=", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?R?abc?=")); >>>>> + assertEquals("test =?ISO-8859-1?R?abc?=", >>>>> DecoderUtil.decodeEncodedWords("test =?ISO-8859-1?R?abc?=")); >>>>> + } >>>>> + >>>>> + public void testEmptyEncodedTextIsIgnored() { >>>>> + // encoded-text requires at least one character according to >>>>> rfc >>>>> 2047 >>>>> + assertEquals("=?ISO-8859-1?Q??=", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q??=")); >>>>> + assertEquals("=?ISO-8859-1?B??=", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?B??=")); >>>>> + } >>>>> + >>>>> + // see MIME4J-104 >>>>> + public void testWhiteSpaceBetweenEncodedWordsGetsRemoved() { >>>>> + assertEquals("a", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?=")); >>>>> + assertEquals("a b", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= b")); >>>>> + assertEquals("ab", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= >>>>> =?ISO-8859-1?Q?b?=")); >>>>> + assertEquals("ab", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= >>>>> =?ISO-8859-1?Q?b?=")); >>>>> + assertEquals("ab", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?=\r\n >>>>> =?ISO-8859-1?Q?b?=")); >>>>> + assertEquals("a b", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a_b?=")); >>>>> + assertEquals("a b", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= >>>>> =?ISO-8859-2?Q?_b?=")); >>>>> + } >>>>> + >>>>> + // see MIME4J-138 >>>>> + public void testEncodedTextMayStartWithAnEqualsSign() { >>>>> + assertEquals(" foo", >>>>> DecoderUtil.decodeEncodedWords("=?utf-8?Q?=20foo?=")); >>>>> + assertEquals("Re: How to place a view at the bottom with a >>>>> 100% >>>>> width", >>>>> + >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?utf-8?Q?Re:=20How=20to=20place=20a=20view=20at=20the=20bottom?= >>>>> " >>>>> + + "=?utf-8?Q?=20with=20a=20100%=20width?=")); >>>>> + assertEquals("Test \u00fc and more", >>>>> + DecoderUtil.decodeEncodedWords("Test =?ISO-8859-1?Q?=FC_?= >>>>> =?ISO-8859-1?Q?and_more?=")); >>>>> + } >>>>> + >>>>> + public void testNonWhiteSpaceBetweenEncodedWordsIsRetained() { >>>>> + assertEquals("a b c", >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?= b >>>>> =?ISO-8859-1?Q?c?=")); >>>>> + assertEquals("a\rb\nc", >>>>> >>>>> DecoderUtil.decodeEncodedWords("=?ISO-8859-1?Q?a?=\rb\n=?ISO-8859-1?Q?c?=")); >>>>> + } >>>>> + >>>>> + public void testTextBeforeAndAfterEncodedWordIsRetained() { >>>>> + assertEquals(" a b c ", DecoderUtil.decodeEncodedWords(" >>>>> =?ISO-8859-1?Q?a?= b =?ISO-8859-1?Q?c?= ")); >>>>> + assertEquals("! a b c !", DecoderUtil.decodeEncodedWords("! >>>>> =?ISO-8859-1?Q?a?= b =?ISO-8859-1?Q?c?= !")); >>>>> + } >>>>> + >>>>> + public void testFunnyInputDoesNotRaiseOutOfMemoryError() { >>>>> + // Bug detected on June 7, 2005. Decoding the following string >>>>> caused OutOfMemoryError. >>>>> + assertEquals("=3?!!\\=?\"!g6P\"!Xp:\"!", >>>>> DecoderUtil.decodeEncodedWords("=3?!!\\=?\"!g6P\"!Xp:\"!")); >>>>> + } >>>>> +} >>>>> >>>>> Propchange: >>>>> >>>>> james/mime4j/branches/apache-mime4j-0.6/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> --- svn:mergeinfo (added) >>>>> +++ svn:mergeinfo Fri Dec 17 10:02:31 2010 >>>>> @@ -0,0 +1 @@ >>>>> >>>>> >>>>> +/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/codec/DecoderUtilTest.java:809204 >>>>> >>>>> >>>>> >>> > >
