summaryrefslogtreecommitdiffstats
path: root/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java')
-rw-r--r--tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java162
1 files changed, 162 insertions, 0 deletions
diff --git a/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java b/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java
new file mode 100644
index 0000000..af85483
--- /dev/null
+++ b/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2006 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.unit_tests;
+
+import android.content.res.XmlResourceParser;
+import android.test.AndroidTestCase;
+import android.test.PerformanceTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Xml;
+import com.google.wireless.gdata.data.Entry;
+import com.google.wireless.gdata.data.Feed;
+import com.google.wireless.gdata.parser.ParseException;
+import com.google.wireless.gdata.parser.xml.XmlGDataParser;
+import org.json.JSONObject;
+import org.json.JSONTokener;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * Tests timing on parsing various formats of GData.
+ */
+public class GDataParseTest extends AndroidTestCase implements PerformanceTestCase {
+
+ private static void parseXml(InputStream is) throws ParseException, IOException {
+ XmlPullParser xmlParser = Xml.newPullParser();
+ XmlGDataParser parser = new XmlGDataParser(is, xmlParser);
+ Feed feed = parser.init();
+ Entry entry = null;
+ while (parser.hasMoreData()) {
+ entry = parser.readNextEntry(entry);
+ }
+ }
+
+ private static void parseXml(XmlPullParser xmlP) throws ParseException, IOException {
+ XmlGDataParser parser = new XmlGDataParser(null /* in */, xmlP);
+ Feed feed = parser.init();
+ Entry entry = null;
+ while (parser.hasMoreData()) {
+ entry = parser.readNextEntry(entry);
+ }
+ }
+
+ private static void dumpXml(XmlPullParser parser) throws
+ XmlPullParserException, IOException {
+ int eventType = parser.nextTag();
+ while (eventType != XmlPullParser.END_DOCUMENT) {
+ switch (eventType) {
+ case XmlPullParser.START_TAG:
+ parser.getName();
+ // System.out.print("<" + parser.getName());
+ int nattrs = parser.getAttributeCount();
+ for (int i = 0; i < nattrs; ++i) {
+ parser.getAttributeName(i);
+ parser.getAttributeValue(i);
+ // System.out.print(" " + parser.getAttributeName(i) + "=\""
+ // + parser.getAttributeValue(i) + "\"");
+ }
+ // System.out.print(">");
+ break;
+ case XmlPullParser.END_TAG:
+ parser.getName();
+ // System.out.print("</" + parser.getName() + ">");
+ break;
+ case XmlPullParser.TEXT:
+ parser.getText();
+ // System.out.print(parser.getText());
+ break;
+ default:
+ // do nothing
+ }
+ eventType = parser.next();
+ }
+ }
+
+ private byte[] getBytesForResource(int resid) throws Exception {
+ // all resources are written into a zip file, so the InputStream we
+ // get for a resource is on top of zipped
+ // data. in order to compare performance of parsing unzipped vs.
+ // zipped content, we first read the data into an in-memory buffer.
+ InputStream zipIs = null;
+ try {
+ zipIs = mContext.getResources().openRawResource(resid);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ byte buf[] = new byte[1024];
+ int bytesRead = zipIs.read(buf);
+ while (bytesRead > 0) {
+ baos.write(buf, 0, bytesRead);
+ bytesRead = zipIs.read(buf);
+ }
+ return baos.toByteArray();
+ } finally {
+ if (zipIs != null) {
+ zipIs.close();
+ }
+ }
+ }
+
+ public boolean isPerformanceOnly() {
+ return true;
+ }
+
+ public int startPerformance(PerformanceTestCase.Intermediates intermediates) {
+ return 0;
+ }
+
+ @MediumTest
+ public void testXml() throws Exception {
+ InputStream is = new ByteArrayInputStream(getBytesForResource(R.raw.calendarxml));
+ try {
+ is.reset();
+ parseXml(is);
+ } finally {
+ is.close();
+ }
+ }
+
+ @MediumTest
+ public void testXmlGzip() throws Exception {
+ InputStream gzIs = new GZIPInputStream(
+ new ByteArrayInputStream(getBytesForResource(R.raw.calendarxmlgz)));
+ try {
+ parseXml(gzIs);
+ } finally {
+ gzIs.close();
+ }
+ }
+
+ @MediumTest
+ public void testJson() throws Exception {
+ String jsonString = new String(getBytesForResource(R.raw.calendarjs), "UTF-8");
+ JSONTokener tokens = new JSONTokener(jsonString);
+ assertNotNull(new JSONObject(tokens));
+ }
+
+ @SmallTest
+ public void testBinaryXml() throws Exception {
+ XmlResourceParser parser = mContext.getResources().getXml(R.xml.calendar);
+ parseXml(parser);
+ parser.close();
+ }
+}