blob: af854832aff0204b9de30b71b6c7cbbdc9c30fe3 [file] [log] [blame]
/*
* 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();
}
}