1654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank/* 2654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * Copyright (C) 2010 The Android Open Source Project 3654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * 4654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * Licensed under the Apache License, Version 2.0 (the "License"); 5654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * you may not use this file except in compliance with the License. 6654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * You may obtain a copy of the License at 7654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * 8654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * http://www.apache.org/licenses/LICENSE-2.0 9654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * 10654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * Unless required by applicable law or agreed to in writing, software 11654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * distributed under the License is distributed on an "AS IS" BASIS, 12654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * See the License for the specific language governing permissions and 14654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * limitations under the License. 15654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank */ 16654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 1731d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blankpackage com.android.emailcommon.utility; 18654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 194cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onukiimport com.android.email.provider.EmailProvider; 204cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onukiimport com.android.email.provider.ProviderTestUtils; 21f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account; 22a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent; 23a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Attachment; 24a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Message; 25a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.MessageColumns; 2653ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komaloimport com.android.emailcommon.provider.Mailbox; 27654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 28654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blankimport android.content.Context; 297093746dd5017b1dacb726eb7b083922de15612eMakoto Onukiimport android.net.Uri; 30654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blankimport android.test.ProviderTestCase2; 31654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blankimport android.test.suitebuilder.annotation.MediumTest; 32654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 334dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blankimport java.io.File; 344dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blankimport java.io.FileWriter; 354dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blankimport java.io.IOException; 364dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 37654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank/** 38654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * This is a series of medium tests for the Utility class. These tests must be locally 39654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * complete - no server(s) required. 40654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * 41654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank * You can run this entire test case with: 420ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank * runtest -c com.android.emailcommon.utility.UtilityMediumTests email 43654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank */ 44654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank@MediumTest 45654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blankpublic class UtilityMediumTests extends ProviderTestCase2<EmailProvider> { 46654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 47654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank EmailProvider mProvider; 48654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank Context mMockContext; 49654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 50654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank public UtilityMediumTests() { 5131d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank super(EmailProvider.class, EmailContent.AUTHORITY); 52654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank } 53654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 54654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank @Override 55654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank public void setUp() throws Exception { 56654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank super.setUp(); 57654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank mMockContext = getMockContext(); 58654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank } 59654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank 60654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank public void testFindExistingAccount() { 61654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank // Create two accounts 62654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank Account account1 = ProviderTestUtils.setupAccount("account1", false, mMockContext); 63654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank account1.mHostAuthRecv = ProviderTestUtils.setupHostAuth("ha1", -1, false, mMockContext); 64654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank account1.mHostAuthSend = ProviderTestUtils.setupHostAuth("ha1", -1, false, mMockContext); 65654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank account1.save(mMockContext); 66654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank Account account2 = ProviderTestUtils.setupAccount("account2", false, mMockContext); 67654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank account2.mHostAuthRecv = ProviderTestUtils.setupHostAuth("ha2", -1, false, mMockContext); 68654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank account2.mHostAuthSend = ProviderTestUtils.setupHostAuth("ha2", -1, false, mMockContext); 69654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank account2.save(mMockContext); 70654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank // Make sure we can find them 71654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank Account acct = Utility.findExistingAccount(mMockContext, -1, "address-ha1", "login-ha1"); 72654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank assertNotNull(acct); 73654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank assertEquals("account1", acct.mDisplayName); 74654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank acct = Utility.findExistingAccount(mMockContext, -1, "address-ha2", "login-ha2"); 75654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank assertNotNull(acct); 76654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank assertEquals("account2", acct.mDisplayName); 77654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank // We shouldn't find account 78654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank acct = Utility.findExistingAccount(mMockContext, -1, "address-ha3", "login-ha3"); 79654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank assertNull(acct); 80654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank // Try to find account1, excluding account1 81654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank acct = Utility.findExistingAccount(mMockContext, account1.mId, "address-ha1", "login-ha1"); 82654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank assertNull(acct); 830ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank 840ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank // Make sure we properly handle an underscore in the login name 850ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank Account account3 = ProviderTestUtils.setupAccount("account3", false, mMockContext); 860ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank account3.mHostAuthRecv = ProviderTestUtils.setupHostAuth("foo_ba", -1, false, mMockContext); 870ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank account3.mHostAuthSend = ProviderTestUtils.setupHostAuth("foo_ba", -1, false, mMockContext); 880ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank account3.save(mMockContext); 890ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank acct = Utility.findExistingAccount(mMockContext, -1, "address-foo_ba", "login-foo.ba"); 900ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank assertNull(acct); 910ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank acct = Utility.findExistingAccount(mMockContext, -1, "address-foo_ba", "login-foo_ba"); 920ff0e155c51250bedc35b5b585003c8cb87f2244Marc Blank assertNotNull(acct); 93654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank } 944dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 954dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank public void testAttachmentExists() throws IOException { 964dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank Account account = ProviderTestUtils.setupAccount("account", true, mMockContext); 974dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // We return false with null attachment 984dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertFalse(Utility.attachmentExists(mMockContext, null)); 994dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 1004dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank Mailbox mailbox = 1014dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank ProviderTestUtils.setupMailbox("mailbox", account.mId, true, mMockContext); 1024dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank Message message = ProviderTestUtils.setupMessage("foo", account.mId, mailbox.mId, false, 1034dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank true, mMockContext); 1044dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank Attachment attachment = ProviderTestUtils.setupAttachment(message.mId, "filename.ext", 1054dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 69105, true, mMockContext); 1064dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank attachment.mContentBytes = null; 1074dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // With no contentUri, we should return false 1084dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertFalse(Utility.attachmentExists(mMockContext, attachment)); 1094dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 1104dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank attachment.mContentBytes = new byte[0]; 1114dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // With contentBytes set, we should return true 1124dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertTrue(Utility.attachmentExists(mMockContext, attachment)); 1134dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 1144dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank attachment.mContentBytes = null; 1154dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // Generate a file name in our data directory, and use that for contentUri 1164dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank File file = mMockContext.getFileStreamPath("test.att"); 1174dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // Delete the file if it already exists 1184dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank if (file.exists()) { 1194dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertTrue(file.delete()); 1204dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank } 1214dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // Should return false, because the file doesn't exist 1224dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertFalse(Utility.attachmentExists(mMockContext, attachment)); 1234dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank 1244dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertTrue(file.createNewFile()); 1254dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // Put something in the file 1264dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank FileWriter writer = new FileWriter(file); 1274dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank writer.write("Foo"); 1284dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank writer.flush(); 1294dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank writer.close(); 1304dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank attachment.mContentUri = "file://" + file.getAbsolutePath(); 1314dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank // Now, this should return true 1324dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank assertTrue(Utility.attachmentExists(mMockContext, attachment)); 1334dcb1c5fdaacc40309b77af2a32532bc60218523Marc Blank } 1344cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 1357093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki public void testBuildLimitOneUri() { 1367093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki // EmailProvider supports "?limit=" 137bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook assertEquals(Uri.parse("content://com.android.email.provider?limit=1"), 138bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Utility.buildLimitOneUri(Uri.parse("content://com.android.email.provider"))); 1397093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki 1407093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki // Others don't -- so don't add it. 141bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook assertEquals(Uri.parse("content://com.android.email.attachmentprovider"), 142bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook Utility.buildLimitOneUri(Uri.parse("content://com.android.email.attachmentprovider" 1437093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki ))); 1447093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki assertEquals(Uri.parse("content://gmail-ls/android@gmail.com"), 1457093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki Utility.buildLimitOneUri(Uri.parse("content://gmail-ls/android@gmail.com" 1467093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki ))); 1477093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki } 1487093746dd5017b1dacb726eb7b083922de15612eMakoto Onuki 1494cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki public void testGetFirstRowLong() { 1504cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext); 1514cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext); 1524cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext); 1534cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 1544cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // case 1. Account found 1554cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals((Long) account2.mId, Utility.getFirstRowLong( 1564cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 1574cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, 1584cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME, 1594cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN)); 1604cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // different sort order 1614cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals((Long) account3.mId, Utility.getFirstRowLong( 1624cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 1634cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, 1644cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " desc", 1654cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN)); 1664cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 1674cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // case 2. no row found 1684cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals(null, Utility.getFirstRowLong( 1694cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 1704cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, 1714cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki null, 1724cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN)); 1734cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 1744cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // case 3. no row found with default value 1754cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals((Long) (-1L), Utility.getFirstRowLong( 1764cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 1774cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, 1784cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki null, 1794cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN, -1L)); 1804cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki } 1814cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 1824cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki public void testGetFirstRowInt() { 1834cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext); 1844cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext); 1854cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext); 1864cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 1874cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // case 1. Account found 1884cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals((Integer)(int) account2.mId, Utility.getFirstRowInt( 1894cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 1904cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, 1914cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME, 1924cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN)); 1934cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // different sort order 1944cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals((Integer)(int) account3.mId, Utility.getFirstRowInt( 1954cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 1964cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, 1974cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " desc", 1984cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN)); 1994cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 2004cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // case 2. no row found 2014cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals(null, Utility.getFirstRowInt( 2024cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 2034cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, 2044cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki null, 2054cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN)); 2064cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki 2074cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki // case 3. no row found with default value 2084cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki assertEquals((Integer) (-1), Utility.getFirstRowInt( 2094cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki mMockContext, Account.CONTENT_URI, EmailContent.ID_PROJECTION, 2104cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, 2114cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki null, 2124cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki EmailContent.ID_PROJECTION_COLUMN, -1)); 2134cdae2b1b86f44e1abd240b8e14e722555ff9491Makoto Onuki } 2147183724276e0d829fd01a5bc1f2f6d0f6b6a8818Makoto Onuki 215ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki public void testGetFirstRowString() { 216ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki final String[] DISPLAY_NAME_PROJECTION = new String[] {Account.DISPLAY_NAME}; 217ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki 218ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account account1 = ProviderTestUtils.setupAccount("1", true, mMockContext); 219ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account account2 = ProviderTestUtils.setupAccount("X1", true, mMockContext); 220ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account account3 = ProviderTestUtils.setupAccount("X2", true, mMockContext); 221ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki 222ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki // case 1. Account found 223ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki assertEquals(account2.mDisplayName, Utility.getFirstRowString( 224ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, 225ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, 226ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account.DISPLAY_NAME, 0)); 227ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki 228ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki // different sort order 229ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki assertEquals(account3.mDisplayName, Utility.getFirstRowString( 230ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, 231ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"X%"}, 232ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account.DISPLAY_NAME + " desc", 0)); 233ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki 234ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki // case 2. no row found 235ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki assertEquals(null, Utility.getFirstRowString( 236ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, 237ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, 238ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki null, 0)); 239ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki 240ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki // case 3. no row found with default value 241ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki assertEquals("-", Utility.getFirstRowString( 242ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki mMockContext, Account.CONTENT_URI, DISPLAY_NAME_PROJECTION, 243ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki Account.DISPLAY_NAME + " like :1", new String[] {"NO SUCH ACCOUNT"}, 244ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki null, 0, "-")); 245ee7205d100eff01a75c292b80f41cd24a2b19b84Makoto Onuki } 246654cc1f68f81e1f64a8f6242961d0ba507912371Marc Blank} 247