/******************************************************************************* * Copyright (c) 2006, 20010 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.osgi.tests.bundles; import org.eclipse.core.tests.harness.CoreTest; import org.eclipse.osgi.tests.OSGiTestsActivator; import org.osgi.framework.*; public class AbstractBundleTests extends CoreTest { public static int BUNDLE_LISTENER = 0x01; public static int SYNC_BUNDLE_LISTENER = 0x02; public static int SIMPLE_RESULTS = 0x04; public static final String BUNDLES_ROOT = "bundle_tests"; public static TestResults simpleResults; public static EventListenerTestResults listenerResults; public static SyncEventListenerTestResults syncListenerResults; public static EventListenerTestResults frameworkListenerResults; public static BundleInstaller installer; protected void setUp() throws Exception { installer = new BundleInstaller(BUNDLES_ROOT, OSGiTestsActivator.getContext()); installer.refreshPackages(null); listenerResults = new EventListenerTestResults(); OSGiTestsActivator.getContext().addBundleListener(listenerResults); syncListenerResults = new SyncEventListenerTestResults(); OSGiTestsActivator.getContext().addBundleListener(syncListenerResults); simpleResults = new TestResults(); frameworkListenerResults = new EventListenerTestResults(); OSGiTestsActivator.getContext().addFrameworkListener(frameworkListenerResults); } protected void tearDown() throws Exception { installer.shutdown(); installer = null; OSGiTestsActivator.getContext().removeBundleListener(listenerResults); OSGiTestsActivator.getContext().removeBundleListener(syncListenerResults); OSGiTestsActivator.getContext().removeFrameworkListener(frameworkListenerResults); listenerResults = null; syncListenerResults = null; simpleResults = null; frameworkListenerResults = null; } public BundleContext getContext() { return OSGiTestsActivator.getContext(); } static public void compareResults(Object[] expectedEvents, Object[] actualEvents) { String expectedActual = " -- EXPECTED:" + toStringEventArray(expectedEvents) + " ACTUAL:" + toStringEventArray(actualEvents); assertEquals("compareResults length" + expectedActual, expectedEvents.length, actualEvents.length); for (int i = 0; i < expectedEvents.length; i++) { String assertMsg = "compareResults: " + i + expectedActual; assertEquals(assertMsg, expectedEvents[i], actualEvents[i]); } } static public String toStringEventArray(Object[] events) { StringBuilder sb = new StringBuilder(); boolean first = true; sb.append('['); for (Object event : events) { if (first) { first = false; } else { sb.append(", "); } sb.append(toString(event)); } sb.append(']'); return sb.toString(); } static public void assertEquals(String message, Object expected, Object actual) { if (expected == null && actual == null) return; if ((expected == null || actual == null) && expected != actual) failNotEquals(message, toString(expected), toString(actual)); if (isEqual(expected, actual)) return; failNotEquals(message, toString(expected), toString(actual)); } static public void assertEquals(String message, int[] expected, int[] actual) { if (expected == null && actual == null) return; if ((expected == null || actual == null) && expected != actual) failNotEquals(message, toString(expected), toString(actual)); if (expected.length != actual.length) failNotEquals(message, toString(expected), toString(actual)); for (int i = 0; i < expected.length; i++) if (expected[i] != actual[i]) failNotEquals(message, toString(expected), toString(actual)); } private static boolean isEqual(Object expected, Object actual) { if (!expected.getClass().isAssignableFrom(actual.getClass())) return false; if (expected instanceof BundleEvent) return isEqual((BundleEvent) expected, (BundleEvent) actual); else if (expected instanceof FrameworkEvent) return isEqual((FrameworkEvent) expected, (FrameworkEvent) actual); return expected.equals(actual); } private static boolean isEqual(BundleEvent expected, BundleEvent actual) { return expected.getSource() == actual.getSource() && expected.getType() == actual.getType(); } private static boolean isEqual(FrameworkEvent expected, FrameworkEvent actual) { return expected.getSource() == actual.getSource() && expected.getType() == actual.getType(); } private static String toString(int[] array) { if (array == null) return "null"; //$NON-NLS-1$ String result = "["; //$NON-NLS-1$ for (int i = 0; i < array.length; i++) { if (i != 0) result += ','; result += array[i]; } result += "]"; //$NON-NLS-1$ return result; } private static Object toString(Object object) { if (object instanceof BundleEvent) return toString((BundleEvent) object); else if (object instanceof FrameworkEvent) return toString((FrameworkEvent) object); return object.toString(); } private static Object toString(FrameworkEvent event) { StringBuffer result = new StringBuffer("FrameworkEvent ["); switch (event.getType()) { case FrameworkEvent.ERROR : result.append("ERROR"); break; case FrameworkEvent.INFO : result.append("INFO"); break; case FrameworkEvent.PACKAGES_REFRESHED : result.append("PACKAGES_REFRESHED"); break; case FrameworkEvent.STARTED : result.append("STARTED"); break; case FrameworkEvent.STARTLEVEL_CHANGED : result.append("STARTLEVEL_CHANGED"); break; case FrameworkEvent.WARNING : result.append("WARNING"); break; default : break; } result.append("] ").append(event.getSource()); return result.toString(); } private static Object toString(BundleEvent event) { StringBuffer result = new StringBuffer("BundleEvent ["); switch (event.getType()) { case BundleEvent.INSTALLED : result.append("INSTALLED"); break; case BundleEvent.LAZY_ACTIVATION : result.append("LAZY_ACTIVATION"); break; case BundleEvent.RESOLVED : result.append("RESOLVED"); break; case BundleEvent.STARTED : result.append("STARTED"); break; case BundleEvent.STARTING : result.append("STARTING"); break; case BundleEvent.STOPPED : result.append("STOPPED"); break; case BundleEvent.STOPPING : result.append("STOPPING"); break; case BundleEvent.UNINSTALLED : result.append("UNINSTALLED"); break; case BundleEvent.UNRESOLVED : result.append("UNRESOLVED"); break; case BundleEvent.UPDATED : result.append("UPDATED"); break; default : break; } result.append("] ").append(event.getSource()); return result.toString(); } }