package com.dteviot.epubviewer.test;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import junit.framework.Assert;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.XMLFilterImpl;
import org.xmlpull.v1.XmlSerializer;
import com.dteviot.epubviewer.Globals;
import com.dteviot.epubviewer.MainActivity;
import com.dteviot.epubviewer.ResourceResponse;
import com.dteviot.epubviewer.XmlUtil;
import com.dteviot.epubviewer.XmlFilter.InlineImageElementFilter;
import com.dteviot.epubviewer.XmlFilter.RemoveSvgElementFilter;
import com.dteviot.epubviewer.XmlFilter.StyleSheetElementFilter;
import com.dteviot.epubviewer.XmlFilter.XmlSerializerToXmlFilterAdapter;
import com.dteviot.epubviewer.epub.Book;
import com.dteviot.epubviewer.epub.ManifestItem;
import android.net.Uri;
import android.test.ActivityUnitTestCase;
import android.util.Base64;
import android.util.Log;
import android.util.Xml;
public class PerformanceTest extends ActivityUnitTestCase<MainActivity> {
public PerformanceTest() {
super(MainActivity.class);
// TODO Auto-generated constructor stub
}
private ZipFile mZip;
private InputStream fetchFromZip(String fileName) {
InputStream in = null;
ZipEntry containerEntry = mZip.getEntry(fileName);
if (containerEntry != null) {
try {
in = mZip.getInputStream(containerEntry);
} catch (IOException e) {
Log.e(Globals.TAG, "Error reading zip file " + fileName, e);
}
}
if (in == null) {
Log.e(Globals.TAG, "Unable to find file in zip: " + fileName);
}
return new BufferedInputStream(in);
}
private boolean exerciseParser(InputStream in, ContentHandler handler) {
try {
try {
Xml.parse(in, Xml.Encoding.UTF_8, handler);
return true;
} finally {
if (in != null) {
in.close();
}
}
} catch (IOException e) {
Log.e(Globals.TAG, "Error reading XML file ", e);
} catch (SAXException e) {
Log.e(Globals.TAG, "Error parsing XML file ", e);
}
// if get here, failed
return false;
}
/*
public void testParseManifest() {
try {
mZip = new ZipFile("/mnt/sdcard/Download/Northworld_Trilogy.epub");
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
long ave = 0;
for (int i = 0; i < 10; ++i) {
Book book = new Book();
InputStream in = fetchFromZip("content.opf");
long startTime = System.nanoTime();
boolean ok = exerciseParser(in, book.constructOpfFileParser());
long elapsedTime = System.nanoTime() - startTime;
ave += elapsedTime;
Log.e(Globals.TAG, "Ending Parse, usec = " + ((float)elapsedTime) / 1000);
Assert.assertTrue(ok);
Assert.assertEquals(155, book.getManifest().getItems().size());
}
Log.e(Globals.TAG, "Ending Parse, ave usec = " + ((float)ave) / 10000);
}
public void testConvertTitle() throws IOException {
Book book = new Book("/mnt/sdcard/Download/moby-dick-20120118.epub");
Assert.assertNotNull(book);
Uri imageUri = Book.resourceName2Url("OPS/images/9780316000000.jpg");
Assert.assertNotNull(imageUri);
int buflen = 4096;
byte[] buffer = new byte[buflen];
int offset = 0;
long ave = 0;
for (int i = 0; i < 10; ++i) {
InputStream in = book.fetch(imageUri).getData();
Assert.assertNotNull(in);
long startTime = System.nanoTime();
int len = 0;
while (len != -1) {
len = in.read(buffer, offset, buffer.length);
}
long elapsedTime = System.nanoTime() - startTime;
in.close();
ave += elapsedTime;
Log.e(Globals.TAG, "Loading Bitmap, usec = " + ((float)elapsedTime) / 1000);
}
Log.e(Globals.TAG, "Loading Bitmap, ave usec = " + ((float)ave) / 10000);
// to build dataURI
ave = 0;
for (int i = 0; i < 10; ++i) {
ResourceResponse in = book.fetch(imageUri);
Assert.assertNotNull(in);
long startTime = System.nanoTime();
XmlUtil.buildDataUri(in);
long elapsedTime = System.nanoTime() - startTime;
ave += elapsedTime;
Log.e(Globals.TAG, "Building DataURI, usec = " + ((float)elapsedTime) / 1000);
}
Log.e(Globals.TAG, "Building DataURI, ave usec = " + ((float)ave) / 10000);
}
public void testConvertTitleToXml() throws IOException {
Book book = new Book("/mnt/sdcard/Download/moby-dick-20120118.epub");
Assert.assertNotNull(book);
Uri coverUri = Book.resourceName2Url("OPS/cover.xhtml");
Assert.assertNotNull(coverUri);
int buflen = 4096;
byte[] buffer = new byte[buflen];
int offset = 0;
long ave = 0;
for (int i = 0; i < 10; ++i) {
long startTime = System.nanoTime();
// build SAX pipeline to convert XHTML
// Chain is Reader -> stylesheetFilter -> imageFilter -> Serializer
XMLFilterImpl stylesheetFilter = new StyleSheetElementFilter(coverUri, book);
XMLFilterImpl svgFilter = new RemoveSvgElementFilter();
XMLFilterImpl imageFilter = new InlineImageElementFilter(coverUri, book);
svgFilter.setParent(stylesheetFilter);
imageFilter.setParent(svgFilter);
StringWriter writer = new StringWriter();
XmlSerializer serializer = android.util.Xml.newSerializer();
XmlSerializerToXmlFilterAdapter serializerFilter = new XmlSerializerToXmlFilterAdapter(serializer);
serializerFilter.setParent(imageFilter);
long elapsedTime = System.nanoTime() - startTime;
Log.e(Globals.TAG, "Setup for XML, usec = " + ((float)elapsedTime) / 1000);
// convert the XHTML
startTime = System.nanoTime();
serializer.setOutput(writer);
XmlUtil.parseXmlResource(book.fetch(coverUri).getData(), stylesheetFilter,
serializerFilter);
writer.toString();
elapsedTime = System.nanoTime() - startTime;
ave += elapsedTime;
Log.e(Globals.TAG, "Write XML, usec = " + ((float)elapsedTime) / 1000);
}
Log.e(Globals.TAG, "Write XML, ave usec = " + ((float)ave) / 10000);
}
*/
}