From 1025cde05abe95be6ca65aab3ba126258efc647f Mon Sep 17 00:00:00 2001 From: wisberg Date: Mon, 16 Dec 2002 18:14:27 +0000 Subject: initial version --- .../aspectj/testing/util/TestCompareClassFile.java | 148 +++++++++++++++++++++ .../org/aspectj/testing/util/TestUtilTest.java | 116 ++++++++++++++++ .../org/aspectj/testing/util/UtilTests.java | 32 +++++ 3 files changed, 296 insertions(+) create mode 100644 testing-util/testsrc/org/aspectj/testing/util/TestCompareClassFile.java create mode 100644 testing-util/testsrc/org/aspectj/testing/util/TestUtilTest.java create mode 100644 testing-util/testsrc/org/aspectj/testing/util/UtilTests.java (limited to 'testing-util/testsrc/org/aspectj') diff --git a/testing-util/testsrc/org/aspectj/testing/util/TestCompareClassFile.java b/testing-util/testsrc/org/aspectj/testing/util/TestCompareClassFile.java new file mode 100644 index 000000000..e4dcf8050 --- /dev/null +++ b/testing-util/testsrc/org/aspectj/testing/util/TestCompareClassFile.java @@ -0,0 +1,148 @@ +/* ******************************************************************* + * Copyright (c) 1999-2001 Xerox Corporation, + * 2002 Palo Alto Research Center, Incorporated (PARC). + * All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Common Public License v1.0 + * which accompanies this distribution and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * Xerox/PARC initial implementation + * ******************************************************************/ + +package org.aspectj.testing.util; + +import org.aspectj.util.LangUtil; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import java.util.StringTokenizer; +import java.util.TreeSet; + +/** + * This is source for a sample .class file. + * It is compiled and the corresponding .class files are + * checked in under the testdata directory. + * It has no other purpose. + */ +public class TestCompareClassFile implements Runnable { + public static final String STATIC_CONST = "STATIC_CONST"; + public static void main(String[] args) { + // tc static references + long l = Math.abs(System.currentTimeMillis()); + String s = STATIC_CONST + " is constant"; + } + public static void runStatic() { + } + private static void privateRunStatic() { + } + static void defaultRunStatic() { + } + protected static void protectedRunStatic() { + } + + private long privateLong; + private final Object privateFinalObject; + + private TestCompareClassFile() { + super(); + privateLong = System.currentTimeMillis(); + // method-local inner class + privateFinalObject = new Runnable() { public void run(){}}; + } + + /** implement Runnable */ + public void run() { + } + private void privateRun() { + } + void defaultRun() { + } + protected void protectedRun() { + } + + // ------- misc stolen utility code + // Collections Util + public static List getListInMap(Map map, Object key) { + List list = (List)map.get(key); + if (list == null) { + list = new ArrayList(); + map.put(key, list); + } + return list; + } + + public static SortedSet getSortedSetInMap(Map map, Object key) { + SortedSet list = (SortedSet)map.get(key); + if (list == null) { + list = new TreeSet(); + map.put(key, list); + } + return list; + } + + // LangUtil + /** + * Make a copy of the array. + * @return an array with the same component type as source + * containing same elements, even if null. + * @throws IllegalArgumentException if source is null + */ + public static final Object[] copy(Object[] source) { + final Class c = source.getClass().getComponentType(); + Object[] result = (Object[]) Array.newInstance(c, source.length); + System.arraycopy(source, 0, result, 0, result.length); + return result; + } + /** + * Trim ending lines from a StringBuffer, + * clipping to maxLines and further removing any number of + * trailing lines accepted by checker. + * @param checker returns true if trailing line should be elided. + * @param stack StringBuffer with lines to elide + * @param maxLines int for maximum number of resulting lines + */ + static void elideEndingLines(StringBuffer stack, int maxLines) { + if ((null == stack) || (0 == stack.length())) { + return; + } + final LinkedList lines = new LinkedList(); + StringTokenizer st = new StringTokenizer(stack.toString(),"\n\r"); + while (st.hasMoreTokens() && (0 < --maxLines)) { + lines.add(st.nextToken()); + } + st = null; + + String line; + int elided = 0; + while (!lines.isEmpty()) { + line = (String) lines.getLast(); + if (null == line) { + break; + } else { + elided++; + lines.removeLast(); + } + } + if ((elided > 0) || (maxLines < 1)) { + final int EOL_LEN = LangUtil.EOL.length(); + int totalLength = 0; + while (!lines.isEmpty()) { + totalLength += EOL_LEN + ((String) lines.getFirst()).length(); + lines.removeFirst(); + } + if (stack.length() > totalLength) { + stack.setLength(totalLength); + if (elided > 0) { + stack.append(" (... " + elided + " lines...)"); + } + } + } + } + +} diff --git a/testing-util/testsrc/org/aspectj/testing/util/TestUtilTest.java b/testing-util/testsrc/org/aspectj/testing/util/TestUtilTest.java new file mode 100644 index 000000000..73da9cf83 --- /dev/null +++ b/testing-util/testsrc/org/aspectj/testing/util/TestUtilTest.java @@ -0,0 +1,116 @@ +/* ******************************************************************* + * Copyright (c) 1999-2001 Xerox Corporation, + * 2002 Palo Alto Research Center, Incorporated (PARC). + * All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Common Public License v1.0 + * which accompanies this distribution and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * Xerox/PARC initial implementation + * ******************************************************************/ + +package org.aspectj.testing.util; + +import org.aspectj.bridge.IMessageHolder; +import org.aspectj.bridge.MessageHandler; +import org.aspectj.bridge.MessageUtil; +import org.aspectj.util.FileUtil; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +/** + * + */ +public class TestUtilTest extends TestCase { + + public TestUtilTest(String name) { + super(name); + } + + public void testFileCompareNonClass() throws IOException { + MessageHandler holder = new MessageHandler(); + File thisFile = new File("testsrc/org/aspectj/testing/util/TestUtilTest.java"); + //File thisFile = new File("src/testing-util.lst"); + assertTrue(TestUtil.sameFiles(holder, thisFile, thisFile)); + + File tempFile = File.createTempFile("TestUtilTest", ".tmp"); + FileUtil.copyFile(thisFile, tempFile); + long len = tempFile.length(); + assertTrue(0 != len); + long tlen = thisFile.length(); + assertEquals(tlen, len); + assertTrue(TestUtil.sameFiles(holder, tempFile, thisFile)); + try { + String path = thisFile.getName(); + File basedir = tempFile.getParentFile(); + File renamed = new File(basedir, path); + if (!tempFile.renameTo(renamed)) { + MessageUtil.warn(holder, "unable to rename " + tempFile + " to " + renamed); + } else { + len = renamed.length(); + assertEquals(tlen, len); + assertTrue(TestUtil.sameFiles(holder, basedir, thisFile.getParentFile(), path)); + } + } finally { + if (0 < holder.numMessages(null, true)) { + MessageUtil.print(System.out, holder); + holder.clearMessages(); + } + tempFile.delete(); + } + } + + public void testFileCompareNonClassStaticPositive() throws IOException { + MessageHandler holder = new MessageHandler(); + File basedir = new File("testdata/testCompareTextFiles/sameFile"); + File expectedBaseDir = new File(basedir, "expected"); + File actualBaseDir = new File(basedir, "actual"); + String filename = "TestUtilTest.java"; + File expected = new File(expectedBaseDir, filename); + File actual = new File(actualBaseDir, filename); + + assertTrue(TestUtil.sameFiles(holder, expected, actual)); + + assertTrue(TestUtil.sameFiles(holder, expectedBaseDir, actualBaseDir, filename)); + } + + public void testFileCompareNonClassStaticNegative() throws IOException { + MessageHandler holder = new MessageHandler(); + File basedir = new File("testdata/testCompareTextFiles/differentFile"); + File expectedBaseDir = new File(basedir, "expected"); + File actualBaseDir = new File(basedir, "actual"); + String filename = "TestUtilTest.java"; + File expected = new File(expectedBaseDir, filename); + File actual = new File(actualBaseDir, filename); + + assertTrue(!TestUtil.sameFiles(holder, expected, actual)); + + assertTrue(!TestUtil.sameFiles(holder, expectedBaseDir, actualBaseDir, filename)); + } + + public void testFileCompareClass() throws IOException { + if (!TestUtil.ClassLineator.haveDisassembler()) { + System.err.println("skipping testFileCompareClass - no disassembler on classpath"); + return; + } + MessageHandler holder = new MessageHandler(); + File classBase = new File("testdata/testCompareClassFiles"); + String path = "org/aspectj/testing/util/TestCompareClassFile.class"; + File classFile = new File(classBase, path); + + try { + assertTrue(TestUtil.sameFiles(holder, classFile, classFile)); + assertTrue(TestUtil.sameFiles(holder, classBase, classBase, path)); + } finally { + if (0 < holder.numMessages(null, true)) { + MessageUtil.print(System.out, holder); + } + } + } + +} diff --git a/testing-util/testsrc/org/aspectj/testing/util/UtilTests.java b/testing-util/testsrc/org/aspectj/testing/util/UtilTests.java new file mode 100644 index 000000000..a32bd424c --- /dev/null +++ b/testing-util/testsrc/org/aspectj/testing/util/UtilTests.java @@ -0,0 +1,32 @@ +/* ******************************************************************* + * Copyright (c) 1999-2001 Xerox Corporation, + * 2002 Palo Alto Research Center, Incorporated (PARC). + * All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Common Public License v1.0 + * which accompanies this distribution and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * Xerox/PARC initial implementation + * ******************************************************************/ + + +package org.aspectj.testing.util; + +import junit.framework.*; + +public class UtilTests extends TestCase { + + public static Test suite() { + TestSuite suite = new TestSuite(UtilTests.class.getName()); + // for now, do not include SuiteTest because it would take 15 minutes + //$JUnit-BEGIN$ + suite.addTestSuite(TestUtilTest.class); + //$JUnit-END$ + return suite; + } + + public UtilTests(String name) { super(name); } + +} -- cgit v1.2.3