| /******************************************************************************* |
| * Copyright (c) 2007 compeople AG and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * compeople AG (Stefan Liebig) - initial API and implementation |
| *******************************************************************************/ |
| package ie.wombat.jbdiff.test; |
| |
| import ie.wombat.jbdiff.JBDiff; |
| import ie.wombat.jbdiff.JBPatch; |
| |
| import java.io.BufferedInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.Arrays; |
| |
| import junit.framework.TestCase; |
| |
| public class DiffPatchTest extends TestCase { |
| |
| public void testNullData() throws Exception { |
| bench("null.data", "null.data"); |
| } |
| |
| public void testOneData() throws Exception { |
| bench("one.data", "one.data"); |
| } |
| |
| public void testOneHundredData() throws Exception { |
| bench("onehundred.data", "onehundred.data"); |
| } |
| |
| public void testOneHundredXData() throws Exception { |
| bench("onehundred.data", "onehundredX.data"); |
| } |
| |
| public void testOneXHundredXData() throws Exception { |
| bench("onehundred.data", "oneXhundredX.data"); |
| } |
| |
| public void testPdeCoreJar() throws Exception { |
| bench("org.eclipse.pde.core_3.2.jar", "org.eclipse.pde.core_3.3.jar"); |
| } |
| |
| public void testEclipse() throws Exception { |
| bench("eclipse-3.2.exe", "eclipse-3.3.exe"); |
| } |
| |
| private void bench(String resource1, String resource2) throws Exception { |
| |
| byte[] oldData = getTestData(resource1); |
| byte[] newData = getTestData(resource2); |
| |
| System.out.println(resource1 + "(" + (oldData.length / 1024) |
| + " kb) -> " + resource2 + "(" + (newData.length / 1024) |
| + " kb)"); |
| |
| diffAndPatchJBDiff(oldData, newData); |
| |
| System.out.println(""); |
| } |
| |
| /** |
| * @param resource1 |
| * @param resource2 |
| * @throws IOException |
| */ |
| private void diffAndPatchJBDiff(byte[] oldData, byte[] newData) |
| throws IOException { |
| |
| try { |
| |
| long start = System.currentTimeMillis(); |
| |
| byte[] diff = JBDiff.bsdiff(oldData, oldData.length, newData, |
| newData.length); |
| |
| long diffEnd = System.currentTimeMillis(); |
| |
| byte[] patch = JBPatch.bspatch(oldData, oldData.length, diff); |
| |
| long patchEnd = System.currentTimeMillis(); |
| |
| System.out.println("JBDiff: Size= " + diff.length + " b (" |
| + diff.length / 1024 + " kb), Diffing " + (diffEnd - start) |
| + " ms, Patching: " + (patchEnd - diffEnd) + " ms"); |
| |
| assertTrue(Arrays.equals(newData, patch)); |
| |
| } catch (RuntimeException re) { |
| System.err.println("JBDiff: error: " + re.getMessage()); |
| } |
| } |
| |
| private static byte[] getTestData(String name) throws IOException { |
| ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| InputStream input = new BufferedInputStream(Activator.getContext() |
| .getBundle().getEntry("testData/" + name).openStream()); |
| int r; |
| while ((r = input.read()) != -1) { |
| out.write(r); |
| } |
| input.close(); |
| out.close(); |
| return out.toByteArray(); |
| } |
| } |