Add a unit test for handleOneRequestSimple().
Bug: 2733143
Change-Id: I40af33e7d5b4df8100a494de18dc0002368d79c2
diff --git a/src/com/android/contacts/vcard/ExportVCardActivity.java b/src/com/android/contacts/vcard/ExportVCardActivity.java
index 43ae858..fbe6d48 100644
--- a/src/com/android/contacts/vcard/ExportVCardActivity.java
+++ b/src/com/android/contacts/vcard/ExportVCardActivity.java
@@ -18,9 +18,7 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.ProgressDialog;
import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -28,23 +26,17 @@
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
-import android.os.PowerManager;
import android.os.RemoteException;
import android.text.TextUtils;
import android.util.Log;
import com.android.contacts.R;
import com.android.vcard.VCardComposer;
-import com.android.vcard.VCardConfig;
import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index 6f765f9..427d62d 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -101,7 +101,9 @@
return new VCardEntryCommitter(mResolver);
}
}
- /* package */ CommitterGenerator mCommitterGenerator = new DefaultCommitterGenerator();
+
+ private CommitterGenerator mCommitterGenerator =
+ new DefaultCommitterGenerator();
public ImportProcessor(final Context context) {
mContext = context;
@@ -124,7 +126,7 @@
}
}
- public synchronized void pushRequest(ImportRequest parameter) {
+ public synchronized void pushRequest(final ImportRequest request) {
ensureInit();
final boolean needThreadStart;
@@ -137,11 +139,11 @@
} else {
needThreadStart = false;
}
- final int count = parameter.entryCount;
+ final int count = request.entryCount;
if (count > 0) {
mNotifier.addTotalCount(count);
}
- mPendingRequests.add(parameter);
+ mPendingRequests.add(request);
if (needThreadStart) {
mThreadStarter.start();
}
@@ -188,14 +190,14 @@
/**
* Would be run inside synchronized block.
*/
- /* package */ boolean handleOneRequest(final ImportRequest parameter) {
+ /* package */ boolean handleOneRequest(final ImportRequest request) {
if (mCanceled) {
Log.i(LOG_TAG, "Canceled before actually handling parameter ("
- + parameter.uri + ")");
+ + request.uri + ")");
return false;
}
final int[] possibleVCardVersions;
- if (parameter.vcardVersion == ImportVCardActivity.VCARD_VERSION_AUTO_DETECT) {
+ if (request.vcardVersion == ImportVCardActivity.VCARD_VERSION_AUTO_DETECT) {
/**
* Note: this code assumes that a given Uri is able to be opened more than once,
* which may not be true in certain conditions.
@@ -206,14 +208,14 @@
};
} else {
possibleVCardVersions = new int[] {
- parameter.vcardVersion
+ request.vcardVersion
};
}
- final Uri uri = parameter.uri;
- final Account account = parameter.account;
- final int estimatedVCardType = parameter.estimatedVCardType;
- final String estimatedCharset = parameter.estimatedCharset;
+ final Uri uri = request.uri;
+ final Account account = request.account;
+ final int estimatedVCardType = request.estimatedVCardType;
+ final String estimatedCharset = request.estimatedCharset;
final VCardEntryConstructor constructor =
new VCardEntryConstructor(estimatedVCardType, account, estimatedCharset);
@@ -360,11 +362,20 @@
}
}
- public List<Uri> getCreatedUris() {
+ public List<Uri> getCreatedUrisForTest() {
return mCreatedUris;
}
- public List<Uri> getFailedUris() {
+ public List<Uri> getFailedUrisForTest() {
return mFailedUris;
}
-}
\ No newline at end of file
+
+ public void injectCommitterGeneratorForTest(
+ final CommitterGenerator generator) {
+ mCommitterGenerator = generator;
+ }
+
+ public void initNotifierForTest() {
+ mNotifier.init(mContext, mNotificationManager);
+ }
+}
diff --git a/src/com/android/contacts/vcard/ImportProgressNotifier.java b/src/com/android/contacts/vcard/ImportProgressNotifier.java
index e6f1037..23987c7 100644
--- a/src/com/android/contacts/vcard/ImportProgressNotifier.java
+++ b/src/com/android/contacts/vcard/ImportProgressNotifier.java
@@ -20,6 +20,7 @@
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
+import android.util.Log;
import android.widget.RemoteViews;
import com.android.contacts.ContactsListActivity;
@@ -40,6 +41,7 @@
public void init(Context context, NotificationManager notificationManager) {
mContext = context;
+ Log.d("@@@", "context: " + mContext);
mNotificationManager = notificationManager;
}
@@ -58,7 +60,8 @@
// we don't need to hurry to show something.
// TODO: should not create this every time?
- final RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(),
+ final RemoteViews remoteViews =
+ new RemoteViews(mContext.getPackageName(),
R.layout.status_bar_ongoing_event_progress_bar);
final String title = mContext.getString(R.string.reading_vcard_title);
@@ -76,9 +79,13 @@
remoteViews.setTextViewText(R.id.description, description);
remoteViews.setProgressBar(R.id.progress_bar, mTotalCount, mCurrentCount,
mTotalCount == -1);
- final String percentage =
- mContext.getString(R.string.percentage,
- String.valueOf(mCurrentCount * 100/mTotalCount));
+ final String percentage;
+ if (mTotalCount > 0) {
+ percentage = mContext.getString(R.string.percentage,
+ String.valueOf(mCurrentCount * 100/mTotalCount));
+ } else {
+ percentage = "";
+ }
remoteViews.setTextViewText(R.id.progress_text, percentage);
remoteViews.setImageViewResource(R.id.appIcon, android.R.drawable.stat_sys_download);
diff --git a/tests/assets/v30_simple.vcf b/tests/assets/v30_simple.vcf
new file mode 100644
index 0000000..418661f
--- /dev/null
+++ b/tests/assets/v30_simple.vcf
@@ -0,0 +1,13 @@
+BEGIN:VCARD
+VERSION:3.0
+FN:And Roid
+N:And;Roid;;;
+ORG:Open;Handset; Alliance
+SORT-STRING:android
+TEL;TYPE=PREF;TYPE=VOICE:0300000000
+CLASS:PUBLIC
+X-GNO:0
+X-GN:group0
+X-REDUCTION:0
+REV:20081031T065854Z
+END:VCARD
diff --git a/tests/src/com/android/contacts/vcard/ImportProcessorTest.java b/tests/src/com/android/contacts/vcard/ImportProcessorTest.java
index 543dce9..72245ba 100644
--- a/tests/src/com/android/contacts/vcard/ImportProcessorTest.java
+++ b/tests/src/com/android/contacts/vcard/ImportProcessorTest.java
@@ -22,6 +22,8 @@
import android.text.TextUtils;
import android.util.Log;
+import com.android.contacts.vcard.ImportProcessor.CommitterGenerator;
+import com.android.vcard.VCardEntryCommitter;
import com.android.vcard.VCardInterpreter;
import com.android.vcard.VCardSourceDetector;
@@ -100,7 +102,7 @@
}
/**
- * Confirm {@link ImportProcessor#readOneVCard(android.net.Uri, int, String,
+ * Confirms {@link ImportProcessor#readOneVCard(android.net.Uri, int, String,
* com.android.vcard.VCardInterpreter, int[])} successfully handles correct input.
*/
public void testProcessSimple() throws IOException {
@@ -115,39 +117,64 @@
assertTrue(mImportProcessor.readOneVCard(
uri, vcardType, charset, interpreter, versions));
}
+
+ /**
+ * Confirms {@link ImportProcessor#handleOneRequest(ImportRequest)} accepts
+ * one request and import it.
+ */
+ public void testHandleOneRequestSimple() throws IOException {
+ CommitterGenerator generator = new CommitterGenerator() {
+ public VCardEntryCommitter generate(ContentResolver resolver) {
+ return new MockVCardEntryCommitter();
+ }
+ };
+ mImportProcessor.injectCommitterGeneratorForTest(generator);
+ mImportProcessor.initNotifierForTest();
+
+ final ImportRequest request = new ImportRequest(
+ null, // account
+ copyToLocal("v30_simple.vcf"),
+ VCardSourceDetector.PARSE_TYPE_UNKNOWN,
+ null, // estimatedCharset
+ ImportVCardActivity.VCARD_VERSION_AUTO_DETECT,
+ 1);
+ assertTrue(mImportProcessor.handleOneRequest(request));
+ assertEquals(1, mImportProcessor.getCreatedUrisForTest().size());
+ }
}
/* package */ class EmptyVCardInterpreter implements VCardInterpreter {
+ @Override
public void end() {
}
-
+ @Override
public void endEntry() {
}
-
+ @Override
public void endProperty() {
}
-
+ @Override
public void propertyGroup(String group) {
}
-
+ @Override
public void propertyName(String name) {
}
-
+ @Override
public void propertyParamType(String type) {
}
-
+ @Override
public void propertyParamValue(String value) {
}
-
+ @Override
public void propertyValues(List<String> values) {
}
-
+ @Override
public void start() {
}
-
+ @Override
public void startEntry() {
}
-
+ @Override
public void startProperty() {
}
-}
\ No newline at end of file
+}
diff --git a/tests/src/com/android/contacts/vcard/MockVCardEntryCommitter.java b/tests/src/com/android/contacts/vcard/MockVCardEntryCommitter.java
new file mode 100644
index 0000000..4765b38
--- /dev/null
+++ b/tests/src/com/android/contacts/vcard/MockVCardEntryCommitter.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * 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.android.contacts.vcard;
+
+import android.net.Uri;
+
+import com.android.vcard.VCardEntry;
+import com.android.vcard.VCardEntryCommitter;
+
+import java.util.ArrayList;
+
+public class MockVCardEntryCommitter extends VCardEntryCommitter {
+
+ private final ArrayList<Uri> mUris = new ArrayList<Uri>();
+
+ public MockVCardEntryCommitter() {
+ super(null);
+ }
+
+ /**
+ * Exists for forcing super class to do nothing.
+ */
+ @Override
+ public void onStart() {
+ }
+
+ /**
+ * Exists for forcing super class to do nothing.
+ */
+ @Override
+ public void onEnd() {
+ }
+
+ @Override
+ public void onEntryCreated(final VCardEntry vcardEntry) {
+ mUris.add(null);
+ }
+
+ @Override
+ public ArrayList<Uri> getCreatedUris() {
+ return mUris;
+ }
+}
\ No newline at end of file