SQLite Android Bindings
Hex Artifact Content
Not logged in

Artifact e7d4e4df924d967d87524020c781ca92ccdd19b9:


0000: 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20  /*. * Copyright 
0010: 28 43 29 20 32 30 30 38 20 54 68 65 20 41 6e 64  (C) 2008 The And
0020: 72 6f 69 64 20 4f 70 65 6e 20 53 6f 75 72 63 65  roid Open Source
0030: 20 50 72 6f 6a 65 63 74 0a 20 2a 0a 20 2a 20 4c   Project. *. * L
0040: 69 63 65 6e 73 65 64 20 75 6e 64 65 72 20 74 68  icensed under th
0050: 65 20 41 70 61 63 68 65 20 4c 69 63 65 6e 73 65  e Apache License
0060: 2c 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 28 74  , Version 2.0 (t
0070: 68 65 20 22 4c 69 63 65 6e 73 65 22 29 3b 0a 20  he "License");. 
0080: 2a 20 79 6f 75 20 6d 61 79 20 6e 6f 74 20 75 73  * you may not us
0090: 65 20 74 68 69 73 20 66 69 6c 65 20 65 78 63 65  e this file exce
00a0: 70 74 20 69 6e 20 63 6f 6d 70 6c 69 61 6e 63 65  pt in compliance
00b0: 20 77 69 74 68 20 74 68 65 20 4c 69 63 65 6e 73   with the Licens
00c0: 65 2e 0a 20 2a 20 59 6f 75 20 6d 61 79 20 6f 62  e.. * You may ob
00d0: 74 61 69 6e 20 61 20 63 6f 70 79 20 6f 66 20 74  tain a copy of t
00e0: 68 65 20 4c 69 63 65 6e 73 65 20 61 74 0a 20 2a  he License at. *
00f0: 0a 20 2a 20 20 20 20 20 20 68 74 74 70 3a 2f 2f  . *      http://
0100: 77 77 77 2e 61 70 61 63 68 65 2e 6f 72 67 2f 6c  www.apache.org/l
0110: 69 63 65 6e 73 65 73 2f 4c 49 43 45 4e 53 45 2d  icenses/LICENSE-
0120: 32 2e 30 0a 20 2a 0a 20 2a 20 55 6e 6c 65 73 73  2.0. *. * Unless
0130: 20 72 65 71 75 69 72 65 64 20 62 79 20 61 70 70   required by app
0140: 6c 69 63 61 62 6c 65 20 6c 61 77 20 6f 72 20 61  licable law or a
0150: 67 72 65 65 64 20 74 6f 20 69 6e 20 77 72 69 74  greed to in writ
0160: 69 6e 67 2c 20 73 6f 66 74 77 61 72 65 0a 20 2a  ing, software. *
0170: 20 64 69 73 74 72 69 62 75 74 65 64 20 75 6e 64   distributed und
0180: 65 72 20 74 68 65 20 4c 69 63 65 6e 73 65 20 69  er the License i
0190: 73 20 64 69 73 74 72 69 62 75 74 65 64 20 6f 6e  s distributed on
01a0: 20 61 6e 20 22 41 53 20 49 53 22 20 42 41 53 49   an "AS IS" BASI
01b0: 53 2c 0a 20 2a 20 57 49 54 48 4f 55 54 20 57 41  S,. * WITHOUT WA
01c0: 52 52 41 4e 54 49 45 53 20 4f 52 20 43 4f 4e 44  RRANTIES OR COND
01d0: 49 54 49 4f 4e 53 20 4f 46 20 41 4e 59 20 4b 49  ITIONS OF ANY KI
01e0: 4e 44 2c 20 65 69 74 68 65 72 20 65 78 70 72 65  ND, either expre
01f0: 73 73 20 6f 72 20 69 6d 70 6c 69 65 64 2e 0a 20  ss or implied.. 
0200: 2a 20 53 65 65 20 74 68 65 20 4c 69 63 65 6e 73  * See the Licens
0210: 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  e for the specif
0220: 69 63 20 6c 61 6e 67 75 61 67 65 20 67 6f 76 65  ic language gove
0230: 72 6e 69 6e 67 20 70 65 72 6d 69 73 73 69 6f 6e  rning permission
0240: 73 20 61 6e 64 0a 20 2a 20 6c 69 6d 69 74 61 74  s and. * limitat
0250: 69 6f 6e 73 20 75 6e 64 65 72 20 74 68 65 20 4c  ions under the L
0260: 69 63 65 6e 73 65 2e 0a 20 2a 2f 0a 0a 70 61 63  icense.. */..pac
0270: 6b 61 67 65 20 6f 72 67 2e 73 71 6c 69 74 65 2e  kage org.sqlite.
0280: 64 61 74 61 62 61 73 65 2e 64 61 74 61 62 61 73  database.databas
0290: 65 5f 63 74 73 3b 0a 0a 0a 69 6d 70 6f 72 74 20  e_cts;...import 
02a0: 61 6e 64 72 6f 69 64 2e 63 6f 6e 74 65 6e 74 2e  android.content.
02b0: 43 6f 6e 74 65 78 74 3b 0a 69 6d 70 6f 72 74 20  Context;.import 
02c0: 61 6e 64 72 6f 69 64 2e 64 61 74 61 62 61 73 65  android.database
02d0: 2e 43 68 61 72 41 72 72 61 79 42 75 66 66 65 72  .CharArrayBuffer
02e0: 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69 64  ;.import android
02f0: 2e 64 61 74 61 62 61 73 65 2e 43 6f 6e 74 65 6e  .database.Conten
0300: 74 4f 62 73 65 72 76 65 72 3b 0a 69 6d 70 6f 72  tObserver;.impor
0310: 74 20 61 6e 64 72 6f 69 64 2e 64 61 74 61 62 61  t android.databa
0320: 73 65 2e 43 75 72 73 6f 72 3b 0a 69 6d 70 6f 72  se.Cursor;.impor
0330: 74 20 61 6e 64 72 6f 69 64 2e 64 61 74 61 62 61  t android.databa
0340: 73 65 2e 43 75 72 73 6f 72 57 72 61 70 70 65 72  se.CursorWrapper
0350: 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69 64  ;.import android
0360: 2e 64 61 74 61 62 61 73 65 2e 44 61 74 61 53 65  .database.DataSe
0370: 74 4f 62 73 65 72 76 65 72 3b 0a 69 6d 70 6f 72  tObserver;.impor
0380: 74 20 61 6e 64 72 6f 69 64 2e 64 61 74 61 62 61  t android.databa
0390: 73 65 2e 53 74 61 6c 65 44 61 74 61 45 78 63 65  se.StaleDataExce
03a0: 70 74 69 6f 6e 3b 0a 69 6d 70 6f 72 74 20 6f 72  ption;.import or
03b0: 67 2e 73 71 6c 69 74 65 2e 64 61 74 61 62 61 73  g.sqlite.databas
03c0: 65 2e 73 71 6c 69 74 65 2e 53 51 4c 69 74 65 44  e.sqlite.SQLiteD
03d0: 61 74 61 62 61 73 65 3b 0a 69 6d 70 6f 72 74 20  atabase;.import 
03e0: 61 6e 64 72 6f 69 64 2e 6f 73 2e 42 75 6e 64 6c  android.os.Bundl
03f0: 65 3b 0a 69 6d 70 6f 72 74 20 61 6e 64 72 6f 69  e;.import androi
0400: 64 2e 6f 73 2e 48 61 6e 64 6c 65 72 3b 0a 69 6d  d.os.Handler;.im
0410: 70 6f 72 74 20 61 6e 64 72 6f 69 64 2e 74 65 73  port android.tes
0420: 74 2e 41 6e 64 72 6f 69 64 54 65 73 74 43 61 73  t.AndroidTestCas
0430: 65 3b 0a 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e  e;..import java.
0440: 69 6f 2e 46 69 6c 65 3b 0a 69 6d 70 6f 72 74 20  io.File;.import 
0450: 6a 61 76 61 2e 75 74 69 6c 2e 41 72 72 61 79 73  java.util.Arrays
0460: 3b 0a 0a 70 75 62 6c 69 63 20 63 6c 61 73 73 20  ;..public class 
0470: 43 75 72 73 6f 72 57 72 61 70 70 65 72 54 65 73  CursorWrapperTes
0480: 74 20 65 78 74 65 6e 64 73 20 41 6e 64 72 6f 69  t extends Androi
0490: 64 54 65 73 74 43 61 73 65 20 7b 0a 0a 20 20 20  dTestCase {..   
04a0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
04b0: 66 69 6e 61 6c 20 53 74 72 69 6e 67 20 46 49 52  final String FIR
04c0: 53 54 5f 4e 55 4d 42 45 52 20 3d 20 22 31 32 33  ST_NUMBER = "123
04d0: 22 3b 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ";.    private s
04e0: 74 61 74 69 63 20 66 69 6e 61 6c 20 53 74 72 69  tatic final Stri
04f0: 6e 67 20 53 45 43 4f 4e 44 5f 4e 55 4d 42 45 52  ng SECOND_NUMBER
0500: 20 3d 20 22 35 35 35 35 22 3b 0a 20 20 20 20 70   = "5555";.    p
0510: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 66 69  rivate static fi
0520: 6e 61 6c 20 69 6e 74 20 54 45 53 54 56 41 4c 55  nal int TESTVALU
0530: 45 31 20 3d 20 31 39 39 3b 0a 20 20 20 20 70 72  E1 = 199;.    pr
0540: 69 76 61 74 65 20 73 74 61 74 69 63 20 66 69 6e  ivate static fin
0550: 61 6c 20 69 6e 74 20 54 45 53 54 56 41 4c 55 45  al int TESTVALUE
0560: 32 20 3d 20 32 30 30 3b 0a 20 20 20 20 70 72 69  2 = 200;.    pri
0570: 76 61 74 65 20 73 74 61 74 69 63 20 66 69 6e 61  vate static fina
0580: 6c 20 53 74 72 69 6e 67 5b 5d 20 4e 55 4d 42 45  l String[] NUMBE
0590: 52 5f 50 52 4f 4a 45 43 54 49 4f 4e 20 3d 20 6e  R_PROJECTION = n
05a0: 65 77 20 53 74 72 69 6e 67 5b 5d 20 7b 0a 20 20  ew String[] {.  
05b0: 20 20 20 20 20 20 22 5f 69 64 22 2c 20 20 20 20        "_id",    
05c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 30 0a 20 20           // 0.  
05d0: 20 20 20 20 20 20 22 6e 75 6d 62 65 72 22 20 20        "number"  
05e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 31 0a 20 20           // 1.  
05f0: 20 20 7d 3b 0a 20 20 20 20 70 72 69 76 61 74 65    };.    private
0600: 20 73 74 61 74 69 63 20 66 69 6e 61 6c 20 69 6e   static final in
0610: 74 20 44 45 46 41 55 4c 54 5f 52 45 43 4f 52 44  t DEFAULT_RECORD
0620: 5f 43 4f 55 4e 54 20 3d 20 32 3b 0a 20 20 20 20  _COUNT = 2;.    
0630: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 66  private static f
0640: 69 6e 61 6c 20 69 6e 74 20 44 45 46 41 55 4c 54  inal int DEFAULT
0650: 5f 43 4f 4c 55 4d 4e 5f 43 4f 55 4e 54 20 3d 20  _COLUMN_COUNT = 
0660: 32 3b 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20  2;..    private 
0670: 53 51 4c 69 74 65 44 61 74 61 62 61 73 65 20 6d  SQLiteDatabase m
0680: 44 61 74 61 62 61 73 65 3b 0a 20 20 20 20 70 72  Database;.    pr
0690: 69 76 61 74 65 20 46 69 6c 65 20 6d 44 61 74 61  ivate File mData
06a0: 62 61 73 65 46 69 6c 65 3b 0a 20 20 20 20 70 72  baseFile;.    pr
06b0: 69 76 61 74 65 20 43 75 72 73 6f 72 20 6d 43 75  ivate Cursor mCu
06c0: 72 73 6f 72 3b 0a 0a 20 20 20 20 70 72 69 76 61  rsor;..    priva
06d0: 74 65 20 73 74 61 74 69 63 20 66 69 6e 61 6c 20  te static final 
06e0: 69 6e 74 20 43 55 52 52 45 4e 54 5f 44 41 54 41  int CURRENT_DATA
06f0: 42 41 53 45 5f 56 45 52 53 49 4f 4e 20 3d 20 34  BASE_VERSION = 4
0700: 32 3b 0a 0a 20 20 20 20 40 4f 76 65 72 72 69 64  2;..    @Overrid
0710: 65 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  e.    protected 
0720: 76 6f 69 64 20 73 65 74 55 70 28 29 20 74 68 72  void setUp() thr
0730: 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a  ows Exception {.
0740: 20 20 20 20 20 20 20 20 73 75 70 65 72 2e 73 65          super.se
0750: 74 55 70 28 29 3b 0a 20 20 20 20 20 20 20 20 53  tUp();.        S
0760: 79 73 74 65 6d 2e 6c 6f 61 64 4c 69 62 72 61 72  ystem.loadLibrar
0770: 79 28 22 73 71 6c 69 74 65 58 22 29 3b 0a 20 20  y("sqliteX");.  
0780: 20 20 20 20 20 20 73 65 74 75 70 44 61 74 61 62        setupDatab
0790: 61 73 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ase();.    }..  
07a0: 20 20 40 4f 76 65 72 72 69 64 65 0a 20 20 20 20    @Override.    
07b0: 70 72 6f 74 65 63 74 65 64 20 76 6f 69 64 20 74  protected void t
07c0: 65 61 72 44 6f 77 6e 28 29 20 74 68 72 6f 77 73  earDown() throws
07d0: 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a 20 20 20   Exception {.   
07e0: 20 20 20 20 20 63 6c 6f 73 65 44 61 74 61 62 61       closeDataba
07f0: 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 73 75  se();.        su
0800: 70 65 72 2e 74 65 61 72 44 6f 77 6e 28 29 3b 0a  per.tearDown();.
0810: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
0820: 63 20 76 6f 69 64 20 74 65 73 74 43 6f 6e 73 74  c void testConst
0830: 72 75 63 6f 74 6f 72 41 6e 64 43 6c 6f 73 65 28  rucotorAndClose(
0840: 29 20 7b 0a 20 20 20 20 20 20 20 20 43 75 72 73  ) {.        Curs
0850: 6f 72 57 72 61 70 70 65 72 20 63 75 72 73 6f 72  orWrapper cursor
0860: 57 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43 75  Wrapper = new Cu
0870: 72 73 6f 72 57 72 61 70 70 65 72 28 67 65 74 43  rsorWrapper(getC
0880: 75 72 73 6f 72 28 29 29 3b 0a 0a 20 20 20 20 20  ursor());..     
0890: 20 20 20 61 73 73 65 72 74 54 72 75 65 28 63 75     assertTrue(cu
08a0: 72 73 6f 72 57 72 61 70 70 65 72 2e 72 65 71 75  rsorWrapper.requ
08b0: 65 72 79 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ery());.        
08c0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 64 65  cursorWrapper.de
08d0: 61 63 74 69 76 61 74 65 28 29 3b 0a 20 20 20 20  activate();.    
08e0: 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65      cursorWrappe
08f0: 72 2e 6d 6f 76 65 28 31 29 3b 0a 20 20 20 20 20  r.move(1);.     
0900: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
0910: 44 45 46 41 55 4c 54 5f 52 45 43 4f 52 44 5f 43  DEFAULT_RECORD_C
0920: 4f 55 4e 54 2c 20 63 75 72 73 6f 72 57 72 61 70  OUNT, cursorWrap
0930: 70 65 72 2e 67 65 74 43 6f 75 6e 74 28 29 29 3b  per.getCount());
0940: 0a 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ..        assert
0950: 46 61 6c 73 65 28 63 75 72 73 6f 72 57 72 61 70  False(cursorWrap
0960: 70 65 72 2e 69 73 43 6c 6f 73 65 64 28 29 29 3b  per.isClosed());
0970: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54  .        assertT
0980: 72 75 65 28 63 75 72 73 6f 72 57 72 61 70 70 65  rue(cursorWrappe
0990: 72 2e 72 65 71 75 65 72 79 28 29 29 3b 0a 20 20  r.requery());.  
09a0: 20 20 20 20 20 20 63 75 72 73 6f 72 57 72 61 70        cursorWrap
09b0: 70 65 72 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20  per.close();.   
09c0: 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28       assertTrue(
09d0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 69 73  cursorWrapper.is
09e0: 43 6c 6f 73 65 64 28 29 29 3b 0a 20 20 20 20 20  Closed());.     
09f0: 20 20 20 61 73 73 65 72 74 46 61 6c 73 65 28 63     assertFalse(c
0a00: 75 72 73 6f 72 57 72 61 70 70 65 72 2e 72 65 71  ursorWrapper.req
0a10: 75 65 72 79 28 29 29 3b 0a 20 20 20 20 7d 0a 0a  uery());.    }..
0a20: 20 20 20 20 70 72 69 76 61 74 65 20 43 75 72 73      private Curs
0a30: 6f 72 20 67 65 74 43 75 72 73 6f 72 28 29 20 7b  or getCursor() {
0a40: 0a 20 20 20 20 20 20 20 20 43 75 72 73 6f 72 20  .        Cursor 
0a50: 63 75 72 73 6f 72 20 3d 20 6d 44 61 74 61 62 61  cursor = mDataba
0a60: 73 65 2e 71 75 65 72 79 28 22 74 65 73 74 31 22  se.query("test1"
0a70: 2c 20 4e 55 4d 42 45 52 5f 50 52 4f 4a 45 43 54  , NUMBER_PROJECT
0a80: 49 4f 4e 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ION, null, null,
0a90: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c   null, null, nul
0aa0: 6c 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  l);.        retu
0ab0: 72 6e 20 63 75 72 73 6f 72 3b 0a 20 20 20 20 7d  rn cursor;.    }
0ac0: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  ..    public voi
0ad0: 64 20 74 65 73 74 47 65 74 43 6f 75 6e 74 28 29  d testGetCount()
0ae0: 20 7b 0a 20 20 20 20 20 20 20 20 43 75 72 73 6f   {.        Curso
0af0: 72 57 72 61 70 70 65 72 20 63 75 72 73 6f 72 57  rWrapper cursorW
0b00: 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43 75 72  rapper = new Cur
0b10: 73 6f 72 57 72 61 70 70 65 72 28 67 65 74 43 75  sorWrapper(getCu
0b20: 72 73 6f 72 28 29 29 3b 0a 20 20 20 20 20 20 20  rsor());.       
0b30: 20 69 6e 74 20 64 65 66 61 75 6c 74 43 6f 75 6e   int defaultCoun
0b40: 74 20 3d 20 63 75 72 73 6f 72 57 72 61 70 70 65  t = cursorWrappe
0b50: 72 2e 67 65 74 43 6f 75 6e 74 28 29 3b 0a 0a 20  r.getCount();.. 
0b60: 20 20 20 20 20 20 20 2f 2f 20 41 64 64 20 74 77         // Add tw
0b70: 6f 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 74  o records into t
0b80: 68 65 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20  he table..      
0b90: 20 20 61 64 64 57 69 74 68 56 61 6c 75 65 28 6d    addWithValue(m
0ba0: 44 61 74 61 62 61 73 65 2c 20 54 45 53 54 56 41  Database, TESTVA
0bb0: 4c 55 45 31 29 3b 0a 20 20 20 20 20 20 20 20 69  LUE1);.        i
0bc0: 6e 74 20 65 78 70 65 63 74 65 64 20 3d 20 64 65  nt expected = de
0bd0: 66 61 75 6c 74 43 6f 75 6e 74 20 2b 20 31 3b 0a  faultCount + 1;.
0be0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72          assertTr
0bf0: 75 65 28 63 75 72 73 6f 72 57 72 61 70 70 65 72  ue(cursorWrapper
0c00: 2e 72 65 71 75 65 72 79 28 29 29 3b 0a 20 20 20  .requery());.   
0c10: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
0c20: 73 28 65 78 70 65 63 74 65 64 2c 20 63 75 72 73  s(expected, curs
0c30: 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43 6f 75  orWrapper.getCou
0c40: 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61  nt());.        a
0c50: 64 64 57 69 74 68 56 61 6c 75 65 28 6d 44 61 74  ddWithValue(mDat
0c60: 61 62 61 73 65 2c 20 54 45 53 54 56 41 4c 55 45  abase, TESTVALUE
0c70: 32 29 3b 0a 20 20 20 20 20 20 20 20 65 78 70 65  2);.        expe
0c80: 63 74 65 64 20 2b 3d 20 31 3b 0a 20 20 20 20 20  cted += 1;.     
0c90: 20 20 20 61 73 73 65 72 74 54 72 75 65 28 63 75     assertTrue(cu
0ca0: 72 73 6f 72 57 72 61 70 70 65 72 2e 72 65 71 75  rsorWrapper.requ
0cb0: 65 72 79 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ery());.        
0cc0: 61 73 73 65 72 74 45 71 75 61 6c 73 28 65 78 70  assertEquals(exp
0cd0: 65 63 74 65 64 2c 20 63 75 72 73 6f 72 57 72 61  ected, cursorWra
0ce0: 70 70 65 72 2e 67 65 74 43 6f 75 6e 74 28 29 29  pper.getCount())
0cf0: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 65  ;..        // De
0d00: 6c 65 74 65 20 70 72 65 76 69 6f 75 73 20 74 77  lete previous tw
0d10: 6f 20 72 65 63 6f 72 64 73 20 77 68 69 63 68 20  o records which 
0d20: 68 61 76 65 20 62 65 65 6e 20 61 64 64 65 64 20  have been added 
0d30: 6a 75 73 74 20 6e 6f 77 2e 0a 20 20 20 20 20 20  just now..      
0d40: 20 20 64 65 6c 65 74 65 57 69 74 68 56 61 6c 75    deleteWithValu
0d50: 65 28 6d 44 61 74 61 62 61 73 65 2c 20 54 45 53  e(mDatabase, TES
0d60: 54 56 41 4c 55 45 31 29 3b 0a 20 20 20 20 20 20  TVALUE1);.      
0d70: 20 20 61 73 73 65 72 74 54 72 75 65 28 63 75 72    assertTrue(cur
0d80: 73 6f 72 57 72 61 70 70 65 72 2e 72 65 71 75 65  sorWrapper.reque
0d90: 72 79 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61  ry());.        a
0da0: 73 73 65 72 74 45 71 75 61 6c 73 28 64 65 66 61  ssertEquals(defa
0db0: 75 6c 74 43 6f 75 6e 74 20 2b 20 31 2c 20 63 75  ultCount + 1, cu
0dc0: 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43  rsorWrapper.getC
0dd0: 6f 75 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 20  ount());.       
0de0: 20 64 65 6c 65 74 65 57 69 74 68 56 61 6c 75 65   deleteWithValue
0df0: 28 6d 44 61 74 61 62 61 73 65 2c 20 54 45 53 54  (mDatabase, TEST
0e00: 56 41 4c 55 45 32 29 3b 0a 20 20 20 20 20 20 20  VALUE2);.       
0e10: 20 61 73 73 65 72 74 54 72 75 65 28 63 75 72 73   assertTrue(curs
0e20: 6f 72 57 72 61 70 70 65 72 2e 72 65 71 75 65 72  orWrapper.requer
0e30: 79 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  y());.        as
0e40: 73 65 72 74 45 71 75 61 6c 73 28 64 65 66 61 75  sertEquals(defau
0e50: 6c 74 43 6f 75 6e 74 2c 20 63 75 72 73 6f 72 57  ltCount, cursorW
0e60: 72 61 70 70 65 72 2e 67 65 74 43 6f 75 6e 74 28  rapper.getCount(
0e70: 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  ));..        // 
0e80: 43 6f 6e 74 69 6e 75 65 20 74 6f 20 64 65 6c 65  Continue to dele
0e90: 74 65 20 61 6c 6c 20 74 68 65 20 72 65 63 6f 72  te all the recor
0ea0: 64 73 0a 20 20 20 20 20 20 20 20 64 65 6c 65 74  ds.        delet
0eb0: 65 41 6c 6c 52 65 63 6f 72 64 73 28 6d 44 61 74  eAllRecords(mDat
0ec0: 61 62 61 73 65 29 3b 0a 20 20 20 20 20 20 20 20  abase);.        
0ed0: 61 73 73 65 72 74 54 72 75 65 28 63 75 72 73 6f  assertTrue(curso
0ee0: 72 57 72 61 70 70 65 72 2e 72 65 71 75 65 72 79  rWrapper.requery
0ef0: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ());.        ass
0f00: 65 72 74 45 71 75 61 6c 73 28 30 2c 20 63 75 72  ertEquals(0, cur
0f10: 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43 6f  sorWrapper.getCo
0f20: 75 6e 74 28 29 29 3b 0a 0a 20 20 20 20 20 20 20  unt());..       
0f30: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 63   cursorWrapper.c
0f40: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
0f50: 61 73 73 65 72 74 46 61 6c 73 65 28 63 75 72 73  assertFalse(curs
0f60: 6f 72 57 72 61 70 70 65 72 2e 72 65 71 75 65 72  orWrapper.requer
0f70: 79 28 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f  y());..        /
0f80: 2f 20 52 65 73 74 6f 72 65 20 6f 72 69 67 69 6e  / Restore origin
0f90: 61 6c 20 64 61 74 61 62 61 73 65 20 73 74 61 74  al database stat
0fa0: 75 73 0a 20 20 20 20 20 20 20 20 72 65 62 75 69  us.        rebui
0fb0: 6c 64 44 61 74 61 62 61 73 65 28 29 3b 0a 20 20  ldDatabase();.  
0fc0: 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69 63 20    }..    public 
0fd0: 76 6f 69 64 20 74 65 73 74 44 65 61 63 74 69 76  void testDeactiv
0fe0: 61 74 65 28 29 20 74 68 72 6f 77 73 20 49 6c 6c  ate() throws Ill
0ff0: 65 67 61 6c 53 74 61 74 65 45 78 63 65 70 74 69  egalStateExcepti
1000: 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 43 75 72  on {.        Cur
1010: 73 6f 72 57 72 61 70 70 65 72 20 63 75 72 73 6f  sorWrapper curso
1020: 72 57 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43  rWrapper = new C
1030: 75 72 73 6f 72 57 72 61 70 70 65 72 28 67 65 74  ursorWrapper(get
1040: 43 75 72 73 6f 72 28 29 29 3b 0a 20 20 20 20 20  Cursor());.     
1050: 20 20 20 4d 6f 63 6b 4f 62 73 65 72 76 65 72 20     MockObserver 
1060: 6f 62 73 65 72 76 65 72 20 3d 20 6e 65 77 20 4d  observer = new M
1070: 6f 63 6b 4f 62 73 65 72 76 65 72 28 29 3b 0a 0a  ockObserver();..
1080: 20 20 20 20 20 20 20 20 2f 2f 20 6f 6e 65 20 44          // one D
1090: 61 74 61 53 65 74 4f 62 73 65 72 76 65 72 20 63  ataSetObserver c
10a0: 61 6e 27 74 20 75 6e 72 65 67 69 73 74 65 72 65  an't unregistere
10b0: 64 20 62 65 66 6f 72 65 20 69 74 20 68 61 64 20  d before it had 
10c0: 62 65 65 6e 20 72 65 67 69 73 74 65 72 65 64 2e  been registered.
10d0: 0a 20 20 20 20 20 20 20 20 74 72 79 7b 0a 20 20  .        try{.  
10e0: 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
10f0: 57 72 61 70 70 65 72 2e 75 6e 72 65 67 69 73 74  Wrapper.unregist
1100: 65 72 44 61 74 61 53 65 74 4f 62 73 65 72 76 65  erDataSetObserve
1110: 72 28 6f 62 73 65 72 76 65 72 29 3b 0a 20 20 20  r(observer);.   
1120: 20 20 20 20 20 20 20 20 20 66 61 69 6c 28 22 74           fail("t
1130: 65 73 74 55 6e 72 65 67 69 73 74 65 72 44 61 74  estUnregisterDat
1140: 61 53 65 74 4f 62 73 65 72 76 65 72 20 66 61 69  aSetObserver fai
1150: 6c 65 64 22 29 3b 0a 20 20 20 20 20 20 20 20 7d  led");.        }
1160: 63 61 74 63 68 28 49 6c 6c 65 67 61 6c 53 74 61  catch(IllegalSta
1170: 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 7b 0a  teException e){.
1180: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
1190: 20 20 20 2f 2f 20 42 65 66 6f 72 65 20 72 65 67     // Before reg
11a0: 69 73 74 65 72 69 6e 67 2c 20 6f 62 73 65 72 76  istering, observ
11b0: 65 72 20 63 61 6e 27 74 20 62 65 20 6e 6f 74 69  er can't be noti
11c0: 66 69 65 64 2e 0a 20 20 20 20 20 20 20 20 61 73  fied..        as
11d0: 73 65 72 74 46 61 6c 73 65 28 6f 62 73 65 72 76  sertFalse(observ
11e0: 65 72 2e 68 61 73 49 6e 76 61 6c 69 64 61 74 65  er.hasInvalidate
11f0: 64 28 29 29 3b 0a 20 20 20 20 20 20 20 20 63 75  d());.        cu
1200: 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76 65  rsorWrapper.move
1210: 54 6f 4c 61 73 74 28 29 3b 0a 20 20 20 20 20 20  ToLast();.      
1220: 20 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e    cursorWrapper.
1230: 64 65 61 63 74 69 76 61 74 65 28 29 3b 0a 20 20  deactivate();.  
1240: 20 20 20 20 20 20 61 73 73 65 72 74 46 61 6c 73        assertFals
1250: 65 28 6f 62 73 65 72 76 65 72 2e 68 61 73 49 6e  e(observer.hasIn
1260: 76 61 6c 69 64 61 74 65 64 28 29 29 3b 0a 0a 20  validated());.. 
1270: 20 20 20 20 20 20 20 2f 2f 20 54 65 73 74 20 77         // Test w
1280: 69 74 68 20 72 65 67 69 73 74 65 72 69 6e 67 20  ith registering 
1290: 44 61 74 61 53 65 74 4f 62 73 65 72 76 65 72 0a  DataSetObserver.
12a0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72          assertTr
12b0: 75 65 28 63 75 72 73 6f 72 57 72 61 70 70 65 72  ue(cursorWrapper
12c0: 2e 72 65 71 75 65 72 79 28 29 29 3b 0a 20 20 20  .requery());.   
12d0: 20 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70       cursorWrapp
12e0: 65 72 2e 72 65 67 69 73 74 65 72 44 61 74 61 53  er.registerDataS
12f0: 65 74 4f 62 73 65 72 76 65 72 28 6f 62 73 65 72  etObserver(obser
1300: 76 65 72 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ver);.        as
1310: 73 65 72 74 46 61 6c 73 65 28 6f 62 73 65 72 76  sertFalse(observ
1320: 65 72 2e 68 61 73 49 6e 76 61 6c 69 64 61 74 65  er.hasInvalidate
1330: 64 28 29 29 3b 0a 20 20 20 20 20 20 20 20 63 75  d());.        cu
1340: 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76 65  rsorWrapper.move
1350: 54 6f 4c 61 73 74 28 29 3b 0a 20 20 20 20 20 20  ToLast();.      
1360: 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 49    assertEquals(I
1370: 6e 74 65 67 65 72 2e 70 61 72 73 65 49 6e 74 28  nteger.parseInt(
1380: 53 45 43 4f 4e 44 5f 4e 55 4d 42 45 52 29 2c 20  SECOND_NUMBER), 
1390: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65  cursorWrapper.ge
13a0: 74 49 6e 74 28 31 29 29 3b 0a 20 20 20 20 20 20  tInt(1));.      
13b0: 20 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e    cursorWrapper.
13c0: 64 65 61 63 74 69 76 61 74 65 28 29 3b 0a 20 20  deactivate();.  
13d0: 20 20 20 20 20 20 2f 2f 20 64 65 61 63 74 69 76        // deactiv
13e0: 61 74 65 20 6d 65 74 68 6f 64 20 63 61 6e 20 69  ate method can i
13f0: 6e 76 6f 6b 65 20 69 6e 76 61 6c 69 64 61 74 65  nvoke invalidate
1400: 28 29 20 6d 65 74 68 6f 64 2c 20 63 61 6e 20 62  () method, can b
1410: 65 20 6f 62 73 65 72 76 65 64 20 62 79 20 44 61  e observed by Da
1420: 74 61 53 65 74 4f 62 73 65 72 76 65 72 2e 0a 20  taSetObserver.. 
1430: 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75         assertTru
1440: 65 28 6f 62 73 65 72 76 65 72 2e 68 61 73 49 6e  e(observer.hasIn
1450: 76 61 6c 69 64 61 74 65 64 28 29 29 3b 0a 20 20  validated());.  
1460: 20 20 20 20 20 20 2f 2f 20 41 66 74 65 72 20 64        // After d
1470: 65 61 63 74 69 76 61 74 69 6e 67 2c 20 74 68 65  eactivating, the
1480: 20 63 75 72 73 6f 72 20 63 61 6e 20 6e 6f 74 20   cursor can not 
1490: 70 72 6f 76 69 64 65 20 76 61 6c 75 65 73 20 66  provide values f
14a0: 72 6f 6d 20 64 61 74 61 62 61 73 65 20 72 65 63  rom database rec
14b0: 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 74 72 79  ord..        try
14c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
14d0: 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74  ursorWrapper.get
14e0: 49 6e 74 28 31 29 3b 0a 20 20 20 20 20 20 20 20  Int(1);.        
14f0: 20 20 20 20 66 61 69 6c 28 22 41 66 74 65 72 20      fail("After 
1500: 64 65 61 63 74 69 76 61 74 69 6e 67 2c 20 63 75  deactivating, cu
1510: 72 73 6f 72 20 63 61 6e 6e 6f 74 20 65 78 65 63  rsor cannot exec
1520: 75 74 65 20 67 65 74 74 69 6e 67 20 76 61 6c 75  ute getting valu
1530: 65 20 6f 70 65 72 61 74 69 6f 6e 73 2e 22 29 3b  e operations.");
1540: 0a 20 20 20 20 20 20 20 20 7d 20 63 61 74 63 68  .        } catch
1550: 20 28 53 74 61 6c 65 44 61 74 61 45 78 63 65 70   (StaleDataExcep
1560: 74 69 6f 6e 20 65 29 20 7b 0a 20 20 20 20 20 20  tion e) {.      
1570: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20    }..        // 
1580: 43 61 6e 27 74 20 72 65 67 69 73 74 65 72 20 61  Can't register a
1590: 20 73 61 6d 65 20 6f 62 73 65 72 76 65 72 20 74   same observer t
15a0: 77 69 63 65 20 62 65 66 6f 72 65 20 75 6e 72 65  wice before unre
15b0: 67 69 73 74 65 72 20 69 74 2e 0a 20 20 20 20 20  gister it..     
15c0: 20 20 20 74 72 79 7b 0a 20 20 20 20 20 20 20 20     try{.        
15d0: 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65      cursorWrappe
15e0: 72 2e 72 65 67 69 73 74 65 72 44 61 74 61 53 65  r.registerDataSe
15f0: 74 4f 62 73 65 72 76 65 72 28 6f 62 73 65 72 76  tObserver(observ
1600: 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  er);.           
1610: 20 66 61 69 6c 28 22 74 65 73 74 52 65 67 69 73   fail("testRegis
1620: 74 65 72 44 61 74 61 53 65 74 4f 62 73 65 72 76  terDataSetObserv
1630: 65 72 20 66 61 69 6c 65 64 22 29 3b 0a 20 20 20  er failed");.   
1640: 20 20 20 20 20 7d 63 61 74 63 68 28 49 6c 6c 65       }catch(Ille
1650: 67 61 6c 53 74 61 74 65 45 78 63 65 70 74 69 6f  galStateExceptio
1660: 6e 20 65 29 7b 0a 20 20 20 20 20 20 20 20 7d 0a  n e){.        }.
1670: 0a 20 20 20 20 20 20 20 20 2f 2f 20 41 66 74 65  .        // Afte
1680: 72 20 72 75 6e 65 67 69 73 74 65 72 69 6e 67 2c  r runegistering,
1690: 20 6f 62 73 65 72 76 65 72 20 63 61 6e 27 74 20   observer can't 
16a0: 62 65 20 6e 6f 74 69 66 69 65 64 2e 0a 20 20 20  be notified..   
16b0: 20 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70       cursorWrapp
16c0: 65 72 2e 75 6e 72 65 67 69 73 74 65 72 44 61 74  er.unregisterDat
16d0: 61 53 65 74 4f 62 73 65 72 76 65 72 28 6f 62 73  aSetObserver(obs
16e0: 65 72 76 65 72 29 3b 0a 20 20 20 20 20 20 20 20  erver);.        
16f0: 6f 62 73 65 72 76 65 72 2e 72 65 73 65 74 53 74  observer.resetSt
1700: 61 74 75 73 28 29 3b 0a 20 20 20 20 20 20 20 20  atus();.        
1710: 61 73 73 65 72 74 46 61 6c 73 65 28 6f 62 73 65  assertFalse(obse
1720: 72 76 65 72 2e 68 61 73 49 6e 76 61 6c 69 64 61  rver.hasInvalida
1730: 74 65 64 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ted());.        
1740: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f  cursorWrapper.mo
1750: 76 65 54 6f 4c 61 73 74 28 29 3b 0a 20 20 20 20  veToLast();.    
1760: 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65      cursorWrappe
1770: 72 2e 64 65 61 63 74 69 76 61 74 65 28 29 3b 0a  r.deactivate();.
1780: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 46 61          assertFa
1790: 6c 73 65 28 6f 62 73 65 72 76 65 72 2e 68 61 73  lse(observer.has
17a0: 49 6e 76 61 6c 69 64 61 74 65 64 28 29 29 3b 0a  Invalidated());.
17b0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 6f 6e 65 20  .        // one 
17c0: 44 61 74 61 53 65 74 4f 62 73 65 72 76 65 72 20  DataSetObserver 
17d0: 63 61 6e 27 74 20 62 65 20 75 6e 72 65 67 69 73  can't be unregis
17e0: 74 65 72 65 64 20 74 77 69 63 65 20 63 6f 6e 74  tered twice cont
17f0: 69 6e 75 6f 75 73 6c 79 2e 0a 20 20 20 20 20 20  inuously..      
1800: 20 20 74 72 79 7b 0a 20 20 20 20 20 20 20 20 20    try{.         
1810: 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65 72     cursorWrapper
1820: 2e 75 6e 72 65 67 69 73 74 65 72 44 61 74 61 53  .unregisterDataS
1830: 65 74 4f 62 73 65 72 76 65 72 28 6f 62 73 65 72  etObserver(obser
1840: 76 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ver);.          
1850: 20 20 66 61 69 6c 28 22 74 65 73 74 55 6e 72 65    fail("testUnre
1860: 67 69 73 74 65 72 44 61 74 61 53 65 74 4f 62 73  gisterDataSetObs
1870: 65 72 76 65 72 20 66 61 69 6c 65 64 22 29 3b 0a  erver failed");.
1880: 20 20 20 20 20 20 20 20 7d 63 61 74 63 68 28 49          }catch(I
1890: 6c 6c 65 67 61 6c 53 74 61 74 65 45 78 63 65 70  llegalStateExcep
18a0: 74 69 6f 6e 20 65 29 7b 0a 20 20 20 20 20 20 20  tion e){.       
18b0: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75   }.    }..    pu
18c0: 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74 47 65  blic void testGe
18d0: 74 74 69 6e 67 43 6f 6c 75 6d 6e 49 6e 66 6f 73  ttingColumnInfos
18e0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 43 75 72  () {.        Cur
18f0: 73 6f 72 57 72 61 70 70 65 72 20 63 75 72 73 6f  sorWrapper curso
1900: 72 57 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43  rWrapper = new C
1910: 75 72 73 6f 72 57 72 61 70 70 65 72 28 67 65 74  ursorWrapper(get
1920: 43 75 72 73 6f 72 28 29 29 3b 0a 0a 20 20 20 20  Cursor());..    
1930: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
1940: 28 44 45 46 41 55 4c 54 5f 43 4f 4c 55 4d 4e 5f  (DEFAULT_COLUMN_
1950: 43 4f 55 4e 54 2c 20 63 75 72 73 6f 72 57 72 61  COUNT, cursorWra
1960: 70 70 65 72 2e 67 65 74 43 6f 6c 75 6d 6e 43 6f  pper.getColumnCo
1970: 75 6e 74 28 29 29 3b 0a 0a 20 20 20 20 20 20 20  unt());..       
1980: 20 2f 2f 20 54 65 73 74 20 67 65 74 43 6f 6c 75   // Test getColu
1990: 6d 6e 49 6e 64 65 78 0a 20 20 20 20 20 20 20 20  mnIndex.        
19a0: 61 73 73 65 72 74 45 71 75 61 6c 73 28 30 2c 20  assertEquals(0, 
19b0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65  cursorWrapper.ge
19c0: 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 22 5f 69  tColumnIndex("_i
19d0: 64 22 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  d"));.        as
19e0: 73 65 72 74 45 71 75 61 6c 73 28 31 2c 20 63 75  sertEquals(1, cu
19f0: 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43  rsorWrapper.getC
1a00: 6f 6c 75 6d 6e 49 6e 64 65 78 28 22 6e 75 6d 62  olumnIndex("numb
1a10: 65 72 22 29 29 3b 0a 20 20 20 20 20 20 20 20 61  er"));.        a
1a20: 73 73 65 72 74 45 71 75 61 6c 73 28 2d 31 2c 20  ssertEquals(-1, 
1a30: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65  cursorWrapper.ge
1a40: 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 22 4e 4f  tColumnIndex("NO
1a50: 4e 5f 45 58 49 53 54 45 4e 43 45 22 29 29 3b 0a  N_EXISTENCE"));.
1a60: 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 65 73 74  .        // Test
1a70: 20 67 65 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f   getColumnIndexO
1a80: 72 54 68 72 6f 77 0a 20 20 20 20 20 20 20 20 61  rThrow.        a
1a90: 73 73 65 72 74 45 71 75 61 6c 73 28 30 2c 20 63  ssertEquals(0, c
1aa0: 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74  ursorWrapper.get
1ab0: 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68 72  ColumnIndexOrThr
1ac0: 6f 77 28 22 5f 69 64 22 29 29 3b 0a 20 20 20 20  ow("_id"));.    
1ad0: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
1ae0: 28 31 2c 20 63 75 72 73 6f 72 57 72 61 70 70 65  (1, cursorWrappe
1af0: 72 2e 67 65 74 43 6f 6c 75 6d 6e 49 6e 64 65 78  r.getColumnIndex
1b00: 4f 72 54 68 72 6f 77 28 22 6e 75 6d 62 65 72 22  OrThrow("number"
1b10: 29 29 3b 0a 20 20 20 20 20 20 20 20 74 72 79 20  ));.        try 
1b20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 75  {.            cu
1b30: 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43  rsorWrapper.getC
1b40: 6f 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68 72 6f  olumnIndexOrThro
1b50: 77 28 22 4e 4f 4e 5f 45 58 49 53 54 45 4e 43 45  w("NON_EXISTENCE
1b60: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
1b70: 66 61 69 6c 28 22 67 65 74 43 6f 6c 75 6d 6e 49  fail("getColumnI
1b80: 6e 64 65 78 4f 72 54 68 72 6f 77 20 73 68 6f 75  ndexOrThrow shou
1b90: 6c 64 20 74 68 72 6f 77 73 20 49 6c 6c 65 67 61  ld throws Illega
1ba0: 6c 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69  lArgumentExcepti
1bb0: 6f 6e 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  on if the column
1bc0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1bd0: 20 20 20 20 20 20 2b 20 22 64 6f 65 73 20 6e 6f        + "does no
1be0: 74 20 65 78 69 73 74 22 29 3b 0a 20 20 20 20 20  t exist");.     
1bf0: 20 20 20 7d 20 63 61 74 63 68 20 28 49 6c 6c 65     } catch (Ille
1c00: 67 61 6c 41 72 67 75 6d 65 6e 74 45 78 63 65 70  galArgumentExcep
1c10: 74 69 6f 6e 20 65 29 20 7b 0a 20 20 20 20 20 20  tion e) {.      
1c20: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 61 73 73    }..        ass
1c30: 65 72 74 45 71 75 61 6c 73 28 22 5f 69 64 22 2c  ertEquals("_id",
1c40: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
1c50: 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 28 30 29 29  etColumnName(0))
1c60: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1c70: 45 71 75 61 6c 73 28 22 6e 75 6d 62 65 72 22 2c  Equals("number",
1c80: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
1c90: 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 28 31 29 29  etColumnName(1))
1ca0: 3b 0a 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e  ;..        Strin
1cb0: 67 5b 5d 20 63 6f 6c 75 6d 6e 4e 61 6d 65 73 20  g[] columnNames 
1cc0: 3d 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e  = cursorWrapper.
1cd0: 67 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 29  getColumnNames()
1ce0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1cf0: 45 71 75 61 6c 73 28 44 45 46 41 55 4c 54 5f 43  Equals(DEFAULT_C
1d00: 4f 4c 55 4d 4e 5f 43 4f 55 4e 54 2c 20 63 75 72  OLUMN_COUNT, cur
1d10: 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43 6f  sorWrapper.getCo
1d20: 6c 75 6d 6e 43 6f 75 6e 74 28 29 29 3b 0a 20 20  lumnCount());.  
1d30: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
1d40: 6c 73 28 22 5f 69 64 22 2c 20 63 6f 6c 75 6d 6e  ls("_id", column
1d50: 4e 61 6d 65 73 5b 30 5d 29 3b 0a 20 20 20 20 20  Names[0]);.     
1d60: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
1d70: 22 6e 75 6d 62 65 72 22 2c 20 63 6f 6c 75 6d 6e  "number", column
1d80: 4e 61 6d 65 73 5b 31 5d 29 3b 0a 20 20 20 20 20  Names[1]);.     
1d90: 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65 72     cursorWrapper
1da0: 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d 0a  .close();.    }.
1db0: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64  .    public void
1dc0: 20 74 65 73 74 50 6f 73 69 74 69 6f 6e 69 6e 67   testPositioning
1dd0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 43 75 72  () {.        Cur
1de0: 73 6f 72 57 72 61 70 70 65 72 20 63 75 72 73 6f  sorWrapper curso
1df0: 72 57 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43  rWrapper = new C
1e00: 75 72 73 6f 72 57 72 61 70 70 65 72 28 67 65 74  ursorWrapper(get
1e10: 43 75 72 73 6f 72 28 29 29 3b 0a 0a 20 20 20 20  Cursor());..    
1e20: 20 20 20 20 2f 2f 20 54 68 65 72 65 20 61 72 65      // There are
1e30: 20 74 6f 74 61 6c 6c 79 20 32 20 72 65 63 6f 72   totally 2 recor
1e40: 64 73 2e 0a 20 20 20 20 20 20 20 20 2f 2f 20 41  ds..        // A
1e50: 74 20 66 69 72 73 74 2c 20 74 68 65 20 63 75 72  t first, the cur
1e60: 73 6f 72 20 69 73 20 61 74 20 62 65 67 69 6e 6e  sor is at beginn
1e70: 69 6e 67 20 70 6f 73 69 74 69 6f 6e 3a 20 2d 31  ing position: -1
1e80: 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 65 73 74  .        // Test
1e90: 20 69 73 42 65 66 6f 72 65 46 69 72 73 74 2c 20   isBeforeFirst, 
1ea0: 67 65 74 50 6f 73 69 74 69 6f 6e 2c 20 69 73 46  getPosition, isF
1eb0: 69 72 73 74 0a 20 20 20 20 20 20 20 20 61 73 73  irst.        ass
1ec0: 65 72 74 54 72 75 65 28 63 75 72 73 6f 72 57 72  ertTrue(cursorWr
1ed0: 61 70 70 65 72 2e 69 73 42 65 66 6f 72 65 46 69  apper.isBeforeFi
1ee0: 72 73 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20  rst());.        
1ef0: 61 73 73 65 72 74 45 71 75 61 6c 73 28 2d 31 2c  assertEquals(-1,
1f00: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
1f10: 65 74 50 6f 73 69 74 69 6f 6e 28 29 29 3b 0a 20  etPosition());. 
1f20: 20 20 20 20 20 20 20 61 73 73 65 72 74 46 61 6c         assertFal
1f30: 73 65 28 63 75 72 73 6f 72 57 72 61 70 70 65 72  se(cursorWrapper
1f40: 2e 69 73 46 69 72 73 74 28 29 29 3b 0a 0a 20 20  .isFirst());..  
1f50: 20 20 20 20 20 20 2f 2f 20 54 65 73 74 20 6d 6f        // Test mo
1f60: 76 65 54 6f 4e 65 78 74 0a 20 20 20 20 20 20 20  veToNext.       
1f70: 20 61 73 73 65 72 74 54 72 75 65 28 63 75 72 73   assertTrue(curs
1f80: 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f  orWrapper.moveTo
1f90: 4e 65 78 74 28 29 29 3b 0a 20 20 20 20 20 20 20  Next());.       
1fa0: 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 30 2c   assertEquals(0,
1fb0: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
1fc0: 65 74 50 6f 73 69 74 69 6f 6e 28 29 29 3b 0a 20  etPosition());. 
1fd0: 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75         assertTru
1fe0: 65 28 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e  e(cursorWrapper.
1ff0: 69 73 46 69 72 73 74 28 29 29 3b 0a 0a 20 20 20  isFirst());..   
2000: 20 20 20 20 20 2f 2f 20 54 65 73 74 20 69 73 4c       // Test isL
2010: 61 73 74 0a 20 20 20 20 20 20 20 20 61 73 73 65  ast.        asse
2020: 72 74 46 61 6c 73 65 28 63 75 72 73 6f 72 57 72  rtFalse(cursorWr
2030: 61 70 70 65 72 2e 69 73 4c 61 73 74 28 29 29 3b  apper.isLast());
2040: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54  .        assertT
2050: 72 75 65 28 63 75 72 73 6f 72 57 72 61 70 70 65  rue(cursorWrappe
2060: 72 2e 6d 6f 76 65 54 6f 4e 65 78 74 28 29 29 3b  r.moveToNext());
2070: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45  .        assertE
2080: 71 75 61 6c 73 28 31 2c 20 63 75 72 73 6f 72 57  quals(1, cursorW
2090: 72 61 70 70 65 72 2e 67 65 74 50 6f 73 69 74 69  rapper.getPositi
20a0: 6f 6e 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61  on());.        a
20b0: 73 73 65 72 74 54 72 75 65 28 63 75 72 73 6f 72  ssertTrue(cursor
20c0: 57 72 61 70 70 65 72 2e 69 73 4c 61 73 74 28 29  Wrapper.isLast()
20d0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 6d  );..        // m
20e0: 6f 76 65 20 74 6f 20 74 68 65 20 65 6e 64 0a 20  ove to the end. 
20f0: 20 20 20 20 20 20 20 2f 2f 20 54 65 73 74 20 69         // Test i
2100: 73 4c 61 73 74 20 61 6e 64 20 69 73 41 66 74 65  sLast and isAfte
2110: 72 4c 61 73 74 0a 20 20 20 20 20 20 20 20 61 73  rLast.        as
2120: 73 65 72 74 46 61 6c 73 65 28 63 75 72 73 6f 72  sertFalse(cursor
2130: 57 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f 4e 65  Wrapper.moveToNe
2140: 78 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61  xt());.        a
2150: 73 73 65 72 74 46 61 6c 73 65 28 63 75 72 73 6f  ssertFalse(curso
2160: 72 57 72 61 70 70 65 72 2e 69 73 4c 61 73 74 28  rWrapper.isLast(
2170: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ));.        asse
2180: 72 74 54 72 75 65 28 63 75 72 73 6f 72 57 72 61  rtTrue(cursorWra
2190: 70 70 65 72 2e 69 73 41 66 74 65 72 4c 61 73 74  pper.isAfterLast
21a0: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ());.        ass
21b0: 65 72 74 45 71 75 61 6c 73 28 32 2c 20 63 75 72  ertEquals(2, cur
21c0: 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 50 6f  sorWrapper.getPo
21d0: 73 69 74 69 6f 6e 28 29 29 3b 0a 0a 20 20 20 20  sition());..    
21e0: 20 20 20 20 2f 2f 20 54 65 73 74 20 6d 6f 76 65      // Test move
21f0: 28 69 6e 74 29 0a 20 20 20 20 20 20 20 20 61 73  (int).        as
2200: 73 65 72 74 54 72 75 65 28 63 75 72 73 6f 72 57  sertTrue(cursorW
2210: 72 61 70 70 65 72 2e 6d 6f 76 65 28 2d 31 29 29  rapper.move(-1))
2220: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
2230: 45 71 75 61 6c 73 28 31 2c 20 63 75 72 73 6f 72  Equals(1, cursor
2240: 57 72 61 70 70 65 72 2e 67 65 74 50 6f 73 69 74  Wrapper.getPosit
2250: 69 6f 6e 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ion());.        
2260: 61 73 73 65 72 74 54 72 75 65 28 63 75 72 73 6f  assertTrue(curso
2270: 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 28 2d 31  rWrapper.move(-1
2280: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ));.        asse
2290: 72 74 45 71 75 61 6c 73 28 30 2c 20 63 75 72 73  rtEquals(0, curs
22a0: 6f 72 57 72 61 70 70 65 72 2e 67 65 74 50 6f 73  orWrapper.getPos
22b0: 69 74 69 6f 6e 28 29 29 3b 0a 20 20 20 20 20 20  ition());.      
22c0: 20 20 2f 2f 20 57 68 69 6c 65 20 72 65 61 63 68    // While reach
22d0: 20 74 68 65 20 65 64 67 65 2c 20 66 75 6e 63 74   the edge, funct
22e0: 69 6f 6e 20 77 69 6c 6c 20 72 65 74 75 72 6e 20  ion will return 
22f0: 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20 61 73  false.        as
2300: 73 65 72 74 46 61 6c 73 65 28 63 75 72 73 6f 72  sertFalse(cursor
2310: 57 72 61 70 70 65 72 2e 6d 6f 76 65 28 2d 31 29  Wrapper.move(-1)
2320: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
2330: 74 45 71 75 61 6c 73 28 2d 31 2c 20 63 75 72 73  tEquals(-1, curs
2340: 6f 72 57 72 61 70 70 65 72 2e 67 65 74 50 6f 73  orWrapper.getPos
2350: 69 74 69 6f 6e 28 29 29 3b 0a 20 20 20 20 20 20  ition());.      
2360: 20 20 61 73 73 65 72 74 54 72 75 65 28 63 75 72    assertTrue(cur
2370: 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 28  sorWrapper.move(
2380: 32 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  2));.        ass
2390: 65 72 74 45 71 75 61 6c 73 28 31 2c 20 63 75 72  ertEquals(1, cur
23a0: 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 50 6f  sorWrapper.getPo
23b0: 73 69 74 69 6f 6e 28 29 29 3b 0a 20 20 20 20 20  sition());.     
23c0: 20 20 20 2f 2f 20 57 68 69 6c 65 20 72 65 61 63     // While reac
23d0: 68 20 74 68 65 20 65 64 67 65 2c 20 66 75 6e 63  h the edge, func
23e0: 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 75 72 6e  tion will return
23f0: 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20 61   false.        a
2400: 73 73 65 72 74 46 61 6c 73 65 28 63 75 72 73 6f  ssertFalse(curso
2410: 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 28 31 29  rWrapper.move(1)
2420: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
2430: 74 54 72 75 65 28 63 75 72 73 6f 72 57 72 61 70  tTrue(cursorWrap
2440: 70 65 72 2e 69 73 41 66 74 65 72 4c 61 73 74 28  per.isAfterLast(
2450: 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  ));..        // 
2460: 54 65 73 74 20 6d 6f 76 65 54 6f 50 72 65 76 69  Test moveToPrevi
2470: 6f 75 73 28 29 0a 20 20 20 20 20 20 20 20 61 73  ous().        as
2480: 73 65 72 74 45 71 75 61 6c 73 28 32 2c 20 63 75  sertEquals(2, cu
2490: 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 50  rsorWrapper.getP
24a0: 6f 73 69 74 69 6f 6e 28 29 29 3b 0a 20 20 20 20  osition());.    
24b0: 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28 63      assertTrue(c
24c0: 75 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76  ursorWrapper.mov
24d0: 65 54 6f 50 72 65 76 69 6f 75 73 28 29 29 3b 0a  eToPrevious());.
24e0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45 71          assertEq
24f0: 75 61 6c 73 28 31 2c 20 63 75 72 73 6f 72 57 72  uals(1, cursorWr
2500: 61 70 70 65 72 2e 67 65 74 50 6f 73 69 74 69 6f  apper.getPositio
2510: 6e 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  n());.        as
2520: 73 65 72 74 54 72 75 65 28 63 75 72 73 6f 72 57  sertTrue(cursorW
2530: 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f 50 72 65  rapper.moveToPre
2540: 76 69 6f 75 73 28 29 29 3b 0a 20 20 20 20 20 20  vious());.      
2550: 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 30    assertEquals(0
2560: 2c 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e  , cursorWrapper.
2570: 67 65 74 50 6f 73 69 74 69 6f 6e 28 29 29 3b 0a  getPosition());.
2580: 20 20 20 20 20 20 20 20 2f 2f 20 57 68 69 6c 65          // While
2590: 20 72 65 61 63 68 20 74 68 65 20 65 64 67 65 2c   reach the edge,
25a0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
25b0: 65 74 75 72 6e 20 66 61 6c 73 65 0a 20 20 20 20  eturn false.    
25c0: 20 20 20 20 61 73 73 65 72 74 46 61 6c 73 65 28      assertFalse(
25d0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f  cursorWrapper.mo
25e0: 76 65 54 6f 50 72 65 76 69 6f 75 73 28 29 29 3b  veToPrevious());
25f0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45  .        assertE
2600: 71 75 61 6c 73 28 2d 31 2c 20 63 75 72 73 6f 72  quals(-1, cursor
2610: 57 72 61 70 70 65 72 2e 67 65 74 50 6f 73 69 74  Wrapper.getPosit
2620: 69 6f 6e 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ion());.        
2630: 61 73 73 65 72 74 54 72 75 65 28 63 75 72 73 6f  assertTrue(curso
2640: 72 57 72 61 70 70 65 72 2e 69 73 42 65 66 6f 72  rWrapper.isBefor
2650: 65 46 69 72 73 74 28 29 29 3b 0a 0a 20 20 20 20  eFirst());..    
2660: 20 20 20 20 2f 2f 20 54 65 73 74 20 6d 6f 76 65      // Test move
2670: 54 6f 50 6f 73 69 74 69 6f 6e 0a 20 20 20 20 20  ToPosition.     
2680: 20 20 20 2f 2f 20 57 68 69 6c 65 20 72 65 61 63     // While reac
2690: 68 20 74 68 65 20 65 64 67 65 2c 20 66 75 6e 63  h the edge, func
26a0: 74 69 6f 6e 20 77 69 6c 6c 20 72 65 74 75 72 6e  tion will return
26b0: 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20 61   false.        a
26c0: 73 73 65 72 74 46 61 6c 73 65 28 63 75 72 73 6f  ssertFalse(curso
26d0: 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f 50  rWrapper.moveToP
26e0: 6f 73 69 74 69 6f 6e 28 32 29 29 3b 0a 20 20 20  osition(2));.   
26f0: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
2700: 73 28 32 2c 20 63 75 72 73 6f 72 57 72 61 70 70  s(2, cursorWrapp
2710: 65 72 2e 67 65 74 50 6f 73 69 74 69 6f 6e 28 29  er.getPosition()
2720: 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20 57 68  );.        // Wh
2730: 69 6c 65 20 72 65 61 63 68 20 74 68 65 20 65 64  ile reach the ed
2740: 67 65 2c 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  ge, function wil
2750: 6c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0a 20  l return false. 
2760: 20 20 20 20 20 20 20 61 73 73 65 72 74 46 61 6c         assertFal
2770: 73 65 28 63 75 72 73 6f 72 57 72 61 70 70 65 72  se(cursorWrapper
2780: 2e 6d 6f 76 65 54 6f 50 6f 73 69 74 69 6f 6e 28  .moveToPosition(
2790: 2d 31 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73  -1));.        as
27a0: 73 65 72 74 45 71 75 61 6c 73 28 2d 31 2c 20 63  sertEquals(-1, c
27b0: 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74  ursorWrapper.get
27c0: 50 6f 73 69 74 69 6f 6e 28 29 29 3b 0a 20 20 20  Position());.   
27d0: 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28       assertTrue(
27e0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f  cursorWrapper.mo
27f0: 76 65 54 6f 50 6f 73 69 74 69 6f 6e 28 31 29 29  veToPosition(1))
2800: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
2810: 45 71 75 61 6c 73 28 31 2c 20 63 75 72 73 6f 72  Equals(1, cursor
2820: 57 72 61 70 70 65 72 2e 67 65 74 50 6f 73 69 74  Wrapper.getPosit
2830: 69 6f 6e 28 29 29 3b 0a 20 20 20 20 20 20 20 20  ion());.        
2840: 61 73 73 65 72 74 54 72 75 65 28 63 75 72 73 6f  assertTrue(curso
2850: 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f 50  rWrapper.moveToP
2860: 6f 73 69 74 69 6f 6e 28 30 29 29 3b 0a 20 20 20  osition(0));.   
2870: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
2880: 73 28 30 2c 20 63 75 72 73 6f 72 57 72 61 70 70  s(0, cursorWrapp
2890: 65 72 2e 67 65 74 50 6f 73 69 74 69 6f 6e 28 29  er.getPosition()
28a0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  );..        // T
28b0: 65 73 74 20 6d 6f 76 65 54 6f 46 69 72 73 74 20  est moveToFirst 
28c0: 61 6e 64 20 6d 6f 76 65 54 6f 46 69 72 73 74 0a  and moveToFirst.
28d0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 46 61          assertFa
28e0: 6c 73 65 28 63 75 72 73 6f 72 57 72 61 70 70 65  lse(cursorWrappe
28f0: 72 2e 69 73 4c 61 73 74 28 29 29 3b 0a 20 20 20  r.isLast());.   
2900: 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28       assertTrue(
2910: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f  cursorWrapper.mo
2920: 76 65 54 6f 4c 61 73 74 28 29 29 3b 0a 20 20 20  veToLast());.   
2930: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
2940: 73 28 31 2c 20 63 75 72 73 6f 72 57 72 61 70 70  s(1, cursorWrapp
2950: 65 72 2e 67 65 74 50 6f 73 69 74 69 6f 6e 28 29  er.getPosition()
2960: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
2970: 74 54 72 75 65 28 63 75 72 73 6f 72 57 72 61 70  tTrue(cursorWrap
2980: 70 65 72 2e 69 73 4c 61 73 74 28 29 29 3b 0a 20  per.isLast());. 
2990: 20 20 20 20 20 20 20 61 73 73 65 72 74 46 61 6c         assertFal
29a0: 73 65 28 63 75 72 73 6f 72 57 72 61 70 70 65 72  se(cursorWrapper
29b0: 2e 69 73 46 69 72 73 74 28 29 29 3b 0a 20 20 20  .isFirst());.   
29c0: 20 20 20 20 20 61 73 73 65 72 74 54 72 75 65 28       assertTrue(
29d0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f  cursorWrapper.mo
29e0: 76 65 54 6f 46 69 72 73 74 28 29 29 3b 0a 20 20  veToFirst());.  
29f0: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
2a00: 6c 73 28 30 2c 20 63 75 72 73 6f 72 57 72 61 70  ls(0, cursorWrap
2a10: 70 65 72 2e 67 65 74 50 6f 73 69 74 69 6f 6e 28  per.getPosition(
2a20: 29 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ));.        asse
2a30: 72 74 54 72 75 65 28 63 75 72 73 6f 72 57 72 61  rtTrue(cursorWra
2a40: 70 70 65 72 2e 69 73 46 69 72 73 74 28 29 29 3b  pper.isFirst());
2a50: 0a 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 57  .        cursorW
2a60: 72 61 70 70 65 72 2e 63 6c 6f 73 65 28 29 3b 0a  rapper.close();.
2a70: 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62 6c 69      }..    publi
2a80: 63 20 76 6f 69 64 20 74 65 73 74 47 65 74 74 69  c void testGetti
2a90: 6e 67 56 61 6c 75 65 73 28 29 20 7b 0a 20 20 20  ngValues() {.   
2aa0: 20 20 20 20 20 66 69 6e 61 6c 20 62 79 74 65 20       final byte 
2ab0: 4e 55 4d 42 45 52 5f 42 4c 4f 42 5f 55 4e 49 54  NUMBER_BLOB_UNIT
2ac0: 20 3d 20 39 39 3b 0a 20 20 20 20 20 20 20 20 66   = 99;.        f
2ad0: 69 6e 61 6c 20 53 74 72 69 6e 67 20 53 54 52 49  inal String STRI
2ae0: 4e 47 5f 54 45 58 54 20 3d 20 22 54 65 73 74 20  NG_TEXT = "Test 
2af0: 53 74 72 69 6e 67 22 3b 0a 20 20 20 20 20 20 20  String";.       
2b00: 20 66 69 6e 61 6c 20 53 74 72 69 6e 67 20 53 54   final String ST
2b10: 52 49 4e 47 5f 54 45 58 54 32 20 3d 20 22 54 65  RING_TEXT2 = "Te
2b20: 73 74 20 53 74 72 69 6e 67 32 22 3b 0a 20 20 20  st String2";.   
2b30: 20 20 20 20 20 66 69 6e 61 6c 20 64 6f 75 62 6c       final doubl
2b40: 65 20 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 20  e NUMBER_DOUBLE 
2b50: 3d 20 44 6f 75 62 6c 65 2e 4d 41 58 5f 56 41 4c  = Double.MAX_VAL
2b60: 55 45 3b 0a 20 20 20 20 20 20 20 20 66 69 6e 61  UE;.        fina
2b70: 6c 20 64 6f 75 62 6c 65 20 4e 55 4d 42 45 52 5f  l double NUMBER_
2b80: 46 4c 4f 41 54 20 3d 20 28 66 6c 6f 61 74 29 20  FLOAT = (float) 
2b90: 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 3b 0a 20  NUMBER_DOUBLE;. 
2ba0: 20 20 20 20 20 20 20 66 69 6e 61 6c 20 6c 6f 6e         final lon
2bb0: 67 20 4e 55 4d 42 45 52 5f 4c 4f 4e 47 5f 49 4e  g NUMBER_LONG_IN
2bc0: 54 45 47 45 52 20 3d 20 30 78 61 61 62 62 63 63  TEGER = 0xaabbcc
2bd0: 64 64 66 66 4c 3b 0a 20 20 20 20 20 20 20 20 66  ddffL;.        f
2be0: 69 6e 61 6c 20 6c 6f 6e 67 20 4e 55 4d 42 45 52  inal long NUMBER
2bf0: 5f 49 4e 54 45 47 45 52 20 3d 20 28 69 6e 74 29  _INTEGER = (int)
2c00: 20 4e 55 4d 42 45 52 5f 4c 4f 4e 47 5f 49 4e 54   NUMBER_LONG_INT
2c10: 45 47 45 52 3b 0a 20 20 20 20 20 20 20 20 66 69  EGER;.        fi
2c20: 6e 61 6c 20 6c 6f 6e 67 20 4e 55 4d 42 45 52 5f  nal long NUMBER_
2c30: 53 48 4f 52 54 20 3d 20 28 73 68 6f 72 74 29 20  SHORT = (short) 
2c40: 4e 55 4d 42 45 52 5f 49 4e 54 45 47 45 52 3b 0a  NUMBER_INTEGER;.
2c50: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54  .        assertT
2c60: 72 75 65 28 4e 55 4d 42 45 52 5f 44 4f 55 42 4c  rue(NUMBER_DOUBL
2c70: 45 20 21 3d 20 4e 55 4d 42 45 52 5f 46 4c 4f 41  E != NUMBER_FLOA
2c80: 54 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  T);.        asse
2c90: 72 74 54 72 75 65 28 4e 55 4d 42 45 52 5f 4c 4f  rtTrue(NUMBER_LO
2ca0: 4e 47 5f 49 4e 54 45 47 45 52 20 21 3d 20 4e 55  NG_INTEGER != NU
2cb0: 4d 42 45 52 5f 49 4e 54 45 47 45 52 29 3b 0a 20  MBER_INTEGER);. 
2cc0: 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75         assertTru
2cd0: 65 28 4e 55 4d 42 45 52 5f 4c 4f 4e 47 5f 49 4e  e(NUMBER_LONG_IN
2ce0: 54 45 47 45 52 20 21 3d 20 28 73 68 6f 72 74 29  TEGER != (short)
2cf0: 20 4e 55 4d 42 45 52 5f 53 48 4f 52 54 29 3b 0a   NUMBER_SHORT);.
2d00: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72          assertTr
2d10: 75 65 28 4e 55 4d 42 45 52 5f 49 4e 54 45 47 45  ue(NUMBER_INTEGE
2d20: 52 20 21 3d 20 28 69 6e 74 29 20 4e 55 4d 42 45  R != (int) NUMBE
2d30: 52 5f 53 48 4f 52 54 29 3b 0a 0a 20 20 20 20 20  R_SHORT);..     
2d40: 20 20 20 2f 2f 20 63 72 65 61 74 65 20 74 61 62     // create tab
2d50: 6c 65 0a 20 20 20 20 20 20 20 20 6d 44 61 74 61  le.        mData
2d60: 62 61 73 65 2e 65 78 65 63 53 51 4c 28 22 43 52  base.execSQL("CR
2d70: 45 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 32  EATE TABLE test2
2d80: 20 28 5f 69 64 20 49 4e 54 45 47 45 52 20 50 52   (_id INTEGER PR
2d90: 49 4d 41 52 59 20 4b 45 59 2c 20 73 74 72 69 6e  IMARY KEY, strin
2da0: 67 5f 74 65 78 74 20 54 45 58 54 2c 22 0a 20 20  g_text TEXT,".  
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2dc0: 22 64 6f 75 62 6c 65 5f 6e 75 6d 62 65 72 20 52  "double_number R
2dd0: 45 41 4c 2c 20 69 6e 74 5f 6e 75 6d 62 65 72 20  EAL, int_number 
2de0: 49 4e 54 45 47 45 52 2c 20 62 6c 6f 62 5f 64 61  INTEGER, blob_da
2df0: 74 61 20 42 4c 4f 42 29 3b 22 29 3b 0a 20 20 20  ta BLOB);");.   
2e00: 20 20 20 20 20 2f 2f 20 69 6e 73 65 72 74 20 62       // insert b
2e10: 6c 6f 62 20 61 6e 64 20 6f 74 68 65 72 20 76 61  lob and other va
2e20: 6c 75 65 73 0a 20 20 20 20 20 20 20 20 4f 62 6a  lues.        Obj
2e30: 65 63 74 5b 5d 20 61 72 67 73 20 3d 20 6e 65 77  ect[] args = new
2e40: 20 4f 62 6a 65 63 74 5b 34 5d 3b 0a 20 20 20 20   Object[4];.    
2e50: 20 20 20 20 62 79 74 65 5b 5d 20 6f 72 69 67 69      byte[] origi
2e60: 6e 61 6c 42 6c 6f 62 20 3d 20 6e 65 77 20 62 79  nalBlob = new by
2e70: 74 65 5b 31 30 30 30 5d 3b 0a 20 20 20 20 20 20  te[1000];.      
2e80: 20 20 41 72 72 61 79 73 2e 66 69 6c 6c 28 6f 72    Arrays.fill(or
2e90: 69 67 69 6e 61 6c 42 6c 6f 62 2c 20 4e 55 4d 42  iginalBlob, NUMB
2ea0: 45 52 5f 42 4c 4f 42 5f 55 4e 49 54 29 3b 0a 20  ER_BLOB_UNIT);. 
2eb0: 20 20 20 20 20 20 20 61 72 67 73 5b 30 5d 20 3d         args[0] =
2ec0: 20 53 54 52 49 4e 47 5f 54 45 58 54 3b 0a 20 20   STRING_TEXT;.  
2ed0: 20 20 20 20 20 20 61 72 67 73 5b 31 5d 20 3d 20        args[1] = 
2ee0: 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 3b 0a 20  NUMBER_DOUBLE;. 
2ef0: 20 20 20 20 20 20 20 61 72 67 73 5b 32 5d 20 3d         args[2] =
2f00: 20 4e 55 4d 42 45 52 5f 4c 4f 4e 47 5f 49 4e 54   NUMBER_LONG_INT
2f10: 45 47 45 52 3b 0a 20 20 20 20 20 20 20 20 61 72  EGER;.        ar
2f20: 67 73 5b 33 5d 20 3d 20 6f 72 69 67 69 6e 61 6c  gs[3] = original
2f30: 42 6c 6f 62 3b 0a 0a 20 20 20 20 20 20 20 20 2f  Blob;..        /
2f40: 2f 20 49 6e 73 65 72 74 20 72 65 63 6f 72 64 2e  / Insert record.
2f50: 0a 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 20  .        String 
2f60: 73 71 6c 20 3d 20 22 49 4e 53 45 52 54 20 49 4e  sql = "INSERT IN
2f70: 54 4f 20 74 65 73 74 32 20 28 73 74 72 69 6e 67  TO test2 (string
2f80: 5f 74 65 78 74 2c 20 64 6f 75 62 6c 65 5f 6e 75  _text, double_nu
2f90: 6d 62 65 72 2c 20 69 6e 74 5f 6e 75 6d 62 65 72  mber, int_number
2fa0: 2c 20 62 6c 6f 62 5f 64 61 74 61 29 22 0a 20 20  , blob_data)".  
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2fc0: 22 56 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f  "VALUES (?,?,?,?
2fd0: 29 22 3b 0a 20 20 20 20 20 20 20 20 6d 44 61 74  )";.        mDat
2fe0: 61 62 61 73 65 2e 65 78 65 63 53 51 4c 28 73 71  abase.execSQL(sq
2ff0: 6c 2c 20 61 72 67 73 29 3b 0a 20 20 20 20 20 20  l, args);.      
3000: 20 20 2f 2f 20 75 73 65 20 63 75 72 73 6f 72 20    // use cursor 
3010: 74 6f 20 61 63 63 65 73 73 20 62 6c 6f 62 0a 20  to access blob. 
3020: 20 20 20 20 20 20 20 43 75 72 73 6f 72 20 63 75         Cursor cu
3030: 72 73 6f 72 20 3d 20 6d 44 61 74 61 62 61 73 65  rsor = mDatabase
3040: 2e 71 75 65 72 79 28 22 74 65 73 74 32 22 2c 20  .query("test2", 
3050: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  null, null, null
3060: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75  , null, null, nu
3070: 6c 6c 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f  ll);..        //
3080: 20 54 65 73 74 20 67 65 74 43 6f 6c 75 6d 6e 43   Test getColumnC
3090: 6f 75 6e 74 0a 20 20 20 20 20 20 20 20 43 75 72  ount.        Cur
30a0: 73 6f 72 57 72 61 70 70 65 72 20 63 75 72 73 6f  sorWrapper curso
30b0: 72 57 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43  rWrapper = new C
30c0: 75 72 73 6f 72 57 72 61 70 70 65 72 28 67 65 74  ursorWrapper(get
30d0: 43 75 72 73 6f 72 28 29 29 3b 0a 20 20 20 20 20  Cursor());.     
30e0: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
30f0: 44 45 46 41 55 4c 54 5f 43 4f 4c 55 4d 4e 5f 43  DEFAULT_COLUMN_C
3100: 4f 55 4e 54 2c 20 63 75 72 73 6f 72 57 72 61 70  OUNT, cursorWrap
3110: 70 65 72 2e 67 65 74 43 6f 6c 75 6d 6e 43 6f 75  per.getColumnCou
3120: 6e 74 28 29 29 3b 0a 20 20 20 20 20 20 20 20 63  nt());.        c
3130: 75 72 73 6f 72 57 72 61 70 70 65 72 2e 63 6c 6f  ursorWrapper.clo
3140: 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 63 75  se();.        cu
3150: 72 73 6f 72 57 72 61 70 70 65 72 20 3d 20 6e 65  rsorWrapper = ne
3160: 77 20 43 75 72 73 6f 72 57 72 61 70 70 65 72 28  w CursorWrapper(
3170: 63 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  cursor);.       
3180: 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 35 2c   assertEquals(5,
3190: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
31a0: 65 74 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 29 29  etColumnCount())
31b0: 3b 0a 0a 20 20 20 20 20 20 20 20 63 75 72 73 6f  ;..        curso
31c0: 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f 4e  rWrapper.moveToN
31d0: 65 78 74 28 29 3b 0a 20 20 20 20 20 20 20 20 69  ext();.        i
31e0: 6e 74 20 63 6f 6c 75 6d 6e 42 6c 6f 62 20 3d 20  nt columnBlob = 
31f0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65  cursorWrapper.ge
3200: 74 43 6f 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68  tColumnIndexOrTh
3210: 72 6f 77 28 22 62 6c 6f 62 5f 64 61 74 61 22 29  row("blob_data")
3220: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f  ;.        int co
3230: 6c 75 6d 6e 53 74 72 69 6e 67 20 3d 20 63 75 72  lumnString = cur
3240: 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43 6f  sorWrapper.getCo
3250: 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68 72 6f 77  lumnIndexOrThrow
3260: 28 22 73 74 72 69 6e 67 5f 74 65 78 74 22 29 3b  ("string_text");
3270: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 6c  .        int col
3280: 75 6d 6e 44 6f 75 62 6c 65 20 3d 20 63 75 72 73  umnDouble = curs
3290: 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43 6f 6c  orWrapper.getCol
32a0: 75 6d 6e 49 6e 64 65 78 4f 72 54 68 72 6f 77 28  umnIndexOrThrow(
32b0: 22 64 6f 75 62 6c 65 5f 6e 75 6d 62 65 72 22 29  "double_number")
32c0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f  ;.        int co
32d0: 6c 75 6d 6e 49 6e 74 65 67 65 72 20 3d 20 63 75  lumnInteger = cu
32e0: 72 73 6f 72 57 72 61 70 70 65 72 2e 67 65 74 43  rsorWrapper.getC
32f0: 6f 6c 75 6d 6e 49 6e 64 65 78 4f 72 54 68 72 6f  olumnIndexOrThro
3300: 77 28 22 69 6e 74 5f 6e 75 6d 62 65 72 22 29 3b  w("int_number");
3310: 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 65 73  ..        // Tes
3320: 74 20 67 65 74 74 69 6e 67 20 76 61 6c 75 65 20  t getting value 
3330: 6d 65 74 68 6f 64 73 2e 0a 20 20 20 20 20 20 20  methods..       
3340: 20 62 79 74 65 5b 5d 20 74 61 72 67 65 74 42 6c   byte[] targetBl
3350: 6f 62 20 3d 20 63 75 72 73 6f 72 57 72 61 70 70  ob = cursorWrapp
3360: 65 72 2e 67 65 74 42 6c 6f 62 28 63 6f 6c 75 6d  er.getBlob(colum
3370: 6e 42 6c 6f 62 29 3b 0a 20 20 20 20 20 20 20 20  nBlob);.        
3380: 61 73 73 65 72 74 54 72 75 65 28 41 72 72 61 79  assertTrue(Array
3390: 73 2e 65 71 75 61 6c 73 28 6f 72 69 67 69 6e 61  s.equals(origina
33a0: 6c 42 6c 6f 62 2c 20 74 61 72 67 65 74 42 6c 6f  lBlob, targetBlo
33b0: 62 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 61 73  b));..        as
33c0: 73 65 72 74 45 71 75 61 6c 73 28 53 54 52 49 4e  sertEquals(STRIN
33d0: 47 5f 54 45 58 54 2c 20 63 75 72 73 6f 72 57 72  G_TEXT, cursorWr
33e0: 61 70 70 65 72 2e 67 65 74 53 74 72 69 6e 67 28  apper.getString(
33f0: 63 6f 6c 75 6d 6e 53 74 72 69 6e 67 29 29 3b 0a  columnString));.
3400: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 45  .        assertE
3410: 71 75 61 6c 73 28 4e 55 4d 42 45 52 5f 44 4f 55  quals(NUMBER_DOU
3420: 42 4c 45 2c 20 63 75 72 73 6f 72 57 72 61 70 70  BLE, cursorWrapp
3430: 65 72 2e 67 65 74 44 6f 75 62 6c 65 28 63 6f 6c  er.getDouble(col
3440: 75 6d 6e 44 6f 75 62 6c 65 29 2c 20 30 2e 30 30  umnDouble), 0.00
3450: 30 30 30 30 30 30 30 30 30 31 29 3b 0a 0a 20 20  0000000001);..  
3460: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
3470: 6c 73 28 4e 55 4d 42 45 52 5f 46 4c 4f 41 54 2c  ls(NUMBER_FLOAT,
3480: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
3490: 65 74 46 6c 6f 61 74 28 63 6f 6c 75 6d 6e 44 6f  etFloat(columnDo
34a0: 75 62 6c 65 29 2c 20 30 2e 30 30 30 30 30 30 30  uble), 0.0000000
34b0: 30 30 30 30 31 66 29 3b 0a 0a 20 20 20 20 20 20  00001f);..      
34c0: 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28 4e    assertEquals(N
34d0: 55 4d 42 45 52 5f 4c 4f 4e 47 5f 49 4e 54 45 47  UMBER_LONG_INTEG
34e0: 45 52 2c 20 63 75 72 73 6f 72 57 72 61 70 70 65  ER, cursorWrappe
34f0: 72 2e 67 65 74 4c 6f 6e 67 28 63 6f 6c 75 6d 6e  r.getLong(column
3500: 49 6e 74 65 67 65 72 29 29 3b 0a 0a 20 20 20 20  Integer));..    
3510: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
3520: 28 4e 55 4d 42 45 52 5f 49 4e 54 45 47 45 52 2c  (NUMBER_INTEGER,
3530: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 67   cursorWrapper.g
3540: 65 74 49 6e 74 28 63 6f 6c 75 6d 6e 49 6e 74 65  etInt(columnInte
3550: 67 65 72 29 29 3b 0a 0a 20 20 20 20 20 20 20 20  ger));..        
3560: 61 73 73 65 72 74 45 71 75 61 6c 73 28 4e 55 4d  assertEquals(NUM
3570: 42 45 52 5f 53 48 4f 52 54 2c 20 63 75 72 73 6f  BER_SHORT, curso
3580: 72 57 72 61 70 70 65 72 2e 67 65 74 53 68 6f 72  rWrapper.getShor
3590: 74 28 63 6f 6c 75 6d 6e 49 6e 74 65 67 65 72 29  t(columnInteger)
35a0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 54  );..        // T
35b0: 65 73 74 20 69 73 4e 75 6c 6c 28 69 6e 74 29 2e  est isNull(int).
35c0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 46  .        assertF
35d0: 61 6c 73 65 28 63 75 72 73 6f 72 57 72 61 70 70  alse(cursorWrapp
35e0: 65 72 2e 69 73 4e 75 6c 6c 28 63 6f 6c 75 6d 6e  er.isNull(column
35f0: 42 6c 6f 62 29 29 3b 0a 20 20 20 20 20 20 20 20  Blob));.        
3600: 73 71 6c 20 3d 20 22 49 4e 53 45 52 54 20 49 4e  sql = "INSERT IN
3610: 54 4f 20 74 65 73 74 32 20 28 73 74 72 69 6e 67  TO test2 (string
3620: 5f 74 65 78 74 29 20 56 41 4c 55 45 53 20 28 27  _text) VALUES ('
3630: 22 20 2b 20 53 54 52 49 4e 47 5f 54 45 58 54 32  " + STRING_TEXT2
3640: 20 2b 20 22 27 29 22 3b 0a 20 20 20 20 20 20 20   + "')";.       
3650: 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63 53   mDatabase.execS
3660: 51 4c 28 73 71 6c 29 3b 0a 20 20 20 20 20 20 20  QL(sql);.       
3670: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 63   cursorWrapper.c
3680: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
3690: 63 75 72 73 6f 72 20 3d 20 6d 44 61 74 61 62 61  cursor = mDataba
36a0: 73 65 2e 71 75 65 72 79 28 22 74 65 73 74 32 22  se.query("test2"
36b0: 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75  , null, null, nu
36c0: 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  ll, null, null, 
36d0: 6e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 63  null);.        c
36e0: 75 72 73 6f 72 57 72 61 70 70 65 72 20 3d 20 6e  ursorWrapper = n
36f0: 65 77 20 43 75 72 73 6f 72 57 72 61 70 70 65 72  ew CursorWrapper
3700: 28 63 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  (cursor);.      
3710: 20 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e    cursorWrapper.
3720: 6d 6f 76 65 54 6f 50 6f 73 69 74 69 6f 6e 28 31  moveToPosition(1
3730: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
3740: 74 54 72 75 65 28 63 75 72 73 6f 72 57 72 61 70  tTrue(cursorWrap
3750: 70 65 72 2e 69 73 4e 75 6c 6c 28 63 6f 6c 75 6d  per.isNull(colum
3760: 6e 42 6c 6f 62 29 29 3b 0a 0a 20 20 20 20 20 20  nBlob));..      
3770: 20 20 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63    mDatabase.exec
3780: 53 51 4c 28 22 44 52 4f 50 20 54 41 42 4c 45 20  SQL("DROP TABLE 
3790: 74 65 73 74 32 22 29 3b 0a 20 20 20 20 7d 0a 0a  test2");.    }..
37a0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
37b0: 74 65 73 74 47 65 74 45 78 74 72 61 73 28 29 20  testGetExtras() 
37c0: 7b 0a 20 20 20 20 20 20 20 20 43 75 72 73 6f 72  {.        Cursor
37d0: 57 72 61 70 70 65 72 20 63 75 72 73 6f 72 20 3d  Wrapper cursor =
37e0: 20 6e 65 77 20 43 75 72 73 6f 72 57 72 61 70 70   new CursorWrapp
37f0: 65 72 28 67 65 74 43 75 72 73 6f 72 28 29 29 3b  er(getCursor());
3800: 0a 20 20 20 20 20 20 20 20 42 75 6e 64 6c 65 20  .        Bundle 
3810: 62 75 6e 64 6c 65 20 3d 20 63 75 72 73 6f 72 2e  bundle = cursor.
3820: 67 65 74 45 78 74 72 61 73 28 29 3b 0a 20 20 20  getExtras();.   
3830: 20 20 20 20 20 61 73 73 65 72 74 53 61 6d 65 28       assertSame(
3840: 42 75 6e 64 6c 65 2e 45 4d 50 54 59 2c 20 62 75  Bundle.EMPTY, bu
3850: 6e 64 6c 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ndle);.    }..  
3860: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 74 65    public void te
3870: 73 74 43 6f 70 79 53 74 72 69 6e 67 54 6f 42 75  stCopyStringToBu
3880: 66 66 65 72 28 29 20 7b 0a 20 20 20 20 20 20 20  ffer() {.       
3890: 20 43 68 61 72 41 72 72 61 79 42 75 66 66 65 72   CharArrayBuffer
38a0: 20 63 68 61 72 41 72 72 61 79 42 75 66 66 65 72   charArrayBuffer
38b0: 20 3d 20 6e 65 77 20 43 68 61 72 41 72 72 61 79   = new CharArray
38c0: 42 75 66 66 65 72 28 31 30 30 30 29 3b 0a 20 20  Buffer(1000);.  
38d0: 20 20 20 20 20 20 43 75 72 73 6f 72 20 63 75 72        Cursor cur
38e0: 73 6f 72 20 3d 20 67 65 74 43 75 72 73 6f 72 28  sor = getCursor(
38f0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 43 75 72 73  );..        Curs
3900: 6f 72 57 72 61 70 70 65 72 20 63 75 72 73 6f 72  orWrapper cursor
3910: 57 72 61 70 70 65 72 20 3d 20 6e 65 77 20 43 75  Wrapper = new Cu
3920: 72 73 6f 72 57 72 61 70 70 65 72 28 63 75 72 73  rsorWrapper(curs
3930: 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 63 75 72  or);.        cur
3940: 73 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 54  sorWrapper.moveT
3950: 6f 46 69 72 73 74 28 29 3b 0a 0a 20 20 20 20 20  oFirst();..     
3960: 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73 28     assertEquals(
3970: 30 2c 20 63 68 61 72 41 72 72 61 79 42 75 66 66  0, charArrayBuff
3980: 65 72 2e 73 69 7a 65 43 6f 70 69 65 64 29 3b 0a  er.sizeCopied);.
3990: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 57 72          cursorWr
39a0: 61 70 70 65 72 2e 63 6f 70 79 53 74 72 69 6e 67  apper.copyString
39b0: 54 6f 42 75 66 66 65 72 28 30 2c 20 63 68 61 72  ToBuffer(0, char
39c0: 41 72 72 61 79 42 75 66 66 65 72 29 3b 0a 20 20  ArrayBuffer);.  
39d0: 20 20 20 20 20 20 53 74 72 69 6e 67 20 73 74 72        String str
39e0: 69 6e 67 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ing = new String
39f0: 28 63 68 61 72 41 72 72 61 79 42 75 66 66 65 72  (charArrayBuffer
3a00: 2e 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20 20  .data);.        
3a10: 61 73 73 65 72 74 54 72 75 65 28 63 68 61 72 41  assertTrue(charA
3a20: 72 72 61 79 42 75 66 66 65 72 2e 73 69 7a 65 43  rrayBuffer.sizeC
3a30: 6f 70 69 65 64 20 3e 20 30 29 3b 0a 20 20 20 20  opied > 0);.    
3a40: 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c 73      assertEquals
3a50: 28 22 31 22 2c 20 73 74 72 69 6e 67 2e 73 75 62  ("1", string.sub
3a60: 73 74 72 69 6e 67 28 30 2c 20 63 68 61 72 41 72  string(0, charAr
3a70: 72 61 79 42 75 66 66 65 72 2e 73 69 7a 65 43 6f  rayBuffer.sizeCo
3a80: 70 69 65 64 29 29 3b 0a 0a 20 20 20 20 20 20 20  pied));..       
3a90: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 63   cursorWrapper.c
3aa0: 6f 70 79 53 74 72 69 6e 67 54 6f 42 75 66 66 65  opyStringToBuffe
3ab0: 72 28 31 2c 20 63 68 61 72 41 72 72 61 79 42 75  r(1, charArrayBu
3ac0: 66 66 65 72 29 3b 0a 20 20 20 20 20 20 20 20 73  ffer);.        s
3ad0: 74 72 69 6e 67 20 3d 20 6e 65 77 20 53 74 72 69  tring = new Stri
3ae0: 6e 67 28 63 68 61 72 41 72 72 61 79 42 75 66 66  ng(charArrayBuff
3af0: 65 72 2e 64 61 74 61 29 3b 0a 20 20 20 20 20 20  er.data);.      
3b00: 20 20 61 73 73 65 72 74 54 72 75 65 28 63 68 61    assertTrue(cha
3b10: 72 41 72 72 61 79 42 75 66 66 65 72 2e 73 69 7a  rArrayBuffer.siz
3b20: 65 43 6f 70 69 65 64 20 3e 20 30 29 3b 0a 20 20  eCopied > 0);.  
3b30: 20 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61        assertEqua
3b40: 6c 73 28 46 49 52 53 54 5f 4e 55 4d 42 45 52 2c  ls(FIRST_NUMBER,
3b50: 20 73 74 72 69 6e 67 2e 73 75 62 73 74 72 69 6e   string.substrin
3b60: 67 28 30 2c 20 63 68 61 72 41 72 72 61 79 42 75  g(0, charArrayBu
3b70: 66 66 65 72 2e 73 69 7a 65 43 6f 70 69 65 64 29  ffer.sizeCopied)
3b80: 29 3b 0a 0a 20 20 20 20 20 20 20 20 63 75 72 73  );..        curs
3b90: 6f 72 57 72 61 70 70 65 72 2e 6d 6f 76 65 54 6f  orWrapper.moveTo
3ba0: 4e 65 78 74 28 29 3b 0a 20 20 20 20 20 20 20 20  Next();.        
3bb0: 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 63 6f  cursorWrapper.co
3bc0: 70 79 53 74 72 69 6e 67 54 6f 42 75 66 66 65 72  pyStringToBuffer
3bd0: 28 31 2c 20 63 68 61 72 41 72 72 61 79 42 75 66  (1, charArrayBuf
3be0: 66 65 72 29 3b 0a 20 20 20 20 20 20 20 20 73 74  fer);.        st
3bf0: 72 69 6e 67 20 3d 20 6e 65 77 20 53 74 72 69 6e  ring = new Strin
3c00: 67 28 63 68 61 72 41 72 72 61 79 42 75 66 66 65  g(charArrayBuffe
3c10: 72 2e 64 61 74 61 29 3b 0a 20 20 20 20 20 20 20  r.data);.       
3c20: 20 61 73 73 65 72 74 54 72 75 65 28 63 68 61 72   assertTrue(char
3c30: 41 72 72 61 79 42 75 66 66 65 72 2e 73 69 7a 65  ArrayBuffer.size
3c40: 43 6f 70 69 65 64 20 3e 20 30 29 3b 0a 20 20 20  Copied > 0);.   
3c50: 20 20 20 20 20 61 73 73 65 72 74 45 71 75 61 6c       assertEqual
3c60: 73 28 53 45 43 4f 4e 44 5f 4e 55 4d 42 45 52 2c  s(SECOND_NUMBER,
3c70: 20 73 74 72 69 6e 67 2e 73 75 62 73 74 72 69 6e   string.substrin
3c80: 67 28 30 2c 20 63 68 61 72 41 72 72 61 79 42 75  g(0, charArrayBu
3c90: 66 66 65 72 2e 73 69 7a 65 43 6f 70 69 65 64 29  ffer.sizeCopied)
3ca0: 29 3b 0a 20 20 20 20 20 20 20 20 63 75 72 73 6f  );.        curso
3cb0: 72 57 72 61 70 70 65 72 2e 63 6c 6f 73 65 28 29  rWrapper.close()
3cc0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75 62  ;.    }..    pub
3cd0: 6c 69 63 20 76 6f 69 64 20 74 65 73 74 52 65 73  lic void testRes
3ce0: 70 6f 6e 64 28 29 20 7b 0a 20 20 20 20 20 20 20  pond() {.       
3cf0: 20 42 75 6e 64 6c 65 20 62 20 3d 20 6e 65 77 20   Bundle b = new 
3d00: 42 75 6e 64 6c 65 28 29 3b 0a 20 20 20 20 20 20  Bundle();.      
3d10: 20 20 43 75 72 73 6f 72 57 72 61 70 70 65 72 20    CursorWrapper 
3d20: 63 75 72 73 6f 72 57 72 61 70 70 65 72 20 3d 20  cursorWrapper = 
3d30: 6e 65 77 20 43 75 72 73 6f 72 57 72 61 70 70 65  new CursorWrappe
3d40: 72 28 67 65 74 43 75 72 73 6f 72 28 29 29 3b 0a  r(getCursor());.
3d50: 20 20 20 20 20 20 20 20 42 75 6e 64 6c 65 20 62          Bundle b
3d60: 75 6e 64 6c 65 20 3d 20 63 75 72 73 6f 72 57 72  undle = cursorWr
3d70: 61 70 70 65 72 2e 72 65 73 70 6f 6e 64 28 62 29  apper.respond(b)
3d80: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
3d90: 53 61 6d 65 28 42 75 6e 64 6c 65 2e 45 4d 50 54  Same(Bundle.EMPT
3da0: 59 2c 20 62 75 6e 64 6c 65 29 3b 0a 20 20 20 20  Y, bundle);.    
3db0: 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65      cursorWrappe
3dc0: 72 2e 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 7d  r.close();.    }
3dd0: 0a 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  ..    public voi
3de0: 64 20 74 65 73 74 47 65 74 57 61 6e 74 73 41 6c  d testGetWantsAl
3df0: 6c 4f 6e 4d 6f 76 65 43 61 6c 6c 73 28 29 20 7b  lOnMoveCalls() {
3e00: 0a 20 20 20 20 20 20 20 20 43 75 72 73 6f 72 57  .        CursorW
3e10: 72 61 70 70 65 72 20 63 75 72 73 6f 72 57 72 61  rapper cursorWra
3e20: 70 70 65 72 20 3d 20 6e 65 77 20 43 75 72 73 6f  pper = new Curso
3e30: 72 57 72 61 70 70 65 72 28 67 65 74 43 75 72 73  rWrapper(getCurs
3e40: 6f 72 28 29 29 3b 0a 20 20 20 20 20 20 20 20 61  or());.        a
3e50: 73 73 65 72 74 46 61 6c 73 65 28 63 75 72 73 6f  ssertFalse(curso
3e60: 72 57 72 61 70 70 65 72 2e 67 65 74 57 61 6e 74  rWrapper.getWant
3e70: 73 41 6c 6c 4f 6e 4d 6f 76 65 43 61 6c 6c 73 28  sAllOnMoveCalls(
3e80: 29 29 3b 0a 20 20 20 20 20 20 20 20 63 75 72 73  ));.        curs
3e90: 6f 72 57 72 61 70 70 65 72 2e 63 6c 6f 73 65 28  orWrapper.close(
3ea0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75  );.    }..    pu
3eb0: 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74 43 6f  blic void testCo
3ec0: 6e 74 65 6e 74 4f 62 73 65 72 76 65 72 4f 70 65  ntentObserverOpe
3ed0: 72 61 74 69 6f 6e 73 28 29 20 74 68 72 6f 77 73  rations() throws
3ee0: 20 49 6c 6c 65 67 61 6c 53 74 61 74 65 45 78 63   IllegalStateExc
3ef0: 65 70 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20  eption {.       
3f00: 20 43 75 72 73 6f 72 57 72 61 70 70 65 72 20 63   CursorWrapper c
3f10: 75 72 73 6f 72 57 72 61 70 70 65 72 20 3d 20 6e  ursorWrapper = n
3f20: 65 77 20 43 75 72 73 6f 72 57 72 61 70 70 65 72  ew CursorWrapper
3f30: 28 67 65 74 43 75 72 73 6f 72 28 29 29 3b 0a 20  (getCursor());. 
3f40: 20 20 20 20 20 20 20 4d 6f 63 6b 43 6f 6e 74 65         MockConte
3f50: 6e 74 4f 62 73 65 72 76 65 72 20 6f 62 73 65 72  ntObserver obser
3f60: 76 65 72 20 3d 20 6e 65 77 20 4d 6f 63 6b 43 6f  ver = new MockCo
3f70: 6e 74 65 6e 74 4f 62 73 65 72 76 65 72 28 6e 75  ntentObserver(nu
3f80: 6c 6c 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f  ll);..        //
3f90: 20 43 61 6e 27 74 20 75 6e 72 65 67 69 73 74 65   Can't unregiste
3fa0: 72 20 61 20 4f 62 73 65 72 76 65 72 20 62 65 66  r a Observer bef
3fb0: 6f 72 65 20 69 74 20 68 61 73 20 62 65 65 6e 20  ore it has been 
3fc0: 72 65 67 69 73 74 65 72 65 64 2e 0a 20 20 20 20  registered..    
3fd0: 20 20 20 20 74 72 79 7b 0a 20 20 20 20 20 20 20      try{.       
3fe0: 20 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70       cursorWrapp
3ff0: 65 72 2e 75 6e 72 65 67 69 73 74 65 72 43 6f 6e  er.unregisterCon
4000: 74 65 6e 74 4f 62 73 65 72 76 65 72 28 6f 62 73  tentObserver(obs
4010: 65 72 76 65 72 29 3b 0a 20 20 20 20 20 20 20 20  erver);.        
4020: 20 20 20 20 66 61 69 6c 28 22 74 65 73 74 55 6e      fail("testUn
4030: 72 65 67 69 73 74 65 72 43 6f 6e 74 65 6e 74 4f  registerContentO
4040: 62 73 65 72 76 65 72 20 66 61 69 6c 65 64 22 29  bserver failed")
4050: 3b 0a 20 20 20 20 20 20 20 20 7d 63 61 74 63 68  ;.        }catch
4060: 28 49 6c 6c 65 67 61 6c 53 74 61 74 65 45 78 63  (IllegalStateExc
4070: 65 70 74 69 6f 6e 20 65 29 7b 0a 20 20 20 20 20  eption e){.     
4080: 20 20 20 20 20 20 20 61 73 73 65 72 74 54 72 75         assertTru
4090: 65 28 74 72 75 65 29 3b 0a 20 20 20 20 20 20 20  e(true);.       
40a0: 20 7d 0a 0a 20 20 20 20 20 20 20 20 63 75 72 73   }..        curs
40b0: 6f 72 57 72 61 70 70 65 72 2e 72 65 67 69 73 74  orWrapper.regist
40c0: 65 72 43 6f 6e 74 65 6e 74 4f 62 73 65 72 76 65  erContentObserve
40d0: 72 28 6f 62 73 65 72 76 65 72 29 3b 0a 0a 20 20  r(observer);..  
40e0: 20 20 20 20 20 20 2f 2f 20 43 61 6e 27 74 20 72        // Can't r
40f0: 65 67 69 73 74 65 72 20 61 20 73 61 6d 65 20 6f  egister a same o
4100: 62 73 65 72 76 65 72 20 74 77 69 63 65 20 62 65  bserver twice be
4110: 66 6f 72 65 20 75 6e 72 65 67 69 73 74 65 72 20  fore unregister 
4120: 69 74 2e 0a 20 20 20 20 20 20 20 20 74 72 79 7b  it..        try{
4130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72  .            cur
4140: 73 6f 72 57 72 61 70 70 65 72 2e 72 65 67 69 73  sorWrapper.regis
4150: 74 65 72 43 6f 6e 74 65 6e 74 4f 62 73 65 72 76  terContentObserv
4160: 65 72 28 6f 62 73 65 72 76 65 72 29 3b 0a 20 20  er(observer);.  
4170: 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 28 22            fail("
4180: 74 65 73 74 52 65 67 69 73 74 65 72 43 6f 6e 74  testRegisterCont
4190: 65 6e 74 4f 62 73 65 72 76 65 72 20 66 61 69 6c  entObserver fail
41a0: 65 64 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 63  ed");.        }c
41b0: 61 74 63 68 28 49 6c 6c 65 67 61 6c 53 74 61 74  atch(IllegalStat
41c0: 65 45 78 63 65 70 74 69 6f 6e 20 65 29 7b 0a 20  eException e){. 
41d0: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
41e0: 20 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e    cursorWrapper.
41f0: 75 6e 72 65 67 69 73 74 65 72 43 6f 6e 74 65 6e  unregisterConten
4200: 74 4f 62 73 65 72 76 65 72 28 6f 62 73 65 72 76  tObserver(observ
4210: 65 72 29 3b 0a 20 20 20 20 20 20 20 20 2f 2f 20  er);.        // 
4220: 6f 6e 65 20 4f 62 73 65 72 76 65 72 20 63 61 6e  one Observer can
4230: 20 62 65 20 72 65 67 69 73 74 65 72 65 64 20 61   be registered a
4240: 67 61 69 6e 20 61 66 74 65 72 20 69 74 20 68 61  gain after it ha
4250: 73 20 62 65 65 6e 20 75 6e 72 65 67 69 73 74 65  s been unregiste
4260: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 63 75 72  red..        cur
4270: 73 6f 72 57 72 61 70 70 65 72 2e 72 65 67 69 73  sorWrapper.regis
4280: 74 65 72 43 6f 6e 74 65 6e 74 4f 62 73 65 72 76  terContentObserv
4290: 65 72 28 6f 62 73 65 72 76 65 72 29 3b 0a 0a 20  er(observer);.. 
42a0: 20 20 20 20 20 20 20 63 75 72 73 6f 72 57 72 61         cursorWra
42b0: 70 70 65 72 2e 75 6e 72 65 67 69 73 74 65 72 43  pper.unregisterC
42c0: 6f 6e 74 65 6e 74 4f 62 73 65 72 76 65 72 28 6f  ontentObserver(o
42d0: 62 73 65 72 76 65 72 29 3b 0a 0a 20 20 20 20 20  bserver);..     
42e0: 20 20 20 74 72 79 7b 0a 20 20 20 20 20 20 20 20     try{.        
42f0: 20 20 20 20 63 75 72 73 6f 72 57 72 61 70 70 65      cursorWrappe
4300: 72 2e 75 6e 72 65 67 69 73 74 65 72 43 6f 6e 74  r.unregisterCont
4310: 65 6e 74 4f 62 73 65 72 76 65 72 28 6f 62 73 65  entObserver(obse
4320: 72 76 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20  rver);.         
4330: 20 20 20 66 61 69 6c 28 22 74 65 73 74 55 6e 72     fail("testUnr
4340: 65 67 69 73 74 65 72 43 6f 6e 74 65 6e 74 4f 62  egisterContentOb
4350: 73 65 72 76 65 72 20 66 61 69 6c 65 64 22 29 3b  server failed");
4360: 0a 20 20 20 20 20 20 20 20 7d 63 61 74 63 68 28  .        }catch(
4370: 49 6c 6c 65 67 61 6c 53 74 61 74 65 45 78 63 65  IllegalStateExce
4380: 70 74 69 6f 6e 20 65 29 7b 0a 20 20 20 20 20 20  ption e){.      
4390: 20 20 7d 0a 20 20 20 20 20 20 20 20 63 75 72 73    }.        curs
43a0: 6f 72 57 72 61 70 70 65 72 2e 63 6c 6f 73 65 28  orWrapper.close(
43b0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 75  );.    }..    pu
43c0: 62 6c 69 63 20 76 6f 69 64 20 74 65 73 74 53 65  blic void testSe
43d0: 74 45 78 74 72 61 73 28 29 20 7b 0a 20 20 20 20  tExtras() {.    
43e0: 20 20 20 20 43 75 72 73 6f 72 20 63 75 72 73 6f      Cursor curso
43f0: 72 20 3d 20 67 65 74 43 75 72 73 6f 72 28 29 3b  r = getCursor();
4400: 0a 20 20 20 20 20 20 20 20 43 75 72 73 6f 72 57  .        CursorW
4410: 72 61 70 70 65 72 20 63 75 72 73 6f 72 57 72 61  rapper cursorWra
4420: 70 70 65 72 20 3d 20 6e 65 77 20 43 75 72 73 6f  pper = new Curso
4430: 72 57 72 61 70 70 65 72 28 63 75 72 73 6f 72 29  rWrapper(cursor)
4440: 3b 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0a  ;.        try {.
4450: 20 20 20 20 20 20 20 20 20 20 20 20 42 75 6e 64              Bund
4460: 6c 65 20 62 20 3d 20 6e 65 77 20 42 75 6e 64 6c  le b = new Bundl
4470: 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  e();.           
4480: 20 63 75 72 73 6f 72 57 72 61 70 70 65 72 2e 73   cursorWrapper.s
4490: 65 74 45 78 74 72 61 73 28 62 29 3b 0a 20 20 20  etExtras(b);.   
44a0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 53           assertS
44b0: 61 6d 65 28 62 2c 20 63 75 72 73 6f 72 2e 67 65  ame(b, cursor.ge
44c0: 74 45 78 74 72 61 73 28 29 29 3b 0a 20 20 20 20  tExtras());.    
44d0: 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0a      } finally {.
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 73              curs
44f0: 6f 72 57 72 61 70 70 65 72 2e 63 6c 6f 73 65 28  orWrapper.close(
4500: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4510: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
4520: 63 6c 61 73 73 20 4d 6f 63 6b 43 6f 6e 74 65 6e  class MockConten
4530: 74 4f 62 73 65 72 76 65 72 20 65 78 74 65 6e 64  tObserver extend
4540: 73 20 43 6f 6e 74 65 6e 74 4f 62 73 65 72 76 65  s ContentObserve
4550: 72 20 7b 0a 0a 20 20 20 20 20 20 20 20 70 75 62  r {..        pub
4560: 6c 69 63 20 4d 6f 63 6b 43 6f 6e 74 65 6e 74 4f  lic MockContentO
4570: 62 73 65 72 76 65 72 28 48 61 6e 64 6c 65 72 20  bserver(Handler 
4580: 68 61 6e 64 6c 65 72 29 20 7b 0a 20 20 20 20 20  handler) {.     
4590: 20 20 20 20 20 20 20 73 75 70 65 72 28 68 61 6e         super(han
45a0: 64 6c 65 72 29 3b 0a 20 20 20 20 20 20 20 20 7d  dler);.        }
45b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69 76  .    }..    priv
45c0: 61 74 65 20 76 6f 69 64 20 64 65 6c 65 74 65 57  ate void deleteW
45d0: 69 74 68 56 61 6c 75 65 28 53 51 4c 69 74 65 44  ithValue(SQLiteD
45e0: 61 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65  atabase database
45f0: 2c 20 69 6e 74 20 76 61 6c 75 65 29 20 7b 0a 20  , int value) {. 
4600: 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 2e         database.
4610: 65 78 65 63 53 51 4c 28 22 44 45 4c 45 54 45 20  execSQL("DELETE 
4620: 46 52 4f 4d 20 74 65 73 74 31 20 57 48 45 52 45  FROM test1 WHERE
4630: 20 6e 75 6d 62 65 72 20 3d 20 22 20 2b 20 76 61   number = " + va
4640: 6c 75 65 20 2b 20 22 3b 22 29 3b 0a 20 20 20 20  lue + ";");.    
4650: 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  }..    private v
4660: 6f 69 64 20 61 64 64 57 69 74 68 56 61 6c 75 65  oid addWithValue
4670: 28 53 51 4c 69 74 65 44 61 74 61 62 61 73 65 20  (SQLiteDatabase 
4680: 64 61 74 61 62 61 73 65 2c 20 69 6e 74 20 76 61  database, int va
4690: 6c 75 65 29 20 7b 0a 20 20 20 20 20 20 20 20 64  lue) {.        d
46a0: 61 74 61 62 61 73 65 2e 65 78 65 63 53 51 4c 28  atabase.execSQL(
46b0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73  "INSERT INTO tes
46c0: 74 31 20 28 6e 75 6d 62 65 72 29 20 56 41 4c 55  t1 (number) VALU
46d0: 45 53 20 28 27 22 20 2b 20 76 61 6c 75 65 20 2b  ES ('" + value +
46e0: 20 22 27 29 3b 22 29 3b 0a 20 20 20 20 7d 0a 0a   "');");.    }..
46f0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
4700: 20 64 65 6c 65 74 65 41 6c 6c 52 65 63 6f 72 64   deleteAllRecord
4710: 73 28 53 51 4c 69 74 65 44 61 74 61 62 61 73 65  s(SQLiteDatabase
4720: 20 64 61 74 61 62 61 73 65 29 20 7b 0a 20 20 20   database) {.   
4730: 20 20 20 20 20 64 61 74 61 62 61 73 65 2e 64 65       database.de
4740: 6c 65 74 65 28 22 74 65 73 74 31 22 2c 20 6e 75  lete("test1", nu
4750: 6c 6c 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 7d  ll, null);.    }
4760: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
4770: 69 64 20 73 65 74 75 70 44 61 74 61 62 61 73 65  id setupDatabase
4780: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 46 69 6c  () {.        Fil
4790: 65 20 64 62 44 69 72 20 3d 20 67 65 74 43 6f 6e  e dbDir = getCon
47a0: 74 65 78 74 28 29 2e 67 65 74 44 69 72 28 22 74  text().getDir("t
47b0: 65 73 74 73 22 2c 20 43 6f 6e 74 65 78 74 2e 4d  ests", Context.M
47c0: 4f 44 45 5f 50 52 49 56 41 54 45 29 3b 0a 20 20  ODE_PRIVATE);.  
47d0: 20 20 20 20 20 20 2f 2a 20 64 6f 6e 27 74 20 75        /* don't u
47e0: 73 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  se the same data
47f0: 62 61 73 65 20 6e 61 6d 65 20 61 73 20 74 68 65  base name as the
4800: 20 6f 6e 65 20 69 6e 20 73 75 70 65 72 20 63 6c   one in super cl
4810: 61 73 73 0a 20 20 20 20 20 20 20 20 20 2a 20 74  ass.         * t
4820: 68 69 73 20 63 6c 61 73 73 27 73 20 73 65 74 55  his class's setU
4830: 70 28 29 20 6d 65 74 68 6f 64 20 64 65 6c 65 74  p() method delet
4840: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 66 69  es a database fi
4850: 6c 65 20 6a 75 73 74 20 6f 70 65 6e 65 64 20 62  le just opened b
4860: 79 20 73 75 70 65 72 2e 73 65 74 55 70 28 29 2e  y super.setUp().
4870: 0a 20 20 20 20 20 20 20 20 20 2a 20 74 68 61 74  .         * that
4880: 20 63 61 6e 20 63 61 75 73 65 20 63 6f 72 72 75   can cause corru
4890: 70 74 69 6f 6e 20 69 6e 20 64 61 74 61 62 61 73  ption in databas
48a0: 65 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e in the followi
48b0: 6e 67 20 73 69 74 75 61 74 69 6f 6e 3a 0a 20 20  ng situation:.  
48c0: 20 20 20 20 20 20 20 2a 20 20 20 20 73 75 70 65         *    supe
48d0: 72 2e 73 65 74 55 70 28 29 20 63 72 65 61 74 65  r.setUp() create
48e0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  s the database, 
48f0: 69 6e 73 65 72 74 73 20 73 6f 6d 65 20 64 61 74  inserts some dat
4900: 61 20 69 6e 74 6f 20 69 74 2e 0a 20 20 20 20 20  a into it..     
4910: 20 20 20 20 2a 20 20 20 20 74 68 69 73 20 63 6c      *    this cl
4920: 61 73 73 20 73 65 74 55 70 28 29 20 64 65 6c 65  ass setUp() dele
4930: 74 65 73 20 6a 75 73 74 20 74 68 65 20 64 61 74  tes just the dat
4940: 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 6e  abase file but n
4950: 6f 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  ot the associate
4960: 64 0a 20 20 20 20 20 20 20 20 20 2a 20 20 20 20  d.         *    
4970: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 73  database files s
4980: 75 63 68 20 61 73 20 77 61 6c 2c 20 73 68 6d 20  uch as wal, shm 
4990: 66 69 6c 65 73 2e 0a 20 20 20 20 20 20 20 20 20  files..         
49a0: 2a 20 73 6f 6c 75 74 69 6f 6e 20 69 73 20 74 6f  * solution is to
49b0: 20 68 61 76 65 20 74 68 69 73 20 63 6c 61 73 73   have this class
49c0: 20 64 65 6c 65 74 65 20 74 68 65 20 77 68 6f 6c   delete the whol
49d0: 65 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63  e database direc
49e0: 74 6f 72 79 2e 0a 20 20 20 20 20 20 20 20 20 2a  tory..         *
49f0: 20 62 65 74 74 65 72 20 79 65 74 2c 20 74 68 69   better yet, thi
4a00: 73 20 63 6c 61 73 73 20 73 68 6f 75 6c 64 6e 27  s class shouldn'
4a10: 74 20 65 78 74 65 6e 64 20 44 61 74 61 62 61 73  t extend Databas
4a20: 65 43 75 72 73 6f 72 74 65 73 74 20 61 74 20 61  eCursortest at a
4a30: 6c 6c 2e 0a 20 20 20 20 20 20 20 20 20 2a 20 54  ll..         * T
4a40: 4f 44 4f 3a 20 66 69 78 20 74 68 69 73 20 62 6f  ODO: fix this bo
4a50: 67 75 73 20 63 74 73 20 63 6c 61 73 73 20 68 69  gus cts class hi
4a60: 65 72 61 72 63 68 79 0a 20 20 20 20 20 20 20 20  erarchy.        
4a70: 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 44 61 74   */.        mDat
4a80: 61 62 61 73 65 46 69 6c 65 20 3d 20 6e 65 77 20  abaseFile = new 
4a90: 46 69 6c 65 28 64 62 44 69 72 2c 20 22 63 75 72  File(dbDir, "cur
4aa0: 73 6f 72 5f 74 65 73 74 2e 64 62 22 29 3b 0a 20  sor_test.db");. 
4ab0: 20 20 20 20 20 20 20 69 66 20 28 6d 44 61 74 61         if (mData
4ac0: 62 61 73 65 46 69 6c 65 2e 65 78 69 73 74 73 28  baseFile.exists(
4ad0: 29 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  )) {.           
4ae0: 20 6d 44 61 74 61 62 61 73 65 46 69 6c 65 2e 64   mDatabaseFile.d
4af0: 65 6c 65 74 65 28 29 3b 0a 20 20 20 20 20 20 20  elete();.       
4b00: 20 7d 0a 20 20 20 20 20 20 20 20 6d 44 61 74 61   }.        mData
4b10: 62 61 73 65 20 3d 20 53 51 4c 69 74 65 44 61 74  base = SQLiteDat
4b20: 61 62 61 73 65 2e 6f 70 65 6e 4f 72 43 72 65 61  abase.openOrCrea
4b30: 74 65 44 61 74 61 62 61 73 65 28 6d 44 61 74 61  teDatabase(mData
4b40: 62 61 73 65 46 69 6c 65 2e 67 65 74 50 61 74 68  baseFile.getPath
4b50: 28 29 2c 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20  (), null);.     
4b60: 20 20 20 61 73 73 65 72 74 4e 6f 74 4e 75 6c 6c     assertNotNull
4b70: 28 6d 44 61 74 61 62 61 73 65 29 3b 0a 20 20 20  (mDatabase);.   
4b80: 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e 73       mDatabase.s
4b90: 65 74 56 65 72 73 69 6f 6e 28 43 55 52 52 45 4e  etVersion(CURREN
4ba0: 54 5f 44 41 54 41 42 41 53 45 5f 56 45 52 53 49  T_DATABASE_VERSI
4bb0: 4f 4e 29 3b 0a 20 20 20 20 20 20 20 20 6d 44 61  ON);.        mDa
4bc0: 74 61 62 61 73 65 2e 65 78 65 63 53 51 4c 28 22  tabase.execSQL("
4bd0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
4be0: 74 31 20 28 5f 69 64 20 49 4e 54 45 47 45 52 20  t1 (_id INTEGER 
4bf0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 6e 75 6d  PRIMARY KEY, num
4c00: 62 65 72 20 54 45 58 54 29 3b 22 29 3b 0a 20 20  ber TEXT);");.  
4c10: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e        mDatabase.
4c20: 65 78 65 63 53 51 4c 28 22 49 4e 53 45 52 54 20  execSQL("INSERT 
4c30: 49 4e 54 4f 20 74 65 73 74 31 20 28 6e 75 6d 62  INTO test1 (numb
4c40: 65 72 29 20 56 41 4c 55 45 53 20 28 27 22 20 2b  er) VALUES ('" +
4c50: 20 46 49 52 53 54 5f 4e 55 4d 42 45 52 20 2b 20   FIRST_NUMBER + 
4c60: 22 27 29 3b 22 29 3b 0a 20 20 20 20 20 20 20 20  "');");.        
4c70: 6d 44 61 74 61 62 61 73 65 2e 65 78 65 63 53 51  mDatabase.execSQ
4c80: 4c 28 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  L("INSERT INTO t
4c90: 65 73 74 31 20 28 6e 75 6d 62 65 72 29 20 56 41  est1 (number) VA
4ca0: 4c 55 45 53 20 28 27 22 20 2b 20 53 45 43 4f 4e  LUES ('" + SECON
4cb0: 44 5f 4e 55 4d 42 45 52 20 2b 20 22 27 29 3b 22  D_NUMBER + "');"
4cc0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 43 75 72 73  );.        mCurs
4cd0: 6f 72 20 3d 20 67 65 74 43 75 72 73 6f 72 28 29  or = getCursor()
4ce0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 69  ;.    }..    pri
4cf0: 76 61 74 65 20 76 6f 69 64 20 63 6c 6f 73 65 44  vate void closeD
4d00: 61 74 61 62 61 73 65 28 29 20 7b 0a 20 20 20 20  atabase() {.    
4d10: 20 20 20 20 69 66 20 28 6e 75 6c 6c 20 21 3d 20      if (null != 
4d20: 6d 43 75 72 73 6f 72 29 20 7b 0a 20 20 20 20 20  mCursor) {.     
4d30: 20 20 20 20 20 20 20 6d 43 75 72 73 6f 72 2e 63         mCursor.c
4d40: 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20  lose();.        
4d50: 20 20 20 20 6d 43 75 72 73 6f 72 20 3d 20 6e 75      mCursor = nu
4d60: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ll;.        }.  
4d70: 20 20 20 20 20 20 6d 44 61 74 61 62 61 73 65 2e        mDatabase.
4d80: 63 6c 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20  close();.       
4d90: 20 6d 44 61 74 61 62 61 73 65 46 69 6c 65 2e 64   mDatabaseFile.d
4da0: 65 6c 65 74 65 28 29 3b 0a 20 20 20 20 7d 0a 0a  elete();.    }..
4db0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
4dc0: 20 72 65 62 75 69 6c 64 44 61 74 61 62 61 73 65   rebuildDatabase
4dd0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 63 6c 6f  () {.        clo
4de0: 73 65 44 61 74 61 62 61 73 65 28 29 3b 0a 20 20  seDatabase();.  
4df0: 20 20 20 20 20 20 73 65 74 75 70 44 61 74 61 62        setupDatab
4e00: 61 73 65 28 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ase();.    }..  
4e10: 20 20 70 72 69 76 61 74 65 20 63 6c 61 73 73 20    private class 
4e20: 4d 6f 63 6b 4f 62 73 65 72 76 65 72 20 65 78 74  MockObserver ext
4e30: 65 6e 64 73 20 44 61 74 61 53 65 74 4f 62 73 65  ends DataSetObse
4e40: 72 76 65 72 20 7b 0a 20 20 20 20 20 20 20 20 70  rver {.        p
4e50: 72 69 76 61 74 65 20 62 6f 6f 6c 65 61 6e 20 6d  rivate boolean m
4e60: 48 61 73 43 68 61 6e 67 65 64 20 3d 20 66 61 6c  HasChanged = fal
4e70: 73 65 3b 0a 20 20 20 20 20 20 20 20 70 72 69 76  se;.        priv
4e80: 61 74 65 20 62 6f 6f 6c 65 61 6e 20 6d 48 61 73  ate boolean mHas
4e90: 49 6e 76 61 6c 69 64 61 74 65 64 20 3d 20 66 61  Invalidated = fa
4ea0: 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20 20 40 4f  lse;..        @O
4eb0: 76 65 72 72 69 64 65 0a 20 20 20 20 20 20 20 20  verride.        
4ec0: 70 75 62 6c 69 63 20 76 6f 69 64 20 6f 6e 43 68  public void onCh
4ed0: 61 6e 67 65 64 28 29 20 7b 0a 20 20 20 20 20 20  anged() {.      
4ee0: 20 20 20 20 20 20 73 75 70 65 72 2e 6f 6e 43 68        super.onCh
4ef0: 61 6e 67 65 64 28 29 3b 0a 20 20 20 20 20 20 20  anged();.       
4f00: 20 20 20 20 20 6d 48 61 73 43 68 61 6e 67 65 64       mHasChanged
4f10: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
4f20: 20 7d 0a 0a 20 20 20 20 20 20 20 20 40 4f 76 65   }..        @Ove
4f30: 72 72 69 64 65 0a 20 20 20 20 20 20 20 20 70 75  rride.        pu
4f40: 62 6c 69 63 20 76 6f 69 64 20 6f 6e 49 6e 76 61  blic void onInva
4f50: 6c 69 64 61 74 65 64 28 29 20 7b 0a 20 20 20 20  lidated() {.    
4f60: 20 20 20 20 20 20 20 20 73 75 70 65 72 2e 6f 6e          super.on
4f70: 49 6e 76 61 6c 69 64 61 74 65 64 28 29 3b 0a 20  Invalidated();. 
4f80: 20 20 20 20 20 20 20 20 20 20 20 6d 48 61 73 49             mHasI
4f90: 6e 76 61 6c 69 64 61 74 65 64 20 3d 20 74 72 75  nvalidated = tru
4fa0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  e;.        }..  
4fb0: 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
4fc0: 76 6f 69 64 20 72 65 73 65 74 53 74 61 74 75 73  void resetStatus
4fd0: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
4fe0: 20 6d 48 61 73 43 68 61 6e 67 65 64 20 3d 20 66   mHasChanged = f
4ff0: 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alse;.          
5000: 20 20 6d 48 61 73 49 6e 76 61 6c 69 64 61 74 65    mHasInvalidate
5010: 64 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  d = false;.     
5020: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 70 72     }..        pr
5030: 6f 74 65 63 74 65 64 20 62 6f 6f 6c 65 61 6e 20  otected boolean 
5040: 68 61 73 43 68 61 6e 67 65 64 28 29 20 7b 0a 20  hasChanged() {. 
5050: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5060: 6e 20 6d 48 61 73 43 68 61 6e 67 65 64 3b 0a 20  n mHasChanged;. 
5070: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
5080: 20 20 70 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c    protected bool
5090: 65 61 6e 20 68 61 73 49 6e 76 61 6c 69 64 61 74  ean hasInvalidat
50a0: 65 64 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  ed () {.        
50b0: 20 20 20 20 72 65 74 75 72 6e 20 6d 48 61 73 49      return mHasI
50c0: 6e 76 61 6c 69 64 61 74 65 64 3b 0a 20 20 20 20  nvalidated;.    
50d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 7d 0a            }.    }.}.