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