/* * Copyright 2012 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.android.apps.mytracks.content; import com.google.android.apps.mytracks.content.MyTracksProvider.DatabaseHelper; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.test.AndroidTestCase; /** * Tests {@link MyTracksProvider}. * * @author Youtao Liu */ public class MyTracksProviderTest extends AndroidTestCase { private static final String DATABASE_NAME = "mytrackstest.db"; private SQLiteDatabase db; private MyTracksProvider myTracksProvider; @Override protected void setUp() throws Exception { super.setUp(); getContext().deleteDatabase(DATABASE_NAME); db = (new DatabaseHelper(getContext(), DATABASE_NAME)).getWritableDatabase(); myTracksProvider = new MyTracksProvider(); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onCreate(SQLiteDatabase)}. */ public void testDatabaseHelper_OnCreate() { assertTrue(hasTable(TracksColumns.TABLE_NAME)); assertTrue(hasTable(TrackPointsColumns.TABLE_NAME)); assertTrue(hasTable(WaypointsColumns.TABLE_NAME)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is less than 17. */ public void testDatabaseHelper_onUpgrade_Version16() { dropTable(TracksColumns.TABLE_NAME); dropTable(TrackPointsColumns.TABLE_NAME); dropTable(WaypointsColumns.TABLE_NAME); int oldVersion = 16; DatabaseHelper databaseHelper = new DatabaseHelper(getContext()); databaseHelper.onUpgrade(db, oldVersion, MyTracksProvider.DATABASE_VERSION); assertTrue(hasTable(TracksColumns.TABLE_NAME)); assertTrue(hasTable(TrackPointsColumns.TABLE_NAME)); assertTrue(hasTable(WaypointsColumns.TABLE_NAME)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is 17. */ public void testDatabaseHelper_onUpgrade_Version17() { setupUpgrade(17); assertTrue(hasColumn(TrackPointsColumns.TABLE_NAME, TrackPointsColumns.SENSOR)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.TABLEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.ICON)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.DRIVEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.MODIFIEDTIME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDWITHME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDOWNER)); assertTrue(hasColumn(WaypointsColumns.TABLE_NAME, WaypointsColumns.PHOTOURL)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.CALORIE)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is 18. */ public void testDatabaseHelper_onUpgrade_Version18() { setupUpgrade(18); assertFalse(hasColumn(TrackPointsColumns.TABLE_NAME, TrackPointsColumns.SENSOR)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.TABLEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.ICON)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.DRIVEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.MODIFIEDTIME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDWITHME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDOWNER)); assertTrue(hasColumn(WaypointsColumns.TABLE_NAME, WaypointsColumns.PHOTOURL)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.CALORIE)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is 19. */ public void testDatabaseHelper_onUpgrade_Version19() { setupUpgrade(19); assertFalse(hasColumn(TrackPointsColumns.TABLE_NAME, TrackPointsColumns.SENSOR)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.TABLEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.ICON)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.DRIVEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.MODIFIEDTIME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDWITHME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDOWNER)); assertTrue(hasColumn(WaypointsColumns.TABLE_NAME, WaypointsColumns.PHOTOURL)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.CALORIE)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is 20. */ public void testDatabaseHelper_onUpgrade_Version20() { setupUpgrade(20); assertFalse(hasColumn(TrackPointsColumns.TABLE_NAME, TrackPointsColumns.SENSOR)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.TABLEID)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.ICON)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.DRIVEID)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.MODIFIEDTIME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDWITHME)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDOWNER)); assertTrue(hasColumn(WaypointsColumns.TABLE_NAME, WaypointsColumns.PHOTOURL)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.CALORIE)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is 21. */ public void testDatabaseHelper_onUpgrade_Version21() { setupUpgrade(21); assertFalse(hasColumn(TrackPointsColumns.TABLE_NAME, TrackPointsColumns.SENSOR)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.TABLEID)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.ICON)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.DRIVEID)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.MODIFIEDTIME)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDWITHME)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDOWNER)); assertTrue(hasColumn(WaypointsColumns.TABLE_NAME, WaypointsColumns.PHOTOURL)); assertTrue(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.CALORIE)); } /** * Tests {@link MyTracksProvider.DatabaseHelper#onUpgrade(SQLiteDatabase, int, * int)} when version is 22. */ public void testDatabaseHelper_onUpgrade_Version22() { setupUpgrade(22); assertFalse(hasColumn(TrackPointsColumns.TABLE_NAME, TrackPointsColumns.SENSOR)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.TABLEID)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.ICON)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.DRIVEID)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.MODIFIEDTIME)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDWITHME)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.SHAREDOWNER)); assertFalse(hasColumn(WaypointsColumns.TABLE_NAME, WaypointsColumns.PHOTOURL)); assertFalse(hasColumn(TracksColumns.TABLE_NAME, TracksColumns.CALORIE)); } /** * Tests {@link MyTracksProvider#onCreate(android.content.Context)}. */ public void testOnCreate() { assertTrue(myTracksProvider.onCreate(getContext())); } /** * Tests {@link MyTracksProvider#getType(Uri)}. */ public void testGetType() { assertEquals(TracksColumns.CONTENT_TYPE, myTracksProvider.getType(TracksColumns.CONTENT_URI)); assertEquals( TrackPointsColumns.CONTENT_TYPE, myTracksProvider.getType(TrackPointsColumns.CONTENT_URI)); assertEquals( WaypointsColumns.CONTENT_TYPE, myTracksProvider.getType(WaypointsColumns.CONTENT_URI)); } /** * Creates a table, containing one column. * * @param table the table name */ private void createTable(String table) { db.execSQL("CREATE TABLE " + table + " (test INTEGER)"); } /** * Drops a table in database. * * @param table the table name */ private void dropTable(String table) { db.execSQL("Drop TABLE " + table); } /** * Returns true if the table exists. * * @param table the table name */ private boolean hasTable(String table) { try { db.rawQuery("select count(*) from " + table, null); return true; } catch (Exception e) { return false; } } /** * Returns true if the column in the table exists. * * @param table the table name * @param column the column name */ private boolean hasColumn(String table, String column) { try { db.execSQL("SElECT count(*) from " + table + " order by " + column); } catch (Exception e) { if (e.getMessage().indexOf("no such column") > -1) { return false; } } return true; } /** * Sets up upgrade. * * @param oldVersion thd old database version */ private void setupUpgrade(int oldVersion) { dropTable(TracksColumns.TABLE_NAME); dropTable(TrackPointsColumns.TABLE_NAME); dropTable(WaypointsColumns.TABLE_NAME); createTable(TracksColumns.TABLE_NAME); createTable(TrackPointsColumns.TABLE_NAME); createTable(WaypointsColumns.TABLE_NAME); DatabaseHelper databaseHelper = new DatabaseHelper(getContext()); databaseHelper.onUpgrade(db, oldVersion, MyTracksProvider.DATABASE_VERSION); } }