Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package com.android.providers.contacts.util;
     18 
     19 import static com.android.providers.contacts.util.DbQueryUtils.checkForSupportedColumns;
     20 import static com.android.providers.contacts.util.DbQueryUtils.concatenateClauses;
     21 import static com.android.providers.contacts.util.DbQueryUtils.escapeLikeValue;
     22 
     23 import android.content.ContentValues;
     24 import android.test.suitebuilder.annotation.SmallTest;
     25 
     26 import com.android.common.content.ProjectionMap;
     27 import com.android.providers.contacts.EvenMoreAsserts;
     28 
     29 import junit.framework.TestCase;
     30 
     31 /**
     32  * Unit tests for the {@link DbQueryUtils} class.
     33  * Run the test like this:
     34  * <code>
     35  * runtest -c com.android.providers.contacts.util.DBQueryUtilsTest contactsprov
     36  * </code>
     37  */
     38 @SmallTest
     39 public class DBQueryUtilsTest extends TestCase {
     40     public void testGetEqualityClause() {
     41         assertEquals("(foo = 'bar')", DbQueryUtils.getEqualityClause("foo", "bar"));
     42         assertEquals("(foo = 2)", DbQueryUtils.getEqualityClause("foo", 2));
     43     }
     44 
     45     public void testGetInEqualityClause() {
     46         assertEquals("(foo != 2)", DbQueryUtils.getInequalityClause("foo", 2));
     47     }
     48 
     49     public void testConcatenateClauses() {
     50         assertEquals("(first)", concatenateClauses("first"));
     51         assertEquals("(first) AND (second)", concatenateClauses("first", "second"));
     52         assertEquals("(second)", concatenateClauses("second", null));
     53         assertEquals("(second)", concatenateClauses(null, "second"));
     54         assertEquals("(second)", concatenateClauses(null, "second", null));
     55         assertEquals("(a) AND (b) AND (c)", concatenateClauses(null, "a", "b", null, "c"));
     56         assertEquals("(WHERE \"a\" = \"b\")", concatenateClauses(null, "WHERE \"a\" = \"b\""));
     57     }
     58 
     59     public void testCheckForSupportedColumns() {
     60         final ProjectionMap projectionMap = new ProjectionMap.Builder()
     61                 .add("A").add("B").add("C").build();
     62         final ContentValues values = new ContentValues();
     63         values.put("A", "?");
     64         values.put("C", "?");
     65         // No exception expected.
     66         checkForSupportedColumns(projectionMap, values);
     67         // Expect exception for invalid column.
     68         EvenMoreAsserts.assertThrows(IllegalArgumentException.class, new Runnable() {
     69             @Override
     70             public void run() {
     71                 values.put("D", "?");
     72                 checkForSupportedColumns(projectionMap, values);
     73             }
     74         });
     75     }
     76 
     77     public void testEscapeLikeValuesEscapesUnderscores() {
     78         StringBuilder sb = new StringBuilder();
     79         DbQueryUtils.escapeLikeValue(sb, "my_test_string", '\\');
     80         assertEquals("my\\_test\\_string", sb.toString());
     81 
     82         sb = new StringBuilder();
     83         DbQueryUtils.escapeLikeValue(sb, "_test_", '\\');
     84         assertEquals("\\_test\\_", sb.toString());
     85     }
     86 
     87     public void testEscapeLikeValuesEscapesPercents() {
     88         StringBuilder sb = new StringBuilder();
     89         escapeLikeValue(sb, "my%test%string", '\\');
     90         assertEquals("my\\%test\\%string", sb.toString());
     91 
     92         sb = new StringBuilder();
     93         escapeLikeValue(sb, "%test%", '\\');
     94         assertEquals("\\%test\\%", sb.toString());
     95     }
     96 
     97     public void testEscapeLikeValuesNoChanges() {
     98         StringBuilder sb = new StringBuilder();
     99         escapeLikeValue(sb, "my test string", '\\');
    100         assertEquals("my test string", sb.toString());
    101     }
    102 }
    103