blob: e57d9a4b75d33e4e411a919bff97004e81937d9f [file] [log] [blame]
package com.android.bluetooth.tests;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.test.AndroidTestCase;
import android.util.Log;
import com.android.bluetooth.map.BluetoothMapAppParams;
import com.android.bluetooth.map.BluetoothMapSmsPdu;
import com.android.bluetooth.map.BluetoothMapUtils;
import com.android.bluetooth.map.BluetoothMapUtils.TYPE;
import com.android.bluetooth.map.BluetoothMapbMessage;
import com.android.bluetooth.map.BluetoothMapbMessageMime;
import com.android.bluetooth.map.BluetoothMapbMessageSms;
/***
*
* Test cases for the bMessage class. (encoding and decoding)
*
*/
public class BluetoothMapbMessageTest extends AndroidTestCase {
protected static String TAG = "BluetoothMapbMessageTest";
protected static final boolean D = true;
public BluetoothMapbMessageTest() {
super();
}
/***
* Test encoding of a simple SMS text message (UTF8). This validates most parameters.
*/
public void testSmsEncodeText() {
BluetoothMapbMessageSms msg = new BluetoothMapbMessageSms();
String str1 =
"BEGIN:BMSG\r\n" +
"VERSION:1.0\r\n" +
"STATUS:UNREAD\r\n" +
"TYPE:SMS_GSM\r\n" +
"FOLDER:telecom/msg/inbox\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Casper Bonde\r\n" +
"N:Bonde,Casper\r\n" +
"TEL:+4512345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Casper Bonde\r\n" +
"N:Bonde,Casper\r\n" +
"TEL:+4512345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BENV\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Jens Hansen\r\n" +
"N:\r\n" +
"TEL:+4512345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Jens Hansen\r\n" +
"N:\r\n" +
"TEL:+4512345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BBODY\r\n" +
"CHARSET:UTF-8\r\n" +
"LENGTH:45\r\n" +
"BEGIN:MSG\r\n" +
"This is a short message\r\n" +
"END:MSG\r\n" +
"END:BBODY\r\n" +
"END:BENV\r\n" +
"END:BMSG\r\n";
String encoded;
String[] phone = {"+4512345678", "+4587654321"};
String[] email = {"casper@email.add", "bonde@email.add"};
msg.addOriginator("Bonde,Casper", "Casper Bonde", phone, email, null, null);
msg.addOriginator("Bonde,Casper", "Casper Bonde", phone, email, null, null);
msg.addRecipient("", "Jens Hansen", phone, email, null, null);
msg.addRecipient("", "Jens Hansen", phone, email, null, null);
msg.setFolder("inbox");
msg.setSmsBody("This is a short message");
msg.setStatus(false);
msg.setType(TYPE.SMS_GSM);
try {
encoded = new String(msg.encode());
if(D) Log.d(TAG, encoded);
assertTrue(str1.equals(encoded));
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Encoding failed.",e);
assertTrue("Encoding failed.", true);
}
}
/***
* Test native Deliver PDU encoding (decoding not possible), based on the example in the MAP 1.1 specification.
* The difference between this PDU, and the one in the specification:
* - The invalid SC address 0191 is replaced with no address 00
* - The "No more messages flag" is set (bit 2 in the second byte)
* - The phone number type is changed from private 91 to international 81
* - The time is changed to local time, since the time zone cannot be controlled through the API
*/
public void testSmsEncodeNativeDeliverPdu() {
BluetoothMapbMessageSms msg = new BluetoothMapbMessageSms();
SimpleDateFormat format = new SimpleDateFormat("yyMMddHHmmss");
Date date = new Date(System.currentTimeMillis());
String timeStr = format.format(date); // Format to YYMMDDTHHMMSS UTC time
ByteArrayOutputStream scTime = new ByteArrayOutputStream(7);
StringBuilder scTimeSb = new StringBuilder();
byte[] timeChars;
try {
timeChars = timeStr.getBytes("US-ASCII");
} catch (UnsupportedEncodingException e1) {
assertTrue("Failed to extract bytes from string using US-ASCII", true);
return;
}
for(int i = 0, n = timeStr.length(); i < n; i+=2) {
scTime.write((timeChars[i+1]-0x30) << 4 | (timeChars[i]-0x30)); // Offset from ascii char to decimal value
}
Calendar cal = Calendar.getInstance();
int offset = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)) / (15 * 60 * 1000); /* offset in quarters of an hour */
String offsetString;
if(offset < 0) {
offsetString = String.format("%1$02d", -(offset));
char[] offsetChars = offsetString.toCharArray();
scTime.write((offsetChars[1]-0x30) << 4 | 0x40 | (offsetChars[0]-0x30));
}
else {
offsetString = String.format("%1$02d", offset);
char[] offsetChars = offsetString.toCharArray();
scTime.write((offsetChars[1]-0x30) << 4 | (offsetChars[0]-0x30));
}
byte[] scTimeData = scTime.toByteArray();
for(int i = 0; i < scTimeData.length; i++) {
scTimeSb.append(Integer.toString((scTimeData[i] >> 4) & 0x0f,16)); // MS-nibble first
scTimeSb.append(Integer.toString( scTimeData[i] & 0x0f,16));
}
if(D) Log.v(TAG, "Generated time string: " + scTimeSb.toString());
String expected =
"BEGIN:BMSG\r\n" +
"VERSION:1.0\r\n" +
"STATUS:UNREAD\r\n" +
"TYPE:SMS_GSM\r\n" +
"FOLDER:telecom/msg/inbox\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Casper Bonde\r\n" +
"N:Bonde,Casper\r\n" +
"TEL:00498912345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BENV\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Jens Hansen\r\n" +
"N:\r\n" +
"TEL:00498912345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BBODY\r\n" +
"ENCODING:G-7BIT\r\n" +
"LENGTH:94\r\n" +
"BEGIN:MSG\r\n" +
"00040E81009498214365870000" + scTimeSb.toString() +
"11CC32FD34079DDF20737A8E4EBBCF21\r\n" +
"END:MSG\r\n" +
"END:BBODY\r\n" +
"END:BENV\r\n" +
"END:BMSG\r\n";
String encoded;
String[] phone = {"00498912345678", "+4587654321"};
String[] email = {"casper@email.add", "bonde@email.add"};
msg.addOriginator("Bonde,Casper", "Casper Bonde", phone, email, null, null);
msg.addRecipient("", "Jens Hansen", phone, email, null, null);
msg.setFolder("inbox");
/* TODO: extract current time, and build the expected string */
msg.setSmsBodyPdus(BluetoothMapSmsPdu.getDeliverPdus("Let's go fishing!", "00498912345678", date.getTime()));
msg.setStatus(false);
msg.setType(TYPE.SMS_GSM);
try {
byte[] encodedBytes = msg.encode();
// InputStream is = new ByteArrayInputStream(encodedBytes);
encoded = new String(encodedBytes);
// BluetoothMapbMessage newMsg = BluetoothMapbMessage.parse(is, BluetoothMapAppParams.CHARSET_NATIVE);
// String decoded = ((BluetoothMapbMessageSms) newMsg).getSmsBody();
if(D) Log.d(TAG, "\nExpected: \n" + expected);
if(D) Log.d(TAG, "\nEncoded: \n" + encoded);
// if(D) Log.d(TAG, "\nDecoded: \n" + decoded);
assertTrue(expected.equalsIgnoreCase(encoded));
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Encoding failed.",e);
assertTrue("Encoding failed.", true);
}
}
/***
* Test native Submit PDU encoding and decoding, based on the example in the MAP 1.1 specification.
* The difference between this PDU, and the one in the specification:
* - The invalid SC address 0191 is replaced with no address 00
* - The PDU is converted to a submit PDU by adding the TP-MR and removing the service center time stamp.
* - The phone number type is changed from private 91 to international 81
*/
public void testSmsEncodeDecodeNativeSubmitPdu() {
BluetoothMapbMessageSms msg = new BluetoothMapbMessageSms();
String expected =
"BEGIN:BMSG\r\n" +
"VERSION:1.0\r\n" +
"STATUS:UNREAD\r\n" +
"TYPE:SMS_GSM\r\n" +
"FOLDER:telecom/msg/outbox\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Casper Bonde\r\n" +
"N:Bonde,Casper\r\n" +
"TEL:00498912345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BENV\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Jens Hansen\r\n" +
"N:\r\n" +
"TEL:00498912345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BBODY\r\n" +
"ENCODING:G-7BIT\r\n" +
"LENGTH:82\r\n" +
"BEGIN:MSG\r\n" + /*Length 11 */
"0001000E8100949821436587000011CC32FD34079DDF20737A8E4EBBCF21\r\n" + /* Length 62 */
"END:MSG\r\n" + /* Length 9 */
"END:BBODY\r\n" +
"END:BENV\r\n" +
"END:BMSG\r\n";
String encoded;
String[] phone = {"00498912345678", "+4587654321"};
String[] email = {"casper@email.add", "bonde@email.add"};
msg.addOriginator("Bonde,Casper", "Casper Bonde", phone, email, null, null);
msg.addRecipient("", "Jens Hansen", phone, email, null, null);
msg.setFolder("outbox");
/* TODO: extract current time, and build the expected string */
msg.setSmsBodyPdus(BluetoothMapSmsPdu.getSubmitPdus("Let's go fishing!", "00498912345678"));
msg.setStatus(false);
msg.setType(TYPE.SMS_GSM);
try {
byte[] encodedBytes = msg.encode();
InputStream is = new ByteArrayInputStream(encodedBytes);
encoded = new String(encodedBytes);
BluetoothMapbMessage newMsg = BluetoothMapbMessage.parse(is, BluetoothMapAppParams.CHARSET_NATIVE);
String decoded = ((BluetoothMapbMessageSms) newMsg).getSmsBody();
if(D) Log.d(TAG, "\nCalling encoder on decoded message to log its content");
newMsg.encode();
if(D) Log.d(TAG, "\nExpected: \n" + expected);
if(D) Log.d(TAG, "\nEncoded: \n" + encoded);
if(D) Log.d(TAG, "\nDecoded: \n" + decoded);
assertTrue("The encoded bMessage do not match the expected.", expected.equalsIgnoreCase(encoded));
assertTrue("The decoded text is \"" + decoded + "\" - expected \"Let's go fishing!\"", decoded.equalsIgnoreCase("Let's go fishing!"));
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Encoding failed.",e);
assertTrue("Encoding failed.", true);
}
}
/***
* Test native Submit PDU encoding and decoding, based on the example in the MAP 1.1 specification.
* The difference between this PDU, and the one in the specification:
* - The invalid SC address 0191 is replaced with no address 00
* - The PDU is converted to a submit PDU by adding the TP-MR and removing the service center time stamp.
* - The phone number type is changed from private 91 to international 81
*/
public void testSmsEncodeDecodeNativeSubmitPduWithSc() {
BluetoothMapbMessageSms msg = new BluetoothMapbMessageSms();
String encoded =
"BEGIN:BMSG\r\n" +
"VERSION:1.0\r\n" +
"STATUS:UNREAD\r\n" +
"TYPE:SMS_GSM\r\n" +
"FOLDER:telecom/msg/outbox\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Casper Bonde\r\n" +
"N:Bonde,Casper\r\n" +
"TEL:00498912345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BENV\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Jens Hansen\r\n" +
"N:\r\n" +
"TEL:00498912345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BBODY\r\n" +
"ENCODING:G-7BIT\r\n" +
"LENGTH:58 \r\n" +
"BEGIN:MSG\r\n" + /*Length 11 */
"018001000B912184254590F500000346F61B\r\n" + /* Length 38 */
"END:MSG\r\n" + /* Length 9 */
"END:BBODY\r\n" +
"END:BENV\r\n" +
"END:BMSG\r\n";
try {
String expected = "Flo";
InputStream is = new ByteArrayInputStream(encoded.getBytes("UTF-8"));
BluetoothMapbMessage newMsg = BluetoothMapbMessage.parse(is, BluetoothMapAppParams.CHARSET_NATIVE);
String decoded = ((BluetoothMapbMessageSms) newMsg).getSmsBody();
if(D) Log.d(TAG, "\nEncoded: \n" + encoded);
if(D) Log.d(TAG, "\nDecoded: \n" + decoded);
assertTrue("Decoded string (" + decoded + ") did not match expected (" + expected + ")", expected.equals(decoded));
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Encoding failed.",e);
assertTrue("Encoding failed.", false);
}
}
/***
* Validate that the folder is correctly truncated to 512 bytes, if a longer folder path
* is supplied.
*/
public void testFolderLengthTruncation() {
String folder = "";
int levelCount = 0;
while(folder.length()<640)
folder += "/folder" + levelCount++;
String expected = folder.substring(folder.length()-512, folder.length());
BluetoothMapbMessageSms msg = new BluetoothMapbMessageSms();
msg.setFolder(folder);
msg.setStatus(false);
msg.setType(TYPE.SMS_GSM);
try {
byte[] encoded = msg.encode();
InputStream is = new ByteArrayInputStream(encoded);
if(D) Log.d(TAG, new String(encoded));
BluetoothMapbMessage newMsg = BluetoothMapbMessage.parse(is, BluetoothMapAppParams.CHARSET_UTF8);
assertTrue("Wrong length expected 512, got " + expected.length(), expected.length() == 512);
Log.d(TAG, "expected: " + expected);
Log.d(TAG, "newMsg.getFolder(): " + newMsg.getFolder());
assertTrue("Folder string did not match", expected.equals(newMsg.getFolder()));
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Encoding failed.",e);
assertTrue("Encoding failed", false);
}
}
/***
* Test multipart message decoding.
*/
public void testSmsMultipartDecode() {
BluetoothMapbMessageSms msg = new BluetoothMapbMessageSms();
String encoded =
"BEGIN:BMSG\r\n" +
"VERSION:1.0\r\n" +
"STATUS:READ\r\n" +
"TYPE:SMS_GSM\r\n" +
"FOLDER:/telecom/msg/outbox\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:2.1\r\n" +
"N:12485254094 \r\n" +
"TEL:12485254094\r\n" +
"END:VCARD\r\n" +
"BEGIN:BENV\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:2.1\r\n" +
"N:+12485254095 \r\n" +
"TEL:+12485254095\r\n" +
"END:VCARD\r\n" +
"BEGIN:BBODY\r\n" +
"ENCODING:G-7BIT\r\n" +
"LENGTH:762\r\n" +
"BEGIN:MSG\r\n" +
"018041000B912184254590F50000A0050003010301A8E8F41C949E83C220F69B0E7A9B41F7B79C3C07D1DF20F35BDE068541E3B77B1CA697DD617A990C6A97E7F3F0B90C0ABBC9203ABA0C32A7E5733A889E6E9741F437888E2E83E66537B92C07A5DBED32391DA697D97990FB4D4F9BF3A07619B476BFEFA03B3A4C07E5DF7550585E06B9DF74D0BC2E2F83F2EF3A681C7683C86F509A0EBABFEB\r\n" +
"END:MSG\r\n" +
"BEGIN:MSG\r\n" +
"018041000B912184254590F50000A0050003010302C820767A5D06D1D16550DA4D2FBBC96532485E1EA7E1E9B29B0E82B3CBE17919644EBBC9A0779D0EA2A3CB20735A3EA783E8E8B4FB0CA2BF41E437C8FDA683E6757919947FD741E3B01B447E83D274D0FD5D679341ECB7BD0C4AD341F7F01C44479741E6B47C4E0791C379D0DB0C6AE741F2F2BCDE2E83CC6F3928FFAECB41E57638CD06A5E7\r\n" +
"END:MSG\r\n" +
"BEGIN:MSG\r\n" +
"018041000B912184254590F500001A050003010303DC6F3A685E979741F9771D340EBB41E437\r\n" +
"END:MSG\r\n" +
"END:BBODY\r\n" +
"END:BENV\r\n" +
"END:BMSG\r\n";
try {
InputStream is = new ByteArrayInputStream(encoded.getBytes("UTF-8"));
BluetoothMapbMessage newMsg = BluetoothMapbMessage.parse(is, BluetoothMapAppParams.CHARSET_NATIVE);
String decoded = ((BluetoothMapbMessageSms) newMsg).getSmsBody();
if(D) Log.d(TAG, "\nEncoded: \n" + encoded);
if(D) Log.d(TAG, "\nDecoded: \n" + decoded);
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Decoding failed.",e);
assertTrue("Decoding failed.", false);
}
}
/***
* Test encoding of a simple MMS text message (UTF8). This validates most parameters.
*/
public void testMmsEncodeText() {
BluetoothMapbMessageMime msg = new BluetoothMapbMessageMime ();
String str1 =
"BEGIN:BMSG\r\n" +
"VERSION:1.0\r\n" +
"STATUS:UNREAD\r\n" +
"TYPE:MMS\r\n" +
"FOLDER:telecom/msg/inbox\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Casper Bonde\r\n" +
"N:Bonde,Casper\r\n" +
"TEL:+4512345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BENV\r\n" +
"BEGIN:VCARD\r\n" +
"VERSION:3.0\r\n" +
"FN:Jørn Hansen\r\n" +
"N:\r\n" +
"TEL:+4512345678\r\n" +
"TEL:+4587654321\r\n" +
"EMAIL:casper@email.add\r\n" +
"EMAIL:bonde@email.add\r\n" +
"END:VCARD\r\n" +
"BEGIN:BBODY\r\n" +
"CHARSET:UTF-8\r\n" +
"LENGTH:184\r\n" +
"BEGIN:MSG\r\n" +
"From: \"Jørn Hansen\" <bonde@email.add>;\r\n" +
"To: \"Jørn Hansen\" <bonde@email.add>;\r\n" +
"Cc: Jens Hansen <bonde@email.add>;\r\n" +
"\r\n" +
"This is a short message\r\n" +
"\r\n" +
"<partNameimage>\r\n" +
"\r\n" +
"END:MSG\r\n" +
"END:BBODY\r\n" +
"END:BENV\r\n" +
"END:BMSG\r\n";
String encoded;
String[] phone = {"+4512345678", "+4587654321"};
String[] email = {"casper@email.add", "bonde@email.add"};
msg.addOriginator("Bonde,Casper", "Casper Bonde", phone, email, null, null);
msg.addRecipient("", "Jørn Hansen", phone, email, null, null);
msg.setFolder("inbox");
msg.setIncludeAttachments(false);
msg.addTo("Jørn Hansen", "bonde@email.add");
msg.addCc("Jens Hansen", "bonde@email.add");
msg.addFrom("Jørn Hansen", "bonde@email.add");
BluetoothMapbMessageMime .MimePart part = msg.addMimePart();
part.mPartName = "partNameText";
part.mContentType ="dsfajfdlk/text/asdfafda";
try {
part.mData = new String("This is a short message\r\n").getBytes("UTF-8");
}
catch (UnsupportedEncodingException e) {
if(D) Log.e(TAG, "UnsupportedEncodingException should never happen???", e);
assertTrue(false);
}
part = msg.addMimePart();
part.mPartName = "partNameimage";
part.mContentType = "dsfajfdlk/image/asdfafda";
part.mData = null;
msg.setStatus(false);
msg.setType(TYPE.MMS);
msg.updateCharset();
try {
encoded = new String(msg.encode());
if(D) Log.d(TAG, encoded);
assertTrue(str1.equals(encoded));
} catch (UnsupportedEncodingException e) {
Log.d(TAG, "Encoding failed.",e);
assertTrue("Encoding failed.", true);
}
}
public void testQuotedPrintable() {
testQuotedPrintableIso8859_1();
testQuotedPrintableUTF_8();
}
public void testQuotedPrintableIso8859_1() {
String charset = "iso-8859-1";
String input = "Hello, here are some danish letters: =E6=F8=E5.\r\n" +
"Please check that you are able to remove soft " +
"line breaks and handle '=3D' =\r\ncharacters within the text. \r\n" +
"Just a sequence of non optimal characters to make " +
"it complete: !\"#$@[\\]^{|}=\r\n~\r\n\r\n" +
"Thanks\r\n" +
"Casper";
String expected = "Hello, here are some danish letters: æøå.\r\n" +
"Please check that you are able to remove soft " +
"line breaks and handle '=' characters within the text. \r\n" +
"Just a sequence of non optimal characters to make " +
"it complete: !\"#$@[\\]^{|}~\r\n\r\n" +
"Thanks\r\n" +
"Casper";
String output;
output = new String(BluetoothMapUtils.quotedPrintableToUtf8(input, charset));
if(D) Log.d(TAG, "\nExpected: \n" + expected);
if(D) Log.d(TAG, "\nOutput: \n" + output);
assertTrue(output.equals(expected));
}
public void testQuotedPrintableUTF_8() {
String charset = "utf-8";
String input = "Hello, here are some danish letters: =C3=A6=C3=B8=C3=A5.\r\n" +
"Please check that you are able to remove soft " +
"line breaks and handle '=3D' =\r\ncharacters within the text. \r\n" +
"Just a sequence of non optimal characters to make " +
"it complete: !\"#$@[\\]^{|}=\r\n~\r\n\r\n" +
"Thanks\r\n" +
"Casper";
String expected = "Hello, here are some danish letters: æøå.\r\n" +
"Please check that you are able to remove soft " +
"line breaks and handle '=' characters within the text. \r\n" +
"Just a sequence of non optimal characters to make " +
"it complete: !\"#$@[\\]^{|}~\r\n\r\n" +
"Thanks\r\n" +
"Casper";
String output;
output = new String(BluetoothMapUtils.quotedPrintableToUtf8(input, charset));
if(D) Log.d(TAG, "\nExpected: \n" + expected);
if(D) Log.d(TAG, "\nOutput: \n" + output);
assertTrue(output.equals(expected));
}
}