From: Neil Smith Date: Sun, 9 Nov 2014 16:55:07 +0000 (+0000) Subject: Done lesson 4a: testing X-Git-Url: https://git.njae.me.uk/?p=Sunshine.git;a=commitdiff_plain;h=7b993579d6156ccbee09d55ff4b175359e85eb4c Done lesson 4a: testing --- diff --git a/app/src/androidTest/java/uk/me/njae/sunshine/TestDb.java b/app/src/androidTest/java/uk/me/njae/sunshine/TestDb.java index d47e534..73353e8 100644 --- a/app/src/androidTest/java/uk/me/njae/sunshine/TestDb.java +++ b/app/src/androidTest/java/uk/me/njae/sunshine/TestDb.java @@ -6,6 +6,9 @@ import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; import android.util.Log; +import java.util.Map; +import java.util.Set; + import uk.me.njae.sunshine.data.WeatherContract.LocationEntry; import uk.me.njae.sunshine.data.WeatherContract.WeatherEntry; import uk.me.njae.sunshine.data.WeatherDbHelper; @@ -36,14 +39,10 @@ public class TestDb extends AndroidTestCase { SQLiteDatabase db = dbHelper.getWritableDatabase(); // Create a new map of values, where column names are the keys - ContentValues values = new ContentValues(); - values.put(LocationEntry.COLUMN_LOCATION_SETTING, testLocationSetting); - values.put(LocationEntry.COLUMN_CITY_NAME, testCityName); - values.put(LocationEntry.COLUMN_COORD_LAT, testLatitude); - values.put(LocationEntry.COLUMN_COORD_LONG, testLongitude); + ContentValues locationTestValues = createNorthPoleLocationValues(); long locationRowId; - locationRowId = db.insert(LocationEntry.TABLE_NAME, null, values); + locationRowId = db.insert(LocationEntry.TABLE_NAME, null, locationTestValues); // Verify we got a row back. assertTrue(locationRowId != -1); @@ -52,19 +51,10 @@ public class TestDb extends AndroidTestCase { // Data's inserted. IN THEORY. Now pull some out to stare at it and verify it made // the round trip. - // Specify which columns you want. - String[] columns = { - LocationEntry._ID, - LocationEntry.COLUMN_LOCATION_SETTING, - LocationEntry.COLUMN_CITY_NAME, - LocationEntry.COLUMN_COORD_LAT, - LocationEntry.COLUMN_COORD_LONG - }; - // A cursor is your primary interface to the query results. Cursor cursor = db.query( LocationEntry.TABLE_NAME, // Table to Query - columns, + null, // All columns null, // Columns for the "where" clause null, // Values for the "where" clause null, // columns to group by @@ -72,49 +62,13 @@ public class TestDb extends AndroidTestCase { null // sort order ); - // If possible, move to the first row of the query results. - if (cursor.moveToFirst()) { - // Get the value in each column by finding the appropriate column index. - int locationIndex = cursor.getColumnIndex(LocationEntry.COLUMN_LOCATION_SETTING); - String location = cursor.getString(locationIndex); - - int nameIndex = cursor.getColumnIndex((LocationEntry.COLUMN_CITY_NAME)); - String name = cursor.getString(nameIndex); - - int latIndex = cursor.getColumnIndex((LocationEntry.COLUMN_COORD_LAT)); - double latitude = cursor.getDouble(latIndex); - - int longIndex = cursor.getColumnIndex((LocationEntry.COLUMN_COORD_LONG)); - double longitude = cursor.getDouble(longIndex); - - // Hooray, data was returned! Assert that it's the right data, and that the database - // creation code is working as intended. - // Then take a break. We both know that wasn't easy. - assertEquals(testCityName, name); - assertEquals(testLocationSetting, location); - assertEquals(testLatitude, latitude); - assertEquals(testLongitude, longitude); - - // Fantastic. Now that we have a location, add some weather! - } else { - // That's weird, it works on MY machine... - fail("No values returned :("); - } + validateCursor(cursor, locationTestValues); // Fantastic. Now that we have a location, add some weather! - ContentValues weatherValues = new ContentValues(); - weatherValues.put(WeatherEntry.COLUMN_LOC_KEY, locationRowId); - weatherValues.put(WeatherEntry.COLUMN_DATETEXT, "20141205"); - weatherValues.put(WeatherEntry.COLUMN_DEGREES, 1.1); - weatherValues.put(WeatherEntry.COLUMN_HUMIDITY, 1.2); - weatherValues.put(WeatherEntry.COLUMN_PRESSURE, 1.3); - weatherValues.put(WeatherEntry.COLUMN_MAX_TEMP, 75); - weatherValues.put(WeatherEntry.COLUMN_MIN_TEMP, 65); - weatherValues.put(WeatherEntry.COLUMN_SHORT_DESC, "Asteroids"); - weatherValues.put(WeatherEntry.COLUMN_WIND_SPEED, 5.5); - weatherValues.put(WeatherEntry.COLUMN_WEATHER_ID, 321); - long weatherRowId = db.insert(WeatherEntry.TABLE_NAME, null, weatherValues); + ContentValues weatherTestValues = createWeatherValues(locationRowId); + + long weatherRowId = db.insert(WeatherEntry.TABLE_NAME, null, weatherTestValues); assertTrue(weatherRowId != -1); // A cursor is your primary interface to the query results. @@ -128,32 +82,52 @@ public class TestDb extends AndroidTestCase { null // sort order ); - if (!weatherCursor.moveToFirst()) { - fail("No weather data returned!"); - } - - assertEquals(weatherCursor.getInt( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_LOC_KEY)), locationRowId); - assertEquals(weatherCursor.getString( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_DATETEXT)), "20141205"); - assertEquals(weatherCursor.getDouble( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_DEGREES)), 1.1); - assertEquals(weatherCursor.getDouble( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_HUMIDITY)), 1.2); - assertEquals(weatherCursor.getDouble( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_PRESSURE)), 1.3); - assertEquals(weatherCursor.getInt( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_MAX_TEMP)), 75); - assertEquals(weatherCursor.getInt( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_MIN_TEMP)), 65); - assertEquals(weatherCursor.getString( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_SHORT_DESC)), "Asteroids"); - assertEquals(weatherCursor.getDouble( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_WIND_SPEED)), 5.5); - assertEquals(weatherCursor.getInt( - weatherCursor.getColumnIndex(WeatherEntry.COLUMN_WEATHER_ID)), 321); + validateCursor(weatherCursor, weatherTestValues); weatherCursor.close(); dbHelper.close(); } + + static ContentValues createWeatherValues(long locationRowId) { + ContentValues weatherValues = new ContentValues(); + weatherValues.put(WeatherEntry.COLUMN_LOC_KEY, locationRowId); + weatherValues.put(WeatherEntry.COLUMN_DATETEXT, "20141205"); + weatherValues.put(WeatherEntry.COLUMN_DEGREES, 1.1); + weatherValues.put(WeatherEntry.COLUMN_HUMIDITY, 1.2); + weatherValues.put(WeatherEntry.COLUMN_PRESSURE, 1.3); + weatherValues.put(WeatherEntry.COLUMN_MAX_TEMP, 75); + weatherValues.put(WeatherEntry.COLUMN_MIN_TEMP, 65); + weatherValues.put(WeatherEntry.COLUMN_SHORT_DESC, "Asteroids"); + weatherValues.put(WeatherEntry.COLUMN_WIND_SPEED, 5.5); + weatherValues.put(WeatherEntry.COLUMN_WEATHER_ID, 321); + + return weatherValues; + } + + static ContentValues createNorthPoleLocationValues() { + // Create a new map of values, where column names are the keys + ContentValues testValues = new ContentValues(); + testValues.put(LocationEntry.COLUMN_LOCATION_SETTING, "99705"); + testValues.put(LocationEntry.COLUMN_CITY_NAME, "North Pole"); + testValues.put(LocationEntry.COLUMN_COORD_LAT, 64.7488); + testValues.put(LocationEntry.COLUMN_COORD_LONG, -147.353); + + return testValues; + } + + static void validateCursor(Cursor valueCursor, ContentValues expectedValues) { + + assertTrue(valueCursor.moveToFirst()); + + Set> valueSet = expectedValues.valueSet(); + for (Map.Entry entry : valueSet) { + String columnName = entry.getKey(); + int idx = valueCursor.getColumnIndex(columnName); + assertFalse(idx == -1); + String expectedValue = entry.getValue().toString(); + assertEquals(expectedValue, valueCursor.getString(idx)); + } + valueCursor.close(); + } + }