15afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler/* 25afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * Copyright (C) 2010 The Android Open Source Project 35afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * 45afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 55afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * you may not use this file except in compliance with the License. 65afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * You may obtain a copy of the License at 75afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * 85afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * http://www.apache.org/licenses/LICENSE-2.0 95afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * 105afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * Unless required by applicable law or agreed to in writing, software 115afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * distributed under the License is distributed on an "AS IS" BASIS, 125afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * See the License for the specific language governing permissions and 145afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * limitations under the License. 155afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler */ 165afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 172193962ca2b3157e79f731736afa2a0c972e778aMarc Blankpackage com.android.emailcommon.mail; 182193962ca2b3157e79f731736afa2a0c972e778aMarc Blank 193555dc03bf2243dc275c9c832702abbee3b64387Jerry Xieimport android.test.suitebuilder.annotation.SmallTest; 203555dc03bf2243dc275c9c832702abbee3b64387Jerry Xie 212193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.mail.PackedString; 225afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 235afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadlerimport junit.framework.TestCase; 245afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 255afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler/** 265afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * Tests of PackedString 275afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * 285afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * You can run this entire test case with: 295afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler * runtest -c com.android.email.mail.PackedStringTests email 305afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler */ 313555dc03bf2243dc275c9c832702abbee3b64387Jerry Xie@SmallTest 325afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadlerpublic class PackedStringTests extends TestCase { 335afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler /** Note: copied from actual class */ 345afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler private static final char DELIMITER_ELEMENT = '\1'; 355afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler private static final char DELIMITER_TAG = '\2'; 365afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 375afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // A packed string with tags and values 385afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler private static final String PACKED_STRING_TAGGED = "val1" + DELIMITER_TAG + "tag1" + 395afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler DELIMITER_ELEMENT + "val2" + DELIMITER_TAG + "tag2" + 405afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler DELIMITER_ELEMENT + "val3" + DELIMITER_TAG + "tag3" + 415afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler DELIMITER_ELEMENT + "val4" + DELIMITER_TAG + "tag4"; 425afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 435afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler public void testPackedString() { 445afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // Start with a packed string and make sure we can extract the correct Strings 455afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler PackedString ps = new PackedString(PACKED_STRING_TAGGED); 465afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val1", ps.get("tag1")); 475afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val2", ps.get("tag2")); 485afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val3", ps.get("tag3")); 495afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val4", ps.get("tag4")); 505afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertNull(ps.get("tag100")); 515afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler } 525afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 535afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // test the builder in "create mode" 545afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler public void testPackedStringBuilderCreate() { 555afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler PackedString.Builder b = new PackedString.Builder(); 565afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag1", "value1"); 575afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag2", "value2"); 585afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag3", "value3"); 595afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag4", "value4"); 605afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // can't use simple string compare on output, because order not guaranteed 615afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // for now, we'll just pump into another one and test results 625afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler String packedOut = b.toString(); 635afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler PackedString.Builder b2 = new PackedString.Builder(packedOut); 645afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("value1", b2.get("tag1")); 655afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("value2", b2.get("tag2")); 665afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("value3", b2.get("tag3")); 675afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("value4", b2.get("tag4")); 685afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertNull(b2.get("tag100")); 695afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler } 705afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 715afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // test the builder in "edit mode" 725afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler public void testPackedStringBuilderEdit() { 735afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // Start with a Builder based on a non-empty packed string 745afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler PackedString.Builder b = new PackedString.Builder(PACKED_STRING_TAGGED); 755afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // Test readback in-place 765afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val1", b.get("tag1")); 775afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val2", b.get("tag2")); 785afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val3", b.get("tag3")); 795afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val4", b.get("tag4")); 805afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertNull(b.get("tag100")); 815afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 825afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // Test modifications in-place 835afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag2", "TWO"); // edit 845afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag3", null); // delete 855afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler b.put("tag5", "value5"); // add 865afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // Read-back modifications in place 875afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val1", b.get("tag1")); 885afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("TWO", b.get("tag2")); // edited 895afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals(null, b.get("tag3")); // deleted 905afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val4", b.get("tag4")); 915afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("value5", b.get("tag5")); // added 925afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertNull(b.get("tag100")); 935afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler 945afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler // Confirm resulting packed string is as-expected 955afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler String packedOut = b.toString(); 965afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler PackedString.Builder b2 = new PackedString.Builder(packedOut); 975afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val1", b2.get("tag1")); 985afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("TWO", b2.get("tag2")); 995afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals(null, b2.get("tag3")); 1005afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("val4", b2.get("tag4")); 1015afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertEquals("value5", b2.get("tag5")); 1025afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler assertNull(b2.get("tag100")); 1035afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler } 1045afa18779138e08d6e6cce8b5f428475f8a0b4b1Andrew Stadler} 105