blob: 1c29d6b4b1ed43fbb8cf49f1b88b5ff7f3e2f6a7 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed 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 android.text.util.cts;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.ToBeFixed;
import android.test.AndroidTestCase;
import android.text.util.Rfc822Token;
import android.text.util.Rfc822Tokenizer;
/**
* Test {@link Rfc822Tokenizer}.
*/
@TestTargetClass(Rfc822Tokenizer.class)
public class Rfc822TokenizerTest extends AndroidTestCase {
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "Rfc822Tokenizer",
args = {}
)
public void testConstructor() {
new Rfc822Tokenizer();
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "findTokenStart",
args = {java.lang.CharSequence.class, int.class}
)
@ToBeFixed(bug = "1695243", explanation = "the javadoc for findTokenStart() is incomplete." +
"1. not clear what is supposed to happen if text is null.")
public void testFindTokenStart() {
Rfc822Tokenizer rfc822Tokenizer = new Rfc822Tokenizer();
String token1 = "John Doe <janed@example.net> (work)";
String token2 = "Ann Lee <annlee@example.com> (secret)";
String token3 = "Charles Hanson (work)";
String token4 = "Lucia Smith <lsmith@example.com>";
String text = ", " + token1 + "\",\"" + token2 + ";" + token3 + " <;>" + token4;
final int TOKEN_START_POS_1 = text.indexOf(token1);
final int TOKEN_START_POS_2 = text.indexOf(token2);
final int TOKEN_START_POS_3 = text.indexOf(token3);
final int TOKEN_START_POS_4 = text.indexOf(token4);
assertEquals(0, rfc822Tokenizer.findTokenStart(text, 0));
assertEquals(0, rfc822Tokenizer.findTokenStart(text, TOKEN_START_POS_1));
assertEquals(TOKEN_START_POS_1, rfc822Tokenizer.findTokenStart(text, TOKEN_START_POS_2));
// token 2 is ignored because ',' between token1 and token2 is in a pair of \".
assertEquals(TOKEN_START_POS_1, rfc822Tokenizer.findTokenStart(text, TOKEN_START_POS_3));
assertEquals(TOKEN_START_POS_3, rfc822Tokenizer.findTokenStart(text, TOKEN_START_POS_4));
// token 4 is ignored because ',' between token3 and token4 is in <>.
assertEquals(TOKEN_START_POS_3, rfc822Tokenizer.findTokenStart(text, text.length()));
assertEquals(0, rfc822Tokenizer.findTokenStart(text, -1));
assertEquals(TOKEN_START_POS_3, rfc822Tokenizer.findTokenStart(text, text.length() + 1));
try {
rfc822Tokenizer.findTokenStart(null, TOKEN_START_POS_1);
fail("Should throw NullPointerException!");
} catch (NullPointerException e) {
// issue 1695243, not clear what is supposed to happen if text is null.
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "findTokenEnd",
args = {java.lang.CharSequence.class, int.class}
)
@ToBeFixed(bug = "1695243", explanation = "the javadoc for findTokenEnd() is incomplete." +
"1. not clear what is supposed to happen if text is null." +
"2. not clear whether it is supposed result if cursor is exceptional value.")
public void testFindTokenEnd() {
Rfc822Tokenizer rfc822Tokenizer = new Rfc822Tokenizer();
String token1 = "John Doe <janed@example.net> (work)";
String text1 = ", " + token1;
assertEquals(0, rfc822Tokenizer.findTokenEnd(text1, 0));
assertEquals(text1.length(), rfc822Tokenizer.findTokenEnd(text1, 1));
// issue 1695243
// not clear whether it is supposed result if cursor is exceptional value.
// bigger than the text length.
assertEquals(Integer.MAX_VALUE, rfc822Tokenizer.findTokenEnd(text1, Integer.MAX_VALUE));
// smaller than 0
try {
rfc822Tokenizer.findTokenEnd(text1, -1);
fail("Should throw IndexOutOfBoundsException!");
} catch (IndexOutOfBoundsException e) {
}
String token2 = "Ann Lee <annlee@example.com> (secret)";
String token3 = "Charles Hanson (work)";
String token4 = "Lucia Smith <lsmith@example.com>";
String text2 = token1 + "\",\"" + token2 + ";" + token3 + " <;>" + token4 + ",";
final int TOKEN_END_POS_2 = text2.indexOf(token2) + token2.length();
final int TOKEN_END_POS_4 = text2.indexOf(token4) + token4.length();
assertEquals(TOKEN_END_POS_2, rfc822Tokenizer.findTokenEnd(text2, 0));
assertEquals(TOKEN_END_POS_4, rfc822Tokenizer.findTokenEnd(text2, TOKEN_END_POS_2 + 1));
try {
rfc822Tokenizer.findTokenEnd(null, 0);
fail("Should throw NullPointerException!");
} catch (NullPointerException e) {
// issue 1695243, not clear what is supposed to happen if text is null.
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
method = "terminateToken",
args = {java.lang.CharSequence.class}
)
@ToBeFixed(bug = "1695243", explanation = "the javadoc for terminateToken() is incomplete." +
"1. not clear what is supposed result if text is null.")
public void testTerminateToken() {
Rfc822Tokenizer rfc822Tokenizer = new Rfc822Tokenizer();
String comma = ",";
String space = " ";
String text = "text";
assertEquals(text + comma + space, rfc822Tokenizer.terminateToken(text));
text = null;
// issue 1695243, not clear what is supposed result if text is null.
assertEquals(text + comma + space, rfc822Tokenizer.terminateToken(null));
}
@TestTargetNew(
level = TestLevel.SUFFICIENT ,
notes = "Broken syntax tolerance is hard to specify",
method = "tokenize",
args = {java.lang.CharSequence.class}
)
@ToBeFixed(bug = "", explanation = "" +
"1. the comment doesn't be cleaned before find next token." +
"2. the javadoc for findTokenEnd() is incomplete." +
" - not clear what is supposed result if text is null.")
public void testTokenize() {
Rfc822Token[] tokens = Rfc822Tokenizer.tokenize("");
assertEquals(0, tokens.length);
String text = "\"Berg\" (home) <berg\\@google.com>, tom\\@google.com (work)";
tokens = Rfc822Tokenizer.tokenize(text);
assertEquals(2, tokens.length);
localAssertEquals(tokens[0], "Berg", "berg\\@google.com", "home");
localAssertEquals(tokens[1], null, "tom\\@google.com", "work");
text = "Foo Bar (something) <foo\\@google.com>, blah\\@google.com (something)";
tokens = Rfc822Tokenizer.tokenize(text);
assertEquals(2, tokens.length);
localAssertEquals(tokens[0], "Foo Bar", "foo\\@google.com", "something");
localAssertEquals(tokens[1], null, "blah\\@google.com", "something");
try {
Rfc822Tokenizer.tokenize(null);
fail("Should throw NullPointerException!");
} catch (NullPointerException e) {
// issue 1695243, not clear what is supposed result if text is null
}
}
/**
* Assert the specified token's name, address and comment all equal specified ones.
* @param token the Rfc822Token to be asserted.
* @param name expected name.
* @param address expected address.
* @param comment expected comment.
*/
private void localAssertEquals(Rfc822Token token, String name,
String address, String comment) {
assertEquals(name, token.getName());
assertEquals(address, token.getAddress());
assertEquals(comment, token.getComment());
}
}